Mục tiêu chương / Learning objectives
- Mô tả vòng đời identity: joiner → mover → leaver và các rủi ro tại từng giai đoạn.
- Giải thích luồng SAML 2.0 assertion, OAuth2 grant types, và OIDC ID token — biết khi nào dùng cái nào.
- Thiết kế chương trình PAM/PIM với just-in-time access, vaulting, và session recording.
- Triển khai Identity Governance & Administration (IGA): access reviews, SoD, role mining.
- So sánh các hệ thống sinh trắc học: FAR, FRR, CER — và ý nghĩa với security/usability tradeoff.
- Giải thích FIDO2/WebAuthn và tại sao đây là tương lai của xác thực không mật khẩu.
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:
- Actors: Identity Provider (IdP) — xác thực user (Entra ID, Okta, ADFS). Service Provider (SP) — ứng dụng cần access. User Agent — browser.
- SP-initiated flow: User → SP → redirect to IdP → authenticate → SAML Assertion (XML signed) → POST back to SP → access granted. Dùng cho B2B federation, enterprise apps.
- Assertion types: Authentication, Attribute (user attributes), Authorization Decision.
OAuth 2.0 — authorization framework (không authentication), JSON/REST-based:
- Authorization Code Grant: Phổ biến nhất cho web apps — code exchange qua backchannel (an toàn nhất).
- Client Credentials Grant: Machine-to-machine (M2M), không có user — service accounts, microservices.
- PKCE (Proof Key for Code Exchange): Bắt buộc cho mobile/SPA apps — ngăn authorization code interception.
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:
- Credential Vaulting: Admin passwords lưu trong encrypted vault (CyberArk, BeyondTrust, HashiCorp Vault). Auto-rotate sau mỗi lần checkout. Admin chỉ biết password của session đó.
- Just-in-Time (JIT) Access: Request → Approve → Grant time-limited elevated access → Auto-expire. Azure AD Privileged Identity Management (PIM) là ví dụ điển hình.
- Session Recording: Full keystroke + screen capture cho mọi privileged session. Lưu trữ immutable để forensic. Deterrence effect — admin biết mình bị watch.
- Dual Authorization: Hành động quan trọng (delete production DB, export customer data) cần 2 người phê duyệt đồng thời.
IGA (Identity Governance & Administration):
- Access Reviews (Recertification): Định kỳ (quarterly/annual) gửi email cho Manager: "Nhân viên X có cần quyền Y không?" Manager phê duyệt/revoke. Tự động revoke nếu không response.
- SoD (Separation of Duties) Enforcement: Rule engine: "Ai có role Finance-AP không được có role Finance-AR." Phát hiện và alert khi có SoD violation.
- Role Mining: Phân tích access patterns của tất cả users để xác định "role tự nhiên" → RBAC roles phù hợp với thực tế, không phải lý thuyết.
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:
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.
Tỷ lệ từ chối người được phép. Thấp = ít lỗi type II. Quan trọng cho usability.
Đ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:
- Dùng public-key cryptography: private key lưu trong authenticator (hardware key, TPM, phone Secure Enclave), public key đăng ký tại server.
- Phishing-resistant: private key không bao giờ rời thiết bị, không có password để steal/phish.
- Passkeys (Apple/Google/Microsoft): FIDO2 credential được sync qua cloud — UX của password với security của hardware key.
- Loại authenticator: Platform (built-in — Face ID, Windows Hello) và Roaming (external — YubiKey, FIDO2 USB/NFC).
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:
- Conditional Access Policies: If (user + location + device + app + risk) → then (allow/MFA/block). Risk-based authentication — tự động yêu cầu MFA nếu sign-in risk cao (impossible travel, leaked credential).
- PIM (Privileged Identity Management): Eligible vs Active assignments. JIT access với approval workflow và time bound. Mọi activation được audit.
- Identity Protection: ML-based risk detection — risky users, risky sign-ins. Tích hợp với Conditional Access để auto-remediate (force password change, block).
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
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)
- Đăng nhập:
Connect-AzAccountvàaz login - 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:
- Emergency (Day 1): Disable tất cả 127 stale accounts. Revoke sessions cựu nhân viên. Rotate service account password, enable MFA.
- Short-term (30 days): Deploy HR-to-AD auto-provisioning/deprovisioning (Azure AD Connect + HR connector). Terminate = auto-disable trong 24 giờ.
- 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.
- Long-term (180 days): Implement IGA platform (SailPoint/Saviynt). Quarterly access reviews tự động. SoD rules engine. Role mining từ existing access data.
- 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
- 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?
- 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.
- 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)?
- 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.
- 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.
- 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?