
ステルス性を備えたインメモリローカルパスワードハーベスタ (SILPH) ツール:間接システムコールによるLSA、SAM、DCC2のダンプ

SILPHは、LSAシークレット、SAMハッシュ、DCC2認証情報をディスクにファイルを書き込むことなく、完全にメモリ内でダンプするように設計されたオープンソースのレッドチームツールです。
上流プロジェクトであるgo-secdumpとは異なり、SILPHはOrsted C2フレームワークへの統合を目的として構築されており、Windowsホスト上で直接実行することを意図しているため、RPC経由でサービスを作成する必要がありません。
まずクローンしてコンパイルします(goが必要です):
git clone [email protected]:almounah/silph.git
cd silph
GOOS=windows GOARCH=amd64 go build -trimpath -ldflags="-s -w"
次にsilph.exeを実行します。
PS C:\Users\haroun> Z:\silph.exe
███████╗██╗██╗ ██████╗ ██╗ ██╗
██╔════╝██║██║ ██╔══██╗██║ ██║
███████╗██║██║ ██████╔╝███████║
╚════██║██║██║ ██╔═══╝ ██╔══██║
███████║██║███████╗██║ ██║ ██║
╚══════╝╚═╝╚══════╝╚═╝ ╚═╝ ╚═╝
Stealthy In-Memory Password Harvester
"Well… I think I wanted to be like Eris."
Usage: Z:\silph.exe [options]
-dcc2
dump dcc2
-lsa
dump lsa
-sam
dump sam
新しいsilphモジュールがまもなくOrsted C2に追加される予定です。使用方法についてはorstedのドキュメントを参照してください。
自分のC2に統合してSAMとLSAをダンプできるツールが欲しいと思っていました。
問題は、以下の2つの条件を満たしつつこれを実行できるツールが見つからなかったことです(少なくとも見落としていました)。
さらに、このテーマについて調査しているうちに、非常に興味深い記事https://g3tsyst3m.com/threat%20hunting/Detecting-SAM-registry-hive-dumps-using-Elastic!/を見つけました。
基本的に、著者はいくつかのオプションを有効化することで、SAMがダンプされていることをブルーチームに知らせるイベントが発生する仕組みを示しています。そして、そのイベントをElasticにパイプしています。ここでトリガーされたイベントを確認できます。

記事で提供されているイベントを生成するPythonコードは、RegOpenKeyExとRegSaveKeyExを使用しています。
機密性の高いWindowsレジストリハイブをダンプする手法は数多く存在します。一般的なアプローチには、regコマンドやカスタムスクリプトなどのツールを使用してSAM、SYSTEM、SECURITYハイブをディスクに保存するユーティリティやBOFが含まれます。
別のアプローチとして、ボリュームシャドウコピーを作成し、スナップショットからレジストリハイブを抽出する方法があります。
go-secdumpは異なる手法を導入しました。2023年に最初にリリースされたとき、レジストリのDACLを変更して自身に十分なアクセス権を付与するサービスに依存していました。これにより、サービスはサブキーを列挙し、その名前と値を照会できるようになり、平文のシークレットを復元できました。
キーと値を列挙するために使用されるWindowsレジストリAPIは、ファイルベースのオブジェクトではなくレジストリハンドル上で動作するため、ディスクにデータを書き込むことなくこれらの操作を実行できます。
2025年、Synacktivは同様のアプローチを実装するregsecrets.pyを導入するプルリクエストをImpacketに提出しました。go-secdumpとは異なり、この方法はREG_OPTION_BACKUP_RESTOREフラグを使用してレジストリハンドルを開くことでDACLの変更を回避し、列挙と照会に必要な権限を取得します。
SILPHは、ntdllから解決されたネイティブNTコールを通じてREG_OPTION_BACKUP_RESTOREを使用し、間接システムコールにはSuperdeyeプロジェクトを活用するというこのアプローチに従っています。SILPHはターゲットシステム上でローカルに実行されるように設計されているため、サービスを作成する必要がなく、Impacketなどのリモートツールに関連するネットワークベースの検出の可能性を低減します。
テスト中、以前と同じ条件下でSILPHを実行しても、ベースライン実行と比較して追加のWindowsイベントログエントリは生成されませんでした。
SILPHという名前は、無職転生のシルフィエットに由来しています。
シルフィエットは幼少期、緑の髪のために孤立といじめに直面します。その緑の髪は、周囲が彼女を恐れられたスーパード族と結びつける原因となりました。彼女は力や地位でこれを克服するのではなく、学び、忍耐、そして導きによって成長し、徐々に規律と自制を身につけていきます。
これはSILPHの設計思想を反映しています。静かに動作し、完全にメモリ内で実行され、永続的な痕跡を残さずにシームレスに統合される、自己完結型のツールです。