AZ-500 LAB 16 ~30 phút Chương 04 Identity & Access

Kiểm Tra & Thu Hồi OAuth Permission Grant

Kiểm tra các ứng dụng đã được cấp OAuth permission grant trong tenant, lọc app có quyền dư thừa hoặc nhạy cảm, thu hồi consent không cần thiết, và kiểm tra audit log để theo dõi hoạt động phân quyền.

🎯 Mục Tiêu Lab

Truy cập Enterprise Applications và lọc danh sách ứng dụng đã được cấp quyền

Xem chi tiết OAuth permission grants (delegated và application) của từng app

Phân biệt admin consent grant và user consent grant

Thu hồi consent không cần thiết hoặc nguy hiểm

Kiểm tra audit log ghi lại hoạt động consent và thu hồi

Cấu hình User Consent Settings để kiểm soát app consent policy

📋 Chuẩn Bị

Yêu cầu:
  • Hoàn thành Lab 15 — App Registration đã tạo sẵn
  • Quyền Global Administrator hoặc Application Administrator
  • Azure CLI đã đăng nhập với account có quyền đủ
  • Tenant có ít nhất vài Enterprise Applications để quan sát
Rủi ro OAuth Consent:
  • Illicit Consent Grant Attack — attacker trick user grant quyền cho app độc hại
  • App có Mail.ReadWrite, Files.ReadWrite là rủi ro cao
  • Third-party app với quyền dư thừa là attack surface
  • Thu hồi consent không dừng phiên đang hoạt động ngay lập tức

🏗️ Kịch Bản

Security team phát hiện một số user trong công ty đã vô tình grant quyền cho ứng dụng bên thứ ba không rõ nguồn gốc. Bạn được giao nhiệm vụ kiểm tra toàn bộ OAuth permission grants trong tenant, xác định ứng dụng có quyền nhạy cảm, thu hồi consent không cần thiết, và cấu hình chính sách ngăn người dùng tự cấp quyền cho app chưa được phê duyệt.

🧪 Các Bước Thực Hiện

1

Xem Danh Sách Enterprise Applications

Lọc và kiểm tra các app đang tồn tại trong tenant kèm trạng thái consent.

Cách 1 — Portal
  1. 1.1Entra ID → "Enterprise applications" → tab "All applications"
  2. 1.2Filter: Application type = "All Applications", Consent = "Admin consent"
  3. 1.3Ghi nhận danh sách app có admin consent — chú ý app không quen thuộc
  4. 1.4Click vào từng app → "Permissions" → xem tab "Admin consent""User consent"
Cách 2 — Azure CLI
Azure CLI— liệt kê service principals và grants
# Liệt kê tất cả service principals trong tenant
az ad sp list --all \
  --query "[].{Name:displayName, AppId:appId, Type:servicePrincipalType}" \
  --output table | head -30

# Xem OAuth2 permission grants (admin consent grants)
az ad oauth2-permission-grant list \
  --query "[].{Client:clientId, Resource:resourceId, Scope:scope, ConsentType:consentType}" \
  --output table

# Lọc grants loại "AllPrincipals" (admin consent cho toàn tenant)
az ad oauth2-permission-grant list \
  --query "[?consentType=='AllPrincipals'].{Client:clientId, Scope:scope}" \
  --output table
2

Xem Permission Grants Chi Tiết

Xem quyền cụ thể đã cấp cho ứng dụng từ Lab 15, phân tích mức độ rủi ro.

Cách 1 — Portal
  1. 2.1Enterprise Applications → tìm app-az500-secureapp-lab15
  2. 2.2Menu trái → "Permissions" → tab "Admin consent"
  3. 2.3Kiểm tra từng permission: tên, loại (Delegated/Application), ngày cấp, người cấp
  4. 2.4Đánh dấu các quyền nhạy cảm: Mail.ReadWrite, Files.ReadWrite.All, Directory.ReadWrite.All
Cách 2 — Azure CLI
Azure CLI— chi tiết grants của app lab15
# Lấy Object ID của service principal lab15
APP_ID=$(az ad app list \
  --display-name "app-az500-secureapp-lab15" \
  --query "[0].appId" -o tsv)

SP_ID=$(az ad sp show --id $APP_ID --query id -o tsv)

