بررسی حمله Kerberoasting در Active Directory
در این مقاله به بررسی حمله Kerberoasting میپردازیم؛ حملهای مخفیانه در Active Directory که با سوءاستفاده از Service Principal Names (SPNs)، هشهای بلیت TGS را استخراج و کرک کرده و منجر به افشای گذرواژههای حسابهای سرویس میشود. برخلاف AS-REP Roasting، این روش از درخواستهای مشروع Kerberos بهرهبرداری میکند.
در این مطلب، پیکربندی آزمایشگاهی، اجرای حمله با استفاده از ابزارهای Impacket، Rubeus و NXC، و نگاشت آن به تکنیک MITRE ATT&CK T1558.003 شرح داده میشود. همچنین، روشهای شناسایی (مانند Event ID 4769)، الزام به استفاده از AES، و راهکارهای کاهش مخاطره برای دفاع در برابر این تهدید پوشش داده شده است.
فهرست مطالب
- راهنمای گامبهگام Kerb-roasting
- پیشنیازها
- راهاندازی آزمایشگاه
- روش بهرهبرداری – حمله Kerberoasting (T1558.003)
- NXC
- Impacket-GetNPUsers
- targetedKerberoast
- Metasploit
- Rubeus
- Windows PowerShell – Kerberoast
- شناسایی و کاهش مخاطره
راهنمای گامبهگام Kerb-roasting
گام ۱: دسترسی مهاجم به دامنه
مهاجم ابتدا با استفاده از یک حساب کاربری معتبر و دارای سطح دسترسی پایین (Low-Privileged User) وارد دامنه میشود. برای این مرحله هیچ مجوز ویژه یا دسترسی مدیریتی نیاز نیست—هر حساب کاربری دامنه کافی است.
گام ۲: شمارشگیری از SPNs (Service Principal Names)
مهاجم دامنه را برای یافتن حسابهای سرویس که دارای SPN هستند، اسکن میکند.
این SPNها معرف سرویسهایی در شبکه هستند (مانند SQL، HTTP و غیره) و به حسابهای دامنه متصل میباشند.
گام ۳: درخواست TGS برای SPN
پس از شناسایی SPNها، مهاجم از Domain Controller (KDC) یک بلیت TGS (Ticket Granting Service) برای آن سرویسها درخواست میکند.
این بلیتها با استفاده از هش NTLM گذرواژه حساب سرویس رمزگذاری میشوند.
برای درخواست این بلیت، مهاجم نیازی به دانستن گذرواژه ندارد—تنها دانستن SPN کافی است.
گام ۴: استخراج بلیت TGS
مهاجم بلیت TGS را از حافظه یا بهصورت مستقیم با استفاده از ابزارهای تخصصی استخراج میکند.
گام ۵: کرک آفلاین بلیت TGS
بلیت TGS رمزگذاریشده بهصورت آفلاین با ابزارهایی مانند hashcat یا John the Ripper کرک میشود.
مهاجم یک حمله Brute-Force یا Dictionary اجرا میکند تا گذرواژه متنی (Plaintext Password) حساب سرویس را بازیابی کند.
از آنجایی که بلیت با هش گذرواژه حساب رمزگذاری شده است، کرک کردن بلیت معادل بهدست آوردن گذرواژه است.
گام ۶: استفاده از گذرواژه کرکشده
در صورت موفقیت، مهاجم اکنون اعتبارنامههای حساب سرویس را در اختیار دارد.
بسیاری از حسابهای سرویس دارای سطح دسترسی بالا هستند (مانند Local Admin یا حتی Domain Admin)، یا میتوانند برای حرکت جانبی در شبکه، دسترسی به پایگاه دادهها یا ارتقاء سطح دسترسی استفاده شوند.
پیشنیازها
- Windows Server 2019 به عنوان Active Directory
- Kali Linux
- ابزارها: Impacket، Metasploit، nxc، targetedKerberoast، Rubeus، PowerShell
- Windows 10/11 – به عنوان کلاینت
راهاندازی آزمایشگاه
در این پیکربندی آزمایشگاهی، یک SPN به یک حساب سرویس اختصاص داده میشود تا بستر لازم برای شبیهسازی حمله Kerberoasting فراهم گردد.
ایجاد محیط Active Directory:
برای شبیهسازی یک محیط Active Directory، به یک Windows Server بهعنوان Domain Controller (DC) و یک ماشین کلاینت (ویندوز یا لینوکس) برای اجرای ابزارهای Enumeration و Exploitation نیاز دارید.
Domain Controller:
- نصب Windows Server (ترجیحاً نسخه ۲۰۱۶ یا ۲۰۱۹)
- ارتقاء سرور به Domain Controller با افزودن سرویس Active Directory Domain Services
- راهاندازی دامنه (برای مثال: local.)
ایجاد حساب سرویس با SPN:
- بر روی Domain Controller (DC)، با استفاده از دستور setspn یک SPN به کاربر raj اختصاص دهید.
setspn -a hackingarticles/dc.ignite.local ignite.local\raj
- پارامتر -a یک SPN را به کاربر اضافه میکند.
- hackingarticles/dc.ignite.local مقدار SPN است.
- local\raj حساب سرویس میباشد.
روش بهرهبرداری – حمله Kerberoasting (T1558.003)
مهاجمان (در این سناریو، کاربر Aarti) میتوانند با درخواست بلیتهای سرویس Kerberos (TGS) برای حسابهای سرویسی که دارای SPN هستند، از آنها سوءاستفاده کنند. این بلیتها با هش NTLM گذرواژه حساب سرویس رمزگذاری میشوند. سپس مهاجم میتواند این بلیتها را بهصورت آفلاین کرک کرده و گذرواژه متنی (Plaintext Credentials) را بازیابی کند.
NXC
NXC (که پیشتر با نام CrackMapExec شناخته میشد) قابلیت اجرای فرآیند Kerberoasting را بهصورت کارآمد داراست.
nxc ldap 192.168.1.53 -u aarti -p Password@1 --kerberoasting hash.txt
علاوه بر این، با استفاده از John the Ripper و یک Dictionary مانند RockYou، مهاجم میتواند اقدام به Brute Force رمزعبورهای ضعیف نماید.
john -w=/usr/share/wordlists/rockyou.txt hash.txt
Impacket-GetNPUsers
از ماژول داخلی Impacket با نام GetUserSPNs.py استفاده کنید. این یک اسکریپت Python است که وظیفه شناسایی SPN، استخراج TGS و Dump کردن هش سرویس را انجام میدهد. این عملیات با استفاده از دستور زیر قابل انجام است.
impacket-GetUserSPNs -request -dc-ip 192.168.1.53 ignite.local/aarti:Password@1
سپس، هش سرویس Dump خواهد شد و با استفاده از یک Dictionary میتوان آن را Brute Force کرده و رمزهای عبور سرویس را استخراج نمود.
targetedKerberoast
targetedKerberoast یک اسکریپت Python است که میتواند هشهای مربوط به Kerberoast را برای حسابهای کاربری که دارای SPN تنظیمشده هستند، نمایش دهد.
مخزن را Clone کرده و نصب کنید:
git clone https://github.com/ShutdownRepo/targetedKerberoast.git cd targetedKerberoast
حمله را اجرا کنید:
Metasploit
سادهترین روش برای Enumerate کردن حسابهای قابل انجام Kerberoasting، استفاده از ماژول auxiliary/gather/get_user_spns است که بهصورت داخلی از Impacket بهره میبرد. این ماژول بهطور خودکار LDAP را برای یافتن SPNهای قابل Kerberoast جستوجو کرده و یک Kerberos Service Ticket درخواست میکند که ممکن است با یک رمز عبور ضعیف رمزگذاری شده باشد و قابلیت Brute Force شدن را داشته باشد.
use auxiliary/gather/get_user_spns set rhosts 192.168.1.53 set domain ignite.local set user aarti set pass Password@1 run
Windows
Rubeus
Rubeus.exe یک ابزار بسیار قدرتمند است که دارای ماژول Kerberoast میباشد. این ماژول قادر است SPN را شناسایی کرده، TGS را استخراج نموده و هش سرویس را Dump کند. این عملیات با استفاده از دستور زیر قابل انجام است.
./Rubeus.exe kerberoast /outfile:hash.txt
Windows PowerShell – Kerberoast
میتوانید فایل Kerberoast.ps1 را دانلود کنید؛ این یک اسکریپت PowerShell است که مشابه ماژول فوق عمل کرده و SPN را شناسایی میکند، TGS را استخراج کرده و هش سرویس را Dump مینماید. این عملیات با استفاده از دستور زیر قابل انجام است.
Powershell -ep bypass Import-Module .\Invoke-kerberoast.ps1 Invoke-kerberoast
Detection
شناسایی Kerberoasting اهمیت بالایی دارد، زیرا مهاجمان بهصورت مخفیانه Service Ticketها را درخواست میکنند و سپس میتوانند آنها را بهصورت آفلاین کرک کنند.
کلید شناسایی در Windows Event ID: 4769
مواردی که باید در Event ID 4769 بررسی شود:
- Ticket Encryption Type: اغلب مقدار ۰x17 (RC4) — که سادهترین نوع برای کرک کردن است.
- Account Name: بررسی نامهای غیرمعمول حسابهای سرویس یا کاربران با ارزش بالا.
- Service Name (SPN): شناسایی SPNهای نادر یا با سطح دسترسی بالا که نباید بهطور مکرر مورد دسترسی قرار گیرند.
- Client Address: اگر درخواستهای TGS از ماشینها یا کاربران غیرمجاز یا غیرمعمول ارسال شوند، ممکن است نشانهای از فعالیت مشکوک باشد.
این شاخصها میتوانند بیانگر فعالیت Kerberoasting باشند، بهویژه اگر از طرف حسابهای با سطح دسترسی پایین درخواست Ticket برای حسابهای سرویس انجام شود.
Mitigation
حفاظت از محیط Active Directory در برابر Kerberoasting شامل بهبود Password Hygiene، پیکربندی SPN و پایش مستمر است.
- استفاده از رمزعبورهای قوی و پیچیده: اطمینان حاصل کنید که حسابهای سرویس (بهویژه آنهایی که دارای SPN هستند) از رمزهای طولانی، تصادفی و یکتا استفاده میکنند. از تکرار رمزها یا استفاده از واژههای Dictionary خودداری کنید.
- تعویض منظم رمزها: تغییرات زمانبندی شده رمز برای حسابهای سرویس، بهویژه آنهایی که به SPN مرتبط هستند، اعمال شود.
- استفاده از Managed Service Accounts (gMSA): این حسابها بهصورت خودکار مدیریت رمزهای پیچیده و تعویض آنها را انجام میدهند و ریسک را بهطور قابل توجهی کاهش میدهند.
- اجتناب از استفاده از حسابهای با دسترسی بالا برای سرویسها: SPN را به Domain Admin یا سایر حسابهای با امتیاز بالا اختصاص ندهید. برای سرویسها از حسابهای جداگانه با حداقل دسترسی استفاده کنید.
- غیرفعال کردن رمزنگاری RC4: اعمال رمزنگاری قویتر (AES128: 0x11، AES256: 0x12) از طریق Group Policy.
- پایش مستمر Event ID 4769: استفاده از ابزارهای SIEM یا اسکریپتها برای هشداردهی در صورت درخواستهای غیرمعمول TGS.