
Spartacus DLL/COM ハイジャッキングツールキット
[!CAUTION]
このリポジトリはメンテナンスされていません。最新バージョンについては https://github.com/sadreck/Spartacus をご覧ください。
1960年の映画『スパルタカス』をご覧になったことがあれば、ローマ人がスパルタカスに出頭するよう要求する場面を覚えているでしょう。本物のスパルタカスが立ち上がった瞬間、他の多くの人々も立ち上がり、「私はスパルタカスだ」と名乗り出ました。
DLLハイジャックに対して脆弱なプロセスがDLLの読み込みを要求するとき、それは「VERSION.DLLは誰だ?」と尋ねているようなもので、ランダムなディレクトリが「私がVERSION.DLLだ」「いいえ、私がVERSION.DLLだ」と主張し始めます。そしてそれがSpartacusです。
DllMainからすべてを実行する代わりに、個別にプロキシされた関数を介してペイロードを実行できます。この手法は、https://www.redteam.cafe/red-team/dll-sideloading/dll-sideloading-not-by-dllmain のShantanu Khandelwalによるウォークスルーに触発され実装されました。[防御] 実行中のアプリケーションが呼び出しをプロキシしている(「DLLハイジャック進行中」)ことを特定しようとする監視モード。これは簡単に見つかる脆弱性を拾うためのもので、これに依存すべきではありません。Spartacusの最新バージョンはReleasesから見つけてダウンロードしてください。あるいは、単にこのリポジトリをクローンしてソースからビルドしてください。
以下は、Spartacusがサポートする各モードの説明です。
注: v1からv2でコマンドライン引数が大幅に変更されました。
Spartacusの本来の機能は、DLLハイジャック脆弱性を見つけることだけでした。動作方法は以下の通りです。
CreateFile。.dll で終わる。procmon.exe または procmon64.exe ではない。Drop Filtered Events を有効化。Auto Scroll を無効化。ENTER を押すまで停止します。ENTER を押すと Process Monitor を終了します。すべてのイベントを収集し、C:\Data\logs.pml に保存します。脆弱なDLLは C:\Data\VulnerableDLLFiles.csv に、プロキシDLLソリューションは C:\Data\Solutions に保存されます。
--mode dll --procmon C:\SysInternals\Procmon.exe --pml C:\Data\logs.pml --csv C:\Data\VulnerableDLLFiles.csv --solution C:\Data\Solutions --verbose
既存のPMLイベントログ出力を解析し、CSVに出力し、プロキシVisual Studioソリューションを生成します。
--mode dll --existing --pml C:\MyData\SomeBackup.pml --csv C:\Data\VulnerableDLLFiles.csv --solution C:\Data\Solutions --verbose


Spartacusの新機能として、ローカルCOMハイジャック脆弱性を特定することができます。動作方法は以下の通りです。
RegOpenKey。procmon.exe または procmon64.exe ではない。Drop Filtered Events を有効化。Auto Scroll を無効化。ENTER を押すまで停止します。ENTER を押すと Process Monitor を終了します。InprocServer32 で結果が NAME_NOT_FOUND のすべての欠落したレジストリキーを特定します。HKEY_CURRENT_USER の下にある場合、HKEY_CLASSES_ROOT の下でそのGUIDを検索し、見つかった場合はその詳細をエクスポートCSVに含めます。proxy モードを使用できます。COMハイジャックでは、Spartacusはローカルシステムの誤設定されたCOMエントリのスキャンもサポートしています。
HKEY_CLASSES_ROOT、HKEY_CURRENT_USER、HKEY_LOCAL_MACHINE のすべてを列挙します。InProcServer、InProcServer32、LocalServer、または LocalServer32 と呼ばれるレジストリキーを探します。すべてのイベントを収集し、C:\Data\logs.pml に保存します。脆弱なCOM情報は C:\Data\VulnerableCOM.csv に保存されます。
--mode com --procmon C:\SysInternals\Procmon.exe --pml C:\Data\logs.pml --csv C:\Data\VulnerableCOM.csv --verbose
既存のPMLファイルを処理して脆弱なCOMエントリを特定します。
--mode com --existing --pml C:\Data\logs.pml --csv C:\Data\VulnerableCOM.csv --verbose
ローカルシステムのレジストリを列挙して、欠落または誤設定されたCOMライブラリと実行可能ファイルを特定します。
--mode com --acl --csv C:\Data\VulnerableCOM.csv --verbose


Spartacusは、悪用したいDLLに基づいてスケルトンプロジェクトを作成し、Visual Studioソリューションを生成することをサポートしています。
DllMain 関数からペイロードを実行する必要があります。DllMain 以外の関数からペイロードを実行できます。version.dll を悪用する場合、脆弱なアプリケーションによって呼び出される GetFileVersionInfoExW からインプラントを実行できます。すべてのエクスポートをリダイレクトするソリューションを生成します(関数プロキシなし)。
--mode proxy --dll C:\Windows\System32\version.dll --solution "C:\data\tmp\refactor-version" --overwrite --verbose --external-resources
複数のDLLを同時に入力することも可能です。
--mode proxy --dll C:\Windows\System32\version.dll --dll C:\Windows\System32\userenv.dll --solution "C:\data\tmp\dll-collection" --overwrite --verbose --external-resources
可能な限り多くの関数のプロキシを作成します(Ghidraの出力に基づく)。
--mode proxy --ghidra C:\ghidra\support\analyzeHeadless.bat --dll C:\Windows\System32\userenv.dll --solution C:\Projects\spartacus-userenv --overwrite --verbose
上記と同じですが、外部アセットファイルを使用してソリューションを生成します(変更が必要な場合)。
--mode proxy --ghidra C:\ghidra\support\analyzeHeadless.bat --dll C:\Windows\System32\userenv.dll --solution C:\Projects\spartacus-userenv --overwrite --verbose --external-resources
Ghidraが関数定義を抽出できなかった関数のために、事前に生成された関数プロトタイプを利用します。
--mode proxy --ghidra C:\ghidra\support\analyzeHeadless.bat --dll C:\Windows\System32\userenv.dll --solution C:\Projects\spartacus-userenv --overwrite --verbose --external-resources --prototypes C:\data\prototypes.csv
GetFileVersionInfoExW と GetFileVersionInfoExA 関数のみのプロキシを生成します。
--mode proxy --ghidra C:\ghidra\support\analyzeHeadless.bat --dll C:\Windows\System32\version.dll --solution C:\Projects\spartacus-version --verbose --overwrite --external-resources --only "GetFileVersionInfoExW, GetFileVersionInfoExA"
既存の *.h ファイルから関数プロトタイプデータベースを生成し、Ghidraが関数定義を抽出できなかった関数のプロキシ生成を支援します。
--mode proxy --action prototypes --path "C:\Program Files (x86)\Windows Kits" --csv C:\data\prototypes.csv --verbose
DLLのエクスポートを一覧表示し、各関数に事前に生成されたプロトタイプがあるかどうかを確認します。
--mode proxy --action exports --dll C:\Windows\System32\version.dll --dll C:\Windows\System32\amsi.dll --prototypes ./Assets/prototypes.csv
Spartacusは現在、自己署名証明書の生成(既存ファイルから属性をコピーしながら)とDLLファイルへの署名をサポートしています。
C:\Windows\System32\version.dll(署名済みDLLである必要があります)のプロパティを使用して署名証明書を作成します。