AD のアクセス制御と BloodHound の関係
このページで扱うこと
Section titled “このページで扱うこと”Active Directory Domain Services(AD DS)のアクセス制御と、BloodHound に表示される関係を対応付けます。両者の用語が似ていても、同じ種類の権限を表しているとは限りません。
たとえば GenericAll、WriteDacl、ForceChangePassword は同じ一覧に並びますが、読み解くには次の三層を区別します。
- Windows がアクセスマスクとして定義する基本アクセス権。
- 属性、プロパティセット、検証付き書き込み、拡張権限として設定される権限。
- BloodHound が ACE や AD オブジェクトの状態を解析して付ける関係名。
参照した Microsoft 公式情報と BloodHound 公式情報は末尾の「公式参照」にまとめる。内容は 2026-07-13 時点の Microsoft Learn と SpecterOps BloodHound ドキュメントを前提にしている。
押さえておきたい点
Section titled “押さえておきたい点”GenericAll は Active Directory object に設定される generic access right (汎用アクセス権) の一種であり、Active Directory に対して展開されると、一般に Full Control (フルコントロール) と呼ばれる強い権限になる。
ただし、BloodHound の画面に並ぶ名称をすべて「Windows が定義する権限名」として読むと混乱する。HTB で優先的に覚えるなら、まず次の対応を押さえる。
| 権限・BloodHound Edge | 意味 | 代表的な対象 |
|---|---|---|
GenericAll | 対象へのほぼ完全な制御 | User、Group、Computer、OU、Domain、GPO、certificate template |
GenericWrite | 対象の広範な非保護属性を書き換え可能 | User、Computer、Group、OU、GPO |
WriteDacl | DACL を書き換え、別の権限を追加できる | 多くの AD object |
WriteOwner | object の owner (所有者) を変更できる | 多くの AD object |
Owns | source principal が現在その object の owner である | 多くの AD object |
AllExtendedRights | 対象に適用可能なすべての extended right を実行できる | User、Group、Domain、certificate template など |
ForceChangePassword | 現在の password を知らずに reset できる | User |
AddMember | group に任意の member を追加できる | Group |
AddSelf | 自分自身を group に追加・削除できる | Group |
WriteSPN | servicePrincipalName を変更できる | User、Computer |
AddKeyCredentialLink | msDS-KeyCredentialLink を変更できる | User、Computer |
WriteAccountRestrictions | Account Restrictions property set の属性を書き換えられる | User、Computer |
AllowedToAct | RBCD で source principal が対象 resource への委任を許可済み | Computer |
ReadLAPSPassword | LAPS が管理する local administrator password を取得できる | Computer |
ReadGMSAPassword | gMSA の managed password を取得できる | gMSA |
GetChanges + GetChangesAll | domain naming context から secret を含む replication data を取得できる | Domain |
DCSync | BloodHound が replication rights の組み合わせから生成する攻撃可能な関係 | Domain |
最も重要なのは Edge 名だけではなく、次の順で読むことである。
誰が ↓どの object に対して ↓どの access mask / GUID / 継承範囲を持ち ↓どの属性・操作を変更でき ↓どの認証・委任・group membership・ACL へつながるか3 つのレイヤーを分けて読む
Section titled “3 つのレイヤーを分けて読む”セキュリティ記述子と ACE
Section titled “セキュリティ記述子と ACE”各 AD object には security descriptor (セキュリティ記述子) があり、主に次の情報を持つ。
| 要素 | 内容 |
|---|---|
| Owner | object の owner |
| DACL | access を許可・拒否する ACE の一覧 |
| SACL | 監査対象を定義する ACE の一覧 |
| ACE trustee | 権限を許可・拒否される security principal |
| ACE access mask | WRITE_DAC、WRITE_PROPERTY などの権限 bit |
ObjectType | 属性、property set、extended right、child object class などを示す GUID |
InheritedObjectType | ACE を継承できる child object class を示す GUID |
| ACE flags | 継承方向、継承のみ、object/container への適用範囲など |
同じ WRITE_PROPERTY bit でも、ObjectType が servicePrincipalName の schema GUID なら SPN だけに適用され、GUID がない場合は全 property への書き込みとして扱われる。したがって、access mask だけを見て権限の強さを判断してはいけない。
DACL・ACE・所有者の関係
Section titled “DACL・ACE・所有者の関係”DACL (Discretionary Access Control List) は、object に対して「誰が、どの操作を許可または拒否されるか」を定義する ACL である。 DACL は複数の ACE (Access Control Entry) から成り、各 ACE が principal と権限の対応を表す。
Security Descriptor├─ Owner├─ DACL│ ├─ ACE: Judith に WriteOwner を許可│ ├─ ACE: Management に GenericWrite を許可│ └─ ACE: Domain Admins に GenericAll を許可└─ SACL └─ どの操作を監査するか| 用語 | 意味 |
|---|---|
| DACL | object の access を許可・拒否する ACE 全体の一覧。 |
| ACE | 1 件の許可または拒否の設定。principal、access mask、適用対象、継承条件などを持つ。 |
| SID | ACE の対象となる user、group、computer などの security principal を識別する ID。 |
| Access mask | GenericAll、WRITE_DAC (WriteDacl)、WRITE_OWNER (WriteOwner)、WRITE_PROPERTY (WriteProperty) などの権限 bit。 |
たとえば、Management group に対する WriteOwner の関係は、概念的には次の Allow ACE に相当する。
Allow judith.mader WriteOwner on Managementこの ACE は「Judith が Management group の owner を変更できる」ことを意味するだけであり、Judith が Management group の member になることや、ただちにすべての操作が可能になることを意味しない。
owner になる≠group member になる≠object の全操作が可能になるowner は原則として、その object の DACL を変更するための暗黙の WRITE_DAC を持つ。そのため、WriteOwner は次のような権限連鎖の起点になり得る。
WriteOwner を持つ ↓自分を owner にする ↓owner として DACL を変更する ↓自分に GenericAll または member 属性への WriteProperty を許可する ↓group の member 属性を変更するgroup への任意の member 追加は member 属性への WRITE_PROPERTY が根拠であり、BloodHound では通常 AddMember Edge として表示される。ツールや資料によっては、同じ趣旨を WriteMembers と表記することがある。
ただし、owner の暗黙の WRITE_DAC には OWNER RIGHTS ACE や BlockOwnerImplicitRights などの例外がある。protected account/group では AdminSDHolder / SDProp による ACL の再適用もあり得るため、owner 変更後も実際に DACL を変更できるかを対象 object ごとに確認する。
DACL と SACL の違い
Section titled “DACL と SACL の違い”| 項目 | 役割 |
|---|---|
| DACL | 誰にどの操作を許可・拒否するかを定義する。 |
| SACL | どの access を監査ログに記録するかを定義する。 |
DACL = Can you do it?SACL = Should we log it?DACL によって access が許可されても、SACL と audit policy (監査ポリシー) の設定次第では、その操作の詳細な監査記録が残らないことがある。
属性・プロパティセット・拡張権限
Section titled “属性・プロパティセット・拡張権限”AD の object-specific access control (オブジェクト固有アクセス制御) には、主に次の種類がある。
| 種類 | Access mask | GUID が表すもの | 例 |
|---|---|---|---|
| 属性単位の読み書き | READ_PROP / WRITE_PROP | schema attribute | servicePrincipalName、member |
| Property set | READ_PROP / WRITE_PROP | 複数属性をまとめた property set | User-Account-Restrictions |
| Validated write | SELF | server-side validation を伴う操作 | Self-Membership、Validated-SPN |
| Extended right | CONTROL_ACCESS | 特殊操作を表す control access right | Reset Password、replication rights、Certificate Enrollment |
| Child object 操作 | CREATE_CHILD / DELETE_CHILD | child object class | User object の作成、Computer object の削除 |
Extended right は権限ごとに個別 bit を持つのではなく、CONTROL_ACCESS bit と ObjectType の rights GUID で識別される。ObjectType に GUID のない CONTROL_ACCESS ACE は、その object に適用可能なすべての extended right を意味し、BloodHound の AllExtendedRights の根拠になる。
BloodHound が示す関係
Section titled “BloodHound が示す関係”BloodHound Edge は、必ずしも単一 ACE の表示名ではない。SharpHound が ACL、object type、property GUID、owner、属性値などを収集し、BloodHound が攻撃経路として使いやすい関係へ正規化または post-processing (後処理) した名称である。
代表例は次の通り。
| BloodHound Edge | 主な根拠 | Windows 上の位置づけ |
|---|---|---|
GenericAll | Generic All を許可する ACE | Generic access right |
WriteSPN | SPN 属性への WRITE_PROP または対応する validated write | 属性 / validated write |
ForceChangePassword | Reset Password rights GUID を許可する ACE | Extended right |
AddSelf | Self-Membership rights GUID を許可する ACE | Validated write |
Owns | security descriptor の Owner field | ACE ではなく object の状態 |
AllowedToAct | RBCD security descriptor に source SID が存在 | ACL への権限ではなく属性値から得る状態関係 |
DCSync | GetChanges と GetChangesAll の組み合わせ | 複数 Edge から生成する関係 |
ADCSESC4 など | template を変更できる権限と template/CA 条件 | 複数の ACL・属性・構成から得る攻撃経路 |
このため、BloodHound の version や collection method によって Edge 名、対象 node、traversable (経路探索可能) かどうかが変わる場合がある。
Windows が定義する基本アクセス権
Section titled “Windows が定義する基本アクセス権”Microsoft の ADS_RIGHTS_ENUM は、Active Directory object の access mask として次を定義している。
| Windows 定数 | 値 | 一般的な表記 | 内容 |
|---|---|---|---|
ADS_RIGHT_DELETE | 0x00010000 | Delete | 対象 object を削除 |
ADS_RIGHT_READ_CONTROL | 0x00020000 | ReadControl | SACL を除く security descriptor を読み取り |
ADS_RIGHT_WRITE_DAC | 0x00040000 | WriteDacl | DACL を変更 |
ADS_RIGHT_WRITE_OWNER | 0x00080000 | WriteOwner | owner を変更 |
ADS_RIGHT_SYNCHRONIZE | 0x00100000 | Synchronize | 同期アクセス |
ADS_RIGHT_ACCESS_SYSTEM_SECURITY | 0x01000000 | AccessSystemSecurity | SACL を取得・設定 |
ADS_RIGHT_GENERIC_READ | 0x80000000 | GenericRead | 汎用読み取り |
ADS_RIGHT_GENERIC_WRITE | 0x40000000 | GenericWrite | 汎用書き込み |
ADS_RIGHT_GENERIC_EXECUTE | 0x20000000 | GenericExecute | 汎用実行 |
ADS_RIGHT_GENERIC_ALL | 0x10000000 | GenericAll | 汎用全権限 |
ADS_RIGHT_DS_CREATE_CHILD | 0x00000001 | CreateChild | child object を作成 |
ADS_RIGHT_DS_DELETE_CHILD | 0x00000002 | DeleteChild | child object を削除 |
ADS_RIGHT_ACTRL_DS_LIST | 0x00000004 | ListChildren | child object を一覧表示 |
ADS_RIGHT_DS_SELF | 0x00000008 | Self | validated write を実行 |
ADS_RIGHT_DS_READ_PROP | 0x00000010 | ReadProperty | property を読み取り |
ADS_RIGHT_DS_WRITE_PROP | 0x00000020 | WriteProperty | property を書き込み |
ADS_RIGHT_DS_DELETE_TREE | 0x00000040 | DeleteTree | subtree を削除 |
ADS_RIGHT_DS_LIST_OBJECT | 0x00000080 | ListObject | 特定 object を表示 |
ADS_RIGHT_DS_CONTROL_ACCESS | 0x00000100 | ExtendedRight | extended right を実行 |
Generic access right は、対象 object type 用の GENERIC_MAPPING によって standard right と directory-specific right へ展開される。AD での概念的な包含関係は次のように読める。
GenericAll / DS_GENERIC_ALL ├─ Delete / ReadControl / WriteDacl / WriteOwner ├─ CreateChild / DeleteChild / DeleteTree ├─ ListChildren / ListObject ├─ Self (validated writes) ├─ ReadProperty / WriteProperty └─ ControlAccess (extended rights)
GenericWrite / DS_GENERIC_WRITE ├─ ReadControl ├─ WriteProperty └─ Self (validated writes)GenericWrite は広範な属性変更を許すが、password reset のような extended right まで自動的に含むわけではない。GenericAll は DACL や owner の変更、extended right を含むため、BloodHound では Full Control に相当する関係として扱われる。
有効権限を左右する要素
Section titled “有効権限を左右する要素”ACE に強い権限が見えても、実際の access check と操作結果は次の影響を受ける。
- Explicit deny ACE (明示的な拒否 ACE) と ACE の canonical order。
- User SID、group SID、SID history など access token に含まれる trustee。
- ACE が直接設定されたか、parent container から継承されたか。
- ACE の inheritance flags と
InheritedObjectType。 ObjectTypeが指定する attribute、property set、extended right、child object class。- Object class、schema、system-only attribute、validated write の server-side constraint。
- 対象 object で ACL inheritance (ACL 継承) が無効化されているか。
- Protected account/group に対する AdminSDHolder と SDProp の ACL 再適用。
- Owner の暗黙の
READ_CONTROL/WRITE_DACと、それを制限するOWNER RIGHTSSID やBlockOwnerImplicitRightsなどの例外。 - 操作に別の user right / privilege、protocol、service configuration が必要か。
- Replication delay により、変更先 DC と確認先 DC の状態が異なっていないか。
Protected Users group は Kerberos/NTLM や credential delegation の保護機能であり、一般の DACL access check を直接変更する仕組みではない。一方、AdminSDHolder / SDProp の対象となる protected account/group は ACL 継承が無効化され、ACL が定期的に template と一致するよう再設定される。
したがって、GenericAll Edge が表示されたからといって、どの object type に対しても、どの Windows version でも、あらゆる操作が必ず成功するとは限らない。
HTB でよく見る BloodHound 権限
Section titled “HTB でよく見る BloodHound 権限”オブジェクト全体への制御
Section titled “オブジェクト全体への制御”| Edge | 意味・典型的な展開 |
|---|---|
GenericAll | 対象への Full Control。対象 type に応じて password reset、member 変更、attribute 変更、DACL 変更などへ展開する |
GenericWrite | 書き込み可能な属性を利用する。通常は DACL 変更やすべての extended right までは含まない |
WriteDacl | 自分または管理下 principal に GenericAll、属性書き込み、extended right などを追加する |
WriteOwner | 自分または管理下 principal を owner にし、owner の暗黙の WRITE_DAC を経由して DACL 変更へつなぐ |
Owns | 現在 owner であり、通常は暗黙の WRITE_DAC を利用できる。ただし owner rights の制限を確認する |
AllExtendedRights | GUID で限定されない CONTROL_ACCESS に相当し、対象で定義された extended right を実行する |
WriteDacl は対象の DACL を変更できるため、攻撃経路上では別の強い権限へ昇格できる。ただし、追加する ACE の object type、継承範囲、対象 object の ACL 保護状態が正しくなければ期待した権限にならない。
WriteOwner と Owns は同じではない。前者は owner を変更できる権限、後者は現在の owner field を表す BloodHound Edge である。また、owner は既定で READ_CONTROL と WRITE_DAC を暗黙に持つが、OWNER RIGHTS ACE や Windows の owner implicit rights 制限によって、この経路が制限される場合がある。
ユーザーへの権限
Section titled “ユーザーへの権限”| Edge | 主に操作できるもの | 代表的な影響 |
|---|---|---|
ForceChangePassword | Reset Password extended right | 現在の password を知らずに reset |
WriteSPN | servicePrincipalName | Targeted Kerberoasting、SPN 構成変更 |
AddKeyCredentialLink | msDS-KeyCredentialLink | Key Trust / Shadow Credentials による PKINIT 認証経路 |
WriteAccountRestrictions | Account Restrictions property set | userAccountControl、accountExpires、RBCD 属性などの変更可能性 |
GenericWrite | 広範な非保護属性 | SPN、key credential、その他書き込み可能属性 |
GenericAll | password、property、owner、DACL、extended right | User object の Full Control |
AllExtendedRights | User に適用可能な extended right | Reset Password など |
ForceChangePassword は BloodHound が Microsoft の User-Force-Change-Password、表示名 Reset Password の extended right を攻撃可能な Edge として表現したものである。現在の password を知る必要はない。
「Change Password」と「Reset Password」は異なる。
| 操作・権限 | 現在の password | 主な利用者 |
|---|---|---|
Change Password / User-Change-Password | 原則として必要 | Account 本人 |
Reset Password / User-Force-Change-Password | 不要 | Administrator、help desk、委任された principal |
Set-ADAccountPassword でも、旧 password と新 password を指定する change と、-Reset を使う reset は別の操作として扱われる。
グループへの権限
Section titled “グループへの権限”| Edge | 内容 | Windows 上の主な根拠 |
|---|---|---|
AddMember | 任意の User、Group、Computer などを member に追加 | member attribute への WRITE_PROP |
AddSelf | 自分自身を追加・削除 | Self-Membership validated write |
GenericWrite | member を含む書き込み可能属性を変更 | Generic Write の展開 |
GenericAll | Member 変更、DACL/owner 変更を含む Full Control | Generic All の展開 |
WriteDacl | Member 変更権限などを自分に付与 | WRITE_DAC |
AddMember は対象 security group に任意の principal を追加できる関係である。追加した principal は、新しい logon token や Kerberos ticket が発行された後などに、その group に与えられた権限を利用できる。変更直後に既存 session の token が自動更新されるとは限らない。
AddSelf は Microsoft の Self-Membership validated write に対応し、自分自身の追加・削除に限定される。
BloodHound の version や古い資料では AddMembers と複数形で表記される場合があるが、本書では現行 Edge 名の AddMember を使う。
コンピューターへの権限
Section titled “コンピューターへの権限”| Edge | 関係する属性・機能 | 読み方 |
|---|---|---|
AddKeyCredentialLink | msDS-KeyCredentialLink | Computer account の key credential を追加できる |
WriteAccountRestrictions | User-Account-Restrictions property set | RBCD を含む account restriction 属性を変更できる |
AllowedToAct | msDS-AllowedToActOnBehalfOfOtherIdentity | Source principal が対象 resource への RBCD を許可済み |
ReadLAPSPassword | Legacy LAPS / Windows LAPS password data | 管理対象 local account の password を取得できる |
ReadGMSAPassword | msDS-ManagedPassword | gMSA password data を取得できる |
GenericWrite | SPN、key credential、account restriction など | 書き込み可能属性を対象別に確認する |
GenericAll | Computer object 全体 | RBCD、key credential、LAPS read などへ展開し得る |
WriteAccountRestrictions は Microsoft の User-Account-Restrictions property set への書き込みから導かれる BloodHound Edge である。この property set は User と Computer に適用され、Windows Server 2012 の定義では msDS-AllowedToActOnBehalfOfOtherIdentity も member に含まれる。
特に Computer object の同属性を書き換えると、RBCD (Resource-Based Constrained Delegation) の設定につながる。一方、AllowedToAct は「書き換える権限」ではなく、RBCD security descriptor に source principal がすでに許可されている状態を示す。
LAPS と gMSA は、製品 version、attribute、暗号化設定、authorized decryptor、ACL によって実際の取得条件が異なる。Edge を見たら、Legacy LAPS の clear-text attribute、Windows LAPS の encrypted/clear-text attribute、gMSA の managed password のどれを読めるのかまで確認する。
OU とドメインへの権限
Section titled “OU とドメインへの権限”OU または Domain object 上の権限は、その object 自体への権限と、descendant object (子孫オブジェクト) へ継承する権限を分けて読む。
OU に GenericAll (This object only) -> OU 自体の DACL や property を変更できる
OU に GenericAll (Descendant User objects) -> 継承が有効な配下 User に権限が及ぶ
OU に WriteGPLink -> gPLink を通じて GPO 適用経路へつながり得るDomain node で DCSync に関係する代表的な extended right は次の通り。
| Extended right | Rights GUID | BloodHound 表記例 | 意味 |
|---|---|---|---|
DS-Replication-Get-Changes | 1131f6aa-9c07-11d1-f79f-00c04fc2dcd2 | GetChanges | Naming Context から変更を replication する |
DS-Replication-Get-Changes-All | 1131f6ad-9c07-11d1-f79f-00c04fc2dcd2 | GetChangesAll | Secret domain data を含む replication を許可する |
DS-Replication-Get-Changes-In-Filtered-Set | 89e95b76-444d-4c62-991a-0facbeda640c | GetChangesInFilteredSet | Filtered Attribute Set の replication に関係する |
通常、BloodHound が攻撃可能な DCSync Edge を生成する中心的な組み合わせは次である。
GetChanges+GetChangesAll=DCSyncGetChanges 単独または GetChangesAll 単独は、BloodHound ではそれだけで DCSync 可能な経路として扱われない。GetChangesInFilteredSet は RODC Filtered Attribute Set や SyncLAPSPassword の評価にも関係し、通常の DCSync の中心となる 2 権限とは役割を分けて読む。
Domain object への GenericAll または対象に適用可能な AllExtendedRights は、GetChanges と GetChangesAll を含み得るため、BloodHound では DCSync へつながる。
AD CS 関連で見かける権限
Section titled “AD CS 関連で見かける権限”AD CS (Active Directory Certificate Services) では、次の異なる対象を混同しないことが重要である。
Certificate Template object の ACL / propertyEnterprise CA の AD registration objectCA service の administrative securityTemplate の発行状態と certificate issuance policy| Edge・権限 | 対象レイヤー | 内容 |
|---|---|---|
Enroll | Certificate template / Enterprise CA | Certificate enrollment を許可 |
AutoEnroll | Certificate template | Group Policy などによる自動 enrollment を許可 |
GenericAll | AD 内の template/CA-related object | 対象 AD object を広範に変更 |
GenericWrite | AD 内の template/CA-related object | Template attribute などを変更 |
WriteDacl | AD object | Template/CA-related object の DACL を変更 |
WriteOwner | AD object | Template/CA-related object の owner を変更 |
WritePKINameFlag | Certificate template | msPKI-Certificate-Name-Flag を変更 |
WritePKIEnrollmentFlag | Certificate template | msPKI-Enrollment-Flag を変更 |
EnrollOnBehalfOf | Template と enrollment agent 条件 | 別 principal のために enrollment できる関係 |
ManageCA | CA service | CA Administrator として CA 設定を管理 |
ManageCertificates | CA service | CA Officer として request の承認・拒否・失効などを管理 |
Certificate template は AD object であり、ほかの AD object と同様に ACL を持つ。CA は template に対する Enroll permission を確認し、requesting principal にその権限がなければ template に基づく certificate を発行しない。実際の enrollment では、template が Enterprise CA に publish され、requester と CA に必要な read/enroll 条件があり、issuance requirement を満たす必要がある。
ManageCA と ManageCertificates は、単に pKIEnrollmentService object に GenericAll があることと同じではない。前者は CA service 上の role/permission であり、template object の AD ACL とは別に評価する。
BloodHound は、単一 ACE をそのまま ESC4 と表示するのではなく、template の owner、DACL、generic right、属性単位の write right、template/CA configuration などを解析し、ADCSESC4 などの攻撃経路へ集約する。WritePKINameFlag 単独のように、それだけでは privilege escalation が成立せず、ほかの template flag、EKU、issuance requirement、publish/enroll 条件との組み合わせが必要な Edge もある。
「すべての権限一覧」が一意ではない理由
Section titled “「すべての権限一覧」が一意ではない理由”Active Directory には schema や製品追加によって増える attribute、property set、validated write、extended right がある。
Microsoft の標準 Extended Rights 一覧だけでも、たとえば次が含まれる。
- Reset Password。
- Change Password。
- Apply Group Policy。
- Certificate Enrollment。
- Replicating Directory Changes。
- Replicating Directory Changes All。
- Replicating Directory Changes In Filtered Set。
- Allowed to Authenticate。
- Send As。
- Receive As。
- Create Inbound Forest Trust。
- Domain Administer Server。
- Reanimate Tombstones。
管理 tool が表示名や GUID を解決するための controlAccessRight object は、Configuration naming context の次の container に登録される。
CN=Extended-Rights,CN=Configuration,<ForestRootDN>Extended right の access check 自体は CONTROL_ACCESS bit と rights GUID によって行われる。Microsoft の protocol specification によると、controlAccessRight object は administrative tool が権限を識別しやすくする表現であり、access check のために object の存在そのものが必須というわけではない。
Exchange、LAPS、AD CS、そのほか schema extension を伴う製品を導入すると、環境固有の attribute や control access right も増える。したがって、完全な一覧は対象 forest の schema と Extended-Rights container から列挙するのが確実である。
ドメイン内の拡張権限を列挙する
Section titled “ドメイン内の拡張権限を列挙する”安全な検証環境または管理目的では、次のように確認できる。
$configurationNamingContext = ( Get-ADRootDSE).configurationNamingContext
Get-ADObject ` -SearchBase "CN=Extended-Rights,$configurationNamingContext" ` -LDAPFilter "(objectClass=controlAccessRight)" ` -Properties displayName, rightsGuid, validAccesses | Sort-Object displayName | Select-Object displayName, rightsGuid, validAccesses特定の権限を探す場合は次のようにする。
Get-ADObject ` -SearchBase "CN=Extended-Rights,$configurationNamingContext" ` -LDAPFilter "(objectClass=controlAccessRight)" ` -Properties displayName, rightsGuid | Where-Object { $_.displayName -match "Password|Replication|Certificate|LAPS" } | Select-Object displayName, rightsGuidProperty set と validated write も controlAccessRight class で表現される。validAccesses を確認すると、CONTROL_ACCESS、WRITE_PROP / READ_PROP、SELF のどの種類として使われるかを区別できる。
オブジェクトの ACL を確認する
Section titled “オブジェクトの ACL を確認する”Active Directory provider を使える管理端末では、object の ACE を確認できる。
Import-Module ActiveDirectory
$targetDn = "CN=Example User,OU=Users,DC=example,DC=com"
(Get-Acl -Path "AD:\$targetDn").Access | Select-Object IdentityReference, ActiveDirectoryRights, AccessControlType, ObjectType, InheritedObjectType, InheritanceType, IsInheritedGUID を表示名へ解決しない状態では、属性限定 ACE と extended right の意味を見落としやすい。調査時は schema naming context と Extended-Rights container から GUID map を作るか、BloodHound、ADSI Edit、dsacls など複数の表示を突き合わせる。
覚える優先順位
Section titled “覚える優先順位”CPTS・HTB の観点では、まず次の順が実用的である。
GenericAllGenericWriteWriteDaclWriteOwnerOwnsAllExtendedRightsForceChangePasswordAddMember / AddSelfWriteSPNAddKeyCredentialLinkWriteAccountRestrictions / AllowedToActGetChanges + GetChangesAll -> DCSyncEnroll / AutoEnroll / ManageCA / ManageCertificates名称を覚えた後は、object type ごとの展開へ進む。
| 対象 | 最初に確認する権限・属性 |
|---|---|
| User | Password reset、SPN、key credential、account restriction、DACL |
| Group | member、Self-Membership、DACL |
| Computer | RBCD、SPN、key credential、LAPS、DACL |
| OU | ACE inheritance、descendant object type、gPLink |
| Domain | Replication extended rights、inherited ACE、AdminSDHolder |
| GPO | AD object と SYSVOL の両方の write access |
| Certificate template | Enroll、template flag、EKU、issuance requirement、publish 状態 |
| Enterprise CA | Enroll、ManageCA、ManageCertificates、CA flags |
防御・監査での読み方
Section titled “防御・監査での読み方”防御側では、GenericAll だけを検索しても強い委任を十分に検出できない。少なくとも次を含めて確認する。
WriteDaclとWriteOwner。- Owner field と
OWNER RIGHTSACE。 - GUID で限定された
WriteProperty、Self、ControlAccess。 - OU / Domain から descendant object へ継承する ACE。
- ACL inheritance が無効な object と AdminSDHolder / SDProp 対象。
member、servicePrincipalName、msDS-KeyCredentialLink、RBCD 属性の変更権限。- LAPS / gMSA secret を読める principal。
- Domain root に設定された replication extended rights。
- Certificate template と CA service の別々の ACL / role。
- Direct ACE だけでなく、nested group membership と SID history を含む effective trustee。
特に属性単位の ACE は GUI 上では目立たなくても、BloodHound では WriteSPN、AddKeyCredentialLink、WriteAccountRestrictions などの強い攻撃経路として現れる。
監査では、Edge の有無だけでなく次を記録する。
Source principal SIDTarget object GUID / DN / classAllow または DenyAccess maskObjectType GUIDInheritedObjectType GUIDInheritance flagsDirect または inheritedOwner変更が処理された DC- Kerberos Delegation と SPN Abuse
- LDAP Modify Operations
- Computer Account と gMSA Pivot
- Active Directory Recycle Bin
- Active Directory アカウント運用設計ガイド
- Certificate Auth
Microsoft
Section titled “Microsoft”- ADS_RIGHTS_ENUM enumeration: AD object の standard / generic / directory-specific access mask。
- Directory Services Access Rights: Directory service object 固有の access right。
- Control Access Rights:
CONTROL_ACCESSbit、rights GUID、Extended-Rights container の関係。 - Extended Rights: Microsoft が定義する extended right の一覧。
- Property Sets: Microsoft が定義する property set の一覧。
- Validated Writes: Self-Membership、Validated-SPN などの一覧。
- User-Force-Change-Password: Reset Password extended right。
- User-Change-Password: Change Password extended right。
- Self-Membership: 自分自身の group membership を変更する validated write。
- Member attribute: Group membership を保持する
member属性。 - Service-Principal-Name attribute:
servicePrincipalName属性の schema 定義。 - User-Account-Restrictions property set:
userAccountControlや RBCD 属性などを含む property set。 - msDS-KeyCredentialLink: Key material と usage information を保持する属性。
- msDS-AllowedToActOnBehalfOfOtherIdentity: RBCD に使われる security descriptor 属性。
- msDS-ManagedPassword: gMSA の current/previous password などを返す constructed attribute。
- Windows LAPS architecture: AD に保存する password の ACL と暗号化による保護。
- DS-Replication-Get-Changes: Naming Context の変更を replication する extended right。
- DS-Replication-Get-Changes-All: Secret domain data の replication を許可する extended right。
- DS-Replication-Get-Changes-In-Filtered-Set: Filtered Attribute Set の replication に関係する extended right。
- Blocking Implicit Owner Rights: Owner の暗黙の
READ_CONTROL/WRITE_DACと制限条件。 - Protected Accounts and Groups in Active Directory: AdminSDHolder、SDProp、ACL 継承停止。
- Certificate template concepts: Template の保存場所、version、permission の概要。
- Permissions on Templates: Template ACL と Enroll permission の評価。
SpecterOps BloodHound
Section titled “SpecterOps BloodHound”- GenericAll
- GenericWrite
- WriteDacl
- WriteOwner
- Owns
- AllExtendedRights
- ForceChangePassword
- AddMember
- AddSelf
- WriteSPN
- AddKeyCredentialLink
- WriteAccountRestrictions
- AllowedToAct
- ReadLAPSPassword
- ReadGMSAPassword
- GetChanges
- DCSync
- Traversable and Non-Traversable Edge Types:
GetChanges/GetChangesAllと post-processing されたDCSyncの関係。 - ManageCA
- ManageCertificates
- WritePKINameFlag

