從海量數據中分析提取威脅情報是一項極其耗時的工作,分析師可以使用python開源工具庫進行數據分類並提取其中最相關的信息以進一步調查,MSTICPy就是其中之一,該工具庫專門用於威脅情報,並旨在幫助威脅分析師獲取、拓展、分析和可視化數據。
本文介紹了通過Python進行數據分析和可視化、使用MSTICPy提取攻擊指標(IOC)的工作流程。以2022年2月勒索軟件即服務(RaaS)組織「Conti」中的泄露數據集用作案例展示。
本文給出的研究方法有助於其他分析師將Python應用於威脅情報的處理。分析師可以重用代碼並探索其他信息的提取。此外,研究還提供了一種開箱即用的方法,可用於日誌分析、IOC提取以及使用Python改進威脅情報和防禦過程。文章分為兩部分:
2022年2月28日,一個名為@ContiLeaks的Twitter賬戶開始在Twitter上發布泄露的Conti數據。泄露數據集發布數月,包括聊天日誌、源代碼和後端應用程序。在這項研究中,研究人員將分析重點放在聊天日誌上,其中揭示了有關Conti組織的運營方法、基礎設施和組織結構的重要信息。泄露的聊天記錄是用俄語寫的。為了使分析更易於理解,研究人員將日誌翻譯成英文。聊天記錄顯示,Conti組使用消息應用程序Jabber在成員之間進行通信。原始Jabber日誌按日期被保存到不同文件中,因此可以將它們編譯到一個JSON文件中,以便使用Python輕鬆操作它們。數據合併後,可以使用deep translator庫進行翻譯。將日誌翻譯並加載到新文件後,就可以將數據加載到數據幀中進行操作和探索:
df=pd.read_json(codecs.open('translated_Log2.json','r','utf-8'))
自動翻譯過程中未正確翻譯的俄語俚語可以通過創建字典來翻譯,如下圖所示。

查看時間線並檢查每天的討論數量是從聊天日誌中獲取信息的一種方法。可用Bokeh庫構建交互式圖表並探索加載的數據幀。

使用來自Conti聊天日誌的數據生成下圖,該圖顯示了Jabber討論量隨時間的變化:

可視化數據的時間線峰值與某些活動一致,在Conti泄露的例子中,有如下四個峰值:2021年7月7日(615次討論):REvil對軟件公司Kaseya的勒索軟件攻擊2021年8月27日(1,289次討論):特定Conti附屬公司的劇本被泄露2021年8月31日(1,156次討論):FBI CISA關于勒索軟件和勞動節的諮詢2021年8月10日(853次討論):Conti對Meyer Corporation的勒索軟件攻擊有趣的是,在第一次泄漏後,Conti組織內沒有觀察到聊天活動高峰,這可能表明當時該組織忽略或不知道此次泄露。在分析聊天日誌時,識別用戶數量並分析最活躍的用戶可以深入了解組織的大小和用戶在其中的角色。使用Python可以提取用戶列表並將其保存在文本文件中:

對Conti聊天日誌運行上面的腳本會生成一個包含346個去重後賬戶的列表。然後可以使用此列表創建圖表並顯示哪些用戶發送的消息最多。

圖6. 構建信息最多的用戶圖

從圖中可以看出,名為defender、stern、driver、bio和mango的用戶的討論次數最多。Checkpoint發布了關於組織結構的廣泛研究,並將用戶討論與人力資源、編碼員、密碼員、進攻團隊、系統管理員等多個角色和服務相關聯。分析聊天日誌數據的另一種方法是可視化用戶的關係。這可以通過創建一個可以突出用戶之間連接的動態網絡圖來完成。Barnes Hut算法和Pyvis庫可用於可視化這些數據。

動態可視化顯示了網絡的圖形概覽,並允許放大網絡以仔細分析其中的連接。較大的點代表更活躍的用戶,並且可以高亮用戶以分析他們的連接。此外,懸停工具可以顯示特定用戶與哪些其他用戶進行了對話。

圖9. Conti用戶網絡概覽

由於讀取數據集可能很耗時,可以構建一個簡單的搜索引擎來搜索聊天日誌中的特定字符串或過濾感興趣的主題。對於Conti泄漏數據,這些示例包括比特幣、用戶名、惡意軟件名稱、漏洞利用和CVE,僅舉幾例。以下代碼片段提供了一個使用TextSearch庫構建的簡單搜索引擎:

