手工搭建建議的Linux惡意指令碼分析系統

深信服千里目發表於2020-08-21

概述

Linux環境下的惡意軟體大部分以shell指令碼作為母體檔案進行傳播,而且,同一個病毒家族所使用的的惡意指令碼往往具有極高相似性,新變種的指令碼大部分是在舊變種指令碼的基礎上進行修改,新增或替換部分關鍵惡意程式碼,同時,不同家族之間的惡意指令碼也可能出現程式碼互相借鑑,部分重合的情況。

該如何揭示病毒家族中惡意指令碼之間的關係呢?接下來,我們就通過手工搭建一個簡易的惡意指令碼分析系統,來實現對惡意指令碼之間關係的研究。

系統功能

系統的功能如下,主要為3個:

[1] 使用yara檢測指令碼對應的病毒家族。

[2] 計算指令碼與樣本庫中每個樣本的相似度。

[3] 提取指令碼新增/改動的惡意程式碼。

通過以上3個環節,就能檢測出該指令碼所屬的家族,與其最相似的樣本,以及新改動的惡意程式碼,從而快速定位到本次病毒變種更新的惡意項(C&C域名/檔案路徑/程式名等)。

手工搭建建議的Linux惡意指令碼分析系統

使用方法

系統結構由3部分組成,yara規則庫、病毒樣本庫、功能程式碼,後者執行後會讀取規則和樣本內容進行檢測。

手工搭建建議的Linux惡意指令碼分析系統

系統執行效果如下,測試的指令碼為7月份新發現的H2Miner新變種,該變種與1月份變種ex.sh的相似度為97%,與5月份變種sa.sh的相似度為93%。同時,相比於1月份的變種新增了18行程式碼,更改了8行程式碼。

手工搭建建議的Linux惡意指令碼分析系統

然而,待檢測的指令碼有可能是新的病毒家族,已有的yara規則無法匹配成功,這時候系統會遍歷該指令碼與樣本庫中每一個樣本的相似度,篩選出相似度最高的家族。

手工搭建建議的Linux惡意指令碼分析系統

系統執行完成後,會生成一個html報告,用於視覺化顯示指令碼之間的具體差異。

手工搭建建議的Linux惡意指令碼分析系統

顯示效果如下,高亮顯示指令碼與相似樣本間具體的新增/更改/刪除惡意程式碼行。

手工搭建建議的Linux惡意指令碼分析系統

原理分析

3個核心功能分別由yara_scan函式、check_similarity函式、parse_modification函式實現,若check_similarity沒有計算出相似度高的關聯樣本,則不執行parse_modification函式。

手工搭建建議的Linux惡意指令碼分析系統

yara_scan函式

通過yara庫,呼叫rule_db裡的yara規則對目標指令碼進行掃描,返回匹配到病毒家族名。

手工搭建建議的Linux惡意指令碼分析系統

目前支援檢測的病毒家族如下。

手工搭建建議的Linux惡意指令碼分析系統

check_similarity函式

呼叫開源difflib庫的SequenceMatcher函式進行文字相似度計算,篩選出相似百分比最高的樣本。PS:若前面yara檢測出對應的病毒家族,則只計算該家族目錄下的樣本相似度,否則,計算所有家族樣本的相似度。

手工搭建建議的Linux惡意指令碼分析系統

樣本按照發現日期進行存放,便於整理其中關係。

手工搭建建議的Linux惡意指令碼分析系統

parse_modifcation函式

最後,使用difflib.context_diff函式提取差異(新增/更改/刪除)程式碼,並使用difflib.HtmlDiff生成詳細報告。

手工搭建建議的Linux惡意指令碼分析系統

總結

Linux惡意指令碼大部分沒有進行混淆,使用開源庫difflib進行文字比較是個簡單高效的方法,通過該系統,可以快速的分析新型惡意指令碼的更新部分,以及與其他病毒家族指令碼的關係。

相關文章