扒一扒CARBANAK的原始碼,看它們是如何巧妙構思並執行的?(二)
在上一篇文章 中,我們討論瞭如何在CARBANAK中使用字串雜湊來管理整個程式碼庫中的Windows API解析。但同時,CARBANAK的開發者在另一些任務中也使用了相同的字串雜湊演算法。本文,我們將討論CARBANAK是如何應對防毒軟體的檢測並逃避它們的。
應對防毒軟體
使用原始碼無疑會加快對字串雜湊的分析程序,例如,AV.cpp中的函式AVDetect通過程序名稱雜湊迭代程序來檢測防毒軟體,如圖1所示。
通過程序名稱雜湊檢測防毒軟體
CARBANAK如何處理這些資訊呢?它根據安裝的內容來選擇逃避防毒軟體的方法。圖2顯示了開發者通過註釋禁用的AVG逃避的程式碼。
2017年11月,CARBANAK還學會了逃避流程注入檢測。這種逃避使用的是Carberp變種木馬中使用的一種技術,它用記憶體對映和通過QueueUserAPC非同步過程呼叫的佇列來替換遠端堆分配和對CreateRemoteThread的呼叫。
分析幕後的開發構件
擁有原始碼後,我們就有機會來了解幕後的開發構件和開發者的詳細了。為此,我們在原始碼轉儲中搜索了可能指向個人的構件,並進一步在Visual Studio解決方案檔案中找到更多相關的資訊。其中大多數引用驅動器O:作為源根(source root,),但我確實找到了以下主機路徑:
C:\Users\hakurei reimu\AppData\Local\Temp
C:\Users\Igor\AppData\Local\Temp
E:\Projects\progs\Petrosjan\WndRec\…
E:\Projects\progs\sbu\WndRec\…
不幸的是,這些路徑並不能給出很多有意義的答案。如果在以後的構件中觀察到它們,那麼可能會推斷出它們之間的聯絡,但是在撰寫本文時,我們對開發者還所知不多。
原始碼的調查過程
CARBANAK原始碼包含許多漏洞、以前的C2主機、密碼和金鑰資訊。於是我們決定對這些資訊進行全面的研究,並確定它們是否可以給研究帶來新的資訊,或證實之前的任何觀察結果。
漏洞調查
首先,我想知道CARBANAK的開發者們是否使用了未公開披露的任何漏洞。因為我發現所有的漏洞都有詳細記錄,表1列出了我從CARBANAK原始碼轉儲中檢視到的升級許可權程式碼。
CARBANAK原始碼還包含大量複製於Mimikatz的程式碼,包括用於從lsass.exe轉儲密碼的sekurlsa模組和用於允許多個遠端桌面協議連線的終端服務修補程式碼。
關鍵材料的調查
我們的分析包括對原始碼和附帶的二進位制檔案中的密碼和關鍵材料的調查,雖然其中許多都用於除錯版本,但我們還是對它們進行了整理,以備將來猜測密碼時用作參考。表2顯示了用於rc2加密通訊和其他目的的恢復密碼,以及原始碼中的相應名稱及其遇到的狀態(在原始碼中啟用,註釋掉或編譯成二進位制檔案)。
在CARBANAK原始碼和二進位制檔案中找到的密碼
我在除錯目錄中發現了一個加密的伺服器證書,它似乎可以提供一個新的基於網路的指示,以準確地發現新的攻擊趨勢。我們通過在c#中修改一個公開可用的X509處理程式碼示例來遍歷流行密碼列表中的密碼,從而強制使用這個容器。由於密碼為單字元“1”,所以我們在不到1秒的時間內就找到了密碼。該證書原來是用於測試的,因此密碼很弱。證書如圖3所示,詳細資訊見表3。
證書
證書詳細資訊
我還從原始碼轉儲中解析了一個未受保護的私鑰,圖4和表4分別詳細顯示了私鑰引數。
已解析的512位私鑰
私鑰引數
我在配置標頭中找到了一個名為PUBLIC_KEY的值,其中的註釋表明它是用於除錯目的的。解析後的值如表5所示。
配置標頭中定義的PUBLIC_KEY的私鑰引數
調查基於網路的指示
原始碼和二進位制檔案包含多個基於網路的指示符(NBI),它們與CARBANAK後門活動和FireEye之前觀察到並記錄的FIN7操作有明顯的相似之處。表6顯示了這些指示以及相關的FireEye公共文件。其中就包括遇到每個NBI時的狀態(在原始碼中活動、註釋掉或編譯成二進位制檔案)。域名被刪除了,以防止瀏覽器、聊天客戶端等意外解析或互動。
其中,四個TCP端點(80.84.49[.]50:443, 52.11.125[.]44:443, 85.25.84[.]223, and 37.1.212[.]100:700) 都是新發現的。
總結
經過我們對這個原始碼轉儲的分析,可以證實它就是CARBANAK。另外,我們還發現了一些新的、有趣的資訊。根據這些資訊,我們能夠將具體的漏洞資訊通知給供應商,作出應對。有趣的是,這個專案本身並不叫CARBANAK,甚至也不叫Anunak,因為資訊保安社群是根據惡意軟體中發現的字串構件來命名它的。開發者在Visual Studio專案中主要將惡意軟體稱為“bot”,包括檔名、原始碼註釋、輸出二進位制檔案、使用者介面和手冊。