
loki-bot(マルウェア)関連のネットワークトラフィックを検出し解析するPythonスクリプトです。このスクリプトは、C2に流出しているデータやボットの追跡などを把握したいDFIRアナリストやセキュリティ研究者にとって有用です。
Pythonスクリプトで、感染ホストとC2サーバー間のloki-bot(マルウェア)に関連するネットワークトラフィックを検出・解析します。このスクリプトは、C2にどのデータが流出しているのか、ボットの追跡などを把握したいDFIRアナリストやセキュリティ研究者にとって有用です。
このスクリプトは、直接ネットワーク上のパケットをキャプチャする(スイッチなし)か、PCAPファイルのネットワークトラフィックを読み込む(--pcap $pcap_file を使用)ことができます。loki-bot関連のネットワークトラフィックを検出すると、パケットに含まれるデータをJSON形式で画面にダンプします。
一部のパケットにはaPLibで圧縮された流出データが含まれています。スクリプトはそのデータを解凍して画面に表示しますが、このスクリプトには組み込まれていない追加の処理がまだあることに注意してください...今のところは。ただし、aplib.pyスクリプトもダウンロードし、loki-parse.pyと同じディレクトリに配置することが重要です。loki-parseの正常な実行にはこのスクリプトが必要です。
最後に、ネットワークトラフィックをキャプチャするコードには、パケットのデータ部分が切り捨てられる問題があります。これはscapyがトラフィックを解析する方法に関連しているようです。圧縮データを含む大きなパケットで発生する可能性があります。この問題が発生した場合、以下のディクショナリキーが作成されます:
Decompressed Application/Credential Data': 'ERROR: Incomplete Packet Detected
この問題は保存されたPCAPでは発生しないようです。そのため、このエラーが発生した場合は、ネットワークトラフィックをpcapファイルに保存し、そのpcapに対してloki-parseを再実行してみてください。
スクリプトがパケット内のデータの解凍に成功した場合、そのデータは単に画面にダンプされます(JSON形式ではありません)。これは将来のバージョンで対応する予定です。
例として、loki-bot_network_traffic.pcapを提供しています。お試しください。
$ sudo ./loki_parse.py
ネットワークからPCAPをキャプチャ中
{
"Compromised Host/User Data": {
"Compressed Application/Credential Data Size (Bytes)": 2310,
"Compression Type": 0,
"Data Compressed": true,
"Encoded": false,
"Encoding": 0,
"Original Application/Credential Data Size (Bytes)": 8545
},
"Compromised Host/User Description": {
"64bit OS": false,
"Built-In Admin": true,
"Domain Hostname": "REMWorkstation",
"Hostname": "REMWORKSTATION",
"Local Admin": true,
"Operating System": "Windows 8.1 Workstation",
"Screen Resolution": "3440x1440",
"User Name": "REM"
},
"Malware Artifacts/IOCs": {
"Binary ID": "XXXXX11111",
"Loki-Bot Version": 1.8,
"Mutex": "B7E1C2CC98066B250DDB2123",
"Potential Hidden File [Hash Database]": "%APPDATA%\\C98066\\6B250D.hdb",
"Potential Hidden File [Keylogger Database]": "%APPDATA%\\C98066\\6B250D.kdb",
"Potential Hidden File [Lock File]": "%APPDATA%\\C98066\\6B250D.lck",
"Potential Hidden File [Malware Exe]": "%APPDATA%\\C98066\\6B250D.exe",
"Unique Key": "g5cy2",
"User-Agent String": "Mozilla/4.08 (Charon; Inferno)"
},
"Network": {
"Data Transmission Time": "2017-04-27T15:03:20.921806",
"Destination Host": "185.141.27.187",
"Destination IP": "185.141.27.187",
"Destination Port": 80,
"First Transmission": true,
"HTTP Method": "POST",
"HTTP URI": "/danielsden/ver.php",
"Source IP": "172.16.0.130",
"Source Port": 49344,
"Traffic Purpose": "Exfiltrate Application/Credential Data"
}
}