
インシデントレスポンダーが潜在的な敵対者の永続化メカニズムを発見するのに役立つPowerShellスクリプト。
Trawlerは、Windowsホスト上の侵害の可能性を示す指標(IOC)を発見するために設計されたPowerShellスクリプトです。主に、スケジュールタスク、サービス、レジストリ変更、スタートアップ項目、バイナリ変更などを含む永続化メカニズムに焦点を当てています。
現在、TrawlerはMITREやAtomic Red Teamで特に挙げられている永続化手法のほとんどを検出でき、定期的にさらなる検出が追加されています。
管理者権限のPowerShellまたはcmdプロンプトからtrawler.ps1をダウンロードして実行するだけです。検出結果はコンソールに表示されると同時に、現在の作業ディレクトリにCSV('detections.csv')として書き込まれます。生成されたCSVには、検出名、ソース、リスク、メタデータ、および関連するMITREテクニックが含まれます。
または、管理者権限のPowerShellターミナルから次のワンライナーを使用します。
iex ((New-Object System.Net.WebClient).DownloadString('https://raw.githubusercontent.com/joeavanzato/Trawler/main/trawler.ps1'))
一部の検出には、デフォルトのWindows構成(10/2016/2019/2022)からのノイズを除去するための組み込み許可リストがあります(予想されるスケジュールタスク、サービスなど)。もちろん、攻撃者がこれらを直接ハイジャックし、デフォルトのOSプロセスとして詳細に偽装することは常に可能です。巧妙な敵対者に対処する際は、複数の分析・検出方法を使用するよう注意してください。
追加の検出の例やアイデアがあれば、関連する技術的詳細や参照とともにIssueまたはPRを遠慮なく提出してください。コードベースは現在少し乱雑ですが、時間をかけて整理される予定です。
また、明らかな誤検出を特定した場合は、GitHubでIssueまたはPRを開いてお知らせください。その主な原因は、非標準のCOM、サービス、またはタスクである可能性が高いです。
-scanoptions : Tab-through for possible detections and select a sub-set using comma-delimited terms (eg. .\trawler.ps1 -scanoptions Services,Processes) or skip to do all detections
-quiet : Suppress Detection output to console
-snapshot : Path to a previous trawler JSON output to use as an allow-list.
-outpath : Define a custom file-path for saving detection output to (defaults to "$PSScriptRoot\detections.csv")
-drivetarget : Define the variable for a mounted target drive (eg. .\trawler.ps1 -targetdrive "D:") - (defaults to local system)
-daysago : Define how many 'days back' we want to take into consideration for time-based detections (defaults to 45)
-hashmode : Define which hashing algorithm we want to use for supported detections - supports sha1, md5 or sha256 (defaults to sha1)
-evtx : Enable creation of Event Log Source and Writing of Detections to Application event log under Source=trawler with EID=9001 (default is disabled)
PersistenceSniperは素晴らしいツールです。これまでも頻繁に使用してきましたが、これらのユーティリティにはいくつかの重要な違いがあります。
全体として、これらのツールは非常に似ていますが、問題に対してわずかに異なるアプローチを取っています。PersistenceSniperはすべての情報をアナリストに提供してレビューさせるのに対し、Trawlerは返される結果を敵対者の永続化メカニズムである可能性が高いものだけに制限しようとします。そのため、敵対者が許可リストに登録された項目を完全に模倣した場合、trawlerでは偽陰性が発生する可能性があります。
例として、PersistenceSniperは「安全でない」Windowsサービスをすべて返しますが、trawlerは特定の検出ルールに一致するものだけを返します。
Trawlerはスナップショットから許可リストを読み込むことをサポートしています。これには2つの手順が必要です。
以上です。これにより、関連するすべての検出がスナップショットファイルを許可リストとして使用し、ノイズを低減し、ベースイメージに発生した可能性のある変更を特定します。
(許可リストはほとんどのチェックに実装されていますが、すべてではありません。現在も積極的に実装中です。)
調査中、アナリストはイメージ化されたWindowsデバイスを表す新しいドライブをマウントすることがよくあります。Trawlerは、'-drivetarget' パラメータを使用して、これらのマウントされたドライブをスキャンすることを部分的にサポートするようになりました。
実行時に、Trawlerはファイルベースのアーティファクトをチェックするために一時的なスクリプトレベルの変数を再ターゲットし、さらに 'ANALYSIS_' というプレフィックスが付いたHKLM/HKUの下にある関連レジストリハイブ(HKLM\SOFTWARE、HKLM\SYSTEM、NTUSER.DAT、USRCLASS.DAT)をロードしようとします。また、スクリプト完了時にこれらの一時的にロードされたハイブをアンロードしようとします。
例として、NTFSファイルシステム('F:\Test\Windows'、'F:\Test\User' など)を含む 'F:\Test' のような場所にイメージがマウントされている場合、以下のようにtrawlerを呼び出すことができます。
.\trawler.ps1 -drivetarget "F:\Test"
trawlerは対象のドライブからレジストリハイブファイルをロードしようとするため、UNCパスをライブのリモートデバイスにマッピングしても機能しないことに注意してください。システムロックによりそれらのファイルにアクセスできません。ライブのリモートデバイスを処理するアプローチに取り組んでいますので、お楽しみに。
他のほとんどのチェックは、レジストリハイブまたはファイルベースのアーティファクトの読み取りに完全に基づいているため(または組み込みのコマンドレットを使用する代わりにタスクXMLを直接読み取るなど変換可能であるため)、正常に機能します。
ドライブ再ターゲット時のチェックの制限については、GitHub Wikiでより詳しく説明されます。
TODO
以下の中には、当然ながら他のものよりも検出されるものがあることに注意してください。例えば、考えられるすべてのレジストリ変更を検出しているわけではなく、特定のキーの明らかな変更を検査し、他のテクニックが適用できない場合は汎用的なMITREテクニック「Modify Registry」を使用しています。COMハイジャックなどの他の項目については、該当するレジストリセクションのすべてのエントリを検査し、「既知の正常」パターンと照合して、未知または不一致の値を浮かび上がらせることで、その特定のテクニックに対してより完全な検出範囲を実現しています。
このツールは、素晴らしいInfoSecコミュニティなしには存在しませんでした。以下に、私が使用した最も注目すべき参考文献を示します。