Mirai 變種中的DGA
備註:原文章於2016年12月12日發表於https://blog.netlab.360.com
概要
兩個星期前,我們發現2個新的感染載體(也即TCP埠7547和5555變種)被用來傳播MIRAI惡意軟體。
我的同事Ye Genshen快速設置了一些蜜罐,並且很快取得收穫:11月28日一天就捕獲了11個樣本。 迄今為止,我們的蜜罐已從6個託管伺服器捕獲了53個獨立樣本。
在分析其中一個新樣本時,我的同事Qu Wenji發現一些類似DGA的代碼,並猜測變種中包含有DGA功能,這個猜測很快就從我們的沙箱數據中得到驗證。詳細的逆向工作顯示,在通過TCP埠7547和5555分發的MIRAI樣本中確實存在DGA特徵。在本博客中,我將介紹我們的發現。簡單來說,我們找到的DGA的屬性總結如下:
通過逆向獲取的DGA知識,我們在程序中重新實現了DGA,並用它來預測所有365個可能的域名。當進一步確認這些域名的註冊信息時,我們發現其中部分域名已經被MIRAI作者註冊,列表如下:
圖0:已經被註冊的DGA域名
樣本和分析
本博客中用作說明的樣本如下:
樣品做了去符號處理但未加殼。根據以分析mirai樣本經驗,我們很快就確定了其主要模塊。比較代碼發現,resolvcncaddr函數的CFG(流程式控制製圖)與先前發現的樣本非常不同。 新版本的CFG如圖1所示。
圖1:新版本的resolv_cnc_addr 流程式控制製圖
在函數開始處,由於在樣本中硬編碼了多達3個C2域名,所以生成隨機數以從第一和第二個C2域名中隨機選擇一個,如圖2所示。
圖2:resolv_cnc_addr 函數第一部分
如果被選中的C2域名無法解析,則bot並不解析未選擇的域名或第三域名,而是將根據當前日期判斷是決定是否去執行DGA代碼分支還是去解析第三個C2域名,如圖3。
圖3:決定是否進入DGA 代碼分支
從上述代碼片段我們可以看出,如果當前日期在11月1日和12月3日之間,將去解析第3個C2域名。否則將執行DGA代碼分支。這可以理解為作者不希望DGA域名在12月4日之前被啟用,這也恰好被前文提及首個被註冊的mirai DGA域名對應於12月4日所映證。
DGA主函數名為dgagendomain。域名完全是基於種子數字和當前日期生成的。種子通過調用strtol()從硬編碼的十六進位格式字元串進行轉換。看起來字元串「x90x91x80x90x90x91x80x90」是一個錯誤的配置,這會導致strtol()總是返回0。
代碼中通過調用time()和localtime()的C庫函數得到本地日期。但只有月和日被使用,如圖4所示。
圖4:dga_gen_domain 函數片段
L2域名是通過反覆執行圖5所示的代碼塊來生成的。其長度由$ t5和$ t2確定,它們的值在圖4中設置,從中我們可以確定L2域名長度是12。
圖5:生成L2域名的循環代碼片段
TLD(Top Level Domain)由寄存器$S0中的殘餘值確定,如圖6所示。 我們可以看到在這裡使用了3個TLD。
圖6: 確定TLD 的代碼分支
IOC
目前,DGA相關的特性存在於如下樣本,所有這些DGA樣本中的種子字元串和演算法都完全相同:
樣本中的硬編碼C2域名如下:
我們將密切關注DGA變種的後續變化,敬請關注後續更新。
TAG:全球大搜羅 |