ISC2 CC · Domain 3 · 22%

Kiểm soát truy cập

Access Control Concepts

Domain chiếm 22% bài thi CC — tập trung vào kiểm soát truy cập vật lý và logic, các mô hình phân quyền, quản lý danh tính và nguyên lý Zero Trust hiện đại.

Mục tiêu chương / Learning objectives

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).

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:

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)

ModelAi quyết định quyền?Ví dụUse case
DACOwner của resource tự set quyềnNTFS file permissions; Linux chmodMôi trường linh hoạt, ít users
MACHệ thống/policy trung ương, user không thể overrideSELinux; quân đội (Top Secret / Secret / Confidential)Môi trường yêu cầu bảo mật cao
RBACAdmin gán quyền vào Role, user được gán RoleAzure RBAC (Owner/Contributor/Reader); AD GroupsDoanh nghiệp — phổ biến nhất
ABACPolicy dựa trên attributes (user, resource, environment)AWS IAM conditions; Azure Conditional AccessCloud-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:

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

🖥️ Nền tảng: Windows Server 2022
🛠️ Công cụ: PowerShell 7 + RSAT AD Module

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ỳ.

  1. 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
    }
}
  1. 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.

🖥️ Nền tảng: Any (Windows / macOS / Linux)
🛠️ Công cụ: Azure CLI (az)

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ý:

  1. 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.
  2. 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).
  3. 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.
  4. 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ý.
  5. 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

  1. 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.
  2. 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.
  3. 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?
  4. 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?
  5. 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?
C02: BC / DR / IR C04: An ninh mạng
Thực hành trên công cụPowerShell 7 · Azure CLI
Nền tảngWindows Server 2022 · Azure
Thời điểm phát hànhQ2/2026
Ngày biên soạn24/05/2026
Người biên soạnTrần Văn Hòa (MCT)
Phiên bảnv1.0
Zalo