當前位置:
首頁 > 新聞 > 隱藏在證書文件中的PowerShell(一)

隱藏在證書文件中的PowerShell(一)

最近,NVISO實驗室分析人員開發了某種YARA規則,利用它發現了多種惡意證書文件(.crt),這些證書文件中包含的並不是真正的認證證書,而是一個惡意的PowerShell腳本。作為《隱藏在證書文件中的PowerShell》系列的第1部份,本文中我們一起來探討如何製作這種YARA規則,去揭開攻擊者的這種「潛伏「行為。


認證證書(Certificates)

Windows系統中的證書文件有多種後綴格式,如.cer 和 .crt,通常,.cer 文件包含的是二進位數據,而 .crt 文件包含的則是一些ASCII數據。但隨著多種微軟應用程序的出現,這兩種擴展名可以互換,應用程序仍然也能正確處理這兩種互換過後綴擴展名的證書文件(他們會查看證書內容並進行相應的解析)。


本文中我們還是遵守慣例,即用.cer 文件來包含二進位數據,而 .crt 文件來包含ASCII數據。.cer 文件中包含的認證數據是按照DER可辨別編碼規則(Distinguished Encoding Rules)來編碼的,這是x.690標準指定的編碼格式。以Microsoft office程序為例,以下是其安裝目錄中的 .cer 文件示例:


.crt 文件中包含的是ASCII數據,說白了,它也就是對 .cer文件的base64編碼。根據RFC 7468標準來看,.crt 文件格式以「—BEGIN CERTIFICATE」為開頭,以「—END CERTIFICATE」為結尾,中間則是一些經base64編碼過的數據。使用Certutil工具,可將 .cer文件轉換生成 .crt文件,以下就是 .crt的一個示例:


對工具 Certutil 的利用

Certutil是一個Windows下的多功能程序,可用來執行各種證書和服務操作。自從Casey Smith在Twitter上發推演示了Certutil 的 base64解碼編碼之後,一些紅隊人員和網路犯罪份子就開始利用這種編碼技術來生成各種可繞過入侵檢測和殺毒軟體的惡意文件。


Certutil不會驗證要編碼的二進位數據,也就是說,它能對任意文件進行編碼。一些Windows 下的可執行程序(PE文件)都能用Certutil工具來輕鬆完成編碼,編碼之後的格式,很多入侵檢測和殺毒軟體都無法識別。以下是Windows可執行程序編碼成 .crt文件的示例:


從上圖可以看到,這種base64編碼數據的第一個字母是T。因為使用Certutil工具進行編碼的PE文件通常都是這種類型的:也就是,PE文件的第一個位元組是大寫字母M,這裡的M來自「MZ」,即MS-DOS的主要開發者 Mark Zbikowski 的縮寫,用二進位來標記,也就是01001101。而base64編碼是以6個比特塊來編碼的,所以 010011 就是第一個被編碼的塊,010011 用十進位表示就是19,而在base64編碼中,0編碼成A,1編碼成B,以此類推…,19則被編碼成T,如下所示:



這也就是為什麼base64編碼的PE文件總是以T開頭的原因。有很多種檢測規則:就比如,如果文件以「—BEGIN CERTIFICATE–」開頭,之後是一個大寫字母T,那麼這種檢測規則也能觸發。

這就是一種「known-bad」式的檢測規則,因為PE文件經Certutil工具編碼後存在固定格式,所以,按照這種格式來針對性的查找就行。這種檢測規則直接有效,我們利用它已經檢測到很多編碼過的PE文件。


檢測規則製作


然而,在NVISO實驗環境中,我們嘗試做出比上述「已知惡意文件」(known-bad)更好的檢測規則來,所以,這就是我們著力構建檢測證書文件不包含真正證書的檢測環境原因了,最終,我們的檢測規則,不僅能檢測出包含PE文件的證書文件,還能檢測出其它不包含特定證書數據的惡意證書文件。


X.509格式證書是被廣泛使用的數字證書標準,是用於標誌通訊各方身份信息的一系列數據。常見的X.509格式證書包含 .cer 和 .crt類證書,它們都以二進位形式存放,不含私鑰。


X.509標準證書數據都是以RFC 5280 定義的ASN.1語法來編碼的,也就是以ASN.1序列開始的,這個序列標記號為 0x30,所以,這個開頭的0x30數據也是經DER編碼的二進位數據。

如我們前述的PE文件編碼說明,可以確定其在ASCII位元組環境下,它是以0x30開頭的,而在base64編碼過程中,它首先則是以大寫字母M開頭的。


所以,基於此種原因,根據 RFC 7468標準,任何X.509標準的有效證書文件編碼後都是以「—BEGIN CERTIFICATE–」開頭,之後緊跟大寫字母M。


也就是說,那些包含「—BEGIN CERTIFICATE–」,但之後緊跟的字母不是M的證書文件,它們都不是有效的X.509標準證書文件。


最後,我們以此為方法創建了一條YARA規則,放到了 VirusTotal Intelligence跑了幾個月:


發現目標


應用這條YARA規則,我們檢測到很多偽裝成證書文件的PE文件和一些有意思的其它文件,而且也沒對有效證書發出誤報。


其中我們檢測到比較有意思的一個證書文件是,它的MD5 哈希值為0082aed588f76b517946a824fba43994,大概樣子如下:


一開始,在VirusTotal的60個殺毒軟體檢測引擎中,它的被檢測率為0,也就是全部通過,但當我們用base64dump.py對它進行base64解碼之後,看到了一些有意思的發現:



這個證書文件竟然包含了經過編碼的PowerShell腳本程序,嚇得我們….。這個腳本的檢測需要幾個步驟,在《隱藏在證書文件中的PowerShell》系列的第2部份,我們會繼續討論。


總結


這種使用「非良性文件」(not known-good)而非使用「已知惡意文件」(known-bad)的檢測方法,我們不僅能夠檢測到已知的惡意文件,還能檢測出一些未知的惡意文件。除了YARA規則,我們還在Suricata和ClamAV殺毒引擎中創建內置規則,這些規則將在該系列的第3部份公布,未完待續,敬請期待。


*參考來源:nviso,clouds編譯,轉載請註明來自FreeBuf.COM


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 FreeBuf 的精彩文章:

大家一起看一看新的Android P將引入哪些安全性改進
通過USB調試攻擊固件安裝後門以實現「邪惡女傭」攻擊

TAG:FreeBuf |