溯源分析

一、从web容器日志入手:

查看并筛选日志

cat /var/log/apache2/access.log | grep -E "wp-admin|wp-login|POST /"

这行命令会将access.log文件中包含
wp-admin、
wp-login以及
POST等关键字的记录筛选出来。
其中,wp-admin是WordPress的默认管理员文件夹,
wp-login是WordPress的登陆文件,
POST方法表明发送至服务器端的HTTP请求使用的是POST方法
一般来说都是登录表单提交。

过滤结果包含多条数据,在经过仔细分析之后,我们将注意力主要集中在以下数据上

···
84.55.41.57 - - [17/Apr/2016:06:52:07 +0100] "GET /wordpress/wp-admin/ HTTP/1.1" 200 12349 "http://www.example.com/wordpress/wp-login.php" "Mozilla/5.0 (Windows NT 6.0; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0"
···

我们可以看到,IP地址84.55.41.57成功访问了WordPress后台目录。

让我们看看这个IP地址的用户还有什么。我们再次使用grep过滤该IP的access.log。

root@secureserver:~#cat /var/log/apache2/access.log | grep 84.55.41.57

我们来分析一下这些记录。

攻击者访问了网站的登录界面:

<pre class="brush:html;toolbar:false" style="box-sizing: border-box; font-family: "Microsoft YaHei" !important; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 10px; word-wrap: break-word; background-color: rgb(241, 241, 241); white-space: pre-wrap; line-height: 26px; color: rgb(102, 102, 102) !important; font-size: medium; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px;">84.55.41.57 - GET /wordpress/wp-login.php 200</pre>

攻击者提交了登录表单(POST方法),网站重定向成功(302 HTTP状态码):

<pre class="brush:html;toolbar:false" style="box-sizing: border-box; font-family: "Microsoft YaHei" !important; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 10px; word-wrap: break-word; background-color: rgb(241, 241, 241); white-space: pre-wrap; line-height: 26px; color: rgb(102, 102, 102) !important; font-size: medium; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px;">84.55.41.57 - POST /wordpress/wp-login.php 302</pre>

攻击者被重定向到了wp-admin(WordPress仪表盘),这意味着攻击者成功通过了身份验证:

<pre class="brush:html;toolbar:false" style="box-sizing: border-box; font-family: "Microsoft YaHei" !important; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 10px; word-wrap: break-word; background-color: rgb(241, 241, 241); white-space: pre-wrap; line-height: 26px; color: rgb(102, 102, 102) !important; font-size: medium; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px;">84.55.41.57 - GET /wordpress/wp-admin/ 200</pre>

攻击者访问了网站的主题编辑器:

<pre class="brush:html;toolbar:false" style="box-sizing: border-box; font-family: "Microsoft YaHei" !important; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 10px; word-wrap: break-word; background-color: rgb(241, 241, 241); white-space: pre-wrap; line-height: 26px; color: rgb(102, 102, 102) !important;">84.55.41.57 - GET /wordpress/wp-admin/theme-editor.php 200</pre>

攻击者尝试去编辑404.php文件,很多攻击者都会向这个文件注入恶意代码,这是一种常见的攻击技巧。但由于缺少文件写入权限,所以攻击者没能成功:

<pre class="brush:html;toolbar:false" style="box-sizing: border-box; font-family: "Microsoft YaHei" !important; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 10px; word-wrap: break-word; background-color: rgb(241, 241, 241); white-space: pre-wrap; line-height: 26px; color: rgb(102, 102, 102) !important;">84.55.41.57 - GET /wordpress/wp-admin/theme-editor.php?file=404.php&theme= twentysixteen 200</pre>

攻击者还访问了插件安装器:

<pre class="brush:html;toolbar:false" style="box-sizing: border-box; font-family: "Microsoft YaHei" !important; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 10px; word-wrap: break-word; background-color: rgb(241, 241, 241); white-space: pre-wrap; line-height: 26px; color: rgb(102, 102, 102) !important; font-size: medium; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px;">84.55.41.57 - GET /wordpress/wp-admin/plugin-install.php 200</pre>

攻击者安装并激活了file-namager插件:

<pre class="brush:html;toolbar:false" style="box-sizing: border-box; font-family: "Microsoft YaHei" !important; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 10px; word-wrap: break-word; background-color: rgb(241, 241, 241); white-space: pre-wrap; line-height: 26px; color: rgb(102, 102, 102) !important; font-size: medium; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px;">84.55.41.57 - GET /wordpress/wp-admin/update.php?action=install-plugin&plugin= file-manager &_wpnonce=3c6c8a7fca 200
84.55.41.57 - GET /wordpress/wp-admin/plugins.php?action=activate&plugin=file-manager%2Ffile-manager.php&_wpnonce=bf932ee530 200</pre>

