攻撃者が、たとえば 攻撃パスを悪用して 特権の資格情報を侵害した場合、ドメイン内での足場を失わないようにしたいと考えます。つまり、侵害したアカウントが無効化されたり、パスワードがリセットされたりしても、Domain Admin の権限を簡単に取り戻せるようにしたいのです。
この持続性を実現する方法の1つは、特権アカウントを保護するために用意された Active Directory の機能(AdminSDHolder と SDProp)を悪用することです。この記事では、この戦術がどのように機能するのか、そしてそれに対してどのように防御するかを説明します。
AdminSDHolder と SDProp とは何ですか?
AdminSDHolder は、すべての Active Directory ドメイン に存在する特殊な目的のコンテナーです。AdminSDHolder オブジェクトのアクセス制御リスト(ACL)がテンプレートとして使われ、Active Directory のすべての保護 グループ およびそのメンバーに権限をコピーします。(保護グループ とは、Domain Admins、Administrators、Enterprise Admins、Schema Admins を含め、追加のセキュリティが必要であると特定された組み込みグループのことです。)
既定では、SDProp プロセスは 60 分ごとに AdminSDHolder オブジェクトの ACL をすべての保護グループおよびそのメンバー ユーザーに適用します。AdminSDHolder の ACL は非常に厳格であるように設計されているため、このプロセスは通常、セキュリティの強化に役立ちます。
しかし、攻撃者が AdminSDHolder の ACL を変更すると、その変更されたアクセス許可が代わりにすべての保護オブジェクトに自動的に適用されます。たとえば、攻撃者は AdminSDHolder の ACL に自分が管理するユーザー アカウントを追加し、完全な制御権限を付与する可能性があります:
管理者が特定の保護オブジェクトで不適切な権限を見つけて削除しても、SDProp プロセスが1時間以内に変更された ACL をそのまま再適用します。その結果、この戦略は攻撃者が機密情報にアクセスするのに役立ちます。
AdminCount を使用してリスクを評価する
AdminCount は Active Directory オブジェクトの属性です。AdminCount の値が 1 の場合、そのオブジェクトが(または過去に)少なくとも 1 つの保護グループのメンバーであることを示します。したがって、AdminCount 値 1 のすべてのオブジェクトを確認することで、AdminSDHolder への攻撃が環境にどれほど広く及び得るかの目安を得られます。
この分析は、PowerShell と LDAP フィルター操作を使えば簡単に実行できます。:
$ldapFilter = “(adminCount=l)”
$domain = New-Object System.DirectoryServices.DirectoryEntry
$search = New-Object System.DirectoryServices.DirectorySearcher
$search.SearchRoot = $domain
$search.PageSize = 1000
$search.Filter = $ldapFilter
$search.SearchScope = “Subtree”
$results = $search.FindAll()
foreach ($result in $results)
{
SuserEntry = $result.GetDirectoryEntry()
Write-host “Object Name = “ $userEntry.name
Write-host “Obect Class = “ $userEntry.objectClass
foreach($AdminCount in $userEntry.adminCount)
{
Write-host “AdminCount =” $AdminCount
Write-host “”
}
}
注意すべき点は、ユーザーが特権グループから削除されても、その AdminCount 値は 1 のまま残ることです。 ただし Active Directory では、そのユーザーはもはや保護オブジェクトとは見なされないため、AdminSDHolder の ACL は適用されません。それでも、AdminSDHolder 権限で保護されていた時点の名残として、権限の継承が無効のままになっている可能性が高いため、AdminSDHolder 権限のバージョンが引き続き設定された状態になっていることが考えられます。したがって、これらのオブジェクトを確認し、ほとんどの場合で権限の継承を有効にすることが有益です。
AdminSDHolder の悪用からの保護
管理権限を持つユーザーのみが AdminSDHolder ACL を変更できるため、この持続化(persistence)戦術から保護する最善の方法は、管理者の認証情報が侵害されるのを防ぐことです。
さらに、管理者アカウントが侵害された場合は、AdminSDHolder オブジェクトを監視し、変更があればアラートを受け取ることが重要です。変更は決して起こるべきではないため、あらゆるアラートは直ちに調査して元に戻す価値があります。
また、AdminCount 値が 1 のオブジェクトについて、定期的にレポートすることも重要です。そのようなオブジェクトのうち、管理権限を持つべきでないものがある場合は、正しい場所に配置し、権限を継承していることを確認してください。
Netwrix はどのように支援できますか
Netwrix Active Directory Security Solution は、AdminSDHolder と SDProp を悪用する攻撃に対する防御に向けた組織の取り組みを支援できます。具体的には、次のことができます:
- 特権アカウントが侵害されないように保護し、AdminSDHolder を変更するために悪用できないようにします。
- 身元(Identity)の侵害を示す疑わしい挙動を迅速に検知します。
- AdminSDHolder オブジェクトを監視し、変更があればアラートを受け取ります。
- 侵害された認証情報による被害を抑えるため、過剰な権限を特定して削除します。
- リアルタイムのアラートと詳細なレポートを通じて、Active Directory 環境で行われた変更を常に把握します。
よくある質問
AdminSDHolder とは何ですか?
AdminSDHolder は、各 Active Directory ドメインに作成されるコンテナー オブジェクトです。その ACL は、ドメイン内のすべての保護グループとそのメンバーに自動的に適用されます。
AdminSDHolder はどこにありますか?
AdminSDHolder コンテナーは、System コンテナー(CN=System)にあります。Active Directory Users and Computers(ADUC)の管理コンソールで「高度な機能」を有効にすると確認できます。
AdminCount とは?
AdminCount は AD オブジェクトの属性です。AdminCount の値が 1 の場合、そのオブジェクトが(または過去に)少なくとも 1 つの保護されたグループのメンバーであることを示します。
共有する
もっと詳しく
著者について
Jeff Warren
チーフ・プロダクト・オフィサー
Jeff Warren は Netwrix のプロダクトポートフォリオを統括しており、安全に重点を置いたプロダクトマネジメントおよび開発の分野で10年以上の経験を持ちます。Netwrix に入社する前、Jeff は Stealthbits Technologies にてプロダクト組織を率いていました。そこで彼はソフトウェアエンジニアとしての経験を活かし、革新的でエンタープライズ規模のセキュリティソリューションの開発に取り組みました。手を動かす実践的なアプローチと、難しいセキュリティ課題を解決するのが得意な点を強みに、Jeff は「実際に機能する」実用的なソリューションの構築に注力しています。彼はデラウェア大学(University of Delaware)で情報システム(Information Systems)の学士号を取得しています。