大量のデータを処理するには時間がかかる可能性があるため、Python を使用すると、アナリストが情報を分類し、調査に最も関連するデータを抽出するのに非常に役立ちます。たとえば、オープンソース ツール ライブラリのMSTICPyは、脅威インテリジェンス専用の Python ツールです。脅威アナリストがデータを取得、強化、分析、視覚化できるようにすることを目的としています。
このブログでは、Python を使用した詳細なデータ分析と視覚化、および MSTICPy を使用した侵害の痕跡 (IOC) の抽出と分析のワークフローを提供します。事例研究としては、2022 年 2 月にランサムウェア アズ ア サービス (RaaS) の「Conti」と呼ばれる協調操作からデータが漏洩したデータ セットが使用されています。
関連データを含むインタラクティブな Jupyter ノートブックも、さらなるデータ探索に関心のあるアナリスト向けに用意されています。
この調査の目的は、他のアナリストが Python を脅威インテリジェンスに適用するのに役立つ可能性がある調査方法についての見解を提供することです。アナリストはコードを再利用して、抽出された情報を引き続き調査できます。さらに、チャット ログの分析、IOC の抽出、および Python を使用した脅威インテリジェンスと防御プロセスの改善のためのすぐに使用できる方法論を提供します。
Python を使用して Conti ネットワークを分析する
2022 年 2 月 28 日、@ContiLeaks (ウクライナの研究者とされる) という名前の Twitter アカウントが、流出した Conti データを Twitter に投稿し始めました。数か月にわたって投稿された漏洩データ セットは、チャット ログ、ソース コード、およびバックエンド アプリケーションで構成されていました。
この調査では、コンティ グループの操作方法、インフラストラクチャ、および組織構造に関する重要な情報を明らかにしたチャット ログに分析を集中しました。
チャットログの編集と翻訳
流出したチャットログはロシア語で書かれています。分析をよりアクセスしやすくするために、 ここで公開されている方法論を採用し、ログを英語に翻訳しました。
チャット ログから、Conti グループがメッセージング アプリケーションの Jabber を使用してメンバー間の通信を行っていることが明らかになりました。生の Jabber ログは 1 日ごとにファイルを使用して保存されるため、1 つの JSON ファイルにコンパイルできるため、Python で簡単に操作できます。データがマージされると、ディープ トランスレータ ライブラリを使用して翻訳できます。ログが変換されて新しいファイルに読み込まれた後、操作と探索のためにデータをデータフレームに読み込むことができます。
df = pd.read_json(codecs.open('translated_Log2.json', 'r', 'utf-8'))

自動化されたプロセスで正しく翻訳されなかったロシア語の俗語は、辞書を作成することで翻訳できます。この場合、スラングを正しく翻訳するために、 ここで提案されているリストにない辞書が使用されました。

チャット アクティビティ タイムラインの分析
チャット ログから洞察を得る 1 つの方法は、そのタイムラインを表示し、1 日あたりのディスカッション数を確認することです。 Bokehライブラリを使用して、インタラクティブな図を作成し、読み込まれたデータフレームを探索できます。

Conti チャット ログのデータを使用すると、次の図が生成されます。これは、時間の経過に伴う Jabber ディスカッションの量を示しています。

データをタイムラインとして視覚化すると、特定のイベントに一致するアクティビティのピークがいくつか示されます。たとえば、Conti リークの場合は次のようになります。
- 2021 年 7 月 7 日 (615 件の議論): ソフトウェア会社 Kaseya に対する REvil によるランサムウェア攻撃
- 2021 年 8 月 27 日 (1,289 件のディスカッション): 特定の Conti アフィリエイトのプレイブックが流出しました
- 2021 年 8 月 31 日 (1,156 件のディスカッション): ランサムウェアとレイバー デーに関する FBI CISA 勧告
- 2021 年 8 月 10 日 (853 件のディスカッション): Conti による Meyer Corporation に対するランサムウェア攻撃
興味深いことに、最初のリークの後、Conti グループ内でチャット アクティビティのピークが観察されませんでした。これは、その時点で侵害が無視されたか、グループによって認識されていなかったことを示している可能性があります。
ユーザー アクティビティのレベルの分析
チャット ログを分析する場合、ユーザー数を特定し、最もアクティブなユーザーを分析することで、グループの規模とグループ内のユーザーの役割を把握できます。 Python を使用すると、ユーザーのリストを抽出してテキスト ファイルに保存できます。

