🎯 Mục Tiêu Lab
Hiểu legacy authentication là gì và tại sao phải chặn
Nhận diện legacy auth trong sign-in logs trước khi chặn
Tạo CA policy block tất cả legacy auth client apps
Loại trừ break-glass account và service accounts cần legacy auth
Xác minh policy hoạt động qua sign-in log analysis
Kiểm tra workload/service account nào đang dùng legacy auth
📋 Chuẩn Bị
- Quyền Conditional Access Administrator hoặc Global Admin
- Entra ID P1/P2 license
- Break-glass account đã có sẵn
- Đã đọc sign-in log 7-14 ngày để xác định ai đang dùng legacy auth
- SMTP AUTH — dùng để gửi mail (không hỗ trợ MFA)
- IMAP4 / POP3 — mail clients cũ
- Exchange ActiveSync (EAS) legacy — phone cũ
- Basic Authentication — Office 2013 trở về trước
- Exchange Web Services, MAPI over HTTP cũ
🏗️ Kịch Bản
Microsoft Security Report cho thấy hơn 99% credential spray attacks và password spray attacks nhắm vào legacy authentication protocols — vì chúng không hỗ trợ MFA, kẻ tấn công chỉ cần username + password là đủ. HoaTranLab Corp đã bật MFA nhưng một số user vẫn dùng Outlook 2010 và mail app cũ. Bạn cần: (1) kiểm tra legacy auth usage trong log 14 ngày qua, (2) thông báo cho các user liên quan migration sang modern auth, (3) chặn toàn bộ legacy auth bằng CA policy.
🧪 Các Bước Thực Hiện
Khảo Sát Legacy Auth Usage trong Sign-in Logs
Trước khi chặn, phải biết ai đang dùng legacy auth để tránh gây downtime bất ngờ.
- 1.1Entra ID → Monitoring → Sign-in logs → Add filter
- 1.2Filter: Client app → chọn: Exchange ActiveSync, IMAP, MAPI, POP3, SMTP, Other clients
- 1.3Date range: Last 14 days → Export kết quả ra CSV để phân tích
- 1.4Ghi chú user nào đang dùng → thông báo trước khi block
Connect-MgGraph -Scopes "AuditLog.Read.All"
# Legacy auth client app types
$legacyClientApps = @(
"exchangeActiveSync", "imap", "pop3", "smtp",
"mapi", "other"
)
# Tìm sign-ins dùng legacy auth trong 14 ngày qua
$since = (Get-Date).AddDays(-14).ToString("yyyy-MM-ddTHH:mm:ssZ")
$results = @()
foreach ($app in $legacyClientApps) {
$signIns = Get-MgAuditLogSignIn `
-Filter "clientAppUsed eq '$app' and createdDateTime ge $since" `
-Top 50 |
Select-Object UserPrincipalName, ClientAppUsed,
AppDisplayName, CreatedDateTime,
@{N="OS";E={$_.DeviceDetail.OperatingSystem}}
$results += $signIns
}
# Tổng hợp: ai đang dùng legacy auth
$results | Group-Object UserPrincipalName |
Select-Object Name, Count, @{N="Apps";E={($_.Group.ClientAppUsed | Sort-Object -Unique) -join ", "}} |
Sort-Object Count -Descending |
Format-Table -AutoSize
Tạo CA Policy — Block All Legacy Authentication
- 2.1Conditional Access → New policy
- 2.2Name:
CA-AZ500-BlockLegacyAuth - 2.3Users: Include → All users → Exclude → break-glass account (và service accounts cần legacy auth nếu có)
- 2.4Target resources: All cloud apps
- 2.5Conditions → Client apps: tick tất cả legacy: Exchange ActiveSync clients, Other clients (bao gồm IMAP, POP3, SMTP AUTH, MAPI, EWS)
- 2.6KHÔNG tick "Browser" và "Mobile apps and desktop clients" (đây là modern auth — không nên block)
- 2.7Grant: Block access → Enable policy: Report-only → Save
Connect-MgGraph -Scopes "Policy.ReadWrite.ConditionalAccess"
$bgId = (Get-MgUser -Filter "UserPrincipalName eq '[email protected]'").Id
$params = @{
displayName = "CA-AZ500-BlockLegacyAuth"
state = "enabledForReportingButNotEnforced" # Report-only mode
conditions = @{
users = @{
includeUsers = @("All")
excludeUsers = @($bgId)
}
applications = @{
includeApplications = @("All")
}
clientAppTypes = @(
"exchangeActiveSync", # EAS legacy
"other" # IMAP, POP3, SMTP AUTH, MAPI, EWS, Basic Auth
)
# Modern auth (browser, mobileAppsAndDesktopClients) NOT included = not blocked
}
grantControls = @{
operator = "OR"
builtInControls = @("block")
}
}
New-MgIdentityConditionalAccessPolicy -BodyParameter $params
Write-Host "CA-AZ500-BlockLegacyAuth created in Report-only mode"
exchangeActiveSync và other là đủ để block tất cả legacy auth. Không chọn browser và mobileAppsAndDesktopClients vì đó là modern auth (MSAL, OAuth 2.0).
Bật Policy On và Xác Minh Sign-in Log
- 3.1Sau khi Report-only log xác nhận đúng (không có service account quan trọng bị ảnh hưởng) → bật On
- 3.2Sign-in logs → Filter: Client app = Exchange ActiveSync / Other clients → xem status = Failure, error 53003
- 3.3Xác nhận: user dùng browser/Outlook 365 (modern auth) → KHÔNG bị ảnh hưởng
# Bật policy On
$policyId = (Get-MgIdentityConditionalAccessPolicy `
-Filter "displayName eq 'CA-AZ500-BlockLegacyAuth'").Id
Update-MgIdentityConditionalAccessPolicy `
-ConditionalAccessPolicyId $policyId `
-State "enabled"
# Kiểm tra sign-in log - legacy auth bị block
$since = (Get-Date).AddHours(-2).ToString("yyyy-MM-ddTHH:mm:ssZ")
Get-MgAuditLogSignIn `
-Filter "createdDateTime ge $since and clientAppUsed ne 'Browser' and clientAppUsed ne 'Mobile Apps and Desktop Clients'" `
-Top 20 |
Select-Object UserPrincipalName, ClientAppUsed,
@{N="Status";E={if($_.Status.ErrorCode -eq 0){"Success"}else{"Blocked ($($_.Status.ErrorCode))"}}} |
Format-Table -AutoSize
UserPrincipalName ClientAppUsed Status
----------------- ------------- ------
[email protected] Exchange ActiveSync Blocked (53003)
[email protected] IMAP4 Blocked (53003)
[email protected] POP3 Blocked (53003)
# Browser và modern Outlook: không xuất hiện vì không bị block
📊 Kết Quả Đầu Ra
Danh sách user dùng legacy auth trong 14 ngày qua đã được xuất và thông báo
CA-AZ500-BlockLegacyAuth enabled, blocking EAS + Other clients
Sign-in log: Error 53003 cho IMAP, POP3, EAS, Other clients
Browser và modern Outlook tiếp tục hoạt động bình thường
🧹 Dọn Dẹp
Policy này nên giữ On vĩnh viễn trong production. Chỉ tắt trong lab nếu cần thử nghiệm legacy auth:
# Chỉ tắt nếu thực sự cần cho mục đích lab
Update-MgIdentityConditionalAccessPolicy `
-ConditionalAccessPolicyId $policyId `
-State "disabled"
# Khuyến nghị: giữ Report-only thay vì disable hoàn toàn
❓ Câu Hỏi Ôn Tập
1. Tại sao legacy authentication nguy hiểm hơn modern authentication về mặt bảo mật?
Gợi ý: Legacy auth không hỗ trợ MFA, không hỗ trợ CA policy enforcement, dùng Basic Auth (username/password plaintext) — kẻ tấn công có thể bypass MFA hoàn toàn
2. Khi tạo CA policy block legacy auth, tại sao chỉ chọn "Exchange ActiveSync" và "Other clients" trong Client apps?
Gợi ý: "Browser" và "Mobile apps and desktop clients" đại diện cho modern auth (OAuth 2.0/OIDC) — block chúng sẽ chặn cả user dùng browser và Outlook 365 modern
3. Trước khi block legacy auth, bước chuẩn bị quan trọng nhất là gì?
Gợi ý: Kiểm tra sign-in log 14-30 ngày để phát hiện user/service account đang dùng legacy auth, thông báo và migration họ sang modern auth trước
4. Printer scan-to-email dùng SMTP AUTH bị block sau khi bật policy — phải xử lý thế nào?
Gợi ý: Tạo service account riêng cho printer, exclude account đó khỏi policy. Hoặc tốt hơn: migrate printer sang OAuth 2.0 client credentials flow (M365 hỗ trợ từ 2022)