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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
Crassus — Windows権限昇格発見ツール。Process Monitorのブートログを解析して、DLLハイジャック、弱いACL、その他の権限昇格経路を特定し、プロキシDLLのソースコードを自動生成します。 | Kitploit
ツール/GitHubGitHub/vu-ls/crassus
特権昇格エクスプロイトペネトレーションテストバイナリ解析
GitHubvu-ls/crassus

Crassus

Windows権限昇格発見ツール。Process Monitorのブートログを解析して、DLLハイジャック、弱いACL、その他の権限昇格経路を特定し、プロキシDLLのソースコードを自動生成します。

リポジトリを見る
633646ヶ月前Kitploit レビュー済み

人気

すべて見る →

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

すべてのツールを探索

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

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

Crassus Windows 権限昇格発見ツール

クイックスタート

  1. Process Monitor で、Enable Boot Logging オプションを選択します。 "Process Monitor ブートログオプション"
  2. 再起動します。
  3. ログインして Windows が落ち着いたら、もう一度 Process Monitor を実行します。
  4. プロンプトが表示されたら、ブートログを保存します(例:raw.PML)。
  5. Ctrl-R を使用して、デフォルトの Process Monitor フィルターをリセットします。
  6. このログファイルを保存します(例:boot.PML)。
  7. Crassus.exe boot.PML を実行します。
  8. 緑色で表示された結果と、results.csv 内の対応するエントリを調査します。

目次

  • なぜ「Crassus」なのか
    • 本当にまた別の権限昇格発見ツールを作ったのですか?
    • 機能
    • フローチャート
  • スクリーンショット
    • Crassus の実行
    • CSV 出力
    • エクスポート
    • DLL 関数のエクスポート
    • DLL 序数のエクスポート
  • Crassus.exe の入手
    • Visual Studio でのビルド
    • プリコンパイルされた Crassus.exe の使用
  • 使い方
    • 実行フロー
    • コマンドライン引数
    • 例
    • プロキシ DLL テンプレート
    • openssl.cnf テンプレート
  • プロキシ DLL のコンパイル
    • Visual Studio
    • MinGW
  • 実世界の例
    • Acronis True Image
    • Atlassian Bitbucket
    • McAfee
    • Microsoft SQL Server 2022
  • トラブルシューティング
    • 欠落ファイルが実行されない
    • 予期しない権限でコードが実行される
    • 発見結果が再起動後に消える
  • 貢献
  • クレジット

なぜ「Crassus」なのか?

Accenture は Spartacus というツールを作成しました。このツールは Windows 上で DLL ハイジャックの機会を見つけます。Spartacus を出発点として、私たちは Crassus を作成し、単に欠落ファイルを探すだけでなく、Windows の権限昇格発見機能を拡張しました。特権プロセスが使用するファイルやディレクトリの ACL は、目的を達成するために欠落ファイルを探すよりも多くのことを見つけられます。

本当にまた別の権限昇格発見ツールを作ったのですか?

…しかし、Crassus は SysInternals Process Monitor を利用し、生の PML ログファイルを解析するという点でひねりがあります。典型的な使用法は、Process Monitor を使用してブートログを生成し、それを Crassus で解析することです。また、脆弱な DLL の関連するすべてのエクスポートを含むプロキシ DLL のソースコードも自動的に生成します。

機能

  • ProcMon PML ファイルをネイティブに解析します。ログ(PML)パーサーは、https://github.com/eronnen/procmon-parser/ から C# に部分的な機能を移植して実装されています。フォーマット仕様はこちらにあります。
  • Crassus は、特定されたすべての欠落 DLL に対してプロキシ DLL のソースコードを作成します。たとえば、アプリケーションが version.dll を介した DLL ハイジャックに対して脆弱な場合、Crassus はすべてのエクスポートを含む version.cpp と version.def ファイルを作成します。デフォルトでは、プロキシ DLL は calc.exe を起動します。Visual Studio または MinGW で DLL をビルドするためのビルドスクリプトが含まれています。
  • プロセスの作成やライブラリの読み込みなど、他の注目すべきイベントについては、非特権ユーザーがファイルまたはファイルへのパスの任意の部分を変更できるかどうかを調査します。
  • 大きな PML ファイルを処理し、関心のあるすべてのイベントを出力 CSV ファイルに保存できます。

フローチャート

Crassus がどのように動作するかのおおまかな流れは、次のフローチャートにまとめられています。 Crassus フローチャート

スクリーンショット