Conti チャット ログを使用して上記のスクリプトを実行すると、346 個の一意のアカウントのリストが得られました。このリストを使用してグラフを作成し、どのユーザーが最も多くのメッセージを送信したかを示すことができます。


グラフに基づくと、 defender 、 stern 、 driver 、 bio 、 mangoという名前のユーザーが最も多くのディスカッションを行っています。 チェックポイントは、組織の構造に関する広範な調査を公開し、ユーザーの議論を、人事、コーダー、クリプター、攻撃チーム、システム管理者などのいくつかの役割とサービスと関連付けました。
ユーザーの接続のマッピング
チャット ログ データを分析するもう 1 つの方法は、ユーザーの接続を視覚化することです。これは、ユーザー間のつながりを強調できる動的ネットワーク グラフを作成することで実現できます。 Barnes Hut アルゴリズムと Pyvis ライブラリを使用して、このデータを視覚化できます。

動的な視覚化により、ネットワークの概要がグラフィカルに表示され、ネットワークを拡大して内部の接続を詳細に分析できます。ポイントが大きいほど、最もアクティブなユーザーを表し、ユーザーをハイライトして接続を分析することができます。さらに、ホバリング ツールは、特定のユーザーが他のどのユーザーと会話したかを示します。


興味のある他のトピックを検索する
データセットの読み取りには時間がかかる場合があるため、単純な検索エンジンを構築して、チャット ログ内の特定の文字列を検索したり、関心のあるトピックをフィルター処理したりできます。 Conti のリーク データの例としては、Bitcoin、ユーザー名、マルウェア名、エクスプロイト、CVE などが挙げられます。
次のコード スニペットは、 TextSearch ライブラリを使用した単純な検索エンジンを提供します。

MSTICPy を使用して IOC を抽出および分析する
チャット ログを処理してユーザーのアクティビティと接続を分析するだけでなく、Python を使用して脅威インテリジェンスを抽出して分析することもできます。このセクションでは、MSTICPy ライブラリを使用して IOC を抽出する方法と、追加の脅威ハンティングとインテリジェンスに使用する方法について説明します。
IOC の抽出
MSTICPy は、脅威の調査と脅威のハンティングに使用される Python ライブラリです。このライブラリは、複数の脅威インテリジェンス プロバイダーや、Microsoft Sentinel などの Microsoft ツールに接続できます。これは、ログのクエリとデータの強化に使用できます。これは、IOC を分析し、脅威のコンテキスト化を追加する場合に特に便利です。
MSTICPy をインストールしたら、まずノートブックを初期化します。これにより、データの抽出と強化に使用できる複数のモジュールをロードできます。 msticpyconfig.yamlを構成して API キーを追加することで、VirusTotal や OTX などの外部リソースを追加することもできます。
MSTICPy の IoCExtract モジュールは、定義済みの正規表現を使用して IOC を抽出する便利な方法を提供します。このコードは、DNS、URL、IP アドレス、ハッシュなどの IOC を自動的に抽出し、新しいデータフレームで報告します。


正規表現を追加して、デフォルトで IOC 抽出モジュールによって抽出されたものから特定の IOC をフィルタリングできます。たとえば、以下の正規表現は、Conti チャット ログからビットコイン アドレスを抽出します。


IOC を抽出した後、データフレームをクリーンアップして誤検知と重複データを削除できます。処理された Conti チャット ログの最終的なデータフレームには、次の一意の IOC カウントが含まれています (これらの IOC はすべて悪意があると見なされるわけではないため、追加の分析が必要です)。
URL | DNS | IPV4 | ビットコイン | MD5 | SHA-256 |
1,137 | 474 | 317 | 175 | 106 | 16 |
IP アドレスの調査
MSTICPy の脅威インテリジェンス ルックアップ モジュールTILookupを使用して、IP アドレスなどの IOC に関する詳細情報を取得できます。 Conti リークの場合、317 の一意の IP アドレスが特定されました。これらすべての IOC が悪意のあるものではありませんが、より関連性の高い情報を明らかにする可能性があります。
構成ファイルは、TILookup モジュールをロードするように指定でき、VirusTotal、GreyNoise、OTX などの他の脅威インテリジェンス プロバイダーも一緒にロードできます。

モジュールを実行すると、提供されたすべての IP アドレスのコンテキストが追加された新しいデータフレームが生成されます。

このモジュールでは、単一のオブザーバブルの情報をリクエストすることもできます。


