جدول محتوا
Active Directory Replication چیست؟
Domain Controllerها یا به اختصار DCها ستونهای محیط Active Directory هستند و سازمانها اغلب چندین DC برای یک Active Directory در نظر میگیرند تا دسترسپذیر بودن این سرویس را تا حد ممکن تضمین کنند. برخی از سازمانهای بزرگ نیز از چندین DC در سایتهای مختلف زیرساخت خود بهره میبرند تا احراز هویت کاربران و سایر سیاستها در هر سایت به صورت محلی انجام شود. بنابراین با توجه به اینکه چندین DC در سازمان وجود دارد مهم است که هر DC از آخرین تغییرات ایجاد شده در محیط Active Directory آگاه باشد. به همین منظور با استفاده از Microsoft Directory Replication Service Remote Protocol (MS-DRSR) تمام DCهای شبکه با Active Directory همگام میشوند. به این فرایند Active Directory Replication گفته میشود.معرفی و بررسی حملهی DCSync
DCSync نام تکنیکی است که برای استخراج اطلاعات احراز هویت (شامل نام کاربری و NTLM متناظر با آن) از DCها کاربرد دارد. ساختار کلی این حمله به این صورت است که یک DC جعلی را به AD اضافه کرده و سپس با بهرهگیری از فرآیند Active Directory Replication برای همگامسازی DC جعلی خود با Active Directory بهره میبریم. به عبارت دیگر در این حمله از پروتکل MS-DRSR و تابع GetNCChanges درخواست Replication به Active Directory ارسال میکنیم و در پاسخ به این درخواست، DC اصلی دادههایی که شامل NTLM کاربران نیز میشود را به ما بر میگرداند. این تکنیک در ابزار Mimikatz در آگوست 2015 توسط بنجامین دلپی و وینسنت لتوکس اضافه شده است. برای اجرای حملهی DCSync ما به دسترسیهای زیر بر روی Domain Object نیاز داریم:- Replicating Directory Changes (DS-Replication-Get-Changes)
- Replicating Directory Changes All (DS-Replication-Get-Changes-All)
- Replicating Directory Changes In Filtered Set (DS-Replication-Get-Changes-In-Filtered-Set) (this one isn’t always needed but we can add it just in case)
#Get all permissions in the domain, filtered to the two critical replication permissions represented by their GUIDs
Import-Module ActiveDirectory
cd 'AD:DC=ehsan,DC=local'
$AllReplACLs = (Get-AcL).Access | Where-Object {$_.ObjectType -eq '1131f6ad-9c07-11d1-f79f-00c04fc2dcd2' -or $_.ObjectType -eq '1131f6aa-9c07-11d1-f79f-00c04fc2dcd2'}
#Filter this list to RIDs above 1000 which will exclude well-known Administrator groups
foreach ($ACL in $AllReplACLs)
{
$user = New-Object System.Security.Principal.NTAccount($ACL.IdentityReference)
$SID = $user.Translate([System.Security.Principal.SecurityIdentifier])
$RID = $SID.ToString().Split("-")[7]
if([int]$RID -gt 1000)
{
Write-Host "Permission to Sync AD granted to:" $ACL.IdentityReference
}
}
در این مقاله 2 سناریو بررسی خواهد شد: برای انجام حملهي DCSync سناریوهای متعددی وجود دارد که ما در این مقاله 2 سناریوی پرکاربرد را بررسی کردهایم. سناریوی اول: فرض میکنیم که Hash مربوط به یک حساب کاربری عضو گروه Domain Admins را داریم. سناریوی دوم: فرض میکنیم یک User Credential داریم که بر روی Domain Object دسترسی WriteDACL را دارد. سناریوی اول در این سناریو فرض میکنیم که از قبل به یک حساب کاربری عضو گروه Domain Admins دسترسی پیدا کردهایم. در محیط آزمایشگاهی فرضی ما، مطابق تصویر زیر کاربری به نام Ali.Mohseni وجود دارد که عضو گروه Domain Admins است. بنابراین اکنون میتوانیم حملهی OverPass-The-Hash را با استفاده از اسکریپت پاورشل Invoke-Mimikatz انجام دهیم و یک کنسول پاورشل جدید با دسترسی کاربر Ali.Mohseni باز کنیم. در کنسول پاورشل جدیدی که باز شده است میتوانیم با استفاده از اسکریپت Invoke-Mimikatz حملهی DCSync را انجام دهیم. همانطور که در تصویر بالا مشاهده میکنید توانستیم با موفقیت حملهی DCSync را انجام دهیم و Hash اکانت krbtgt را بدست آوریم. سناریوی دوم فرض میکنیم که از قبل پسورد کاربری را به صورت Clear text به دست آوردهایم که دسترسی لازم برای انجام WriteDACL را دارد. در محیط آزمایشگاهی ما کاربری به نام Reza.Moradi تعریف شده که همانطور که در تصویر زیر مشاهده میکنید دسترسی WriteDACL را روی Domain Object دارد. حالا از اسکریپت PowerView برای اعطای حق دسترسی DCSync به کاربر دیگری به نام user.test استفاده خواهیم کرد. در ادامه با استفاده از دستور زیر فرایند Enumerate کردن دسترسیهای کاربر user.test را انجام داده و مشاهده میکنیم که کاربر user.test دسترسیهای لازم برای DCSync را داراست. در انتها میتوانیم اسکریپت Invoke-Mimikatz را مانند سناریوی قبل در یک کنسول پاورشل جدید که از طریق تکنیک OverPass-The-Hash با اعتبار کاربر user.test باز میکنیم را بارگذاری کرده و حملهی DCSync را با موفقیت انجام دهیم. به این نکته توجه داشته باشید که ابزارهای مختلفی برای اجرای حملهی DCSync وجود دارد. مانند: همچنین شما میتوانید ابزار مخصوص به خود را برای اجرای این حمله پیادهسازی کنید.شناسایی حملهی DCSync
برای شناسایی حملهی OverPass-The-Hash ، حملات مبتنی بر ACL و حملهی DCSync، نیاز است تا ابتدا یکسری تنظیمات بر رویDomain Group Policy در قسمت Advanced Audit Policy Configuration مطابق گامهای زیر انجام دهیم.- Login to Domain Controller
- Open Group Policy Management Console
- Expand the Domain Object
- Expand the Group Policy Objects
- Right click on the Default Domain Policy and click on Edit (The policy that is applied to all the domain computers. It may differ in your environment)
- Follow the below path to enable Audit Logon events. Computer Configuration --> Windows Settings --> Security Settings --> Advanced Audit Policy Configuration --> Audit Policies --> Logon/Logoff --> Audit LogonComputer Configuration --> Windows Settings --> Security Settings --> Advanced Audit Policy Configuration --> Audit Policies --> DS Access --> Audit Directory Service AccessComputer Configuration --> Windows Settings --> Security Settings --> Advanced Audit Policy Configuration --> Audit Policies --> DS Access --> Audit Directory Service Changes
- Select "Configure the following audit events:" Checkbox
- Select Success & Failure Checkbox
شناسایی OverPass-The-Hash در Splunk
با استفاده از درخواست زیر میتوان تکنیک OverPass-The-Hash را شناسایی کرد.index=wineventlog sourcetype="WinEventLog:Security" AND Logon_Type=9 AND EventCode=4624 AND Logon_Process=seclogo | table _time ComputerName Account_Name EventCode Logon_Type Logon_Process
در دستور بالا ما به دنبال EventID 4624 هستیم که حاوی longon_Type 9 و logon_process seclogo است. این EventID زمانی ایجاد میشود که یک Logon Session ایجاد شده باشد. همینطور در زمان اجرای تکنیک OverPass-The-Hash، Mimikatz سعی میکند به پراسس Lsass دسترسی پیدا کند. دستور زیر را اجرا کنید تا تشخیص دهید آیا پراسس Lsass با دسترسیهای خاصی توسط Mimikatz برای استخراج Credentialهای ماشین اجرا شده است؟index=wineventlog sourcetype="WinEventLog:Microsoft-Windows-Sysmon/Operational" AND EventCode=10 AND GrantedAccess IN ("0x143A","0x1010","0x1038") AND TargetImage="C:Windowssystem32lsass.exe" | table _time ComputerName EventCode SourceImage TargetImage GrantedAccess
در ادامه با اسکریپت Get-SysmonAccessMask میتوانیم متوجه شویم که Mimikatz با چه سطح دسترسیهایی بر روی فضای حافظه از پراسس lsass.exe دسترسی گرفته است.شناسایی حملهی Detect DCSync با Splunk
میتوانیم با اجرای درخواست زیر حملهی DcSync را شناسایی کنیم.index=wineventlog sourcetype="wineventlog:security" EventCode=4662 AND Properties="Control Access" AND Message IN (*"1131f6aa-9c07-11d1-f79f-00c04fc2dcd2"*,*"1131f6ad-9c07-11d1-f79f-00c04fc2dcd2"*,*"89e95b76-444d-4c62-991a-0facbeda640c"*)
GUIDهایی که در دستور بالا فیلتر کردهایم درواقع GUIDهای مربوط به دسترسیهای Replication هستند که برای اجرای حملهی DCSync مورد نیاز هستند.Detect ACL Modification
همچنین میتوانیم از درخواست زیر برای شناسایی تغییرات ACL که برای کاربر user.test توسط اکانت کاربری Reza.Moradi انجام شده است، استفاده کنیم. همچنین میتوان مقدار NtSecurityDescriptor را با استفاده از دستور ConvertFrom-SddlString در پاورشل به اصطلاح ترجمه کرد تا جزییات بیشتری را بدست آوریم. یک نکتهی مهم این که دستور ذکر شده نمیتواند دسترسیهای مورد نیاز Replication را به صورت مستقیم به ما نمایش دهد. در واقع مانند شکل زیر، در خروجی این دستور همواره مقدار WriteAttributes را مشاهده میکنیم.منابع:
- https://www.alteredsecurity.com/post/a-primer-on-dcsync-attack-and-detection
- https://attack.stealthbits.com/privilege-escalation-using-mimikatz-dcsync
- https://stealthbits.com/blog/extracting-user-password-data-with-mimikatz-dcsync
- https://gist.github.com/gentilkiwi/dcc132457408cf11ad2061340dcb53c2
- https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2003/cc772673(v=ws.10)
- https://adsecurity.org/?p=1729
- https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/abusing-active-directory-acls-aces
- https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Recon/PowerView.ps1
- https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/convertfrom-sddlstring?view=powershell-5.1
- https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Exfiltration/Invoke-Mimikatz.ps1