除了處理聊天日誌以分析用戶活動和連接外,Python還可用於提取和分析威脅情報。本節介紹如何使用MSTICPy庫來提取IOC,以及如何更進一步將其用於威脅搜尋和情報。
MSTICPy是一個用於威脅調查和威脅搜尋的Python庫。該庫可以連接到多個威脅情報提供商,以及Microsoft Sentinel等Microsoft工具。它可用於查詢日誌和豐富數據。它對於分析IOC和添加更多威脅上下文特別方便。安裝MSTICPy後,首先要做的是初始化筆記本,加載可用於提取和豐富數據的幾個模塊,也可以通過配置msticpyconfig.yaml並添加API密鑰來添加VirusTotal或OTX等外部資源。MSTICPy的IoCExtract模塊提供了一種使用預定義正則表達式提取IOC的便捷方法。該代碼會自動提取IOC,例如DNS、URL、IP地址和哈希,然後在新數據幀匹配命中時給出報告。


默認情況下,可以對IOC提取模塊輸出的結果使用正則表達式以篩選出特定的IOC。例如,下面的正則表達式用於從Conti聊天日誌中提取比特幣地址:


提取IOC後,可以清理數據幀以刪除誤報和重複數據,處理後的最終數據幀IOC計數如下(這些IOC需要額外分析,因為並非所有這些IOC都被視為惡意):
MSTICPy中的威脅情報查找模塊TILookup可用於獲取有關IOC的更多信息,例如IP地址。在Conti泄漏的例子中,模塊識別出317個不同IP地址。這些IOC並不都是惡意的,但可能會泄露更多相關信息。可以指定配置文件來加載TILookup模塊以及其他威脅情報提供程序,例如VirusTotal、GreyNoise和OTX。

運行該模塊會為提供的每個IP地址生成一個具有更多上下文的新數據幀。

該模塊還允許請求單個可觀察對象的信息。

圖18. 提取單個可觀察對象的信息

MSTICPy提供的瀏覽器也可以用來探索分析之前富化處理的IOC。

此外,MSTICPy有一個嵌入式模塊,可以使用Maxmind查找IP地址的地理位置,該模塊可用於創建先前提取的IP地址的地圖。

圖21. 生成IP地理位置圖

從IOC列表中提取的URL可以提供有關目標、信息交換工具以及用於部署攻擊的基礎設施的詳細信息。從Conti泄漏數據集中總共提取了1,137個不同URL,但並非所有這些URL都可用於威脅情報。以下代碼片段顯示了如何過濾URL。

圖23. 為URL過濾IOC

可以創建一個過濾器來獲取有關可執行文件、DLL、ZIP文件以及與提取的URL相關的其他文件的詳細信息。這可以提供一些有趣的視角,並且可以被用於進一步的研究。

圖25. 過濾特定文件格式的URL

因為Conti小組在他們的一些基礎設施中使用了Tor網絡,使用相同的過濾技術,也可以從URL列表中識別.onion URL。

在MSTICPy庫中使用pivot函數可以豐富數據並發現額外的基礎設施和IOC,這對於威脅情報和威脅參與者跟蹤特別有用。接下來的部分演示了如何在MSTICPy中使用VirusTotal模塊的VTlookupV3函數查詢IP地址的有關情報,比如他們是否用於傳遞其他惡意軟件。
以下代碼在MSTICPy中啟動VTlookupV3:

圖28. 在MSTICPy中配置VirusTotal模塊VirusTotal模塊可用於獲取與特定IOC相關的數據。下面的代碼從Conti泄漏數據集中搜索從特定IP地址下載的文件:

結果表明,IP地址109[.]230[.]199[.]73提供了多種惡意軟件。

