Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
Spartacus — Spartacus DLL/COM ハイジャッキングツールキット | Kitploit
ツール/GitHubGitHub/accenture/spartacus
防御ツールペイロード生成コード分析エクスプロイトリバースエンジニアリングペネトレーションテストバイナリ解析レッドチーミングArchived
GitHubaccenture/spartacus

Spartacus

Spartacus DLL/COM ハイジャッキングツールキット

リポジトリを見る
1.1k1532年前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

[!CAUTION]
このリポジトリはメンテナンスされていません。最新バージョンについては https://github.com/sadreck/Spartacus をご覧ください。

Spartacus DLL/COM Hijacking Toolkit version

なぜ「Spartacus」なのか?

1960年の映画『スパルタカス』をご覧になったことがあれば、ローマ人がスパルタカスに出頭するよう要求する場面を覚えているでしょう。本物のスパルタカスが立ち上がった瞬間、他の多くの人々も立ち上がり、「私はスパルタカスだ」と名乗り出ました。

DLLハイジャックに対して脆弱なプロセスがDLLの読み込みを要求するとき、それは「VERSION.DLLは誰だ?」と尋ねているようなもので、ランダムなディレクトリが「私がVERSION.DLLだ」「いいえ、私がVERSION.DLLだ」と主張し始めます。そしてそれがSpartacusです。

このツールは他のハイジャックツールと何が違うのか?

  • Spartacusはプロセスの大部分を自動化します。生のSysInternals Process Monitorログを解析し、ProcMonを何時間も実行して2次・3次のDLL/COMハイジャック脆弱性(つまり、親アプリの特定機能を使うと別のDLLを読み込み、さらに別のDLLを読み込むアプリ)を発見できます。
  • 脆弱なDLL用のVisual Studioソリューションを自動生成します。
  • 大きなPMLファイルを処理し、すべての関心イベントをCSVファイルに出力できます。ローカルベンチマークでは、800万イベントを含む3GBのファイルを45秒で処理しました。
  • DLLハイジャックとCOMハイジャックの両方の脆弱性スキャンをサポートします。
  • 自己署名証明書の生成とDLLファイルへの署名をサポートします。
  • Ghidra機能を利用して、エクスポート関数のシグネチャを抽出し、DllMainからすべてを実行する代わりに、個別にプロキシされた関数を介してペイロードを実行できます。この手法は、https://www.redteam.cafe/red-team/dll-sideloading/dll-sideloading-not-by-dllmain のShantanu Khandelwalによるウォークスルーに触発され実装されました。
  • [防御] 実行中のアプリケーションが呼び出しをプロキシしている(「DLLハイジャック進行中」)ことを特定しようとする監視モード。これは簡単に見つかる脆弱性を拾うためのもので、これに依存すべきではありません。

目次

  • インストール
  • サポートされる機能
    • DLLハイジャック
      • 使用方法
    • COMハイジャック
      • 使用方法
    • DLLプロキシ生成
      • 使用方法
    • DLLファイルへの署名
      • 使用方法
    • DLLハイジャック検出
  • コマンドライン引数
  • コントリビューション
  • クレジット

インストール

Spartacusの最新バージョンはReleasesから見つけてダウンロードしてください。あるいは、単にこのリポジトリをクローンしてソースからビルドしてください。

サポートされる機能

以下は、Spartacusがサポートする各モードの説明です。

注: v1からv2でコマンドライン引数が大幅に変更されました。

DLLハイジャック

Spartacusの本来の機能は、DLLハイジャック脆弱性を見つけることだけでした。動作方法は以下の通りです。

  1. 渡された引数に基づいて、その場でProcMon(PMC)設定ファイルを生成します。設定されるフィルターは次の通りです。
    • 操作は CreateFile。
    • パスが .dll で終わる。
    • プロセス名が procmon.exe または procmon64.exe ではない。
    • PML出力サイズを最小限に抑えるため Drop Filtered Events を有効化。
    • Auto Scroll を無効化。
  2. Process Monitor を実行し、ユーザーが ENTER を押すまで停止します。
  3. ユーザーはプロセスを実行/終了するか、必要なだけ実行し続けます。
  4. ユーザーが ENTER を押すと Process Monitor を終了します。
  5. 出力イベントログ(PML)ファイルを解析します。
    1. NAME_NOT_FOUND および PATH_NOT_FOUND のDLLすべてを含むCSVファイルを作成します。
    2. 上記のDLLを比較し、実際に読み込まれたDLLを特定しようとします。
    3. 見つかったDLLごとに、そのDLLのすべてのエクスポート関数をプロキシするためのVisual Studioソリューションを生成します。

