OSSEC与WordPress安全优化:日志监控与入侵检测实战

本文详细介绍了如何配置OSSEC与Sucuri Security插件协同工作,实现WordPress活动的日志监控与安全告警。内容包括日志导出配置、OSSEC规则集成以及常见安全事件的检测方法,帮助网站管理员提升安全防护能力。

OSSEC FOR WEBSITE SECURITY: PART III – Optimizing for WordPress

作者:Tony Perez | 2018年12月13日

之前的OSSEC文章介绍了OSSEC的安装和分布式架构部署过程。本文将重点介绍如何配置OSSEC以更好地理解WordPress活动。

WordPress是一个强大的开源内容管理系统(CMS)。其最大的安全弱点始终是其最大的优势——可扩展性(例如插件、主题等)。在Sucuri的工作经验告诉我,遭受入侵后,没有什么比拥有良好的日志更重要。日志是理解事件发生过程的关键,也是在恶意行为具体化之前识别攻击者意图的关键。

有趣的事实:Sucuri Security插件的前提几乎完全是为了这种可见性。多年来,我们添加了更多功能以适应更强大的应用程序安全工具集,但这始终是次要目标。事实上,该插件的前提实际上是基于Daniel从OSSEC中学到的经验教训构建的。

其关键功能之一始终是日志聚合。它会收集日志并将其传输回主站,在那里我们代表客户远程存储;这样设计是为了为我们提供一种在入侵后执行取证的机制。

2016年,我们在插件中发布了一个功能,旨在将WordPress活动和OSSEC整合在一起。目的是将插件与WordPress钩子集成,以便用户能够了解应用程序活动,这些活动是访问日志不会突出的。这些活动将被传输到新的日志格式中,OSSEC的解码器将理解新的日志格式,以便作为用户的您清楚地了解发生了什么。

本文将使用OSSEC和Sucuri Security WordPress插件使您的日志变得生动。

配置Sucuri Security WordPress插件以导出日志

本文假设您已经安装了Sucuri Security WordPress插件(有可用指南)。

您将在此处找到导出日志的选项:Sucuri Security > 设置

向下滚动到标有“日志导出器”的部分

选择文件路径时的几个专业提示:

  • 您需要输入完整路径和文件名。示例:/var/www/logs/blog.log
  • 路径必须可写,因此请务必检查用户和相关权限
  • 如果您尝试将其放在站点根目录,它不会喜欢,您需要向上导航一个目录,否则插件将不允许您部署它。我们这样做是因为我们不希望文件可以从外部访问(避免信息泄漏)。

完成后,注销并重新登录;如果一切顺利,您将在文件中看到新的日志条目:

1
2
3
# tail -f blog.log 
2018-12-01 01:59:40 WordPressAudit perezbox.com tony@perezbox.com : Notice: [您的IP]; 用户认证成功:管理员
2018-12-01 02:00:00 WordPressAudit perezbox.com tony@perezbox.com : Notice: 管理员, [您的IP]; 文章已更新;ID:80;名称:OSSEC FOR WEBSITE SECURITY: PART III – Optimizing for WordPress Activity

您可以看到用户登录、他们来自的IP,并显示文章已更新。这很重要,因为如果您考虑SEP攻击的工作原理,攻击者会用SEO垃圾更新现有文章。在此过程中,他们会更新帖子、文章、页面,而用户却毫不知情。作为网站管理员,看到帖子和页面的更新应该是一个危险信号——尤其是如果它们是意外的(例如,奇怪的时间、随机用户等)。这就是您认为的入侵指标(IoC)。

如果您看到这些日志,请继续下一步配置OSSEC。

配置OSSEC以使用Sucuri Security日志

大约在我们发布插件更新的同时,我们还更新了OSSEC WordPress规则。这些更新旨在让网站所有者不必编写新的解码器来解析和分析新日志。这意味着我们所要做的就是将上面创建的日志添加到ossec.conf文件中。

您可以使用OSSEC提供的实用工具shell来完成此操作。在终端中,运行以下命令:

1
2
# /var/ossec/bin/util.sh addfile /var/www/logs/blog.log
/var/ossec/bin/util.sh: 文件 /var/www/logs/blog.log 已添加。

util.sh shell是为了帮助您添加新日志文件而创建的。它将在您的ossec.conf文件中自动创建适当的配置。

应用于配置文件的示例配置更改:

1
2
3
4
5
6
<ossec_config>
  <localfile>
    <log_format>syslog</log_format>
    <location>/var/www/logs/blog.log</location>
  </localfile>
</ossec_config>

专业提示:如果您运行自己的VPS并在同一服务器上管理一堆站点,使用此过程添加每个日志文件可能非常烦人。您可以使用SimonF在2013年我的文章中分享的以下脚本。将路径更新为您用于新WordPress日志的路径。

1
2
3
4
#!/bin/sh
for i in $( find /var/www/logs/ \( -iname "*.log" \) ); do
  /var/ossec/bin/util.sh addfile $i
done

最后一步是重新启动OSSEC服务器:

1
# /var/ossec/bin/ossec-control restart

如果您重新登录WordPress站点,监控您的alerts.log将显示以下警报:

1
2
3
4
2018 Dec 01 01:59:41 (pb.webserver1) any->/var/www/logs/blog.log
规则:9502 (级别 3): WordPress 认证成功。
IP:47.180.59.33 / 美国 / 加利福尼亚
2018-12-01 01:59:40 WordPressAudit perebzox.com tony@perezbox.com : Notice: [您的IP], 用户认证成功:管理员

从这里,您可以调整和创建自己的警报。

OSSEC & WordPress 规则速查表

在OSSEC中为WordPress创建的规则并非旨在包罗万象,但这里有一个快速速查表来理解它们:

ID 名称 描述
9501 用户认证(失败) WordPress用户认证失败。
9502 用户认证(成功) WordPress用户认证成功。
9505 评论洪水 WordPress评论洪水尝试——有人在您的评论中留下一堆坏东西(或试图这样做)。
9506 文件修改 文件被修改。
9507 文章(从私有到发布) 文章被发布。
9508 文章更新 现有文章被更新。
9509 插件更新 插件被更新。
9510 IDS触发 入侵检测系统(IDS)识别出WordPress攻击。

我们已经有一段时间没有接触这些规则了,所以我正在考虑进行一些更新。目前,这应该有助于理解可用的内容。

希望这有所帮助,并且一如既往,欢迎提出想法和反馈。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计