概述
Linux環境下的惡意軟體大部分以shell指令碼作為母體檔案進行傳播,而且,同一個病毒家族所使用的的惡意指令碼往往具有極高相似性,新變種的指令碼大部分是在舊變種指令碼的基礎上進行修改,新增或替換部分關鍵惡意程式碼,同時,不同家族之間的惡意指令碼也可能出現程式碼互相借鑑,部分重合的情況。
該如何揭示病毒家族中惡意指令碼之間的關係呢?接下來,我們就通過手工搭建一個簡易的惡意指令碼分析系統,來實現對惡意指令碼之間關係的研究。
系統功能
系統的功能如下,主要為3個:
[1] 使用yara檢測指令碼對應的病毒家族。
[2] 計算指令碼與樣本庫中每個樣本的相似度。
[3] 提取指令碼新增/改動的惡意程式碼。
通過以上3個環節,就能檢測出該指令碼所屬的家族,與其最相似的樣本,以及新改動的惡意程式碼,從而快速定位到本次病毒變種更新的惡意項(C&C域名/檔案路徑/程式名等)。
![手工搭建建議的Linux惡意指令碼分析系統](https://i.iter01.com/images/78dda890cc8591d197ef7eb6f1c10b424f51b4d8fa8cc47da7ab69549f9ff959.jpg)
使用方法
系統結構由3部分組成,yara規則庫、病毒樣本庫、功能程式碼,後者執行後會讀取規則和樣本內容進行檢測。
系統執行效果如下,測試的指令碼為7月份新發現的H2Miner新變種,該變種與1月份變種ex.sh的相似度為97%,與5月份變種sa.sh的相似度為93%。同時,相比於1月份的變種新增了18行程式碼,更改了8行程式碼。
![手工搭建建議的Linux惡意指令碼分析系統](https://i.iter01.com/images/37d4c5b00c10fac358a136fad8f51574bf16fd0473740e309e87fe6b4ef36fc2.jpg)
然而,待檢測的指令碼有可能是新的病毒家族,已有的yara規則無法匹配成功,這時候系統會遍歷該指令碼與樣本庫中每一個樣本的相似度,篩選出相似度最高的家族。
![手工搭建建議的Linux惡意指令碼分析系統](https://i.iter01.com/images/d1752e237b3f810de0a51d039681b8980e1bb16941d88c68d5e20e61bec56d04.jpg)
系統執行完成後,會生成一個html報告,用於視覺化顯示指令碼之間的具體差異。
![手工搭建建議的Linux惡意指令碼分析系統](https://i.iter01.com/images/716d429f4bbffc7a4233ad77dc05784264d2656638877262f1245661b0e2efb0.jpg)
顯示效果如下,高亮顯示指令碼與相似樣本間具體的新增/更改/刪除惡意程式碼行。
![手工搭建建議的Linux惡意指令碼分析系統](https://i.iter01.com/images/abda916b904a9c0148dedb414b9b0e829c737f1dec284130aca225d0d3fac7cc.jpg)
原理分析
3個核心功能分別由yara_scan函式、check_similarity函式、parse_modification函式實現,若check_similarity沒有計算出相似度高的關聯樣本,則不執行parse_modification函式。
![手工搭建建議的Linux惡意指令碼分析系統](https://i.iter01.com/images/9e646861fe75bbaf6b05fd0b2d5d3c073c56fb985ba0146bb92d397a1e5372f2.jpg)
yara_scan函式
通過yara庫,呼叫rule_db裡的yara規則對目標指令碼進行掃描,返回匹配到病毒家族名。
![手工搭建建議的Linux惡意指令碼分析系統](https://i.iter01.com/images/a16f63d7332ea7436861674e877e6288a22c97c437a2a4c8acebf71d8eac918f.jpg)
目前支援檢測的病毒家族如下。
![手工搭建建議的Linux惡意指令碼分析系統](https://i.iter01.com/images/d2951e76b6c9b39084665e57c6a27b638341ff6e53b28ee25e0988e9b129e867.jpg)
check_similarity函式
呼叫開源difflib庫的SequenceMatcher函式進行文字相似度計算,篩選出相似百分比最高的樣本。PS:若前面yara檢測出對應的病毒家族,則只計算該家族目錄下的樣本相似度,否則,計算所有家族樣本的相似度。
![手工搭建建議的Linux惡意指令碼分析系統](https://i.iter01.com/images/013a3884152b70a006a67f2ffa3ec0cbf09a40e9903787045d31f826785dd04e.jpg)
樣本按照發現日期進行存放,便於整理其中關係。
![手工搭建建議的Linux惡意指令碼分析系統](https://i.iter01.com/images/04a686cee53e06b716d0183aa8a5a2546066eccf232c2fe93e4bdb700d52d02c.jpg)
parse_modifcation函式
最後,使用difflib.context_diff函式提取差異(新增/更改/刪除)程式碼,並使用difflib.HtmlDiff生成詳細報告。
![手工搭建建議的Linux惡意指令碼分析系統](https://i.iter01.com/images/2c2c1801037f8c73ccc8f753cbfadc4a9506566885ea3a670e9eb757e849251f.jpg)
總結
Linux惡意指令碼大部分沒有進行混淆,使用開源庫difflib進行文字比較是個簡單高效的方法,通過該系統,可以快速的分析新型惡意指令碼的更新部分,以及與其他病毒家族指令碼的關係。