DLLハイジャックの使用方法

すべてのイベントを収集し、C:\Data\logs.pml に保存します。脆弱なDLLは C:\Data\VulnerableDLLFiles.csv に、プロキシDLLソリューションは C:\Data\Solutions に保存されます。

root@kitploit:~
--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ソリューションを生成します。

root@kitploit:~
--mode dll --existing --pml C:\MyData\SomeBackup.pml --csv C:\Data\VulnerableDLLFiles.csv --solution C:\Data\Solutions --verbose

スクリーンショット

DLL Runtime

CSV Output

COMハイジャック

Spartacusの新機能として、ローカルCOMハイジャック脆弱性を特定することができます。動作方法は以下の通りです。

  1. 渡された引数に基づいて、その場でProcMon(PMC)設定ファイルを生成します。設定されるフィルターは次の通りです。
    • 操作は RegOpenKey。
    • プロセス名が procmon.exe または procmon64.exe ではない。
    • PML出力サイズを最小限に抑えるため Drop Filtered Events を有効化。
    • Auto Scroll を無効化。
  2. Process Monitor を実行し、ユーザーが ENTER を押すまで停止します。
  3. ユーザーはプロセスを実行/終了するか、必要なだけ実行し続けます。
  4. ユーザーが ENTER を押すと Process Monitor を終了します。
  5. 出力イベントログ(PML)ファイルを解析します。
    1. 末尾が InprocServer32 で結果が NAME_NOT_FOUND のすべての欠落したレジストリキーを特定します。
    2. 特定されたキーが HKEY_CURRENT_USER の下にある場合、HKEY_CLASSES_ROOT の下でそのGUIDを検索し、見つかった場合はその詳細をエクスポートCSVに含めます。
    3. 収集したすべての情報を含むCSV出力を作成します。
  6. SpartacusはCOMハイジャック用のVisual Studioソリューションを自動的に作成しませんが、プロキシDLLが必要な場合は proxy モードを使用できます。

COMハイジャックでは、Spartacusはローカルシステムの誤設定されたCOMエントリのスキャンもサポートしています。

  1. HKEY_CLASSES_ROOT、HKEY_CURRENT_USER、HKEY_LOCAL_MACHINE のすべてを列挙します。
  2. InProcServer、InProcServer32、LocalServer、または LocalServer32 と呼ばれるレジストリキーを探します。
  3. 欠落しているEXE/DLLの場所、および現在のユーザーがファイルを変更または削除できるACLの誤設定を特定します。

COMハイジャックの使用方法

すべてのイベントを収集し、C:\Data\logs.pml に保存します。脆弱なCOM情報は C:\Data\VulnerableCOM.csv に保存されます。

root@kitploit:~
--mode com --procmon C:\SysInternals\Procmon.exe --pml C:\Data\logs.pml --csv C:\Data\VulnerableCOM.csv --verbose

既存のPMLファイルを処理して脆弱なCOMエントリを特定します。

root@kitploit:~
--mode com --existing --pml C:\Data\logs.pml --csv C:\Data\VulnerableCOM.csv --verbose

ローカルシステムのレジストリを列挙して、欠落または誤設定されたCOMライブラリと実行可能ファイルを特定します。

root@kitploit:~
--mode com --acl --csv C:\Data\VulnerableCOM.csv --verbose

スクリーンショット

COM Runtime

CSV Output

DLLプロキシ生成

Spartacusは、悪用したいDLLに基づいてスケルトンプロジェクトを作成し、Visual Studioソリューションを生成することをサポートしています。

  • 正規のDLLに関数をエクスポートしてすべての呼び出しをリダイレクトします。
    • つまり、DllMain 関数からペイロードを実行する必要があります。
  • Ghidraを使用して、ターゲットDLLから可能な限り多くの関数シグネチャ/定義を抽出し、それらのプロキシ関数を作成します。
    • シグネチャを抽出できなかった関数については、正規の関数/DLLに直接リダイレクトされます。
    • つまり、DllMain 以外の関数からペイロードを実行できます。
    • 例えば、version.dll を悪用する場合、脆弱なアプリケーションによって呼び出される GetFileVersionInfoExW からインプラントを実行できます。

DLLプロキシ生成の使用方法

すべてのエクスポートをリダイレクトするソリューションを生成します(関数プロキシなし)。

root@kitploit:~
--mode proxy --dll C:\Windows\System32\version.dll --solution "C:\data\tmp\refactor-version" --overwrite --verbose --external-resources