圖30. 與IP 109[.]230[.]199[.]73相關的哈希然後可以使用VirusTotal模塊來透視和提取有關這些哈希的更多信息。下表顯示了有關列表中第一個哈希的信息(時間戳為格林威治標準時間,例如上次提交時間1624917754可換算為北京時間2021-06-29 06:02:34):
屬性認證哈希0d10a35c1bed8d5a4516a2e704d43f10d47ffd2aabd9ce9e04fb3446f62168bf[{[TRUNCATED]』alert_context』: [{『dest_ip』: 『8.8.8.8』, 『dest_port』: 53}, {『dest_ip』: 『193.204.114.232』, 『dest_port』: 123}], 『rule_url』: 『https://www.snort.org/downloads/#rule-downloads』, 『rule_source』: 『Snort registered user ruleset』, 『rule_id』: 『1:527』}, {『rule_category』: 『not-suspicious』, 『alert_severity』: 『low』, 『rule_msg』: 『TAG_LOG_PKT』, 『rule_raw』: 『alert ( gid:2; sid:1; rev:1; msg:」TAG_LOG_PKT」; metadata:rule-type preproc; classtype:not-suspicious; )』, 『alert_context』: [{『dest_ip』: 『107.181.161.197』, 『dest_port』: 443}], 『rule_url』: 『https://www.snort.org/downloads/#rule-downloads』, 『rule_source』: 『Snort registered user ruleset』, 『rule_id』: 『2:1』}]{'info':0,'high':0,'medium':2,'low':1}{『MIMEType』: 『application/octet-stream』, 『Subsystem』: 『Windows GUI』, 『MachineType』: 『AMD AMD64』, 『TimeStamp』: 『2021:06:28 19:55:54+00:00』, 『FileType』: 『Win64 DLL』, 『PEType』: 『PE32+』, 『CodeSize』: 『115712』, 『LinkerVersion』: 『14.16』, 『ImageFileCharacteristics』: 『Executable, Large address aware, DLL』, 『FileTypeExtension』: 『dll』, 『InitializedDataSize』: 『69632』, 『SubsystemVersion』: 『6.0』, 『ImageVersion』: 『0.0』, 『OSVersion』: 『6.0』, 『EntryPoint』: 『0x139c4』, 『UninitializedDataSize』: 『0』}{ [TRUNCATED] 『20211110』}, 『Tencent』: {『category』: 『undetected』, 『engine_name』: 『Tencent』, 『engine_version』: 『1.0.0.1』, 『result』: None, 『method』: 『blacklist』, 『engine_update』: 『20211111』}, 『Ad-Aware』: {『category』: 『malicious』, Edition』: {『category』: 『malicious』, 『engine_name』: 『McAfee-GW-Edition』, 『engine_version』: 『v2019.1.2+3728』, 『result』: 『RDN/CobaltStrike』, 『method』: 『blacklist』, 『engine_update』: 『20211110』}, 『Trapmine』: {『category』: 『type-unsupported』, 『engine_name』: 『Trapmine』, 『engine_version』: 『3.5.0.1023』, 『result』: None, 『method』: 『blacklist』, 『engine_update』: 『20200727』}, 『CMC』: {『category』: 『undetected』, 『engine_name』: 『CMC』, 『engine_version』: 『2.10.2019.1』, 『result』: None, 『method』: 『blacklist』, 『engine_update』: 『20211026』}, 『Sophos』: {『category』: 『malicious』, 『engine_name』: 『Sophos』, 『engine_version』: 『1.4.1.0』, 『result』:{『harmless』: 0, 『type-unsupported』: 6, 『suspicious』: 0, 『confirmed-timeout』: 1, 『timeout』: 0, 『failure』: 0, 『malicious』: 47, 『undetected』: 19}用於 MS Windows (DLL) (GUI) Mono/.Net 程序集的 PE32+ 可執行文件55646b7df1d306b0414d4c8b3043c283[TRUNCATED] {『exports』: [『StartW』, 『7c908697e85da103e304d57e0193d4cf』}, {『name』: 『.rsrc』, 『chi2』: 51663.55, 『virtual_address』: 196608, 『entropy』: 5.81, 『raw_size』: 1536, 『flags』: 『r』, 『virtual_size』: 1128, 『md5』:, 『GetStringTypeW』, 『RtlUnwindEx』, 『GetOEMCP』, 『TerminateProcess』, 『GetModuleHandleExW』, 『IsValidCodePage』, 『WriteFile』, 『CreateFileW』, 『FindClose』, 『TlsGetValue』, 『GetFileType』, 『TlsSetValue』, 『HeapAlloc』, 『GetCurrentThreadId』, 『SetLastError』, 『LeaveCriticalSection』]}], 『entry_point』: 80324}{'suggested_threat_label': 'trojan.bulz/shelma', 'popular_threat_category': [{'count': 22, 'value': 'trojan'}, {'count': 6, 'value': 'downloader'}, {'count': 2, 'value': 'dropper'}], 'popular_threat_name': [{'count': 6, 'value': 'bulz'}, {'count': 6, 'value': ' Shelma'}, {'count': 3, 'value': 'cobaltstrike'}]}{『Zenbox』: {『category』: 『malicious』, 『sandbox_name』: 『Zenbox』, 『malware_classification』: [『MALWARE』, 『TROJAN』, 『EVADER』]}, 『C2AE』: {『category』: 『undetected』, 『sandbox_name』: 『C2AE』, 『malware_classification』: [『UNKNOWN_VERDICT』]}, 『Yomi Hunter』: {『category』: 『malicious』, 『sandbox_name』: 『Yomi Hunter』, 『malware_classification』: [『MALWARE』]}, 『Lastline』: {『category』: 『malicious』, 『sandbox_name』: 『Lastline』, 『malware_classification』: [『MALWARE』]}}ddf0214fbf92240bc60480a37c9c803e3ad06321cf0a85f491146002a26b01c8aff864a39a18a70c7b5c579e96deda212bfeec58{『high』: 0, 『medium』: 1, 『critical』: 1, 『low』: 0}{『Sigma Integrated Rule Set (GitHub)』: {『high』: 0, 『medium』: 0, 『critical』: 1, 『low』: 0}, 『SOC Prime Threat Detection Marketplace』: {『high』: 0, 『medium』: 1, 『critical』: 0, 『low』: 0}}3072:fck3rwbtOsN4X1JmKSol6LZVZgBPruYgr3Ig/XZO9:fck3rwblqPgokNgBPr9gA[程序集、invalid-rich-pe-linker-version、檢測調試環境、長時間睡眠、64 位、pedll]T110049E14B2A914FBEE6A82B984935611B07174624338DFEF03A4C375DE0E7E15A3EF25{『harmless』: 0, 『malicious』: 0}[{'file_type': 'Win64 Executable (generic)', 'probability': 48.7}, {'file_type': 'Win16 NE executable (generic)', 'probability': 23.3}, {'file_type': 'OS/ 2 Executable (generic)', 'probability': 9.3}, {'file_type': 'Generic Win/DOS Executable', 'probability': 9.2}, {'file_type': 'DOS Executable Generic', 'probability': 9.2 }]115076651d155d15555az43=z55結果表明,該哈希是一個Cobalt Strike加載程序,這意味着Conti附屬公司在其運營期間也將滲透測試工具用作其基礎設施的一部分。
此外,VirusTotal模塊還可以提供詳細信息,例如檢測率、類型、描述以及與哈希相關的其他信息。下面的代碼片段生成哈希連接到的域名列表。

圖31. 獲取連接域名

對Conti泄漏數據或類似數據集進行此類分析可能會導致發現不在初始數據集中的相關域名。本文說明了如何使用Python從聊天日誌等數據集中找到有價值的威脅情報,還詳細闡述了怎麼通過MSTICPy搜索數據集中的威脅情報,以及獲取額外的威脅上下文信息。
https://krebsonsecurity.com/2022/03/conti-ransomware-group-diaries-part-i-evasion/https://research.checkpoint.com/2022/leaks-of-conti-ransomware-group-paint-picture-of-a-surprisingly-normal-tech-start-up-sort-of/https://therecord.media/conti-leaks-the-panama-papers-of-ransomware/https://www.breachquest.com/conti-leaks-insight-into-a-ransomware-unicorn/https://www.forescout.com/resources/analysis-of-conti-leaks/https://github.com/Res260/conti_202202_leak_procedureshttps://readme.security/the-conti-leaks-first-rumble-of-the-ukraine-earthquake-thats-rattling-the-cybercrime-underground-7abb23b0fb04https://medium.com/@arnozobec/analyzing-conti-leaks-without-speaking-russian-only-methodology-f5aecc594d1bhttps://github.com/soufianetahiri/ContiLeaks/blob/main/cobaltsrike_lolbinshttps://twitter.com/TheDFIRReport/status/1498656118746365952https://www.clearskysec.com/wp-content/uploads/2021/02/Conti-Ransomware.pdfhttps://blog.bushidotoken.net/2022/04/lessons-from-conti-leaks.htmlhttps://www.trellix.com/en-au/about/newsroom/stories/threat-labs/conti-leaks-examineing-the-panama-papers-of-ransomware.htmlhttps://msticpy.readthedocs.io/en/latest/getting_started/Introduction.html編輯|陳瀟
審校|何雙澤、金矢
監製|姜政偉
本文為CNTIC編譯整理,不代表本公眾號觀點,轉載請保留出處與鏈接。聯繫信息進入公眾號後點擊「關於我們」可見。
