Mục tiêu chương / Learning objectives
- Mô tả kiến trúc Active Directory: Domain, OU, GPO và vai trò bảo mật của từng thành phần.
- Phân tích và cấu hình quyền NTFS bao gồm kế thừa (inheritance) và quyền hiệu lực (effective permissions).
- Thiết lập chính sách mật khẩu và chính sách kiểm toán qua Local Security Policy và auditpol.
- Giải thích vai trò bảo mật của Windows Services và registry — nhận diện persistence mechanism.
- Đọc và phân tích Security Event Log với các Event ID quan trọng: 4624, 4625, 4688, 4698, 4720, 4732.
- Sử dụng PowerShell Remoting để quản trị và kiểm toán từ xa một cách an toàn.
1. Lý thuyết cốt lõi / Core theory
1.1. Kiến trúc Active Directory / Active Directory architecture
Active Directory (AD) là dịch vụ thư mục của Microsoft, lưu trữ và quản lý toàn bộ đối tượng trong mạng doanh nghiệp: tài khoản người dùng, máy tính, nhóm, chính sách. Cấu trúc logic của AD gồm ba cấp: Forest (ranh giới bảo mật lớn nhất) → Domain (đơn vị quản lý chính, vd: corp.company.com) → Organizational Unit / OU (đơn vị tổ chức để áp GPO và phân cấp quản trị).
Group Policy Object (GPO) là công cụ áp dụng chính sách hàng loạt cho tập hợp máy/người dùng thông qua OU. GPO có thể kiểm soát: cài đặt bảo mật, script khởi động, cấu hình phần mềm, tắt USB, giới hạn ứng dụng (AppLocker)...
Khái niệm then chốt — Privileged Accounts: AD phân biệt tài khoản thường và tài khoản đặc quyền cao (Domain Admins, Enterprise Admins, Schema Admins). Chiến lược tấn công phổ biến nhất là Pass-the-Hash và Kerberoasting — nhắm vào việc leo thang đặc quyền trong AD. Tier Model (Microsoft) khuyến nghị tách biệt tài khoản admin theo 3 cấp để hạn chế lateral movement.
1.2. Phân quyền NTFS / NTFS permissions
NTFS (New Technology File System) hỗ trợ phân quyền chi tiết ở cấp file/folder thông qua Access Control List (ACL). Mỗi đối tượng có một Discretionary ACL (DACL) — danh sách các Access Control Entry (ACE) xác định ai được phép làm gì. Quyền NTFS cơ bản: Read (R), Write (W), Execute (X), Delete (D), Full Control (F).
Hai khái niệm quan trọng: Inheritance — quyền từ folder cha tự động áp xuống file/folder con (có thể chặn); Effective Permissions — quyền thực tế của một người dùng = hợp (union) của tất cả quyền trực tiếp + quyền từ các nhóm mà người đó là thành viên. DENY luôn ghi đè ALLOW.
Lưu ý bảo mật — NTFS vs Share permissions: Khi truy cập qua mạng, quyền hiệu lực = quyền hạn chế hơn giữa NTFS permission và Share permission. Một lỗi phổ biến là cho Share permission = Full Control rồi chỉ kiểm soát bằng NTFS — điều này đúng nhưng cần nhất quán. Luôn dùng nguyên tắc đặc quyền tối thiểu (least privilege).
1.3. Local Security Policy & Chính sách kiểm toán / Security policy & audit policy
Local Security Policy (secpol.msc) cho phép cấu hình bảo mật cục bộ trên máy Windows, bao gồm: Password Policy (độ dài tối thiểu, độ phức tạp, thời gian hết hạn, lịch sử mật khẩu), Account Lockout Policy (khóa tài khoản sau N lần đăng nhập sai), User Rights Assignment (ai được logon locally, từ xa, shutdown...).
Audit Policy xác định sự kiện nào được ghi vào Security Event Log. Các danh mục quan trọng: Logon Events (đăng nhập thành công/thất bại), Account Management (tạo/xóa tài khoản, thêm vào nhóm), Process Creation (theo dõi tiến trình được tạo), Object Access (truy cập file/registry). Thiếu audit policy phù hợp = mù quáng trong điều tra sự cố.
1.4. Windows Services & Registry Security / Services & registry security
Windows Services là các tiến trình chạy ngầm, khởi động cùng hệ thống, thường với đặc quyền cao (SYSTEM, NETWORK SERVICE). Từ góc nhìn bảo mật: malware thường tự đăng ký thành service để đảm bảo persistence — tự khởi động lại sau reboot. Registry chứa cấu hình toàn hệ thống, bao gồm các khóa autorun (HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run) thường bị lợi dụng làm persistence mechanism.
1.5. Event Log & Event ID quan trọng / Event log & key event IDs
Security Event Log (eventvwr.msc → Windows Logs → Security) là nguồn bằng chứng số hàng đầu trong điều tra sự cố. Các Event ID phải thuộc lòng:
1.6. PowerShell Remoting / PowerShell remoting basics
PowerShell Remoting (PSRemoting) cho phép chạy lệnh PowerShell trên máy từ xa thông qua giao thức WinRM (Windows Remote Management) — mã hóa bằng TLS/HTTPS trên cổng 5986. Lệnh cơ bản: Enter-PSSession (phiên tương tác) và Invoke-Command (chạy lệnh hàng loạt trên nhiều máy).
Từ góc nhìn bảo mật: PSRemoting cần được kích hoạt có kiểm soát (chỉ admin được dùng, log đầy đủ qua Script Block Logging và Module Logging). Đây cũng là kỹ thuật lateral movement phổ biến của attacker khi đã có credential admin — do đó cần giám sát WinRM traffic và kích hoạt PowerShell Transcription.
2. Bài thực hành / Hands-on labs
Lab 1 — Kiểm toán Active Directory & Phân quyền NTFS qua PowerShell
OS: Windows Server 2022 (Domain Controller hoặc máy join domain với RSAT) · Tool: PowerShell 7 + RSAT (Remote Server Administration Tools)
- Cài RSAT nếu chưa có (trên Windows 11):
Add-WindowsCapability -Online -Name "Rsat.ActiveDirectory*" - Thực hiện kiểm toán tài khoản và Group Policy:
# Liệt kê tất cả user trong domain (cần RSAT + quyền Domain User trở lên)
Get-ADUser -Filter * -Properties LastLogonDate, PasswordLastSet, Enabled |
Select-Object Name, SamAccountName, Enabled, LastLogonDate, PasswordLastSet |
Sort-Object LastLogonDate | Format-Table -AutoSize
# Tìm tài khoản đã bị tắt (disabled)
Get-ADUser -Filter {Enabled -eq $false} | Select-Object Name, SamAccountName
# Tìm tài khoản KHÔNG bao giờ hết hạn mật khẩu (rủi ro bảo mật)
Get-ADUser -Filter {PasswordNeverExpires -eq $true} -Properties PasswordNeverExpires |
Select-Object Name, SamAccountName, PasswordNeverExpires
# Liệt kê thành viên nhóm Domain Admins
Get-ADGroupMember -Identity "Domain Admins" | Select-Object Name, ObjectClass
# Xem tất cả GPO trong domain
Get-GPO -All | Select-Object DisplayName, GpoStatus, CreationTime | Format-Table -AutoSize
Kết quả mong đợi / Expected output: Bảng liệt kê users với cột Enabled, LastLogonDate (user không login lâu là rủi ro — tài khoản zombie). Danh sách Domain Admins — nếu có tài khoản lạ đây là dấu hiệu nghiêm trọng. Danh sách GPO giúp xác minh chính sách bảo mật đang được áp dụng.
- Kiểm tra phân quyền NTFS trên thư mục và đọc Security Event Log:
# Xem ACL (NTFS permission) của một thư mục
Get-ACL "C:\Shares\Finance" | Format-List
# Xem chi tiết từng ACE trong DACL
(Get-ACL "C:\Shares\Finance").Access |
Select-Object IdentityReference, FileSystemRights, AccessControlType, IsInherited |
Format-Table -AutoSize
# Kiểm tra quyền hiệu lực qua icacls
icacls "C:\Shares\Finance"
# Đọc 20 sự kiện bảo mật gần nhất (Security log)
Get-WinEvent -LogName Security -MaxEvents 20 |
Select-Object TimeCreated, Id, Message | Format-List
# Lọc chỉ sự kiện đăng nhập thất bại (Event ID 4625)
Get-WinEvent -LogName Security -MaxEvents 100 |
Where-Object { $_.Id -eq 4625 } |
Select-Object TimeCreated, Message | Format-List
Kết quả mong đợi: Get-ACL liệt kê từng ACE cho thấy ai có quyền gì trên thư mục. Nếu thấy Everyone: FullControl — đây là cấu hình nguy hiểm cần sửa ngay. Event ID 4625 liên tục từ một IP/tài khoản = dấu hiệu brute force attack.
Lab 2 — Cấu hình Local Security Policy & Audit Policy
OS: Windows 11 · Tool: Local Security Policy MMC (secpol.msc) + Command Prompt (Administrator)
- Nhấn Win+R → gõ
secpol.msc→ Enter. - Vào Account Policies → Password Policy. Cấu hình các thiết lập bảo mật:
- Cấu hình Audit Policy qua command line (cần chạy với quyền Administrator):
# Xem cấu hình audit policy hiện tại
auditpol /get /category:*
# Bật audit đăng nhập (thành công và thất bại)
auditpol /set /subcategory:"Logon" /success:enable /failure:enable
# Bật audit tạo tiến trình (quan trọng để phát hiện malware)
auditpol /set /subcategory:"Process Creation" /success:enable
# Bật audit quản lý tài khoản
auditpol /set /subcategory:"User Account Management" /success:enable /failure:enable
# Bật audit thay đổi chính sách
auditpol /set /subcategory:"Audit Policy Change" /success:enable /failure:enable
# Xác nhận lại cấu hình vừa thiết lập
auditpol /get /subcategory:"Logon","Process Creation","User Account Management"
Kết quả mong đợi: auditpol /get /category:* hiển thị danh sách đầy đủ subcategory với trạng thái Success/Failure. Sau khi cấu hình, thực hiện đăng nhập sai mật khẩu và kiểm tra Event Viewer → Security → Event ID 4625 để xác nhận audit đang hoạt động.
3. Tình huống doanh nghiệp / Real-world scenario
Bối cảnh:
Sáng thứ Hai, đội IT nhận báo cáo từ hệ thống giám sát: một tài khoản admin mới lạ (svc_backup_new) xuất hiện trong nhóm Administrators cục bộ trên toàn bộ 50 máy chủ. Tài khoản này được tạo lúc 02:17 sáng Chủ Nhật — ngoài giờ làm việc và không có yêu cầu từ bộ phận nào.
Điều tra theo từng bước:
- Lọc Security Event Log tìm Event ID 4720 (tạo tài khoản) quanh thời điểm 02:00-03:00 ngày Chủ Nhật:
Get-WinEvent -LogName Security | Where-Object { $_.Id -eq 4720 } - Ghi chú Subject Account Name — tài khoản nào đã tạo ra tài khoản mới. Tiếp tục lọc Event ID 4732 (thêm vào nhóm Administrators).
- Truy ngược tài khoản thực hiện hành động: phát hiện tài khoản dịch vụ
svc_monitoring— vốn chỉ có quyền đọc log — đã tạo tài khoản admin. Điều này không thể xảy ra bình thường. - Kết luận:
svc_monitoringđã bị compromise (credential bị lộ hoặc token bị đánh cắp). Kẻ tấn công dùng nó để tạo backdoor admin account và thêm vào Administrators group. - Hành động khắc phục: disable tài khoản
svc_monitoringvàsvc_backup_newngay lập tức, reset mật khẩu, rà soát toàn bộ service account theo nguyên tắc least privilege, kích hoạt Protected Users security group cho các tài khoản nhạy cảm.
Bài học: Event ID 4720 + 4732 lúc ngoài giờ hành chính là dấu hiệu đỏ (red flag) điển hình của tấn công persistence. Audit Policy phải được kích hoạt trước khi sự cố xảy ra — không thể điều tra hồi tố nếu không có log.
4. Tự kiểm tra / Knowledge check
- Giải thích sự khác biệt giữa DACL và SACL trong NTFS. Khi nào cần dùng SACL?
- Một user là thành viên nhóm A (Read) và nhóm B (Deny Write). Quyền hiệu lực với file X là gì?
- Tại sao Scheduled Task (Event ID 4698) lại là persistence mechanism nguy hiểm?
- Phân biệt Local Administrators group và Domain Admins group — ảnh hưởng đến phạm vi tấn công thế nào?
- PowerShell Script Block Logging là gì và tại sao nó quan trọng trong phòng thủ?