# Xem tất cả OAuth grants cho SP này
az ad oauth2-permission-grant list \
  --filter "clientId eq '$SP_ID'" \
  --output json

# Xem app role assignments (application permissions)
az rest --method GET \
  --url "https://graph.microsoft.com/v1.0/servicePrincipals/$SP_ID/appRoleAssignments" \
  --query "value[].{Role:appRoleId, Resource:resourceDisplayName, Principal:principalDisplayName}" \
  --output table
3

Thu Hồi OAuth Consent

Thu hồi admin consent đã cấp cho ứng dụng — ứng dụng sẽ không còn quyền gọi API với những scope đó.

Cách 1 — Portal
  1. 3.1Enterprise Applications → app lab15 → "Permissions" → tab "Admin consent"
  2. 3.2Chọn permission cần thu hồi (ví dụ: User.Read.All) → click icon Revoke (dấu X)
  3. 3.3Xác nhận dialog → Permission biến mất khỏi danh sách admin consent
  4. 3.4Để thu hồi tất cả: click "Revoke admin consent" ở đầu trang
Cách 2 — Azure CLI
Azure CLI— thu hồi oauth2 permission grant
# Lấy Grant ID cần thu hồi
GRANT_ID=$(az ad oauth2-permission-grant list \
  --filter "clientId eq '$SP_ID'" \
  --query "[0].id" -o tsv)

echo "Grant ID: $GRANT_ID"

# Thu hồi grant cụ thể
az ad oauth2-permission-grant delete --id $GRANT_ID

# Xác nhận đã thu hồi
az ad oauth2-permission-grant list \
  --filter "clientId eq '$SP_ID'" \
  --output table

# Thu hồi app role assignment (application permission)
ASSIGNMENT_ID=$(az rest --method GET \
  --url "https://graph.microsoft.com/v1.0/servicePrincipals/$SP_ID/appRoleAssignments" \
  --query "value[0].id" -o tsv)

az rest --method DELETE \
  --url "https://graph.microsoft.com/v1.0/servicePrincipals/$SP_ID/appRoleAssignments/$ASSIGNMENT_ID"
4

Kiểm Tra Audit Log

Mọi thao tác consent/revoke đều được ghi lại trong Audit Log của Entra ID — quan trọng cho điều tra bảo mật.

Cách 1 — Portal
  1. 4.1Entra ID → "Monitoring""Audit logs"
  2. 4.2Filter: Service = "Core Directory", Category = "ApplicationManagement"
  3. 4.3Tìm Activity: "Consent to application", "Remove delegated permission grant"
  4. 4.4Click vào từng entry → xem Initiated by (actor), Target, Modified properties
Cách 2 — Azure CLI
Azure CLI / MS Graph— truy vấn audit log
# Truy vấn audit log qua Microsoft Graph API
# Lọc events liên quan đến consent trong 24 giờ qua
az rest --method GET \
  --url "https://graph.microsoft.com/v1.0/auditLogs/directoryAudits?\$filter=activityDisplayName eq 'Consent to application' and activityDateTime ge $(date -u -d '24 hours ago' +%Y-%m-%dT%H:%M:%SZ)&\$top=10" \
  --query "value[].{Time:activityDateTime, Activity:activityDisplayName, Actor:initiatedBy.user.userPrincipalName, Target:targetResources[0].displayName}" \
  --output table

# Lọc consent revoke events
az rest --method GET \
  --url "https://graph.microsoft.com/v1.0/auditLogs/directoryAudits?\$filter=activityDisplayName eq 'Remove delegated permission grant'&\$top=10" \
  --query "value[].{Time:activityDateTime, Actor:initiatedBy.user.userPrincipalName, Target:targetResources[0].displayName}" \
  --output table
5

Cấu Hình User Consent Settings

Ngăn user tự cấp quyền cho app chưa được admin phê duyệt — giảm nguy cơ Illicit Consent Grant Attack.

Cách 1 — Portal
  1. 5.1Entra ID → "Enterprise applications""Consent and permissions"
  2. 5.2Tab "User consent settings" → quan sát tùy chọn hiện tại
  3. 5.3Chọn "Allow user consent for apps from verified publishers, for selected permissions" (khuyến nghị)
  4. 5.4Tab "Admin consent requests" → bật "Users can request admin consent" → cấu hình approvers
  5. 5.5Save → từ nay user cần xin phê duyệt admin thay vì tự cấp quyền
