AdminSDHolder در اکتیو دایرکتوری چیست؟ | راهنمای جامع

در محیطهای سازمانی مبتنی بر ویندوز، امنیت اکانتهای مدیریتی یکی از مهمترین بخشهای زیرساخت محسوب میشود. در بسیاری از حملات سایبری، مهاجم در ابتدا با یک دسترسی محدود وارد شبکه میشود و سپس تلاش میکند سطح دسترسی خود را افزایش دهد تا در نهایت کنترل کامل Domain را به دست بگیرد. مایکروسافت برای محافظت از اکانتها و گروههای حساس در Active Directory مکانیزمی به نام AdminSDHolder طراحی کرده است؛ مکانیزمی که بسیاری از مدیران شبکه آن را بهدرستی نمیشناسند و همین موضوع گاهی باعث ایجاد مشکلات امنیتی یا مدیریتی در سازمان میشود.
آنچه قراره یاد بگیریم اینجاست!
Active Directory چرا به مکانیزم محافظتی AdminSDHolder نیاز دارد؟
در Active Directory تقریباً تمام دسترسیهای شبکه متمرکز هستند، احراز هویت کاربران، مدیریت کامپیوترها، دسترسی به سرورها، اجرای Policyها، مدیریت منابع شبکه و … به همین دلیل اگر مهاجم بتواند کنترل یک اکانت مدیریتی مانند Domain Admin را به دست بیاورد، عملاً کل زیرساخت سازمان در اختیار او قرار میگیرد. مشکل اینجاست که در بسیاری از مواقع، خطر از بیرون نیست؛ بلکه از اشتباهات Permission و Delegation در داخل Domain ایجاد میشود.
برای مثال یک HelpDesk روی OU کاربران دسترسی Reset Password دارد، یکی از Domain Adminها داخل همان OU قرار گرفته و
Permissionها به صورت Inheritance یا ارثی منتقل میشوند در این حالت Help Desk میتواند پسورد Domain Admin را تغییر دهد و عملاً به سطح دسترسی بسیار بالاتری برسد. این دقیقاً همان سناریویی است که مایکروسافت برای جلوگیری از آن AdminSDHolder را طراحی کرد.
یا یک مثال دیگر، یک ادمین شبکه به صورت اشتباهی یک کاربر عادی را به گروه Domain Admins اضافه میکند و سریعا متوجه میشود اشتباه کرده است و یوزر را از این گروه حذف میکند، اما مکانیزم AdminSDHolder برای این یوزر عادی فعال میشود و دیگر گروپ پالیسی روی این یوزر تاثیر نمیذارد و اختلالاتی در شبکه ایجاد میشود. راه درست این است که ادمین علاوه بر حذف یوزر از گروه Domain Admins یک Attribute دیگر را هم باید تغییر دهد، Attributeای به نام AdminCount که مقدار آن یک شده و باید ادمین مقدار آن را صفر قرار دهد که همه چیز به روال عادی برگردد، اما به احتمال زیاد ادمین خبری از این قضیه ندارد.
AdminSDHolder چیست؟
برخلاف تصور بسیاری از افراد، AdminSDHolder یک Group نیست. AdminSDHolder در واقع یک Object امنیتی در Active Directory است که به عنوان Template امنیتی برای اکانتها و گروههای حساس عمل میکند. مسیر آن در Active Directory به شکل زیر است:
CN=AdminSDHolder,CN=System,DC=domain,DC=com
این Object شامل Security Descriptor مرجع است؛ یعنی مجموعهای از:
- ACLها
- Permissionها
- Security Settingها
- Owner
که روی اکانتهای حساس اعمال میشوند.
هدف اصلی AdminSDHolder چیست؟
هدف اصلی AdminSDHolder محافظت از اکانتهای Privileged در برابر موارد زیر است:
- Delegation اشتباه
- Permissionهای ارثبری شده
- سوءاستفاده از ACL
- حملات Privilege Escalation
- تغییرات ناخواسته روی اکانتهای مدیریتی
مهمترین اثر AdminSDHolder غیرفعال کردن Inheritance روی اکانتهای حساس است. حالا چرا این Inheritance یا ارثبری اینقدر مهمه؟ وقتی SDProp روی یک اکانت اعمال میشود مقدار Inheritance = Disabled قرار داده میشود، یعنی Permissionهای OU دیگر روی آن کاربر اعمال نمیشوند در نتیجه حتی اگر ادمین و Help Desk روی OU دسترسی داشته باشند، روی Domain Admin تاثیری نخواهد داشت.
SDProp چیست و چگونه کار میکند؟
مکانیزم اصلی اجرای AdminSDHolder توسط فرآیندی به نام SDProp انجام میشود که SDProp مخفف Security Descriptor Propagator هست. این فرآیند روی Domain Controller اجرا میشود و معمولاً هر 60 دقیقه یکبار فعالیت میکند و این اقدامات را انجام میدهد:
- لیست گروههای حساس را بررسی میکند
- اعضای این گروهها را شناسایی میکند
- ACL مربوط به AdminSDHolder را میخواند
- ACL مربوط به AdminSDHolder را میخواند
- آن را روی کاربران و گروههای Protected اعمال میکند
- Inheritance را غیرفعال میکند
گروههای Protected در Active Directory
برخی از مهمترین گروههایی که تحت محافظت AdminSDHolder قرار دارند عبارتاند از:
- Domain Admins
- Enterprise Admins
- Schema Admins
- Administrators
- Account Operators
- Backup Operators
- Print Operators
- Server Operators
هر کاربری که عضو این گروهها باشد، تحت تاثیر مکانیزم محافظتی قرار میگیرد حتی اگر عضویت به صورت Nested باشد نیز این محافظت اعمال میشود.
Nested Membership چیست؟
فرض کنید GroupA عضو Domain Admins است، User1 عضو GroupA است، در این حالت User1 نیز Protected محسوب میشود، حتی اگر مستقیماً عضو Domain Admins نباشد. Nested یعنی یک چیزی داخل یک چیز دیگر که معمولا از والد یا ریشه خودش ارثبری دارد.
Inheritance در Active Directory چیست؟
در Active Directory بسیاری از Permissionها به صورت ارثبری منتقل میشوند مثلا روی یک OU دسترسی Reset Password تعریف میشود و تمام کاربران داخل آن OU این Permission را به ارث میبرند. این موضوع برای مدیریت بسیار مفید است، اما برای اکانتهای حساس خطرناک محسوب میشود.
adminCount چیست؟
وقتی یک کاربر توسط SDProp محافظت میشود، Attribute زیر روی آن تنظیم میشود مقدار adminCount = 1 قرار داده میشود. این Attribute نشان میدهد که آن اکانت در مقطعی تحت محافظت AdminSDHolder قرار گرفته است. اما نکته مهم این است که adminCount علت اصلی محافظت نیست؛ بلکه فقط یک Flag یا نشانه محسوب میشود و نشاندهنده یا عامل اصلی، عضویت در گروههای Protected است.
چگونه کاربران Protected را شناسایی کنیم؟
یکی از سادهترین روشها استفاده از PowerShell است. این دستور تمام کاربرانی که تحت تاثیر AdminSDHolder قرار گرفتهاند را نمایش میدهد.
Get-ADUser -LDAPFilter "(adminCount=1)" -Properties adminCount |
Select Name,SamAccountName
مشاهده adminCount از طریق Active Directory Users and Computers
برای مشاهده این Attribute در محیط گرافیکی ابتدا در Active Directory Users and Computers گزینه Advanced Features را از تب View فعال کنید سپس مسیر زیر را طی کنید:
- روی User کلیک راست کنید
- وارد Properties شوید
- تب Attribute Editor را باز کنید
- Attribute مربوط به adminCount را بررسی کنید
اگر مقدار آن 1 باشد، کاربر Protected است.
چگونه متوجه شویم Inheritance غیرفعال شده است؟
مسیر زیر را بررسی کنید:
Properties → Security → Advanced
اگر دکمه Enable inheritance نمایش داده شود، یعنی Inheritance غیرفعال شده است.
یکی از مهمترین مشکلات رایج در سازمانها
یکی از رایجترین مشکلات زمانی اتفاق میافتد که کاربر قبلاً عضو Domain Admins بوده بعداً از گروه حذف شده اما adminCount همچنان باقی مانده است در این حالت: Inheritance همچنان غیرفعال است، بعضی GPOها اعمال نمیشوند، Delegationها به درستی کار نمیکنند و نرمافزارهای مدیریتی دچار مشکل میشوند.
چرا باقی ماندن adminCount خطرناک است؟
چون اکانت هنوز ساختار Permission محافظتشده دارد، در حالی که دیگر نیازی به آن نیست.این موضوع میتواند باعث مشکلاتی شود مانند:
- اعمال نشدن LAPS
- خرابی Agentهای مانیتورینگ
- مشکل در AV Deployment
- اختلال در SIEM Agent
- عدم اعمال GPO
Cleanup صحیح کاربران Protected
برای خارج کردن صحیح یک کاربر از وضعیت Protected باید چند مرحله انجام شود.
مرحله اول — حذف از گروههای حساس
ابتدا مطمئن شوید کاربر دیگر عضو گروههای Protected نیست و با یوزر این کاربر سرویس خاصی در سازمان اجرا نشده باشد. با دستور زیر در پاورشل میتوانید یک یوزر را از گروه Domain Admins حذف کنید:
Remove-ADGroupMember "Domain Admins" -Members USERNAME
Remove-ADGroupMember "Domain Admins" -Members kambiz
مرحله دوم — فعال کردن Inheritance
با طی کردن این مسیر میتوانید Inheritance را روی یک یوزر فعال کنید:
Properties → Security → Advanced → Enable inheritance
مرحله سوم — حذف adminCount
با دستور زیر میتوانید مقدار adminCount را برای یک یوزر برابر با صفر بذارید و حذف کنید. اگر دستور کار نکرد بجای اسم یوزر از DN آن استفاده کنید.
Set-ADUser USERNAME -Clear adminCount
Set-ADObject "DN-USER" -Clear adminCount
مرحله چهارم — بررسی نهایی
با اجرای این دستور در پاورشل نباید مقداری برای adminCount نمایش داده شود:
Get-ADUser USERNAME -Properties adminCount
در نهایت اگر DC دیگری در شبکه داری صبر کن تا Replication انجام شود یا به صورت اجباری با دستور زیر Replication را انجام دهید.
repadmin /syncall
اشتباه رایج مدیران شبکه
بسیاری از ادمینها فقط adminCount را حذف میکنند اما Inheritance را فعال نمیکنند در نتیجه مشکل Permission همچنان باقی میماند، GPOها همچنان Apply نمیشوند و اکانت هنوز حالت محافظتشده دارد.
پیدا کردن همه یوزرهای Protected با PowerShell
روی دومین کنترلر دستور زیر را بزنید تا لیست همه یوزرهایی که Protected شدند را نمایش دهد. اگر یوزری هست که نمیشناسید یا دسترسی ندادید حتما حذف کنید.
Get-ADUser -LDAPFilter "(adminCount=1)" -Properties adminCount |
Select Name,SamAccountName
اگر بخواهی یوزرها و گروهها رو با هم ببینی دستور زیر رو بزن.
Get-ADObject -LDAPFilter "(adminCount=1)" -Properties adminCount |
Select Name,ObjectClass
پیدا کردن یوزرهایی که اشتباهی گیر کردند و adminCount یک دارند از طریق دستور زیر مشخص میشود. اگر یوزری دیگر عضو گروه ادمین نیست ولی adminCount=1 دارد یعنی باید Cleanup شود.
Get-ADUser -LDAPFilter "(adminCount=1)" -Properties MemberOf |
Where-Object {
$_.MemberOf -notmatch "Domain Admins|Enterprise Admins|Administrators|Schema Admins|Account Operators|Backup Operators|Server Operators|Print Operators"
} |
Select Name,SamAccountName
Privilege Escalation چیست و چه ارتباطی با AdminSDHolder دارد؟
Privilege Escalation یعنی مهاجم بتواند سطح دسترسی خود را بیشتر از چیزی که مجاز است افزایش دهد. مثلا این مسیر برای یک یوزر عادی طی شود: User → Local Admin → Domain Admin
در Active Directory بسیاری از حملات دقیقاً از طریق Permissionهای اشتباه اتفاق میافتند، AdminSDHolder دقیقاً برای جلوگیری از این نوع حملات طراحی شده است.
خطرناکترین اشتباه: تغییر Permission روی AdminSDHolder
هر Permissionی که روی Object مربوط به AdminSDHolder اعمال شود، روی تمام اکانتهای Protected نیز اعمال خواهد شد. برای مثال اگر به Help Desk دسترسی Reset Password روی AdminSDHolder داده شود، HelpDesk میتواند پسورد تمام Domain Adminها را تغییر دهد این موضوع میتواند منجر به تصرف کامل Domain شود.
بررسی عضویت کاربران در گروههای حساس
برای مشاهده اعضای Domain Admins:
Get-ADGroupMember "Domain Admins"
برای مشاهده Nested Membership:
Get-ADGroupMember "Domain Admins" -Recursive
بررسی لاگ عضویت و حذف کاربران
برای مشاهده اینکه چه کسی به گروههای حساس اضافه یا حذف شده است، میتوان از Event Viewer استفاده کرد برخی Event IDهای مهم:
- 4728 → اضافه شدن به Security Global Group
- 4729 → حذف از Security Global Group
- 4732 → اضافه شدن به Local Group
- 4733 → حذف از Local Group
یک نکته خیلی مهم در سازمانها
بعضی Service Accountها عمداً adminCount=1 دارند پس اول Membership و کاربرد اکانت را بررسی کنید بعد اقدام به حذف کنید. اگر کورکورانه Cleanup کنید ممکن است سرویس Fail شود، دسترسی سرویس از بین برود و یا Backup خراب شود : مثلا اکانتهایی مانند:
- Backup Software
- Monitoring
- Veeam
- SQL Service
- SCCM
یک اسکریپت مفید برای پیدا کردن یوزرهای مشکوک که خیلی مفید است. این یوزرهایی که در خروجی نمایش داده میشود Protected هستند ولی ظاهرا دیگر ادمین نیستند.
Get-ADUser -LDAPFilter "(adminCount=1)" -Properties MemberOf |
Where-Object {
$_.MemberOf -notmatch "Domain Admins|Administrators|Enterprise Admins"
} |
Select Name,SamAccountName
بهترین روش جلوگیری ازمشکلات امنیتی
برای جلوگیری از مشکلات امنیتی در Active Directory رعایت موارد زیر ضروری است:
- تعداد Domain Adminها را حداقل نگه دارید
- از Tiering برای اکانتهای مدیریتی استفاده کنید
- Service Accountها را بیدلیل عضو گروههای حساس نکنید
- به صورت دورهای adminCount را بررسی کنید
- لاگهای امنیتی را مانیتور کنید
- روی AdminSDHolder بدون نیاز واقعی Permission اعمال نکنید
- Delegation را بهدرستی طراحی کنید
- از Least Privilege استفاده کنید
جمعبندی و خلاصه مطلب
AdminSDHolder یکی از مهمترین مکانیزمهای امنیتی در Active Directory است که وظیفه محافظت از اکانتها و گروههای حساس را بر عهده دارد. این مکانیزم با غیرفعال کردن Inheritance، اعمال ACL محافظتی و جلوگیری از Delegationهای خطرناک مانع بسیاری از حملات Privilege Escalation میشود. درک صحیح عملکرد AdminSDHolder برای هر مدیر شبکه یا کارشناس امنیت ضروری است، زیرا تنظیم اشتباه آن میتواند هم باعث ایجاد مشکلات مدیریتی شود و هم امنیت کل Domain را به خطر بیندازد.
منبع: آکادمی بامادون