Crassus の実行

Crassus の実行

CSV 出力

CSV 出力

出力エクスポート

エクスポート

DLL 関数のエクスポート

DLL 関数

DLL 序数のエクスポート

DLL 序数

Crassus.exe の入手

Visual Studio でのビルド

Crassus は Visual Studio 2019 プロジェクトとして開発されました。Crassus.exe をビルドするには:

  1. Crassus.sln を開きます。
  2. キーボードで Ctrl+Shift+B を押します。

プリコンパイルされた Crassus.exe の使用

他の人のコードが何をするかわからなくても実行しても構わないのであれば、Crassus.exe はこのリポジトリに用意されています。

使い方

実行フロー

  1. Process Monitor で、Enable Boot Logging オプションを選択します。 "Process Monitor ブートログオプション"
  2. 再起動します。
  3. ログインして Windows が落ち着いたら、必要に応じて権限で実行されるように構成されている可能性のあるスケジュールタスクも実行します。
  4. もう一度 Process Monitor を実行します。
  5. プロンプトが表示されたら、ブートログを保存します。
  6. Ctrl-R を使用して、デフォルトの Process Monitor フィルターをリセットします。
  7. このログファイルを保存します(例:boot.PML)。ログファイルを再保存する理由は 2 つあります。
    1. 古いバージョンの Process Monitor は、ブートログを単一ファイルとして保存しません。
    2. デフォルトではブートログはフィルタリングされていないため、Process Monitor 自体の起動におけるローカルユーザーによる DLL ハイジャックなどの余分なノイズが含まれる可能性があります。

コマンドライン引数

引数説明
<PMLFILE>既存の ProcMon イベントログファイルの場所(ファイル)。
--verbose詳細な出力を有効にします。
--debugデバッグ出力を有効にします。

例

boot.PML に保存された Process Monitor ブートログを解析します。脆弱なパスはすべて results.csv として保存され、すべてのプロキシ DLL ソースファイルは stubs サブディレクトリに保存されます。

root@kitploit:~
C:\tmp> Crassus.exe boot.PML

プロキシ DLL テンプレート

以下は、プロキシ DLL を生成する際に使用されるテンプレートです。Crassus によって発見された DLL の場合、プロキシ DLL には %_EXPORTS_% で指定されたものと同じエクスポート名と、.def ファイルで指定されたものと同じ序数が含まれます。Crassus は、親プロセスのアーキテクチャを調べ、それに応じて %_BUILD_AS_% フィールドにソースコードをタグ付けすることで、DLL を 32 ビットライブラリとしてビルドするか 64 ビットライブラリとしてビルドするかを検出します。

Process Monitor ログから実際の DLL が見つからない場合、またはエクスポート名に問題がある場合、ビルドスクリプトはエクスポートが指定されていない DLL を作成することにフォールバックします。

root@kitploit:~
#pragma once
    
//%_BUILD_AS%

#include <windows.h>;

extern "C" {

  VOID Payload() {
      // ここにペイロードを実行します。
      WinExec("calc.exe", 1);
  }

  BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved)
  {
      switch (fdwReason)
      {
      case DLL_PROCESS_ATTACH:
          Payload();
          break;
      case DLL_THREAD_ATTACH:
          break;
      case DLL_THREAD_DETACH:
          break;
      case DLL_PROCESS_DETACH:
          break;
      }
      return TRUE;
  }


  #ifdef ADD_EXPORTS
  %_EXPORTS_%
  #endif
}

openssl.cnf テンプレート

OPENSSLDIR 変数の値を安全でない方法で使用するアプリケーションの場合、細工された openssl.cnf ファイルを指定された場所に配置できます。この例では、ソフトウェアは C:\tmp\calc.dll を読み込みます。32 ビットプロセスをターゲットにする場合は 32 ビットライブラリを、64 ビットプロセスをターゲットにする場合は 64 ビットライブラリを使用してください。

root@kitploit:~
[openssl_init]
# これにより、OpenSSL 初期化の一部としてファイル c:\tmp\calc.dll の読み込みが試みられます。
# ビルドスクリプトは、calc.dll ライブラリを 32 ビットまたは 64 ビットのどちらでビルドする必要があるかを検出する必要があります。
/tmp/calc = asdf

プロキシ DLL のコンパイル

Visual Studio

Visual Studio に含まれる cl.exe バイナリを使用してコンパイルできます。具体的には:

root@kitploit:~
cl.exe /DADD_EXPORTS /D_USRDLL /D_WINDLL <target>.cpp /LD /Fe<target>.dll /link /DEF:<target>.def

ライブラリを 64 ビットにするか 32 ビットにするかの指定を含め、ビルドプロセスを自動化するには:

  1. Visual Studio 開発者コマンドプロンプトを開きます。
  2. build.bat スクリプトを使用して DLL をビルドします。
  3. 脆弱なファイル名が .dll 以外で終わる場合は、必要に応じてコンパイルされたファイルの名前を変更します。

注: vcvarsall.bat の残念な動作(間違いなくバグではない)により、同じ Visual Studio 開発者コマンドプロンプトセッションで build.bat を複数回実行しようとすると問題が発生する可能性があります。エラーが発生した場合は、ウィンドウを閉じて再度起動してください。

MinGW

Visual Studio がすぐに利用できない場合は、代わりに MinGW-w64 を使用してプロキシ DLL をコンパイルできます。たとえば Ubuntu プラットフォームでは、MinGW は次のようにインストールできます:sudo apt install g++-mingw-w64-x86-64-win32 g++-mingw-w64-i686-win32

root@kitploit:~
# 32 ビット DLL を作成
i686-w64-mingw32-g++ -c -o <target>.o <target>.cpp -D ADD_EXPORTS
i686-w64-mingw32-g++ -o <target>.dll <target>.o <target>.def -s -shared -Wl,--subsystem,windows

# 64 ビット DLL を作成
x86_64-w64-mingw32-g++ -c -o <target>.o <target>.cpp -D ADD_EXPORTS
x86_64-w64-mingw32-g++ -o <target>.dll <target>.o <target>.def -s -shared -Wl,--subsystem,windows

ライブラリを 64 ビットにするか 32 ビットにするかの指定を含め、ビルドプロセスを自動化するには:

  1. ターミナルを開きます。
  2. bash ./build.sh を実行します。
  3. 脆弱なファイル名が .dll 以外で終わる場合は、必要に応じてコンパイルされたファイルの名前を変更します。

実世界の例

Acronis True Image

Crassus 分析

VU#114757 で概説されているように、古い Acronis ソフトウェアには複数の権限昇格の脆弱性が含まれています。

  1. 非特権ユーザーが作成可能な場所への openssl.cnf の配置。
  2. C:\ProgramData\Acronis ディレクトリの不適切な ACL。

Crassus はこれらの問題を両方とも自動的に発見します。 Acronis の Crassus 出力

DLL ハイジャック

コンパイルした curl.dll ファイルを C:\ProgramData\Acronis\Agent\var\atp-downloader\ ディレクトリに配置し、新しい Process Monitor ブートログで再起動すると、calc.exe を実行するペイロードが SYSTEM 権限で実行されていることがわかります。 "植え付けられた curl.dll の Process Monitor ログ"

openssl.cnf の配置

脆弱な Acronis ソフトウェアは、2 つの異なる場所から openssl.cnf の読み込みを試みます。テンプレートの openssl.cnf ファイルを c:\jenkins_agent\workspace\tp-openssl-win-vs2013\17\product\out\standard\vs_2013_release\openssl\ssl に、32 ビットの calc.dll ペイロードを c:\tmp に配置します。 "植え付けられた openssl.cnf の Process Monitor ログ"

Atlassian Bitbucket

Crassus 分析

VU#240785 で概説されているように、古い Atlassian Bitbucket ソフトウェアは、インストールディレクトリの弱い ACL が原因で権限昇格に対して脆弱です。C:\Program Files\ やその他の ACL 制限された場所の外部にインストールされる Windows ソフトウェアと同様に、ソフトウェアインストーラがターゲットディレクトリに明示的に ACL を設定する必要があります。

Crassus は、このソフトウェアを使用して権限昇格を達成するための多くの方法を発見します。以下を含みます:

  • ユーザー書き込み可能な場所への欠落 DLL の配置。
  • ユーザー書き込み可能な場所への欠落 EXE の配置。
  • 特権 EXE のディレクトリ名を変更し、ユーザーが同じ名前の EXE を配置できるようにする。

Atlassian Bitbucket の Crassus 出力

EXE ハイジャック

Crassus の出力で、c:\atlassian\bitbucket\7.9.1\elasticsearch\bin\elasticsearch-service-x64.exe が特権を持っていることがわかりますが、実行中であるため単純に置き換えることはできません。ただし、別のトリックを使用してハイジャックできます。そのディレクトリの名前を変更し、同じ名前の新しいディレクトリを作成し、同じ名前のペイロードを配置するだけです。 "特権プロセスが実行されているディレクトリの名前を変更する"

