CISSP · Domain 5 · 13%

Quản lý định danh & Truy cập

Identity & Access Management — Domain 5

IAM là trung tâm của mọi kiến trúc bảo mật hiện đại. Domain này bao phủ toàn bộ vòng đời identity, federated identity (SAML/OAuth2/OIDC), quản lý đặc quyền (PAM/PIM), identity governance, Zero Trust Identity, và xác thực không mật khẩu (FIDO2).

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

1. Lý thuyết cốt lõi / Core theory

1.1. Vòng đời Identity (Identity lifecycle: Joiner · Mover · Leaver)

Quản lý identity không phải chỉ là tạo tài khoản — phải quản lý toàn bộ vòng đời và rủi ro tại mỗi giai đoạn:

Joiner (Nhân viên mới)

  • Provisioning đúng role, không excess privilege
  • Background check trước khi access nhạy cảm
  • Security awareness training bắt buộc
  • Rủi ro: over-provisioning do copy từ account cũ

Mover (Chuyển vai trò)

  • Revoke quyền cũ, cấp quyền mới
  • Privilege accumulation là rủi ro lớn nhất
  • Cần access review sau mỗi lần chuyển
  • Rủi ro: nhân viên giữ quyền cũ + tích thêm quyền mới

Leaver (Nghỉ việc)

  • Disable account NGAY khi nghỉ — không xóa ngay (audit trail)
  • Revoke tất cả sessions, tokens, certs
  • Offboarding checklist: badge, laptop, cloud access
  • Rủi ro: terminated employee còn VPN/cloud access

Privilege Accumulation (Creeping Privilege): Nguy hiểm nhất với Mover. Nhân viên chuyển từ Finance → IT → Management giữ lại tất cả quyền cũ → cuối cùng có nhiều quyền hơn bất kỳ ai. Giải pháp: periodic access reviews (mỗi quý), SoD enforcement, role mining để phát hiện anomaly.

1.2. Federated Identity: SAML, OAuth2, OIDC (Federation protocols deep dive)

SAML 2.0 (Security Assertion Markup Language) — XML-based, dùng cho enterprise SSO:

OAuth 2.0 — authorization framework (không authentication), JSON/REST-based:

OIDC (OpenID Connect) — layer xác thực trên OAuth2. Thêm ID Token (JWT) chứa user identity. Access Token cho API access, ID Token cho identity. Claims: sub (subject/user ID), iss (issuer), aud (audience), exp (expiry), iat (issued at).

Khi nào dùng gì: Enterprise SSO giữa organizations → SAML 2.0. Mobile app cần access Google Drive của user → OAuth2 (authorization_code + PKCE). App cần biết user là ai (login with Google/Microsoft) → OIDC. Service A gọi Service B không có user → OAuth2 Client Credentials. CISSP thường hỏi: "App cần delegated access đến resource của user" → OAuth2, không phải SAML.

1.3. Privileged Access Management & Identity Governance (PAM/PIM & IGA)

PAM components:

IGA (Identity Governance & Administration):

1.4. Sinh trắc học & Xác thực không mật khẩu (Biometrics & passwordless)

Biometric accuracy metrics — quan trọng cho CISSP:

FAR
False Acceptance Rate

Tỷ lệ chấp nhận người không được phép. Thấp = ít lỗi type I. Quan trọng cho security.

FRR
False Rejection Rate

Tỷ lệ từ chối người được phép. Thấp = ít lỗi type II. Quan trọng cho usability.

CER
Crossover Error Rate

Điểm FAR = FRR. CER càng thấp = hệ thống càng chính xác. Dùng để so sánh hệ thống.

FAR và FRR có quan hệ nghịch: giảm FAR (tăng security) → tăng FRR (giảm usability) và ngược lại. CER là điểm cân bằng — hệ thống tốt có CER thấp.

FIDO2/WebAuthn — chuẩn xác thực không mật khẩu được W3C và FIDO Alliance phát triển:

1.5. Cloud IAM & Directory Services (Azure Entra ID, AWS IAM, LDAP/AD)

Azure Entra ID (formerly Azure AD) là Identity Provider hiện đại nhất cho enterprise:

AWS IAM best practices: Không dùng root account, IAM roles thay vì IAM users cho EC2/Lambda, SCPs (Service Control Policies) ở Organizations level, Access Analyzer để phát hiện public S3/IAM policies.

2. Bài thực hành / Hands-on labs

🖥️ Platform: Azure (bất kỳ OS) · Ubuntu 22.04 joined to AD
🛠️ Tools: PowerShell + Az module + Azure CLI · Bash + ldap-utils

