Mục tiêu chương / Learning objectives
- Phân biệt kiểm soát truy cập vật lý (physical) và logic (logical) — ví dụ cụ thể từng loại.
- Giải thích ba yếu tố xác thực (something you know / have / are) và ý nghĩa của MFA.
- So sánh bốn mô hình phân quyền: DAC, MAC, RBAC, ABAC — ưu/nhược điểm và use case.
- Áp dụng nguyên lý least privilege và need-to-know vào thiết kế hệ thống quyền.
- Mô tả vòng đời identity: provisioning, review, deprovisioning — và rủi ro khi bỏ sót.
- Thực hành audit Active Directory RBAC và Azure AD/Entra role assignments bằng CLI.
1. Lý thuyết cốt lõi / Core theory
1.1. Kiểm soát truy cập vật lý (Physical Access Controls)
Kiểm soát vật lý bảo vệ tài sản trước nguy cơ truy cập trái phép tại chỗ — ngăn người không được phép bước vào khu vực nhạy cảm (data center, server room, phòng tài liệu mật).
- Mantrap (Cửa khóa kép): Phòng chờ hai cửa — cửa ngoài đóng trước khi cửa trong mở. Chống tailgating (người theo sau). Dùng tại datacenter và cơ quan chính phủ.
- Badge/Smart card: Thẻ từ hoặc thẻ chip kiểm soát cửa. Kết hợp với PIN = two-factor physical. Hệ thống ghi log mỗi lần quẹt thẻ (Accounting).
- CCTV (Camera giám sát): Kiểm soát Detective — ghi lại hành vi, không ngăn chặn ngay lập tức nhưng phục vụ điều tra sau sự cố.
- Fencing & Lighting (Hàng rào & Đèn chiếu sáng): Kiểm soát Deterrent — răn đe, không ngăn nhưng làm tăng rủi ro cho kẻ tấn công.
- Guard (Nhân viên bảo vệ): Kiểm soát duy nhất có khả năng ra quyết định theo ngữ cảnh — nhận diện khuôn mặt, đánh giá tình huống bất thường.
1.2. Các yếu tố xác thực & MFA (Authentication Factors & Multi-Factor Authentication)
Ba yếu tố xác thực cơ bản:
- Something you know (Bạn biết): Password, PIN, câu hỏi bí mật. Yếu nhất — có thể bị đoán, stolen, phishing.
- Something you have (Bạn có): Smartphone (OTP app), hardware token (YubiKey), smart card. Mạnh hơn — attacker cần vật lý chiếm thiết bị.
- Something you are (Bạn là): Biometric — vân tay, nhận dạng khuôn mặt, mống mắt. Mạnh nhất — khó giả mạo, nhưng không thể "đổi" nếu bị compromise.
MFA (Multi-Factor Authentication): Kết hợp ít nhất 2 yếu tố từ 2 loại khác nhau. Password + OTP = MFA (know + have). Password + fingerprint = MFA (know + are). Password + PIN = KHÔNG phải MFA (cả hai đều là "know"). MFA loại bỏ 99.9% tấn công tài khoản theo thống kê Microsoft.
1.3. Mô hình phân quyền (Authorization Models: DAC / MAC / RBAC / ABAC)
| Model | Ai quyết định quyền? | Ví dụ | Use case |
|---|---|---|---|
| DAC | Owner của resource tự set quyền | NTFS file permissions; Linux chmod | Môi trường linh hoạt, ít users |
| MAC | Hệ thống/policy trung ương, user không thể override | SELinux; quân đội (Top Secret / Secret / Confidential) | Môi trường yêu cầu bảo mật cao |
| RBAC | Admin gán quyền vào Role, user được gán Role | Azure RBAC (Owner/Contributor/Reader); AD Groups | Doanh nghiệp — phổ biến nhất |
| ABAC | Policy dựa trên attributes (user, resource, environment) | AWS IAM conditions; Azure Conditional Access | Cloud-native, Zero Trust |
Ví dụ ABAC: "Cho phép truy cập HR data NẾU user thuộc department=HR VÀ device=compliant VÀ location=Vietnam VÀ time=business hours." — RBAC không thể biểu diễn điều kiện phức tạp như vậy.
1.4. Least Privilege, Need-to-Know & PAM (Privileged Access Management)
Principle of Least Privilege: Mỗi user, process, service chỉ được cấp quyền tối thiểu cần thiết để thực hiện nhiệm vụ — không hơn. Ví dụ: service chạy web app không cần quyền Domain Admin; developer không cần quyền xóa production database.
Need-to-Know: Ngay cả khi có clearance phù hợp, người dùng chỉ được truy cập thông tin cần thiết cho công việc hiện tại. Hai nguyên lý này bổ sung nhau: least privilege về action (làm gì), need-to-know về data (xem gì).
PAM (Privileged Access Management) là giải pháp quản lý và giám sát tài khoản đặc quyền cao (Domain Admin, root, service account). PAM solution như CyberArk, Microsoft PIM cung cấp: just-in-time access (cấp quyền Admin tạm thời theo yêu cầu), session recording (ghi lại mọi hành động của admin), password vaulting (lưu trữ mật khẩu tài khoản đặc quyền), và approval workflow.
1.5. Identity Lifecycle & SSO / Federation (Provisioning / Deprovisioning / SAML / OAuth2 / OIDC)
Vòng đời identity gồm ba giai đoạn chính:
- Provisioning (Cấp phát): Tạo tài khoản khi nhân viên mới vào — gán vào đúng groups, cấp quyền theo role, thiết lập MFA. Lý tưởng nhất là tự động hóa qua HR system integration.
- Review (Xem xét định kỳ): Access review hàng quý — xác minh user vẫn cần các quyền hiện tại. Phát hiện quyền thừa (permission creep) tích lũy qua nhiều lần thay đổi vai trò.
- Deprovisioning (Thu hồi): Vô hiệu hóa tài khoản ngay khi nhân viên nghỉ việc — lý tưởng trong vòng 1 giờ sau khi HR xác nhận. Đây là điểm yếu phổ biến nhất — nhiều tổ chức mất nhiều ngày hoặc tuần mới xử lý.
SSO & Federation:
SSO (Single Sign-On): Đăng nhập một lần, truy cập nhiều app. Giảm password fatigue, tập trung authentication.
SAML 2.0: XML-based protocol cho SSO doanh nghiệp — phổ biến với legacy apps, Salesforce, AWS Console.
OAuth 2.0: Authorization framework — "Cho phép app A truy cập dữ liệu của tôi trên app B mà không cần chia sẻ password." (ví dụ: đăng nhập bằng Google vào app khác).
OIDC (OpenID Connect): Authentication layer xây trên OAuth 2.0 — thêm ID Token để xác minh danh tính. Standard hiện đại cho cloud-native apps.
1.6. Zero Trust (Nguyên lý không tin tưởng mặc định)
Zero Trust là mô hình bảo mật dựa trên nguyên lý "Never trust, always verify" — không có gì được tin tưởng mặc định dù đang ở trong mạng nội bộ. Mỗi request phải được xác thực, ủy quyền và kiểm tra liên tục. Ba trụ cột: Verify explicitly (xác thực mạnh với tất cả yếu tố), Use least privilege (just-in-time, just-enough-access), Assume breach (thiết kế như hệ thống đã bị compromise, minimize blast radius).
2. Bài thực hành / Hands-on lab
Lab 1 — Active Directory RBAC Audit (PowerShell)
OS: Windows Server 2022 · Tool: PowerShell 7 + RSAT Active Directory module.
Mục tiêu: kiểm tra thành viên nhóm đặc quyền cao và phát hiện tài khoản không hoạt động — hai tác vụ cốt lõi trong access review định kỳ.
- Import AD module và kiểm tra nhóm đặc quyền cao:
# Import AD module (cần cài RSAT: Active Directory Domain Services Tools)
Import-Module ActiveDirectory
# Liệt kê tất cả thành viên Domain Admins (bao gồm nested groups)
Write-Host "=== Domain Admins Members ===" -ForegroundColor Red
Get-ADGroupMember -Identity "Domain Admins" -Recursive |
Select-Object Name, SamAccountName, ObjectClass |
Format-Table -AutoSize
# Kiểm tra các nhóm đặc quyền cao khác
$privilegedGroups = @("Enterprise Admins", "Schema Admins", "Backup Operators", "Account Operators")
foreach ($group in $privilegedGroups) {
try {
$members = Get-ADGroupMember -Identity $group -Recursive -ErrorAction Stop
Write-Host "`n=== $group ($($members.Count) members) ===" -ForegroundColor Yellow
$members | Select-Object Name, SamAccountName | Format-Table -AutoSize
} catch {
Write-Host "`n[INFO] Group '$group' not found or empty" -ForegroundColor Gray
}
}
- Phát hiện tài khoản không hoạt động (inactive accounts — rủi ro bảo mật):
# Tìm user không đăng nhập trong 90 ngày (zombie accounts)
$cutoffDate = (Get-Date).AddDays(-90)
Write-Host "=== Users inactive >90 days ===" -ForegroundColor Magenta
Get-ADUser -Filter * -Properties LastLogonDate, Enabled, Department |
Where-Object { $_.LastLogonDate -lt $cutoffDate -and $_.Enabled -eq $true } |
Select-Object Name, SamAccountName, LastLogonDate, Department |
Sort-Object LastLogonDate |
Format-Table -AutoSize
# Tìm tài khoản chưa bao giờ đăng nhập (never logged on)
Write-Host "`n=== Accounts never logged on ===" -ForegroundColor Magenta
Get-ADUser -Filter { LastLogonDate -notlike "*" } -Properties LastLogonDate, WhenCreated |
Select-Object Name, SamAccountName, WhenCreated |
Format-Table -AutoSize
# Tóm tắt: đếm enabled vs disabled accounts
$enabled = (Get-ADUser -Filter { Enabled -eq $true } | Measure-Object).Count
$disabled = (Get-ADUser -Filter { Enabled -eq $false } | Measure-Object).Count
Write-Host "`n=== Account Summary ===" -ForegroundColor Cyan
Write-Host "Enabled : $enabled"
Write-Host "Disabled: $disabled"
✅ Kết quả mong đợi / Expected output: Danh sách thành viên Domain Admins — nếu có tên không quen → điều tra ngay. Danh sách user inactive >90 ngày với LastLogonDate — đây là candidates cần disable. Trong môi trường production sạch, Domain Admins chỉ nên có 2-3 tài khoản đặc biệt được kiểm soát chặt.
Lab 2 — Azure AD / Entra ID Role Assignment Audit
OS: Any · Tool: Azure CLI — cần az login với tài khoản có quyền đọc Azure AD.
Mục tiêu: kiểm tra role assignments trong Azure để phát hiện over-privileged accounts — áp dụng least privilege trong môi trường cloud.
# Đăng nhập Azure
az login
# Liệt kê tất cả user trong Azure AD tenant
az ad user list --output table --query "[].{Name:displayName, UPN:userPrincipalName, Enabled:accountEnabled}"
# Liệt kê tất cả role assignments trong subscription hiện tại
# Hiển thị: user/service principal, role, scope (subscription/resource group/resource)
az role assignment list --all \
--query "[].{User:principalName, Role:roleDefinitionName, Scope:scope}" \
--output table
# Tìm tài khoản được gán Owner hoặc Contributor ở subscription level (rủi ro cao)
az role assignment list --all \
--query "[?roleDefinitionName=='Owner' || roleDefinitionName=='Contributor'].{User:principalName, Role:roleDefinitionName, Scope:scope}" \
--output table
# Kiểm tra Global Administrator trong Entra ID (Azure AD)
az rest \
--method GET \
--url "https://graph.microsoft.com/v1.0/directoryRoles" \
--query "value[?displayName=='Global Administrator'].id" \
--output tsv | xargs -I{} \
az rest --method GET \
--url "https://graph.microsoft.com/v1.0/directoryRoles/{}/members" \
--query "value[].{Name:displayName, UPN:userPrincipalName}"
✅ Kết quả mong đợi / Expected output: Bảng role assignments hiển thị tất cả quyền trong Azure subscription. Nếu tìm thấy user thông thường có role Owner ở subscription scope — đây là vi phạm nghiêm trọng least privilege cần thu hồi ngay. Global Administrator nên chỉ có 2-4 người và phải có MFA bắt buộc. Lý tưởng là dùng Microsoft PIM để cấp Global Admin theo yêu cầu (just-in-time).
3. Tình huống doanh nghiệp / Real-world scenario
Bối cảnh — Insider Threat: Ex-employee đăng nhập 2 tuần sau khi nghỉ việc:
Một công ty phần mềm 150 nhân viên phát hiện tài khoản Azure AD của một kỹ sư senior (đã nghỉ việc 2 tuần trước) vẫn đang active và có Azure Sign-in logs cho thấy 3 lần đăng nhập thành công từ IP nước ngoài trong 3 ngày gần đây. Tài khoản này có role Contributor trên production subscription và Owner trên dev subscription.
Điều tra và xử lý:
- Immediate containment: Disable tài khoản Azure AD ngay lập tức (
az ad user update --id UPN --account-enabled false). Thu hồi tất cả active sessions (az ad user revoke-sign-in-sessions). Đổi mật khẩu service accounts mà kỹ sư này có quyền truy cập. - Investigation: Xuất Azure Sign-in logs cho tài khoản trong 30 ngày qua. Kiểm tra Azure Activity Log — resource nào đã được tạo/sửa/xóa. Kiểm tra Azure Storage, Key Vault access logs. Xác định xem có data exfiltration không (storage download logs).
- Root cause: HR system không tự động trigger deprovisioning workflow trong Azure AD. IT chỉ disable account on-premise AD nhưng quên Azure AD sync. Khoảng cách 2 tuần là kết quả của process gap — deprovisioning không được automated.
- Remediation: Implement automated offboarding workflow: HR system → webhook → Azure Logic App → disable Azure AD account trong 1 giờ sau khi HR confirms termination. Implement Microsoft Entra ID Governance Access Reviews hàng quý.
- Bài học: Identity lifecycle automation là không thể thiếu — manual process luôn có nguy cơ bị bỏ sót. "A terminated employee with active credentials is an open door." Implement Joiner-Mover-Leaver (JML) process tự động hóa hoàn toàn.
Deprovisioning là bước được bỏ qua nhiều nhất trong identity lifecycle — nhưng hậu quả là nghiêm trọng nhất. Domain 3 của ISC2 CC nhấn mạnh điều này vì lý do đó.
4. Tự kiểm tra / Knowledge check
- Phân biệt RBAC và ABAC. Cho một ví dụ tình huống mà RBAC không đủ và cần ABAC để giải quyết.
- Người dùng đăng nhập bằng password + OTP từ authenticator app. Đây có phải MFA không? Giải thích theo định nghĩa yếu tố xác thực.
- Nguyên lý Zero Trust nói gì về traffic đến từ trong mạng nội bộ (internal network)? Điều này khác với mô hình perimeter security truyền thống như thế nào?
- Một kế toán viên được cấp quyền đọc toàn bộ database sản xuất để làm báo cáo hàng tháng — vi phạm nguyên lý nào? Cách khắc phục?
- PAM solution cung cấp "just-in-time access" nghĩa là gì? Tại sao điều này tốt hơn việc gán quyền Admin permanent?