Process Monitor のブートログで再起動すると、植え付けられた elasticsearch-service-x64.exe ファイルが実際のものの代わりに実行されていることを確認できます(Windows 電卓アイコンに基づく)。 "植え付けられた calc.exe (elasticsearch-service-x64.exe として)"

McAfee

VU#287178 で概説されているように、古いバージョンの McAfee ソフトウェアは openssl.cnf を介した権限昇格に対して脆弱です。見てみましょう: McAfee の Crassus 出力

このブートログに openssl.cnf への 2 つの異なる参照がある理由を確認するには、results.csv ファイルを参照します。 McAfee の results.csv

D:\ パスからの openssl.cnf ファイルの読み込みは、手動によるさらなる調査が必要です。このようなパスを読み込む可能性は、問題のプラットフォームとシステムへのアクセス権に依存します。オプティカルディスクを作成して、オプティカルドライブにも解決されるパスを参照する openssl.cnf ファイルを提供できる可能性があります。

Microsoft SQL Server 2022

SQL Server 2022 は、非標準の場所にインストールされていない限り、弱い ACL による権限昇格に対して明らかに脆弱ではありません。C:\Program Files 以外の場所にインストールされた場合、Crassus は権限昇格の可能性を複数明らかにします。特権コンポーネントを含むほとんどの Windows アプリケーションは、本質的にセキュアな ACL が既に設定されていないディレクトリにインストールされた場合、この方法で悪用可能と思われます。 "安全でないディレクトリにインストールされた Microsoft SQL Server 2022"

トラブルシューティング

欠落ファイルが実行されない

Crassus が、ユーザーが植え付けたり変更したりできるファイルの特権読み込みを報告した場合、それが必ずしも悪用可能なシナリオであるとは限りません。Crassus は 潜在的に 興味深いファイルタイプを探しますが、Process Monitor ログファイルは、そのファイルが存在した場合に関連プロセスがそれで 何をしていたか を直接示すわけではありません。プログラムアイコンの抽出のように単純な場合もあります。Process Monitor でファイル操作のコールスタックを調査すると、何が行われていたかのヒントが得られる可能性があります。または、より簡単な brute force の方法を好む場合は、単にファイルを配置し、新しい Process Monitor ブートログで動作を調査します。また、Crassus がライブラリを見つけられず、どのエクスポートが存在すべきかを知ることができないか、または Crassus が見つけたエクスポートが適切な DLL コンパイルを妨げる方法で競合する場合もあります。そのような場合、Crassus は関数名をエクスポートしない DLL を作成することにフォールバックします。ターゲットアプリケーションがライブラリを読み込む方法によっては、期待される関数名や序数がないと、ターゲットアプリケーションがライブラリを正常に読み込めない可能性があります。このシナリオでは、プロキシ DLL がどのようなものであるべきかを判断するために手動での対応が必要になります。

予期しない権限でコードが実行される

Crassus は、関心のあるパスを発見するために特権ファイル操作を探します。特権プロセスと非特権プロセスの両方がパスにアクセスするが、存在する可能性のあるものを実行するのは非特権プロセスだけであるシナリオに遭遇する可能性があります。あるいは、親プロセスが特権で実行されるが、子プロセスをより低い権限で明示的に生成する場合もあります。

発見結果が再起動後に消える

特にソフトウェアを初めてインストールするときやアップデートをインストールするときに、Process Monitor は悪用可能に見えるがシステムが起動するたびには発生しないファイル操作をログに記録することがあります。このようなイベントが発生した後の最初の再起動時に、これらの操作を悪用できる可能性があります。このようなエッジケースを避けるために、以降のブートログに同じ報告されたファイル操作が含まれていることを確認してください。

貢献

タイポ、バグ、新機能など、Crassus は以下の点に同意する限り、貢献を広く受け付けています:

  • このプロジェクトの MIT ライセンスに同意すること。
  • プルリクエストを作成する前に、問題を作成して作業を開始する前に議論できるようにしてください。内部開発は公開 GitHub リポジトリを介して追跡されていないためです。そうしないと、例えば既に同じまたは類似の機能に取り組んでいる場合や、その他の理由でプルリクエストが却下されるリスクがあります。

クレジット

  • https://github.com/eronnen/procmon-parser/
ツールをダウンロード