Lab 1 — Azure Entra ID PIM Audit & Privileged Role Review (PowerShell + Azure CLI)

OS: Bất kỳ · Tool: PowerShell 7 + Az module + Azure CLI (az)

  1. Đăng nhập: Connect-AzAccountaz login
  2. Chạy audit privileged roles:
# === AZURE ENTRA ID IAM AUDIT ===

Write-Host "=== 1. All Users Overview ===" -ForegroundColor Cyan
az ad user list --query "[].{Name:displayName,UPN:userPrincipalName,Enabled:accountEnabled,LastSignIn:signInActivity}" \
    -o table 2>/dev/null | head -20

Write-Host "`n=== 2. Global Admins (highest risk role) ===" -ForegroundColor Cyan
az ad group list --display-name "Global Administrators" --query "[0].id" -o tsv 2>/dev/null | \
    xargs -I{} az ad group member list --group {} --query "[].{Name:displayName,UPN:userPrincipalName}" -o table 2>/dev/null

Write-Host "`n=== 3. Owner role assignments (all subscriptions) ===" -ForegroundColor Cyan
az role assignment list --all \
    --query "[?roleDefinitionName=='Owner'].{Principal:principalName,Type:principalType,Scope:scope}" \
    -o table 2>/dev/null

Write-Host "`n=== 4. Service Principals with Owner role (risky) ===" -ForegroundColor Cyan
az role assignment list --all \
    --query "[?roleDefinitionName=='Owner' && principalType=='ServicePrincipal'].{SP:principalName,Scope:scope}" \
    -o table 2>/dev/null

# PowerShell Az module
Write-Host "`n=== 5. Check for permanent privileged role assignments ===" -ForegroundColor Cyan
Import-Module Az.Resources -ErrorAction SilentlyContinue
Get-AzRoleAssignment |
    Where-Object { $_.RoleDefinitionName -in @("Owner","Contributor","User Access Administrator") } |
    Select-Object DisplayName, RoleDefinitionName, Scope |
    Format-Table -AutoSize

Write-Host "`n=== 6. Stale accounts (not signed in 90+ days) ===" -ForegroundColor Cyan
$threshold = (Get-Date).AddDays(-90).ToString("yyyy-MM-ddTHH:mm:ssZ")
az ad user list --query "[?signInActivity.lastSignInDateTime < '$threshold'].{Name:displayName,UPN:userPrincipalName,LastSignIn:signInActivity.lastSignInDateTime}" \
    -o table 2>/dev/null | head -15

✅ Kết quả mong đợi: Global Admins nên ≤5 người. Owner role: không có Service Principal nào có Owner ở subscription scope (quá rộng). Permanent privileged assignments: nên là 0 — dùng Eligible (PIM) thay thế. Stale accounts: disable hoặc delete — zombie accounts là attack vector phổ biến. Nếu phát hiện Unknown principal trong role assignments → investigate ngay (có thể là deleted user/SP vẫn còn assignment).

Lab 2 — Linux PAM Configuration & LDAP Integration Check (Bash)

OS: Ubuntu 22.04 joined to Active Directory · Tool: Bash + ldap-utils + sssd

#!/bin/bash
# === LINUX PAM & LDAP/AD INTEGRATION AUDIT ===

echo "=== 1. LDAP User Discovery (AD-joined Linux) ==="
ldapsearch -x -H ldap://dc.corp.local \
    -b "dc=corp,dc=local" \
    "(objectClass=user)" \
    sAMAccountName displayName memberOf 2>/dev/null | \
    grep -E "sAMAccountName|displayName" | head -30

echo -e "\n=== 2. SSSD Configuration Check ==="
if [ -f /etc/sssd/sssd.conf ]; then
    grep -E "domains|id_provider|auth_provider|access_provider|ldap_uri" /etc/sssd/sssd.conf
else
    echo "SSSD not configured - not AD-joined"
fi

echo -e "\n=== 3. Who can sudo? (privilege audit) ==="
cat /etc/sudoers 2>/dev/null | grep -v "^#" | grep -v "^$"
ls /etc/sudoers.d/ 2>/dev/null

echo -e "\n=== 4. Group membership check ==="
id username 2>/dev/null || id $USER
getent group sudo
getent group wheel 2>/dev/null
getent group adm

echo -e "\n=== 5. PAM configuration for SSH ==="
cat /etc/pam.d/sshd | grep -v "^#" | grep -v "^$"