MSTICPy によって提供されるブラウザーを使用して、以前に強化された IOC を探索することもできます。 インタラクティブな Jupyter ノートブックには、IOC のこのビューが含まれています。

さらに、MSTICPy には、 Maxmindを使用してIP アドレスの地理位置情報を検索する組み込みモジュールがあり、以前に抽出した IP アドレスのマップを作成するために使用できます。


URL の調査
IOC リストから抽出された URL は、ターゲット、情報交換に使用されるツール、および攻撃の展開に使用されるインフラストラクチャに関する詳細を提供できます。 Conti リーク データセットから合計 1,137 の一意の URL が抽出されましたが、そのすべてが脅威インテリジェンスに使用できるわけではありません。次のコード スニペットは、URL をフィルタリングする方法を示しています。


フィルターを作成して、実行可能ファイル、DLL、ZIP ファイル、および抽出された URL に関連するその他のファイルの詳細を取得できます。これは興味深い洞察を提供し、さらなる研究のために抽出することができます。


フィルタリングに同じ手法を使用すると、URL リストから .onion URL を識別することもできます。これは、Conti グループが一部のインフラストラクチャに Tor ネットワークを使用していたため、このケースで特に有用であることが判明しました。

VirusTotal を使用して抽出された IOC をピボットする
MSTICPy ライブラリ内でピボット機能を使用すると、データを強化し、追加のインフラストラクチャと IOC を検出できます。これは、脅威インテリジェンスと攻撃者の追跡に特に役立ちます。次のセクションでは、MSTICPy の VirusTotal モジュールVTlookupV3を使用して、追加のマルウェアを配信するために使用された Conti リーク データセットから抽出された IP アドレスに関するインテリジェンスを取得する方法を示します。
次のコードは、 MSTICPyで VTlookupV3 を開始します。

VirusTotal モジュールを使用して、特定の IOC に関連するデータを取得できます。以下のコードは、Conti リーク データセットの特定の IP アドレスからダウンロードされたファイルを検索します。

結果は、IP アドレス 109[.]230[.]199[.]73 がいくつかの種類のマルウェアを配信することを示しています。

その後、VirusTotal モジュールを使用して、これらのハッシュに関する詳細情報をピボットおよび抽出できます。次の表は、リストの最初のハッシュに関する情報を示しています。
属性 | |
認証ハッシュ | 0d10a35c1bed8d5a4516a2e704d43f10d47ffd2aabd9ce9e04fb3446f62168bf |
作成日 | 1624910154 |
cloudsourced_ids_results | [{[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 登録ユーザー ルールセット’, ‘rule_id’: ‘1:527’}, {‘rule_category’: ‘not-疑わしい’, ‘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 登録ユーザー ルールセット’, ‘rule_id’: ‘2:1’}] |
クラウドソーシング_ids_stats | {‘情報’: 0、’高’: 0、’中’: 2、’低’: 1} |
ダウンロード可能 | 真実 |
exifツール | {‘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’: ‘実行可能ファイル, 大規模アドレス対応, DLL’, ‘ FileTypeExtension’: ‘dll’, ‘InitializedDataSize’: ‘69632’, ‘SubsystemVersion’: ‘6.0’, ‘ImageVersion’: ‘0.0’, ‘OSVersion’: ‘6.0’, ‘EntryPoint’: ‘0x139c4’, ‘UninitializedDataSize’ : ‘0’} |
first_submission_date | 1624917754 |
last_analysis_date | 16365918529 |
last_analysis_results | { [切り捨てられた] ‘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’: |
last_analysis_stats | {‘無害’: 0、’サポートされていないタイプ’: 6、’疑わしい’: 0、’確認されたタイムアウト’: 1、’タイムアウト’: 0、’失敗’: 0、’悪意のある’: 47、’未検出’ : 19} |
last_modification_date | 1646895757 |
last_submission_date | 1624917754 |
マジック | MS Windows 用の PE32+ 実行可能ファイル (DLL) (GUI) Mono/.Net アセンブリ |
md5 | 55646b7df1d306b0414d4c8b3043c283 |
意味のある名前 | 197.dll |
名前 | [197.dll、iduD2A1.tmp] |
pe_info | [切り捨て] {‘exports’: [‘StartW’, ‘7c908697e85da103e304d57e0193d4cf’}, {‘name’: ‘.rsrc’, ‘chi2’: 51663.55, ‘virtual_address’: 196608, ‘エントロピー’: 5.81, ‘raw_size’: 1536, ‘フラグ’: ‘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’: ‘シェルマ’}, {‘カウント’: 3, ‘値’: ‘コバルトストライク’}]} |
評判 | 0 |
sandbox_verdicts | {‘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’]}} |
しゃ1 | ddf0214fbf92240bc60480a37c9c803e3ad06321 |
sha256 | cf0a85f491146002a26b01c8aff864a39a18a70c7b5c579e96deda212bfeec58 |
sigma_analysis_stats | {‘高’: 0、’中’: 1、’重大’: 1、’低’: 0} |
sigma_analysis_summary | {‘Sigma Integrated Rule Set (GitHub)’: {‘high’: 0, ‘medium’: 0, ‘critical’: 1, ‘low’: 0}, ‘SOC Prime Threat Detection Marketplace’: {‘high’: 0、「中」: 1、「重大」: 0、「低」: 0}} |
サイズ | 181248 |
深い | 3072:fck3rwbtOSN4X1JmKSol6LZVZgBPruYgr3Ig/XZO9:fck3rwblqPgokNgBPr9gA |
タグ | [アセンブリ、invalid-rich-pe-linker-version、detect-debug-environment、ロングスリープ、64 ビット、pedll] |
times_submitted | 1 |
tlsh | T110049E14B2A914FBEE6A82B984935611B07174624338DFEF03A4C375DE0E7E15A3EF25 |
total_votes | {‘無害’: 0, ‘悪意のある’: 0} |
トライド | [{‘file_type’: ‘Win64 実行可能ファイル (汎用)’, ‘確率’: 48.7}, {‘file_type’: ‘Win16 NE 実行可能ファイル (汎用)’, ‘確率’: 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 }] |
type_description | Win32 DLL |
type_extension | dll |
タイプタグ | ペダル |
unique_sources | 1 |
ヴァッシュ | 115076651d155d15555az43=z55 |
結果は、ハッシュが Cobalt Strike ローダーであることを示しています。これは、Conti 関連会社が運用中にインフラストラクチャの一部としてペネトレーション テスト ツールも使用していることを意味します。
加えて、 VirusTotal モジュールは、検出率、タイプ、説明、およびハッシュに関連するその他の情報などの詳細も提供できます。以下のコード スニペットは、ハッシュが接続するドメインのリストを生成します。