複数のDLLを同時に入力することも可能です。

root@kitploit:~
--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の出力に基づく)。

root@kitploit:~
--mode proxy --ghidra C:\ghidra\support\analyzeHeadless.bat --dll C:\Windows\System32\userenv.dll --solution C:\Projects\spartacus-userenv --overwrite --verbose

上記と同じですが、外部アセットファイルを使用してソリューションを生成します(変更が必要な場合)。

root@kitploit:~
--mode proxy --ghidra C:\ghidra\support\analyzeHeadless.bat --dll C:\Windows\System32\userenv.dll --solution C:\Projects\spartacus-userenv --overwrite --verbose --external-resources

Ghidraが関数定義を抽出できなかった関数のために、事前に生成された関数プロトタイプを利用します。

root@kitploit:~
--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 関数のみのプロキシを生成します。

root@kitploit:~
--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が関数定義を抽出できなかった関数のプロキシ生成を支援します。

root@kitploit:~
--mode proxy --action prototypes --path "C:\Program Files (x86)\Windows Kits" --csv C:\data\prototypes.csv --verbose

DLLのエクスポートを一覧表示し、各関数に事前に生成されたプロトタイプがあるかどうかを確認します。

root@kitploit:~
--mode proxy --action exports --dll C:\Windows\System32\version.dll --dll C:\Windows\System32\amsi.dll --prototypes ./Assets/prototypes.csv

DLLファイルへの署名

Spartacusは現在、自己署名証明書の生成(既存ファイルから属性をコピーしながら)とDLLファイルへの署名をサポートしています。

DLLファイルへの署名の使用方法

C:\Windows\System32\version.dll(署名済みDLLである必要があります)のプロパティを使用して署名証明書を作成します。

root@kitploit:~
--mode sign --action generate --pfx "C:\Output\certificate.pfx" --password "Welcome1" --not-before "2022-12-31 00:00:55" --not-after "2026-01-01 00:00:01" --copy-from C:\Windows\System32\version.dll --verbose

既存または生成された証明書を使用してDLLに署名します。

root@kitploit:~
--mode sign --action sign --pfx "C:\Output\certificate.pfx" --password "Welcome1" --path "C:\Input\MyFakeVersion.dll" --algorithm SHA256 --verbose

DLLハイジャック検出

Spartacusには --detect モードもあり、アクティブなDLLプロキシを特定しようとします。その背後にあるロジックは次の通りです。

  • すべてのプロセスを列挙します。
  • 各プロセスについて、メモリにロードされているDLL(モジュール)を読み込みます(適切な権限がある場合)。
  • 同じ名前のDLLが見つかった場合:
    • 両方のファイルがOSパス(Windows、System32、Program Filesなど)にある場合は無視します。
    • 一方のファイルだけがOSパスにあり、もう一方がユーザー書き込み可能な場所にある場合は、そのファイルにフラグを立てます。

この機能を使用するには、Spartacusを --detect で実行するだけです。

実行可能ファイル/DLLの自己署名

Spartacusは --sign モードをサポートしており、自己署名証明書の生成と、それを使用してコンパイル済みDLLに署名することができます。

既存のファイルから発行者/件名をコピーして自己署名証明書を生成します。

root@kitploit:~
--mode sign --action generate --pfx "C:\Output\myCertificate.pfx" --password "Welcome1" --not-before "2023-01-01 00:00:04" --not-after "2025-01-01 00:00:42" --copy-from C:\Windows\System32\version.dll --verbose

その証明書を使用してコンパイル済みファイルに署名します。

root@kitploit:~
--mode sign --action sign --pfx "C:\Output\myCertificate.pfx" --password "Welcome1" --path "C:\Projects\Spartacus-AMSI\amsi.dll" --algorithm SHA256 --verbose

コマンドライン引数

作業を簡単にするために、CommandLineGenerator.html を使用してください。

コントリビューション

誤字、バグ、新機能など、Spartacusへのコントリビューションは大歓迎ですが、以下の点に同意いただく必要があります。

  • このプロジェクトのMITライセンスに同意いただけること。
  • プルリクエストを作成する前に、まずイシューを作成して議論を行ってください。社内開発は公開GitHubリポジトリで追跡されていないため、作業を始める前に話し合いが必要です。そうしないと、たとえばすでに同じまたは類似の機能に取り組んでいる場合など、プルリクエストが却下されるリスクがあります。

