GPP (Group Policy Preferences) là gì?
Group Policy Preferences (GPP) là mở rộng của Group Policy (GPO) trong Active Directory, cho phép quản trị viên cấu hình các tùy chọn "không bắt buộc" (preferences) cho người dùng/máy tính tham gia domain. Khác với Policy (bắt buộc, áp dụng lại định kỳ), Preference chỉ áp dụng một lần (hoặc theo lịch) và người dùng có thể thay đổi cục bộ.
GPP vs GPO (Group Policy Object)
| Đặc điểm | Group Policy (Policy) | Group Policy Preferences (Preference) |
|---|---|---|
| Tính chất | Bắt buộc (Mandatory) | Tùy chọn / Mặc định (Optional/Default) |
| Áp dụng lại | Mỗi 90-120 phút (Background refresh) | Chỉ khi GPO áp dụng (logon/startup/refresh) - không ép buộc lại nếu user đổi |
| User có thể ghi đè | Không (Winlogon/GPO client enforce) | Có (User có quyền local admin có thể đổi) |
| Lưu trữ | Registry.pol (Sysvol) | XML files trong Sysvol (\ |
| Ví dụ | Password policy, Screen saver, Disable CMD | Map drive, Shortcut, Printer, Local user/group, Scheduled task, Local Admin Password |
Rủi ro bảo mật nghiêm trọng: GPP Password (CPassword)
Cơ chế lưu trữ mật khẩu trong GPP
- Khi tạo GPP tạo user local / đổi pass local admin / map drive với credential, mật khẩu được lưu trong file XML trong SYSVOL (được replicate đến mọi Domain Controller).
- Mật khẩu được mã hóa bằng AES-256 với khóa công khai (Public Key) - NHƯNG khóa riêng (Private Key) được Microsoft công bố công khai (trong tài liệu MSDN/MS14-025).
- => Bất kỳ Domain User nào có quyền đọc SYSVOL (mặc định: Authenticated Users) đều có thể tải file XML, giải mã, lấy được mật khẩu plaintext.
Ví dụ file Groups.xml chứa cpassword
<Groups clsid="{3125E937-EB16-4b4c-9934-544FC6D24D26}">
<User clsid="{DF5F1855-51E5-4d24-8B1A-D9BDE98BA1D1}" name="LocalAdmin" image="2" changed="2024-01-15 10:30:00" uid="{GUID}">
<Properties action="U" newName="" fullName="" description="" cpassword="J1XeT...base64...AQ==" changeLogon="0" noChange="0" neverExpires="1" acctDisabled="0" subAuthority="RID_ADMIN" userName="LocalAdmin" />
</User>
</Groups>
Trường cpassword (không phải "password" - spelling đúng) chứa mật khẩu được mã hóa AES-256 với khóa công khai Microsoft.
Khai thác GPP Password (Post-Exploitation)
Công cụ tự động hóa
- Metasploit:
post/windows/gather/credentials/gpp- Tự động tìm, tải, giải mã cpassword từ SYSVOL. - PowerSploit / PowerView:
Get-GPPPassword,Get-GPPAutologon. - CrackMapExec (CME):
cme smb.-u 'user' -p 'pass' --gpp - Impacket:
gpprefdecrypt.py(giải mã thủ công). - BloodHound: Thu thập GPP data, hiển thị trong graph (GPPPassword edge).
Quy trình khai thác thủ công
- Kết nối domain (có user domain bất kỳ).
- Truy cập SYSVOL:
\\domain.com\SYSVOL\domain.com\Policies\. - Tìm file XML trong:
Machine\Preferences\Groups\Groups.xml,User\Preferences\Groups\Groups.xml,DataSources\DataSources.xml,Printers\Printers.xml,Drives\Drives.xml,ScheduledTasks\ScheduledTasks.xml. - Tìm thuộc tính
cpassword(Base64 encoded). - Giải mã bằng công cụ (AES-256 với khóa public Microsoft).
- Thu được mật khẩu plaintext của Local Admin / Service Account / SQL SA / v.v.
MS14-025: Bản vá bảo mật Microsoft (2014)
- CVE-2014-1812 (GPP Password Vulnerability).
- Sau bản vá: Ngăn chặn tạo mới GPP với cpassword (UI không cho nhập pass cho Local User/Group trong GPP).
- Không xóa cpassword hiện có - quản trị viên phải tự dọn dẹp.
- Khuyến nghị: Dùng LAPS (Local Administrator Password Solution) thay thế.
Phòng thủ và Khắc phục (Remediation)
- Kiểm tra toàn bộ GPO: Tìm tất cả file XML trong SYSVOL có chứa
cpassword.PowerShell: Get-ChildItem -Path "\\domain.com\SYSVOL\domain.com\Policies\" -Recurse -Filter "*.xml" | Select-String "cpassword" - Xóa cpassword: Sửa file XML (xóa thuộc tính cpassword) HOẶC xóa GPP setting đó > GPUpdate.
- Đổi mật khẩu tài khoản bị lộ: Bắt buộc đổi pass cho tất cả Local Admin / Service Account từng từng bị lưu trong GPP.
- Triển khai LAPS (Microsoft LAPS / Windows LAPS):
- Quản lý mật khẩu Local Admin duy nhất, ngẫu nhiên, phức tạp cho mỗi máy.
- Lưu trữ an toàn trong AD Attribute (msLAPS-Password) - chỉ Domain Admin đọc được.
- Tự động xoay vòng (rotate) mật khẩu định kỳ.
- GPO Hardening:
- Giới hạn quyền đọc SYSVOL (Authen Users vẫn cần đọc GPO bình thường - cân nhắc).
- Audit GPO changes (Event ID 5136, 5137, 5138, 5139, 5141).
- Không bao giờ dùng GPP để lưu mật khẩu (Local user, Service account, SQL SA, Scheduled task credential, Drive map credential).
LAPS - Giải pháp thay thế chuẩn Microsoft
| Đặc điểm | GPP (Cũ, nguy hiểm) | LAPS (Mới, an toàn) |
|---|---|---|
| Lưu trữ mật khẩu | SYSVOL (XML, AES-256 với public key) | AD Attribute (msLAPS-Password), ACL chặt chẽ |
| Ai đọc được | Mọi Domain User (Authenticated Users) | Chỉ Domain Admins / LAPS Admins (delegate) |
| Mật khẩu | Tĩnh, thường yếu, dùng chung nhiều máy | Ngẫu nhiên, phức tạp, duy nhất mỗi máy, tự rotate |
| Quản trị | Handmade, dễ quên, không audit | Tích hợp AD, GUI/PS, Event log, Reporting |
Tóm tắt
GPP cpassword là lỗ hổng nghiêm trọng (CVE-2014-1812) cho phép bất kỳ Domain User nào leo quyền thành Local Admin trên máy có GPP push mật khẩu. Mặc dù Microsoft đã chặn tạo mới (MS14-025), hàng nghìn domain vẫn còn GPP cũ chứa cpassword. Phải dọn dẹp ngay: Tìm cpassword > Giải mã > Đổi pass > Xóa cpassword > Triển khai LAPS.