Cách 2 — Azure CLI
Azure CLI / MS Graph— cấu hình consent policy
# Xem authorization policy hiện tại
az rest --method GET \
  --url "https://graph.microsoft.com/v1.0/policies/authorizationPolicy" \
  --query "{DefaultUserConsent:defaultUserRolePermissions.allowedToCreateApps, PermissionGrantPoliciesAssigned:permissionGrantPoliciesAssigned}" \
  --output json

# Tắt khả năng user tự consent (chỉ admin mới consent được)
# Cập nhật permissionGrantPoliciesAssigned thành rỗng
az rest --method PATCH \
  --url "https://graph.microsoft.com/v1.0/policies/authorizationPolicy" \
  --headers "Content-Type=application/json" \
  --body '{"permissionGrantPoliciesAssigned":[]}'

# Xác nhận thay đổi
az rest --method GET \
  --url "https://graph.microsoft.com/v1.0/policies/authorizationPolicy" \
  --query "permissionGrantPoliciesAssigned" -o json

📊 Kết Quả Đầu Ra Lab 16

Danh sách grants đã kiểm tra

Biết xem toàn bộ OAuth grants trong tenant qua Portal và CLI

Permissions chi tiết đã xem

Phân loại được delegated vs application permission grants

Consent đã thu hồi thành công

Permission bị thu hồi không còn hiển thị trong Permissions tab

Audit log có entries

Entra Audit Log ghi lại "Remove delegated permission grant" với actor và target

User consent policy đã cấu hình

User không thể tự cấp quyền — cần xin phê duyệt admin

Hiểu rủi ro Illicit Consent Grant

Nhận biết các permission nguy hiểm: Mail.ReadWrite, Files.ReadWrite.All, Directory.ReadWrite

🧹 Dọn Dẹp

Azure CLI— khôi phục consent policy về mặc định
# Khôi phục user consent về "verified publishers only" (mặc định an toàn)
az rest --method PATCH \
  --url "https://graph.microsoft.com/v1.0/policies/authorizationPolicy" \
  --headers "Content-Type=application/json" \
  --body '{"permissionGrantPoliciesAssigned":["managePermissionGrantsForSelf.microsoft-user-default-legacy"]}'

# Ứng dụng từ Lab 15 đã bị thu hồi consent — có thể xóa hẳn nếu không dùng nữa
az ad app delete --id $APP_ID

❓ Câu Hỏi Ôn Tập

1. Illicit Consent Grant Attack là gì? Kẻ tấn công thực hiện như thế nào và Azure có thể phòng chống bằng cách nào?

Gợi ý: Kẻ tấn công tạo app độc hại, trick user consent qua phishing link → app nhận access token. Phòng chống: tắt user consent, yêu cầu verified publisher, bật admin consent workflow.

2. Khi thu hồi OAuth consent, user đang đăng nhập có bị ngắt phiên ngay lập tức không? Làm thế nào để force logout?

Gợi ý: Không ngay lập tức — access token còn hiệu lực đến khi hết hạn (thường 1 giờ). Để force: thu hồi refresh token bằng az ad user revoke-sign-in-sessions hoặc qua Entra ID.

3. Sự khác biệt giữa "consentType = Principal" và "consentType = AllPrincipals" trong OAuth grant?

Gợi ý: Principal = user consent (chỉ cho user đó). AllPrincipals = admin consent (cho tất cả user trong tenant).

4. Microsoft Entra ID App Governance và Microsoft Defender for Cloud Apps có thể hỗ trợ gì trong việc phát hiện app nguy hiểm?

Gợi ý: Phát hiện app dùng quyền cao nhưng ít user dùng, alert khi app mới nhận quyền cao, anomaly detection dựa trên pattern sử dụng API.

5. Tại sao Audit Log quan trọng trong điều tra sự cố OAuth? Cần export log đi đâu để lưu trữ lâu dài?

Gợi ý: Audit Log chỉ lưu 30 ngày (P1) hoặc 7 ngày (free). Cần stream sang Log Analytics Workspace, Storage Account, hoặc Event Hub để lưu dài hạn và tích hợp SIEM.

Lab 15: App Registration Thư viện Labs Lab 17: System-assigned MI cho VM
Zalo