echo -e "\n=== 6. Password policy enforcement ==="
grep -E "minlen|minclass|maxrepeat|dcredit|ucredit|lcredit|ocredit" \
    /etc/security/pwquality.conf 2>/dev/null || \
    grep -E "PASS_MIN_LEN|PASS_MAX_DAYS|PASS_MIN_DAYS" /etc/login.defs

echo -e "\n=== 7. Account lockout policy ==="
grep -E "deny|unlock_time|fail_interval" /etc/pam.d/common-auth 2>/dev/null || \
    grep "pam_faillock\|pam_tally" /etc/pam.d/system-auth 2>/dev/null

echo -e "\n=== 8. MFA enforcement (Google Authenticator PAM) ==="
grep -r "pam_google_authenticator\|pam_duo\|pam_radius" /etc/pam.d/ 2>/dev/null | head -5

✅ Kết quả mong đợi: SSSD: id_provider=ad, access_provider=ad (chỉ AD group members được login). Sudoers: chỉ specific AD groups (không %users ALL). Password policy: minlen=12, minclass=3. Account lockout: deny=5, unlock_time=900 (15 phút). MFA: pam_duo hoặc pam_google_authenticator hiện diện cho SSH — thiếu MFA trên Linux servers là gap phổ biến trong doanh nghiệp.

3. Tình huống doanh nghiệp / Enterprise scenario

Bối cảnh:

Audit SOX phát hiện: 127 nhân viên đã nghỉ việc vẫn có active Azure AD accounts. 3 cựu nhân viên vẫn đang đăng nhập SharePoint hàng tuần. Developer team dùng chung 1 service account "[email protected]" với password mọi người đều biết để deploy production. Không có access reviews từ trước đến nay.

Giải pháp IAM holistic:

  1. Emergency (Day 1): Disable tất cả 127 stale accounts. Revoke sessions cựu nhân viên. Rotate service account password, enable MFA.
  2. Short-term (30 days): Deploy HR-to-AD auto-provisioning/deprovisioning (Azure AD Connect + HR connector). Terminate = auto-disable trong 24 giờ.
  3. Medium-term (90 days): Replace shared service account bằng Managed Identity (Azure) hoặc Service Account với Managed Password (Windows GMSA). Developer không bao giờ biết password.
  4. Long-term (180 days): Implement IGA platform (SailPoint/Saviynt). Quarterly access reviews tự động. SoD rules engine. Role mining từ existing access data.
  5. Passwordless roadmap: Pilot FIDO2 (YubiKey) cho IT admins. Microsoft Authenticator passwordless cho general users. Target: 0 password by 2027.

Bài học CISSP: IAM failures thường không phải kỹ thuật — mà là process failures. Tự động hóa joiner/mover/leaver là đầu tư ROI cao nhất trong IAM. Shared accounts = không có accountability = audit nightmare.

4. Tự kiểm tra / CISSP-style knowledge check

  1. Nhân viên IT chuyển sang làm Manager 3 lần trong 5 năm. Hiện tại họ có quyền của IT Admin, Finance Viewer, và Operations Manager. Đây là biểu hiện của vấn đề gì? Giải pháp kiểm soát nào phù hợp nhất?
  2. App mobile cần cho phép user login bằng Google account, sau đó dùng access token để đọc Google Calendar. Nên dùng SAML, OAuth2, hay OIDC? Giải thích lý do chọn và loại flow phù hợp.
  3. Hệ thống vân tay có FAR=0.001% và FRR=5%. Hệ thống khuôn mặt có FAR=0.1% và FRR=0.5%. Hệ thống nào phù hợp hơn cho data center access (bảo mật cao), và hệ thống nào phù hợp cho office check-in (tiện lợi)?
  4. CISO muốn triển khai JIT access cho database admins. Giải thích quy trình từ request đến revoke và tại sao đây tốt hơn standing privilege.
  5. FIDO2 WebAuthn được gọi là "phishing-resistant." Giải thích cơ chế kỹ thuật tại sao attacker không thể dùng stolen FIDO2 credential trên site giả mạo.
  6. AWS Lambda function cần đọc S3 bucket và ghi vào DynamoDB. Best practice cho IAM authorization là gì? Tại sao không nên hardcode AWS credentials trong Lambda code?
C04: An ninh mạng & Truyền thông C06: Đánh giá & Kiểm thử bảo mật
Thực hành trên công cụPowerShell 7 · Az module · Azure CLI · ldap-utils
Nền tảngAzure · Ubuntu 22.04 AD-joined
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