背景
你永遠(yuǎn)叫不醒一個(gè)裝睡的人。但,快遞小哥可以!
雖說(shuō)是一句戲言,但確實(shí)多少反映出了快遞在大家心中的重要性。如果你收到一個(gè)帶有快遞公司發(fā)來(lái)的電子郵件通知,你會(huì)不會(huì)也希望快點(diǎn)打開(kāi)看看是不是哪個(gè)朋友給你寄了什么東西等著你去取呢?最近我們就收到了這樣的一個(gè)帶有“快遞單號(hào)”的電子郵件附件。唯一有些水土不服的就是——在中國(guó)用FedEx的確實(shí)并不很多……大寫(xiě)的PITY……
木馬起始——FedEx_ID_00645987.doc.js
這個(gè)所謂的doc文檔,其實(shí)是一個(gè)javascript腳本,而腳本的內(nèi)容……好亂……
凌亂的javascript腳本代碼
經(jīng)過(guò)簡(jiǎn)單的解密和格式整理,給大家呈現(xiàn)了一個(gè)比較漂亮的腳本格式如下:
整理后的javascript腳本代碼
腳本主要功能就是循環(huán)下載并執(zhí)行木馬。腳本中供提供了5個(gè)域名供下載(域名作用為備份,如果前面的域名可以下載,則不再?lài)L試后面的域名):
腳本通過(guò)給URL傳遞不同參數(shù)的方式,獲取不同的文件(返回狀態(tài)碼200且返回內(nèi)容大于1000字節(jié)即判斷為下載成功)。
最終木馬獲取如下文件(p.s. 根據(jù)后續(xù)實(shí)測(cè),這五個(gè)文件仍在服務(wù)端不定期更新,本文僅描述文章撰寫(xiě)時(shí)下載到的樣本行為):
如上表所示,腳本下載到本地的5個(gè)文件實(shí)際上被分成了3組:a1.exe和a2.exe各自獨(dú)立運(yùn)行;a.exe、php4ts.dll和a.php則同為一組。必須三個(gè)文件同時(shí)存在,腳本才會(huì)執(zhí)行該木馬,而且還會(huì)再執(zhí)行完第三組之后打掃一下戰(zhàn)場(chǎng)——刪除掉木馬文件并且修改注冊(cè)表值用于關(guān)聯(lián)被加密的文件:
根據(jù)VT的掃描結(jié)果來(lái)看,54家全球主流殺軟中有12款產(chǎn)品可以檢出該木馬:
PHP木馬分析
其實(shí)這個(gè)木馬最先引起我們興趣的是后面下載的這三個(gè)一組的文件。之所以引起我們的興趣,是因?yàn)楦鶕?jù)我們的記錄:a.exe和php4ts.dll其實(shí)都是人畜無(wú)害的合法程序。實(shí)際上,a.exe是PHP Thread Safe CGI(PHP線程安全通用網(wǎng)管接口),而php4ts.dll則是這個(gè)接口程序運(yùn)行所必須導(dǎo)入的一個(gè)動(dòng)態(tài)庫(kù)文件:
把話說(shuō)的通俗點(diǎn),這兩個(gè)程序其實(shí)就是一個(gè)php腳本的解釋器。他們被下載下來(lái)的唯一目的——就是讓a.php可以執(zhí)行。所以就讓我們看看這個(gè)a.php吧:
代碼邏輯并不復(fù)雜,腳本會(huì)遍歷C盤(pán)到Z盤(pán)的所有盤(pán)符下的文件,并跳過(guò)含有以下字符串的目錄:
winntootsystemwindows mp empprogramappdataapplication oamingmsoffice emporarycacherecycle
查找以下這些擴(kuò)展名的文件:
zip|rar|r00|r01|r02|r03|7z|tar|gz|gzip|arc|arj|bz|bz2|bza|bzip|bzip2|ice|xls|xlsx|doc|docx|pdf|djvu|fb2|rtf|ppt|pptx|pps|sxi|odm|odt|mpp|ssh|pub|gpg|pgp|kdb|kdbx|als|aup|cpr|npr|cpp|bas|asm|cs|php|pas|class|py|pl|h|vb|vcproj|vbproj|java|bak|backup|mdb|accdb|mdf|odb|wdb|csv|tsv|sql|psd|eps|cdr|cpt|indd|dwg|ai|svg|max|skp|scad|cad|3ds|blend|lwo|lws|mb|slddrw|sldasm|sldprt|u3d|jpg|jpeg|tiff|tif|raw|avi|mpg|mp4|m4v|mpeg|mpe|wmf|wmv|veg|mov|3gp|flv|mkv|vob|rm|mp3|wav|asf|wma|m3u|midi|ogg|mid|vdi|vmdk|vhd|dsk|img|iso
打開(kāi)每一個(gè)符合擴(kuò)展名要求的文件,讀取前1024字節(jié)并和密鑰做循環(huán)異或加密。加密完成后再將修改后的文件加上一個(gè).crypted擴(kuò)展名——萬(wàn)事大吉。
只是讓我們很疑惑的是——雖然php這世界上最好的語(yǔ)言(好吧,這只是個(gè)梗),但木馬作者是如何用php在這么一段并不算長(zhǎng)的代碼中實(shí)現(xiàn)不對(duì)稱(chēng)加密的敲詐者代碼的?
細(xì)讀代碼之后恍然大悟——并沒(méi)有實(shí)現(xiàn)……這段代碼的加密方式采用了對(duì)稱(chēng)加密算法,準(zhǔn)確的說(shuō)是循環(huán)異或加密。更加“人道主義”的是——這個(gè)php的加密代碼其實(shí)是“兩用”的,只要修改腳本中的一個(gè)參數(shù),整個(gè)腳本立刻成為了解密腳本。可以直接將加密的文檔解密回去:
所以說(shuō)世界已經(jīng)這么亂了,不對(duì)稱(chēng)加密的敲詐者滿天飛的今天,對(duì)稱(chēng)加密敲詐者能不能就不要來(lái)添亂了?
當(dāng)然,也并不是說(shuō)這個(gè)腳本就人畜無(wú)害了——對(duì)稱(chēng)加密沒(méi)有密鑰想解開(kāi)依然很麻煩,雖然我們這里拿到密鑰了,但上面已經(jīng)說(shuō)了:木馬作者再服務(wù)端依然持續(xù)更新著木馬的內(nèi)容,并且木馬運(yùn)行后會(huì)自刪除,所以說(shuō)雖然是對(duì)稱(chēng)加密,但依然有可能因?yàn)檎也坏郊用軙r(shí)的密鑰導(dǎo)致依然很難解開(kāi)文件(難,但并非無(wú)解)……
但這都不是重點(diǎn),重點(diǎn)是木馬在加密完文件之后給出的敲詐信息:
相對(duì)于那些動(dòng)輒兩三個(gè)比特幣的敲詐者木馬來(lái)說(shuō),0.40290個(gè)比特幣雖然有零有整的程度令人發(fā)指,但確實(shí)也算是價(jià)錢(qián)厚道了。但你所謂的“RSA-1024”是什么鬼?明明就是個(gè)簡(jiǎn)單的循環(huán)異或加密好么!不要假裝自己是高大上的不對(duì)稱(chēng)加密好么!WTF……
POWERSHELL木馬分析
然后我們?cè)賮?lái)說(shuō)說(shuō)兩個(gè)獨(dú)立運(yùn)行的powershell木馬。雖然a1.exe與a2.exe是各自獨(dú)立運(yùn)行的,但因?yàn)樗麄兊男袨榛鞠嗤晕覀冞@里合并為一個(gè)來(lái)做統(tǒng)一說(shuō)明。
樣本首先會(huì)執(zhí)行注入功能:
之后對(duì)線程做恢復(fù)以便執(zhí)行注入后的代碼:
完成后,惡意代碼會(huì)檢測(cè)機(jī)器環(huán)境——對(duì)不知處powershell的系統(tǒng)安裝微軟的KB968930補(bǔ)丁(補(bǔ)丁相關(guān)說(shuō)明:https://www.microsoft.com/en-us/download/details.aspx?id=16818),添加對(duì)powershell的支持:
在確保用戶環(huán)境可以執(zhí)行powershell之后,注冊(cè)一個(gè)文件關(guān)聯(lián),在文件打開(kāi)的shell command中執(zhí)行一段腳本:
這是一段短小精悍的腳本,但系統(tǒng)會(huì)根據(jù)這段短小的腳本的指令,再次訪問(wèn)注冊(cè)表去執(zhí)行注冊(cè)表中的另一段惡意代碼:
通過(guò)這種方式,惡意程序?qū)阂獯a全部保存在注冊(cè)表中,而落地文件只是用于觸發(fā)惡意代碼的執(zhí)行,本身并沒(méi)有惡意代碼。落在本地的文件根本沒(méi)有惡意代碼,這樣就更容易繞開(kāi)安全軟件的掃描檢測(cè)。
我們導(dǎo)出含有惡意的代碼的注冊(cè)表內(nèi)容,如下:
雖然已經(jīng)是落在注冊(cè)表中,但顯然木馬作者還是不放心——依然是用了多次的加密來(lái)掩蓋這段代碼的行為意圖。經(jīng)解密,我們得到的最終執(zhí)行代碼正是一段powershell代碼:
顯然,雖然已經(jīng)解密到最終一步,但中間的變量“$sc32”依然讓人看著有些不知所云……但看到ps1代碼的最后,發(fā)現(xiàn)其實(shí)這已經(jīng)是最終代碼了。最終就是將$sc32的內(nèi)容全部加載帶內(nèi)存中執(zhí)行:
我們把數(shù)據(jù)dump出來(lái),發(fā)現(xiàn)代碼會(huì)從遠(yuǎn)端下載文件到本地執(zhí)行,并且還會(huì)判斷一下文件是否是有效的可執(zhí)行程序——典型的下載者木馬:
非PE漸成趨勢(shì)
隨著安全軟件的普及,木馬病毒與安全軟件的對(duì)抗也逐漸變成了“近身肉搏戰(zhàn)”,大家都在鉆細(xì)節(jié),都想在對(duì)方忽略的某個(gè)小點(diǎn)上做單點(diǎn)突破——這樣一來(lái),各種腳本甚至連腳本都不算的數(shù)據(jù)文件就顯現(xiàn)除了相對(duì)于傳統(tǒng)PE格式木馬更多的優(yōu)勢(shì)。
這次出現(xiàn)的敲詐者木馬就是典型的例子——一個(gè)javascript腳本木馬釋放出了一個(gè)php腳本木馬和兩個(gè)powershell腳本木馬。而powershell木馬甚至都沒(méi)有落成ps1腳本而是直接在注冊(cè)表中存儲(chǔ),php木馬有落地的php文件,但php腳本既然能實(shí)現(xiàn)對(duì)稱(chēng)加密的敲詐者木馬,更高一級(jí)的不對(duì)稱(chēng)加密敲詐者木馬真的還會(huì)遠(yuǎn)么?
當(dāng)然,并不是說(shuō)非PE就可以為所欲為了,既然是近身肉搏,安全軟件的響應(yīng)自然也不會(huì)處于下風(fēng)——兵來(lái)將擋水來(lái)土掩,我們已經(jīng)做好了戰(zhàn)斗準(zhǔn)備。
*本文作者:360安全衛(wèi)士,轉(zhuǎn)載請(qǐng)注明來(lái)自FreeBuf黑客與極客(FreeBuf.COM)