攻击者使用file-namager插件上传了r57.php

<pre class="brush:html;toolbar:false" style="box-sizing: border-box; font-family: "Microsoft YaHei" !important; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 10px; word-wrap: break-word; background-color: rgb(241, 241, 241); white-space: pre-wrap; line-height: 26px; color: rgb(102, 102, 102) !important; font-size: medium; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px;">84.55.41.57 - GET /wordpress/wp-admin/admin-ajax.php?action=connector& cmd= upload&target=l1_d3AtY29udGVudA&name%5B%5D=r57.php&FILES=&_=1460873968131 200</pre>

日志表明,攻击者成功运行了r57 Shell脚本。查询字符串”?1”和”?28”表明攻击者通过脚本代码进行了网站导航,不过他什么也没有发现:

<pre class="brush:html;toolbar:false" style="box-sizing: border-box; font-family: "Microsoft YaHei" !important; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 10px; word-wrap: break-word; background-color: rgb(241, 241, 241); white-space: pre-wrap; line-height: 26px; color: rgb(102, 102, 102) !important;">84.55.41.57 - GET /wordpress/wp-content/r57.php 200
84.55.41.57 - POST /wordpress/wp-content/r57.php?1 200
84.55.41.57 - GET /wordpress/wp-content/r57.php?28 200</pre>

根据上述信息。我们得到了攻击者所有恶意活动的时间轴。但目前还有一个问题没有弄清楚,即攻击者一开始是如何得到管理员凭证的?

假设管理员密码既没有泄漏也没有被暴力破解,那么我们就得回头看看我们是不是忽略了什么信息。

当前这份access.log中并不包含任何有关管理员凭证得线索,不过我们并不是只有一个access.log文件可以调查。Apache HTTP服务器中还提供了很多其他的日志文件,比如说/var/log/apache2/目录下就有四个可以调查的日志文件。首先,我们可以过滤出包含IP地址 84.55.41.57的日志条目。我们发现,其中有一份日志文件中包含了大量与SQL注入攻击(貌似针对的是一个自定义插件)有关的记录信息:

<pre class="brush:html;toolbar:false" style="box-sizing: border-box; font-family: "Microsoft YaHei" !important; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 10px; word-wrap: break-word; background-color: rgb(241, 241, 241); white-space: pre-wrap; line-height: 26px; color: rgb(102, 102, 102) !important;">84.55.41.57- - [14 / Apr / 2016:08:22:13 0100]“GET /wordpress/wp-content/plugins/custom_plugin/check_user.php?userid=1 AND(SELECT 6810 FROM(SELECT COUNT() ,CONCAT(0x7171787671,(SELECT(ELT(6810 = 6810,1))),0x71707a7871,FLOOR(RAND(0) 2))x FROM INFORMATION_SCHEMA.CHARACTER_SETS GROUP BY x)a)HTTP / 1.1“200 166” “Mozilla / 5.0(Windows; U; Windows NT 6.1; ru; rv:1.9.2.3)Gecko / 20100401 Firefox / 4.0(.NET CLR 3.5.30729)”
84.55.41.57- - [14 / Apr / 2016:08:22:13 0100]“GET /wordpress/wp-content/plugins/custom_plugin/check_user.php?userid=(SELECT 7505 FROM(SELECT COUNT(),CONCAT (0x7171787671,(SELECT(ELT(7505 = 7505,1))),0x71707a7871,FLOOR(RAND(0) 2))x FROM INFORMATION_SCHEMA.CHARACTER_SETS GROUP BY x)a)HTTP / 1.1“200 166” - “” Mozilla / 5.0(Windows; U; Windows NT 6.1; ru; rv:1.9.2.3)Gecko / 20100401 Firefox / 4.0(.NET CLR 3.5.30729)“
84.55.41.57- - [14 / Apr / 2016:08:22:13 0100]“GET /wordpress/wp-content/plugins/custom_plugin/check_user.php?userid=(SELECT CONCAT(0x7171787671,(SELECT(ELT(1399 = / /(Windows; U; Windows NT 6.1; ru; rv:1.9.2.3)Gecko / 20100401 Firefox / 4.0(.NET) CLR 3.5.30729)“
84.55.41.57- - [14 / Apr / 2016:08:22:27 0100]“GET /wordpress/wp-content/plugins/custom_plugin/check_user.php?userid=1 UNION ALL SELECT CONCAT(0x7171787671,0x537653544175467a724f,0x71707a7871) ,NULL,NULL - HTTP / 1.1“200 182” - “”Mozilla / 5.0(Windows; U; Windows NT 6.1; ru; rv:1.9.2.3)Gecko / 20100401 Firefox / 4.0(.NET CLR 3.5.30729) “</pre>

我们假设这个插件是系统管理员从网上直接下载并拷贝到网站之中的,而这个脚本可以根据给定的ID来查询用户的合法性。该插件在网站的主页面中提供了一个表单,该表单会向/wordpress/wp-content/plugins/custom_plugin/check_user.php发送一个AJAX GET请求。

通过对check_user.php文件进行了分析之后,我们发现这个脚本的代码写得非常烂,而且存在SQL注入漏洞:

<pre class="brush:html;toolbar:false" style="box-sizing: border-box; font-family: "Microsoft YaHei" !important; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 10px; word-wrap: break-word; background-color: rgb(241, 241, 241); white-space: pre-wrap; line-height: 26px; color: rgb(102, 102, 102) !important;"><?php
//Include the WordPress header
include('/wordpress/wp-header.php');
global $wpdb;
// Use the GET parameter ‘userid’ as user input
$id=$_GET['userid'];
// Make a query to the database with the value the user supplied in the SQL statement
$users = $wpdb->get_results( "SELECT * FROM users WHERE user_id=$id");
?></pre>

上述信息表明,攻击者使用了SQL注入工具来利用这个插件所带来的SQL注入漏洞,而且这款漏洞利用工具尝试了多种SQL注入技术来枚举数据库名、表名和列名:

<pre class="brush:html;toolbar:false" style="box-sizing: border-box; font-family: "Microsoft YaHei" !important; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 10px; word-wrap: break-word; background-color: rgb(241, 241, 241); white-space: pre-wrap; line-height: 26px; color: rgb(102, 102, 102) !important;"> /wordpress/wp-content/plugins/my_custom_plugin/check_user.php?userid=-6859 UNION ALL SELECT (SELECT CONCAT(0x7171787671,IFNULL(CAST(ID AS CHAR),0x20),0x616474686c76,IFNULL(CAST(display_name AS CHAR),0x20),0x616474686c76,IFNULL(CAST(user_activation_key AS CHAR),0x20),0x616474686c76,IFNULL(CAST(user_email AS CHAR),0x20),0x616474686c76,IFNULL(CAST(user_login AS CHAR),0x20),0x616474686c76,IFNULL(CAST(user_nicename AS CHAR),0x20),0x616474686c76,IFNULL(CAST(user_pass AS CHAR),0x20),0x616474686c76,IFNULL(CAST(user_registered AS CHAR),0x20),0x616474686c76,IFNULL(CAST(user_status AS CHAR),0x20),0x616474686c76,IFNULL(CAST(user_url AS CHAR),0x20),0x71707a7871) FROM wp.wp_users LIMIT 0,1),NULL,NULL--</pre>

注:有关SQL注入漏洞的解决方案请参考这篇文章

上述信息足以表明网站的WordPress数据库遭到了攻击,而数据库中存储的数据很可能已经发生了泄露。

分析

通过此次调查,我们还原了攻击事件链。

如何从日志文件溯源出攻击手法?

不过仍有问题存在,比如说攻击者到底是谁?目前来说,我们只知道攻击者的IP地址,而且攻击者一般都会使用代理服务器或类似Tor这样的匿名网络来掩盖其真实的IP地址。除非攻击者留下了与他真实身份有关的证据,否则我们很难得知攻击者的真实身份。

在对日志记录进行了分析之后我们得知,网站管理员所使用的那款自定义WordPress插件中存在安全漏洞,并导致了SQL注入攻击的发生。但如果网站在真正上线之前进行了完整的安全漏洞测试的话,攻击者肯定就无法利用这种漏洞来实施攻击了。

在上面这个我虚构出的例子中,攻击者其实是非常草率的,因为他留下了大量攻击痕迹和取证证据,而这些信息将给调查人员提供很大的帮助。但在真实的攻击场景中,攻击者可不会留下多少有用的信息。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,686评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,668评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,160评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,736评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,847评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,043评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,129评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,872评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,318评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,645评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,777评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,861评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,589评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,687评论 2 351

推荐阅读更多精彩内容