クレジット

  • https://github.com/eronnen/procmon-parser/
  • https://www.redteam.cafe/red-team/dll-sideloading/dll-sideloading-not-by-dllmain
  • https://stmxcsr.com/persistence/com-hijacking.html
  • Spartacusのアイコンは Helmet icons created by Darius Dan - Flaticon | https://dariusdan.com/ から
  • https://github.com/Danielku15/SigningServer
ツールをダウンロード
ModeArgumentDescription
--mode使用するモードを定義します。dll、proxy、com、detect のいずれか。
all--verbose詳細出力を有効にします。
all--debugデバッグ出力を有効にします。
all--external-resourcesデフォルトでは、SpartacusはVSソリューションファイルなどを生成するために埋め込みリソースを使用します。テンプレートを変更する必要がある場合は、この引数を使用してSpartacusに ./Assets フォルダからすべてのファイルをロードさせます。
dll, com--procmonSysInternals Process Monitorの procmon.exe または procmon64.exe の場所(ファイル)
dll, com--pmlProcMonイベントログファイルを保存する場所(ファイル)。ファイルが存在する場合は上書きされます。--existing と一緒に使用すると、読み取るイベントログファイルを指定し、上書きされません。
dll, com--pmcカスタムProcMon(PMC)ファイルを定義します。このファイルは変更されず、そのまま使用されます。
dll, com--csv実行結果のCSV出力を保存する場所(ファイル)。
dll, proxy--solutionプロキシDLLのソリューションが保存されるディレクトリへのパス。
dll, com--existingSpartacusが既存のProcMonイベントログファイル(PML)を処理することを示すスイッチ。イベントログファイルを指定するには --pml を使用します。ProcMonを何時間も実行したり、ブートログで使用した場合に便利です。
dll--allデフォルトでは、WindowsまたはProgram Filesディレクトリ内のDLLはスキップされます。これを使用して、出力にそれらのディレクトリを含めます。
proxy--ghidraGhidraの 'analyzeHeadless.bat' ファイルへのパス。DllMain だけでなく特定の関数をプロキシしたい場合に使用します。
proxy--dllプロキシしたいDLLへのパス。この引数は複数指定できます。また、C:\Windows\System32\*.dll のようなワイルドカードも使用できますが、すべてのパスは *.dll で終わる必要があります。
proxy, sign--overwrite--solution(proxy)または --pfx(sign)ファイルが既に存在する場合、このフラグを使用して上書きします。
proxy--onlyこの変数で定義された関数のみのプロキシ関数を生成します。値はカンマ区切りで、例:'WTSFreeMemory,WTSFreeMemoryExA,WTSSetUserConfigA'。
proxy--actionデフォルトのアクションはVSソリューションの生成です。--action prototypes はWindows SDKフォルダを入力として受け取り、*.h ファイルを解析して関数プロトタイプのデータベースを生成します。--action exports はDLLのエクスポート関数を表示し、--prototypes と組み合わせると関数定義が事前に生成されているかどうかを表示します。
sign--actionsign モジュールで --action を使用する場合、PFXを作成する generate とファイルに署名する sign の2つのオプションのいずれかになります。
proxy--path現在は --action prototypes でのみ機能し、Windows SDKディレクトリの場所です。
proxy--prototypesprototypes.csvの場所(現在は ./Assets フォルダ内)。
com--aclローカルシステムの欠落または誤設定されたCOMライブラリと実行可能ファイルを列挙します。
sign--subject--action generate と一緒に使用し、証明書のサブジェクトを指定します。
sign--issuer--action generate と一緒に使用し、証明書の発行者を指定します。
sign--copy-from--action generate と一緒に使用し、発行者とサブジェクトをコピーする既存の署名付きファイルを指定します。
sign--not-before--action generate と一緒に使用し、新しい証明書が有効になる開始日時を定義します。形式は YYYY-MM-DD HH:MM:SS。
sign--not-after--action generate と一緒に使用し、新しい証明書が有効になる終了日時を定義します。形式は YYYY-MM-DD HH:MM:SS。
sign--pfx--action generate と一緒に使用すると、pfxファイルの保存先を指定します。--action sign と一緒に使用すると、pfxファイルの読み込み元を指定します。
sign--password--action generate と一緒に使用すると、--pfx ファイルのパスワードを定義します。
sign--path--action sign と一緒に使用すると、署名する実行可能ファイル/DLLファイルの場所を定義します。
sign--algorithm--action sign と一緒に使用すると、署名に使用するハッシュアルゴリズムを定義します。オプション: MD5、SHA1、SHA256、SHA384、SHA512。
sign--timestamp--action sign と一緒に使用すると、タイムスタンプサーバー(例:http://timestamp.sectigo.com または http://timestamp.digicert.com)を定義します。