YARA是一款用于檢測、分析各種惡意代碼的軟件,它配備一個短小精悍的命令行搜索引擎,它由純C語言編寫,優化了執行的效率。規則語法的簡單明了和布爾邏輯使YARA成為一個完美的IOC。它已經集成到惡意軟件沙箱,蜜罐客戶端,取證工具以及網絡安全工具中。
YARA惡意代碼檢測分析工具支持的平臺
YARA支持多平臺,可以運行在Windows、Linux、Mac OS X,并通過命令行界面或yara-python擴展的Python腳本使用。
網站惡意代碼檢測工具基本功能
垃圾郵件分析
讓我們看一下垃圾郵件分析的應用場景。如果你的團隊需要在事件響應過程中分析可疑的郵件消息,你極有可能會發現攜帶惡意宏的文件或重定向至漏洞利用工具的站點。olevba.py是一款流行的分析可疑微軟office文檔的工具,它屬于oletools工具包的一部分。當分析嵌入的OLE對象來識別惡意活動時,它會使用YARA功能(更多內容可參看)。在應對漏洞利用工具時,thug一款流行的低交互式蜜罐客戶端,模擬成web瀏覽器,也會使用YARA來識別漏洞利用工具家族。在上述兩種場景中,事件響應團隊之間交換YARA規則可以大大增強垃圾郵件的分類和分析的能力。
取證分析
另一種值得一提的應用場景是取證。Volatility一款非常流行的內存取證工具,可以支持YARA掃描來查明可疑的對象,比如進程、文件、注冊表鍵值或互斥體(mutex)。相對于靜態文件的規則,因為它需要應對加殼器和加密器,分析內存對象的YARA規則通常可以獲得更廣的觀察范圍。在網絡取證領域,yaraPcap使用YARA掃描網絡數據包文件(PCAP)。類似于垃圾郵件分析的應用場景,使用YARA規則進行取證可以起到事半功倍的作用。
終端掃描
最終,還有值得留意的應用場景是端點掃描。不錯,在客戶端計算機上進行YARA掃描。由于YARA掃描引擎是跨平臺的,我們完全可以在Windows系統上使用Linux系統上開發的特征規則。唯一需要解決的問題是如何分發掃描引擎,下發規則,以及將掃描結果發送到某個中心位置。Hipara,一款C語言開發的主機入侵防御系統,可以實現基于YARA規則文件的實時掃描,并將報告結果發回到某個中心服務器。另一種解決方案是自己編寫python腳本來調用YARA模塊,同時使用REST庫實現推拉(pull/push)的操作。
YARA怎么用
YARA實戰檢測網站惡意代碼
1、環境準備
在實戰之前,我們需要一個Linux系統環境和下列工具:
需要用到:pescanner.py
此外你需要一個段惡意代碼來分析,你可以從Malwr.com網站上獲取樣本:
警告:樣本是一個真實的惡意軟件,確保分析是在可控、隔離和安全環境中進行,比如臨時性的虛擬機。
2、場景模擬
在周三下午4點,你的郵箱接受到一份事件報告的通知郵件。它似乎是一個可疑的HTTP文件下載(文件哈希值為f38b0f94694ae861175436fcb3981061)命中了網絡IPS的特征庫。你迅速檢查IPS報警的詳情,查看它是否把樣本存入待深入分析的臨時倉庫中。你可以發現文件已被成功的保存下來,且文件類型是PE(可執行文件),絕對值得一看。下載文件之后,你需要進行初始的靜態分析:利用Google和Virustotal查詢這個哈希值,分析PE文件頭來尋找惡意的企圖。
3、挑戰
創建匹配下述條件的YARA規則:
1. 與調試信息相關的可疑字符串
2. text區塊的MD5哈希值
3. 高熵值的.rsrc區塊
4. GetTickCount導入符號
5. Rich簽名的XOR密鑰
6. 必須是Windows可執行文件
4、靜態分析
第1個挑戰是尋找與調試信息相關的字符串,尤其是我們可以搜索pdb文件(程序數據庫文件)的路徑。我們使用strings命令輸出文件中的ASCII字符串。
在大量輸出中,dddd.pdb字符串顯得格外顯眼,這個字符串可能正是我們要找的。記住,如果字符串確實與調試信息有關,它應該屬于RSDS頭的一部分。讓我們使用99136偏移作為中心輸出樣本的部分字節。
RSDS字符串的出現讓我們確信dddd.pdb是與調試信息相關的字符串。接下來,我們需要計算.text區塊的哈希值,為此我們需要使用hiddenillusion版本的pescanner.py,并把樣本的名稱作為參數。
pescanner.py輸出一個有關PE頭結構的擴展報告,其中包含區塊(Section)列表及相應哈希值。記錄下來.text區塊的哈希值(2a7865468f9de73a531f0ce00750ed17),接下來我們需要利用該值創建YARA規則。
同時在pescanner.py的報告中,我們發現.rsrc具有非常高的熵值。這是一個非?梢傻闹笜,表明代碼經過高度的混淆。創建規則時一定要記住這條信息,因為它幫助我們應答挑戰的第3項。最后,報告也列出了導入符號,其中我們可以看到GetTickCount,一個非常有名的反調試計時函數。這可以幫助解決挑戰的第4項。順便提一下,報告也提到了文件類型,表明是它一個PE32文件,滿足挑戰的最后一項。
最后,我們需要著手處理用于編碼Rich簽名的XOR密鑰,有關Rich簽名的更多信息參看此文。你可以通過兩種方式來檢查密鑰的存在與否:通常你可以轉儲樣本前面的字節,足以覆蓋PE文件的DOS頭即可,Rich簽名開始于文件的0×80偏移處,而XOR密鑰位于緊隨Rich字符串之后雙字(Dword)。
記住x86字節順序是little-endian,因此你需要調整雙字(Dword)的字節順序,所以XOR密鑰的值為0x887f83a7或十進制2290058151。
接下來就簡單了,讓我們一起使用如下內容創建名為rule.yar的YARA規則文件。通過使用–print-module-data參數,YARA將會輸出PE模塊的報告,其中包括rich_signature區塊和十進制形式的XOR密鑰值。
- PC官方版
- 安卓官方手機版
- IOS官方手機版