Conti リーク データまたは同様のデータ セットに対してこの種の分析を行うと、初期のデータ セットには含まれていなかった関連ドメインの発見につながる可能性があります。
結論
このブログでは、Python を使用して、チャット ログなどのデータ セットから貴重な脅威インテリジェンスを見つける方法について概説しています。また、MSTICPy ライブラリを使用してデータを処理することが、環境内での強化とハンティング、および追加の脅威コンテキストの収集にどのように役立つかについての詳細も示します。 対話型のノートブックには、ログの探索を続けるためにも使用できる追加のコード スニペットが用意されています。
このブログで抽出された情報の種類は、彼らの活動を調整していた犯罪エコシステムのさまざまな要素への洞察を提供します。このような調査から得られた脅威インテリジェンスは、 Microsoft 365 Defenderなどの製品やサービスに情報を提供し、知識を顧客の実際の保護に変換します。さらに重要なことは、このブログで説明されている方法論は、特定の脅威インテリジェンス サービスに適応できることです。より広範なコミュニティが、さらなる分析、データの強化、すべての利益のためのインテリジェンス共有のために、この方法論を使用するよう招待されています。
トーマス・ロッチャ
Microsoft 365 Defender 研究チーム
参考文献
- 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_procedures
- https://readme.security/the-conti-leaks-first-rumble-of-the-ukraine-earthquake-thats-rattling-the-cybercrime-underground-7abb23b0fb04
- https://medium.com/@arnozobec/analyzing-conti-leaks-without-speaking-russian-only-methodology-f5aecc594d1b
- https://github.com/soufianetahiri/ContiLeaks/blob/main/cobaltsrike_lolbins
- https://twitter.com/TheDFIRReport/status/1498656118746365952
- https://www.clearskysec.com/wp-content/uploads/2021/02/Conti-Ransomware.pdf
- https://blog.bushidotoken.net/2022/04/lessons-from-conti-leaks.html
- https://www.trellix.com/en-au/about/newsroom/stories/threaks-labs/conti-leaks-examining-the-panama-papers-of-ransomware.html
- https://msticky.readthedocs.io/en/latest/getting_started/Introduction.html
コメント