Çok Faktörlü Kimlik Doğrulama (MFA), günümüzün siber güvenlik ortamında kritik öneme sahip bir güvenlik katmanıdır. Microsoft Entra ID (eski adıyla Azure AD) kullanan organizasyonlarda, hangi kullanıcıların MFA korumasına sahip olduğunu ve kimlerin bu korumadan yoksun olduğunu bilmek, güvenlik yöneticileri için son derece önemlidir. Bu kapsamlı rehber, Microsoft Entra ID’de MFA durumunu çeşitli yöntemlerle nasıl kontrol edebileceğinizi ve raporlayabileceğinizi adım adım açıklamaktadır.
İçindekiler
- Giriş ve MFA’nın Önemi
- Microsoft Entra ID’de MFA Durumu Kontrol Yöntemleri
- Portal Üzerinden Kontrol
- PowerShell ile MFA Durumu Kontrolü
- Microsoft Graph API ile Sorgulama
- MFA Raporları Oluşturma
- Temel MFA Durumu Raporu
- Detaylı MFA Raporu
- Koşullu Erişim Tabanlı MFA Raporu
- MFA Durumunu Değerlendirme ve Analiz
- Sık Karşılaşılan Sorunlar ve Çözümleri
- İyi Uygulama Örnekleri ve Öneriler
- Sonuç
Giriş ve MFA’nın Önemi
Çok Faktörlü Kimlik Doğrulama (MFA), kullanıcının kimliğini doğrulamak için en az iki farklı doğrulama yöntemi gerektiren bir güvenlik süreci olup, genellikle “bildiğiniz bir şey” (parola), “sahip olduğunuz bir şey” (mobil cihaz veya güvenlik anahtarı) ve “olduğunuz bir şey” (biyometrik) kategorilerinden gelen faktörleri birleştirir.
MFA Neden Bu Kadar Önemlidir?
Microsoft’un araştırmalarına göre, MFA kullanımı hesap ele geçirme saldırılarını %99.9 oranında azaltabilmektedir. Bu, siber saldırılara karşı en etkili savunma mekanizmalarından biridir. Özellikle:
- Kimlik bilgisi hırsızlığı saldırılarına karşı koruma sağlar
- Veri ihlali riskini azaltır
- Fidye yazılımı ve diğer zararlı yazılım saldırılarını engellemeye yardımcı olur
- Düzenleyici gereksinimlere uyumu destekler (GDPR, HIPAA, vb.)
Microsoft Entra ID’de MFA Yapılandırma Türleri
Microsoft Entra ID’de MFA’yı üç farklı şekilde yapılandırabilirsiniz:
- Kullanıcı Başına MFA: Her kullanıcıya doğrudan uygulanan, eski yöntem
- Koşullu Erişim Politikası Tabanlı MFA: Belirli koşullara göre MFA gerektirmenize olanak tanıyan modern yaklaşım
- Güvenlik Varsayılanları: Tüm kullanıcılar için MFA gerektiren otomatik bir politika
Bu rehberde, her bir yapılandırma türünün MFA durumunu nasıl kontrol edeceğimizi inceleyeceğiz.
Microsoft Entra ID’de MFA Durumu Kontrol Yöntemleri
Portal Üzerinden Kontrol
1. Kullanıcı Başına MFA Durumunu Kontrol Etme
Bu yöntem, kullanıcı başına yapılandırılan eski MFA yönteminin durumunu kontrol etmek için kullanılır:
- Microsoft Entra Yönetim Merkezi‘ne gidin ve yönetici olarak oturum açın
- Sol menüden Kimlik > Kullanıcılar > Tüm kullanıcılar seçeneğine tıklayın
- Üst menüden Çok faktörlü kimlik doğrulama‘ya tıklayın (Bu seçenek görünmüyorsa, sağ üst köşedeki “Eski portal görünümü” seçeneğine tıklayın)
- Açılan sayfada tüm kullanıcıların MFA durumunu göreceksiniz:
- Devre Dışı: MFA yapılandırılmamış
- Etkin: MFA yapılandırılmış ama henüz kaydedilmemiş
- Zorunlu: MFA tam olarak yapılandırılmış ve kullanımda
2. Koşullu Erişim Tabanlı MFA’yı Kontrol Etme
Koşullu erişim politikaları aracılığıyla uygulanan MFA durumunu kontrol etmek için:
- Microsoft Entra Yönetim Merkezi‘ne gidin
- Sol menüden Koruma > Koşullu Erişim > Politikalar‘a tıklayın
- Mevcut politikalarınızı gözden geçirin ve MFA gerektiren politikaları inceleyin
- Her politika için Kullanıcılar ve gruplar bölümünde kimler için MFA yapılandırıldığını görebilirsiniz
3. Güvenlik Varsayılanlarını Kontrol Etme
Güvenlik varsayılanlarının durumunu kontrol etmek için:
- Microsoft Entra Yönetim Merkezi‘ne gidin
- Sol menüden Koruma > Güvenlik varsayılanları‘na tıklayın
- Güvenlik varsayılanlarının Etkin, Devre dışı veya Yalnızca raporlama modunda olup olmadığını kontrol edin
PowerShell ile MFA Durumu Kontrolü
PowerShell kullanarak MFA durumunu kontrol etmek, özellikle büyük kuruluşlarda daha verimli ve otomatize edilebilir bir yöntemdir.
1. Temel MFA Durumu Kontrolü
Aşağıdaki PowerShell betiği, tüm kullanıcıların temel MFA durumunu kontrol eder:
# MSOnline modülünü yükleyin (eğer yüklü değilse) if (-not (Get-Module -ListAvailable -Name MSOnline)) { Install-Module -Name MSOnline -Force -AllowClobber } # Microsoft Entra ID'ye bağlanın Connect-MsolService # Tüm kullanıcıların MFA durumunu alın $users = Get-MsolUser -All | Select-Object DisplayName, UserPrincipalName, @{ Name = "MFA Durumu"; Expression = { if ($_.StrongAuthenticationRequirements.State -ne $null) { $_.StrongAuthenticationRequirements.State } else { "Devre Dışı" } } } # Sonuçları görüntüleyin $users | Format-Table -AutoSize # CSV olarak dışa aktarın $users | Export-Csv -Path "MFA_Durumu_$(Get-Date -Format 'yyyyMMdd').csv" -NoTypeInformation -Encoding UTF8
2. Detaylı MFA Durumu ve Kayıt Bilgileri
Daha detaylı bir MFA durumu raporu için, kullanıcıların kayıtlı kimlik doğrulama yöntemlerini de kontrol edebilirsiniz:
# Microsoft.Graph.Identity.SignIns modülünü yükleyin if (-not (Get-Module -ListAvailable -Name Microsoft.Graph.Identity.SignIns)) { Install-Module Microsoft.Graph.Identity.SignIns -Force } # Microsoft Graph'e bağlanın Connect-MgGraph -Scopes "User.Read.All", "UserAuthenticationMethod.Read.All" # Tüm kullanıcıları alın $users = Get-MgUser -All -Property DisplayName, UserPrincipalName, Id $userAuthMethods = @() foreach ($user in $users) { # Kullanıcının kimlik doğrulama yöntemlerini al $authMethods = Get-MgUserAuthenticationMethod -UserId $user.Id # MFA yöntemlerini say $authenticatorApp = ($authMethods | Where-Object { $_.AdditionalProperties["@odata.type"] -eq "#microsoft.graph.microsoftAuthenticatorAuthenticationMethod" }).Count $phoneAuth = ($authMethods | Where-Object { $_.AdditionalProperties["@odata.type"] -eq "#microsoft.graph.phoneAuthenticationMethod" }).Count $fido2Key = ($authMethods | Where-Object { $_.AdditionalProperties["@odata.type"] -eq "#microsoft.graph.fido2AuthenticationMethod" }).Count $softwareTotp = ($authMethods | Where-Object { $_.AdditionalProperties["@odata.type"] -eq "#microsoft.graph.softwareOathAuthenticationMethod" }).Count # MFA durumunu belirle $mfaStatus = if (($authenticatorApp + $phoneAuth + $fido2Key + $softwareTotp) -gt 0) { "Etkin" } else { "Devre Dışı" } # Sonuç nesnesini oluştur $userAuthMethods += [PSCustomObject]@{ DisplayName = $user.DisplayName UserPrincipalName = $user.UserPrincipalName MFADurumu = $mfaStatus MicrosoftAuthenticator = $authenticatorApp -gt 0 TelefonDoğrulama = $phoneAuth -gt 0 FIDO2GüvenlikAnahtarı = $fido2Key -gt 0 YazılımTOTP = $softwareTotp -gt 0 KayıtlıYöntemSayısı = ($authenticatorApp + $phoneAuth + $fido2Key + $softwareTotp) } } # Sonuçları görüntüle $userAuthMethods | Format-Table -AutoSize # CSV olarak dışa aktar $userAuthMethods | Export-Csv -Path "Detaylı_MFA_Raporu_$(Get-Date -Format 'yyyyMMdd').csv" -NoTypeInformation -Encoding UTF8
Microsoft Graph API ile Sorgulama
Microsoft Graph API, programatik olarak MFA durumunu sorgulamak için kullanılabilir. Bu, özellikle özel dashboard veya raporlama araçları oluşturmak istiyorsanız faydalıdır.
Temel bir Graph API sorgusu örneği:
GET https://graph.microsoft.com/v1.0/users?$select=displayName,userPrincipalName,id
Ardından her kullanıcı için kimlik doğrulama yöntemlerini sorgulayabilirsiniz:
GET https://graph.microsoft.com/v1.0/users/{userId}/authentication/methods
MFA Raporları Oluşturma
Temel MFA Durumu Raporu
Aşağıdaki PowerShell betiği, tüm kullanıcıların MFA durumunu içeren temel bir rapor oluşturur:
# Gerekli modülleri içe aktar Import-Module MSOnline # Bağlan Connect-MsolService # MFA durumunu al $report = @() Get-MsolUser -All | ForEach-Object { $user = $_ $mfaMethods = $user.StrongAuthenticationMethods $mfaEnabled = $user.StrongAuthenticationRequirements.Count -gt 0 $defaultMethod = ($mfaMethods | Where-Object { $_.IsDefault -eq $true }).MethodType $report += [PSCustomObject]@{ Kullanıcı = $user.DisplayName UPN = $user.UserPrincipalName MFADurumu = if ($mfaEnabled) { "Etkin" } else { "Devre Dışı" } VarsayılanYöntem = if ($defaultMethod) { $defaultMethod } else { "Yok" } KayıtlıYöntemSayısı = $mfaMethods.Count SonGirişTarihi = $user.LastPasswordChangeTimestamp } } # Sonuçları görüntüle ve dışa aktar $report | Format-Table -AutoSize $report | Export-Csv -Path "MFA_Durum_Raporu.csv" -NoTypeInformation -Encoding UTF8
Detaylı MFA Raporu
Daha kapsamlı bir MFA raporu için, aşağıdaki daha gelişmiş betiği kullanabilirsiniz:
# Microsoft Graph modüllerini içe aktar Import-Module Microsoft.Graph.Authentication Import-Module Microsoft.Graph.Identity.SignIns Import-Module Microsoft.Graph.Users # Microsoft Graph'e bağlan Connect-MgGraph -Scopes "User.Read.All", "UserAuthenticationMethod.Read.All", "Directory.Read.All" # Kullanıcıları al $users = Get-MgUser -All -Property DisplayName, UserPrincipalName, Id, AccountEnabled, AssignedLicenses $detailedReport = @() foreach ($user in $users) { # Yalnızca etkin hesaplar için if ($user.AccountEnabled) { # Kullanıcının kimlik doğrulama yöntemlerini al $authMethods = Get-MgUserAuthenticationMethod -UserId $user.Id # Kayıtlı yöntemleri belirle $methodTypes = @() $mfaCapable = $false foreach ($method in $authMethods) { $oDataType = $method.AdditionalProperties["@odata.type"] switch ($oDataType) { "#microsoft.graph.microsoftAuthenticatorAuthenticationMethod" { $methodTypes += "Microsoft Authenticator" $mfaCapable = $true } "#microsoft.graph.phoneAuthenticationMethod" { $methodTypes += "Telefon" $mfaCapable = $true } "#microsoft.graph.passwordAuthenticationMethod" { $methodTypes += "Parola" } "#microsoft.graph.fido2AuthenticationMethod" { $methodTypes += "FIDO2 Güvenlik Anahtarı" $mfaCapable = $true } "#microsoft.graph.softwareOathAuthenticationMethod" { $methodTypes += "Yazılım TOTP" $mfaCapable = $true } "#microsoft.graph.windowsHelloForBusinessAuthenticationMethod" { $methodTypes += "Windows Hello for Business" $mfaCapable = $true } "#microsoft.graph.emailAuthenticationMethod" { $methodTypes += "E-posta" $mfaCapable = $true } } } # Yöntemler için konsolide edilmiş bir dize oluştur $methodsString = if ($methodTypes.Count -gt 0) { $methodTypes -join ", " } else { "Yok" } # Kullanıcı türünü belirle $isMember = $null -ne ($user.AssignedLicenses) -and $user.AssignedLicenses.Count -gt 0 # Rapor nesnesini oluştur $detailedReport += [PSCustomObject]@{ DisplayName = $user.DisplayName UserPrincipalName = $user.UserPrincipalName MFADurumu = if ($mfaCapable) { "Etkin" } else { "Devre Dışı" } KayıtlıYöntemler = $methodsString YöntemSayısı = $methodTypes.Count KullanıcıTürü = if ($isMember) { "Lisanslı Kullanıcı" } else { "Misafir/Lisanssız" } } } } # Sonuçları görüntüle $detailedReport | Format-Table -AutoSize # CSV olarak dışa aktar $detailedReport | Export-Csv -Path "Detaylı_MFA_Raporu_$(Get-Date -Format 'yyyyMMdd').csv" -NoTypeInformation -Encoding UTF8
Koşullu Erişim Tabanlı MFA Raporu
Koşullu erişim tabanlı MFA konfigürasyonları için aşağıdaki betiği kullanabilirsiniz:
# Microsoft Graph modüllerini içe aktar Import-Module Microsoft.Graph.Authentication Import-Module Microsoft.Graph.Identity.SignIns # Microsoft Graph'e bağlan Connect-MgGraph -Scopes "Policy.Read.All", "Directory.Read.All" # Koşullu erişim politikalarını al $policies = Get-MgIdentityConditionalAccessPolicy # MFA gerektiren politikaları filtrele $mfaPolicies = $policies | Where-Object { $_.State -eq "enabled" -and ($_.GrantControls.BuiltInControls -contains "mfa" -or $_.GrantControls.TermsOfUse -ne $null -or $_.GrantControls.AuthenticationStrength.Id -ne $null) } $caReport = @() foreach ($policy in $mfaPolicies) { # Politika kapsamındaki kullanıcıları belirle $includeUsers = if ($policy.Conditions.Users.IncludeUsers -contains "All") { "Tüm kullanıcılar" } elseif ($policy.Conditions.Users.IncludeUsers.Count -gt 0) { "Seçili kullanıcılar: $($policy.Conditions.Users.IncludeUsers.Count)" } elseif ($policy.Conditions.Users.IncludeGroups.Count -gt 0) { "Seçili gruplar: $($policy.Conditions.Users.IncludeGroups.Count)" } elseif ($policy.Conditions.Users.IncludeRoles.Count -gt 0) { "Seçili roller: $($policy.Conditions.Users.IncludeRoles.Count)" } else { "Belirtilmemiş" } # Hariç tutulan kullanıcıları belirle $excludeUsers = if ($policy.Conditions.Users.ExcludeUsers.Count -gt 0 -or $policy.Conditions.Users.ExcludeGroups.Count -gt 0 -or $policy.Conditions.Users.ExcludeRoles.Count -gt 0) { "Evet" } else { "Hayır" } # Doğrulama türünü belirle $authType = if ($policy.GrantControls.BuiltInControls -contains "mfa") { "Standart MFA" } elseif ($policy.GrantControls.AuthenticationStrength.Id -ne $null) { "Kimlik Doğrulama Gücü" } else { "Diğer" } # Rapor nesnesini oluştur $caReport += [PSCustomObject]@{ PolitikaAdı = $policy.DisplayName PolitikaDurumu = $policy.State DahilKullanıcılar = $includeUsers HariçTutulanKullanıcılar = $excludeUsers MFATürü = $authType UygulamalarKapsamı = if ($policy.Conditions.Applications.IncludeApplications -contains "All") { "Tüm uygulamalar" } else { "Seçili uygulamalar" } OluşturmaTarihi = $policy.CreatedDateTime SonGüncellemeTarihi = $policy.ModifiedDateTime } } # Sonuçları görüntüle $caReport | Format-Table -AutoSize # CSV olarak dışa aktar $caReport | Export-Csv -Path "Koşullu_Erişim_MFA_Raporu_$(Get-Date -Format 'yyyyMMdd').csv" -NoTypeInformation -Encoding UTF8
MFA Durumunu Değerlendirme ve Analiz
MFA raporlarınızı oluşturduktan sonra, organizasyonunuzun güvenlik durumunu değerlendirmek için şu analizleri yapabilirsiniz:
1. MFA Benimseme Oranı
Toplam kullanıcı sayınızın yüzde kaçının MFA kullanmaya başladığını hesaplayın:
$totalUsers = $detailedReport.Count $mfaEnabledUsers = ($detailedReport | Where-Object { $_.MFADurumu -eq "Etkin" }).Count $mfaAdoptionRate = [math]::Round(($mfaEnabledUsers / $totalUsers) * 100, 2) Write-Host "MFA Benimseme Oranı: $mfaAdoptionRate%" Write-Host "Toplam Kullanıcı: $totalUsers" Write-Host "MFA Etkinleştirilmiş Kullanıcı: $mfaEnabledUsers" Write-Host "MFA Etkinleştirilmemiş Kullanıcı: $($totalUsers - $mfaEnabledUsers)"
2. MFA Yöntem Dağılımı
Kullanıcıların hangi MFA yöntemlerini tercih ettiğini analiz edin:
$authenticatorUsers = ($detailedReport | Where-Object { $_.KayıtlıYöntemler -like "*Microsoft Authenticator*" }).Count $phoneUsers = ($detailedReport | Where-Object { $_.KayıtlıYöntemler -like "*Telefon*" }).Count $fido2Users = ($detailedReport | Where-Object { $_.KayıtlıYöntemler -like "*FIDO2*" }).Count $windowsHelloUsers = ($detailedReport | Where-Object { $_.KayıtlıYöntemler -like "*Windows Hello*" }).Count Write-Host "Microsoft Authenticator Kullanıcıları: $authenticatorUsers" Write-Host "Telefon Doğrulama Kullanıcıları: $phoneUsers" Write-Host "FIDO2 Güvenlik Anahtarı Kullanıcıları: $fido2Users" Write-Host "Windows Hello for Business Kullanıcıları: $windowsHelloUsers"
3. Departman Bazlı MFA Uyum Analizi
Departmanlar (veya iş birimleri) arasında MFA uyum oranlarını karşılaştırın:
# Departman bilgisini içeren kullanıcı listesi $departmentUsers = Get-MgUser -All -Property DisplayName, UserPrincipalName, Department, Id # Departman bazlı analiz $departmentReport = @() $departments = $departmentUsers | Select-Object -ExpandProperty Department -Unique | Where-Object { $_ -ne $null -and $_ -ne "" } foreach ($dept in $departments) { $deptUsers = $departmentUsers | Where-Object { $_.Department -eq $dept } $deptUserCount = $deptUsers.Count $deptMfaUsers = 0 foreach ($user in $deptUsers) { $mfaStatus = $detailedReport | Where-Object { $_.UserPrincipalName -eq $user.UserPrincipalName } | Select-Object -ExpandProperty MFADurumu if ($mfaStatus -eq "Etkin") { $deptMfaUsers++ } } $deptMfaRate = if ($deptUserCount -gt 0) { [math]::Round(($deptMfaUsers / $deptUserCount) * 100, 2) } else { 0 } $departmentReport += [PSCustomObject]@{ Departman = $dept ToplamKullanıcı = $deptUserCount MFAEtkinKullanıcı = $deptMfaUsers MFAUyumOranı = "$deptMfaRate%" } } # Sonuçları görüntüle $departmentReport | Sort-Object -Property MFAUyumOranı -Descending | Format-Table -AutoSize # CSV olarak dışa aktar $departmentReport | Export-Csv -Path "Departman_MFA_Raporu_$(Get-Date -Format 'yyyyMMdd').csv" -NoTypeInformation -Encoding UTF8
Sık Karşılaşılan Sorunlar ve Çözümleri
Sorun 1: MFA Durumu Raporları Doğru Görünmüyor
Belirtiler: Koşullu erişim politikaları ile MFA uygulanan kullanıcılar, raporlarda “Devre Dışı” olarak görünüyor.
Çözüm:
- Kullanıcı başına MFA yapılandırması ve koşullu erişim tabanlı MFA farklı sistemlerde takip edilir
- Her iki yöntemi de raporlarınızda dikkate alın
- Kullanıcı başına MFA durumunu PowerShell ile kontrol ederken, koşullu erişim politikalarını da ayrıca kontrol edin
Sorun 2: PowerShell Komutları İzin Hatası Veriyor
Belirtiler: PowerShell betikleri çalıştırıldığında “Yeterli izniniz yok” hatası alınıyor.
Çözüm:
- Global Yönetici veya Güvenlik Yöneticisi rolüne sahip bir hesapla oturum açın
- Microsoft Graph API izinlerini doğru şekilde isteyin:
Connect-MgGraph -Scopes "User.Read.All", "UserAuthenticationMethod.Read.All", "Directory.Read.All", "Policy.Read.All"
- Uygulamanız için gerekli API izinlerini Azure Portal’dan atayın
Sorun 3: Bazı Kullanıcılar MFA’yı Kaydettikleri Halde Raporlarda Görünmüyor
Belirtiler: Bazı kullanıcılar MFA kayıt işlemini tamamladıklarını bildiriyor, ancak raporlarda hala MFA’sız görünüyorlar.
Çözüm:
- MFA kayıt durumunun güncelleştirilmesi bazen 24 saate kadar sürebilir
- Kullanıcının kayıt işlemini doğru tamamladığından emin olun
- Azure AD’nin önbelleği nedeniyle raporların gecikmeli olabileceğini hesaba katın
- Kullanıcının kaydının onaylanması için oturum açma kayıtlarını kontrol edin
İyi Uygulama Örnekleri ve Öneriler
1. MFA Denetim ve Uyum Stratejisi
Organizasyonunuzda MFA’yı etkin bir şekilde yönetmek için bir denetim ve uyum stratejisi oluşturun:
- Haftalık veya aylık MFA durum raporları oluşturun
- MFA kullanmayan kullanıcıları düzenli olarak izleyin
- Departman yöneticilerine MFA uyum raporları gönderin
- MFA kullanmayan kullanıcılar için otomatik e-posta hatırlatıcılar ayarlayın
- Yüksek ayrıcalıklı hesapları kontrol et
Microsoft Power BI kullanarak etkileşimli bir MFA izleme paneli oluşturabilirsiniz:
1. Yukarıdaki PowerShell betiklerini kullanarak düzenli olarak CSV raporları oluşturun
2. Power BI Desktop’ı açın ve “Veri Al” > “Metin/CSV” seçeneğini kullanarak CSV dosyasını içe aktarın
3. Aşağıdaki görselleri içeren bir dashboard oluşturun:
– MFA benimseme oranını gösteren bir gösterge (gauge)
– Departman bazlı MFA uyumunu gösteren bir çubuk grafik
– MFA yöntem dağılımını gösteren bir pasta grafik
– MFA etkin olmayan kullanıcıları gösteren bir tablo
– Zamana göre MFA benimseme eğilimini gösteren bir çizgi grafik
4. Power BI raporunu programlı olarak yenilemek için Power BI Gateway yapılandırın
5. Raporu Power BI Service’de yayınlayın ve paylaşın
### 4. MFA Güvenlik Açıkları ve Risk Değerlendirmesi
MFA yapılandırmanızdaki potansiyel güvenlik açıklarını tanımlamak için:
1. Yüksek ayrıcalıklı hesapların MFA durumunu öncelikli olarak izleyin:
$adminRoles = @( "Global Administrator", "Privileged Role Administrator", "User Administrator", "SharePoint Administrator", "Exchange Administrator", "Conditional Access Administrator", "Security Administrator" ) # Rol üyelerini ve MFA durumlarını al $privilegedUsers = @() foreach ($role in $adminRoles) { $roleUsers = Get-MgDirectoryRole -Filter "DisplayName eq '$role'" | Get-MgDirectoryRoleMember | Where-Object { $_.AdditionalProperties["@odata.type"] -eq "#microsoft.graph.user" } foreach ($user in $roleUsers) { $userId = $user.Id $userObj = Get-MgUser -UserId $userId # MFA durumunu kontrol et $authMethods = Get-MgUserAuthenticationMethod -UserId $userId $mfaEnabled = ($authMethods | Where-Object { $_.AdditionalProperties["@odata.type"] -ne "#microsoft.graph.passwordAuthenticationMethod" }).Count -gt 0 $privilegedUsers += [PSCustomObject]@{ KullanıcıAdı = $userObj.DisplayName KullanıcıPrincipalName = $userObj.UserPrincipalName Rol = $role MFADurumu = if ($mfaEnabled) { "Etkin" } else { "Devre Dışı" } RiskSeviyesi = if ($mfaEnabled) { "Düşük" } else { "Yüksek" } } } } # Sonuçları görüntüle $privilegedUsers | Format-Table -AutoSize # CSV olarak dışa aktar $privilegedUsers | Export-Csv -Path "Yetkili_Kullanıcılar_MFA_Raporu_$(Get-Date -Format 'yyyyMMdd').csv" -NoTypeInformation -Encoding UTF8
Güvenlik açıklarını ve risk değerlendirme raporunu oluşturun:
# MFA güvenlik açıklarını değerlendir $vulnReport = [PSCustomObject]@{ YüksekRiskliYöneticiler = ($privilegedUsers | Where-Object { $_.MFADurumu -eq "Devre Dışı" }).Count ToplamYöneticiSayısı = $privilegedUsers.Count DüşükGüvenlikliMFAYöntemleri = ($detailedReport | Where-Object { $_.KayıtlıYöntemler -like "*SMS*" -or $_.KayıtlıYöntemler -like "*Telefon*" }).Count KonsolideRiskPuanı = 0 # Hesaplanacak } # Risk puanı hesapla (0-100 arasında, 100 en riskli) $adminRiskWeight = 40 # Yönetici MFA eksikliği ağırlığı $userRiskWeight = 30 # Genel kullanıcı MFA eksikliği ağırlığı $methodRiskWeight = 30 # Düşük güvenlikli MFA yöntemi ağırlığı $adminRiskScore = if ($vulnReport.ToplamYöneticiSayısı -gt 0) { ($vulnReport.YüksekRiskliYöneticiler / $vulnReport.ToplamYöneticiSayısı) * $adminRiskWeight } else { 0 } $userRiskScore = if ($totalUsers -gt 0) { (($totalUsers - $mfaEnabledUsers) / $totalUsers) * $userRiskWeight } else { 0 } $methodRiskScore = if ($mfaEnabledUsers -gt 0) { ($vulnReport.DüşükGüvenlikliMFAYöntemleri / $mfaEnabledUsers) * $methodRiskWeight } else { 0 } $vulnReport.KonsolideRiskPuanı = [math]::Round($adminRiskScore + $userRiskScore + $methodRiskScore, 2) # Sonuçları görüntüle $vulnReport | Format-Table -AutoSize # Risk değerlendirmesi özeti $riskLevel = switch ($vulnReport.KonsolideRiskPuanı) { {$_ -lt 20} { "Çok Düşük Risk" } {$_ -lt 40} { "Düşük Risk" } {$_ -lt 60} { "Orta Risk" } {$_ -lt 80} { "Yüksek Risk" } default { "Çok Yüksek Risk" } } Write-Host "MFA Risk Değerlendirmesi: $riskLevel ($($vulnReport.KonsolideRiskPuanı)/100)" -ForegroundColor $( switch ($riskLevel) { "Çok Düşük Risk" { "Green" } "Düşük Risk" { "DarkGreen" } "Orta Risk" { "Yellow" } "Yüksek Risk" { "Red" } "Çok Yüksek Risk" { "DarkRed" } } )
Otomatik Düzeltme ve Uyum Sağlama
MFA uyumunu otomatik olarak iyileştirmek için aşağıdaki adımları uygulayabilirsiniz:
- MFA etkinleştirmesi gereken kullanıcılar için otomatik e-posta bildirim gönderimi:
# MFA eksik kullanıcılara bildirim gönder
$mfaMissingUsers = $detailedReport | Where-Object { $_.MFADurumu -eq "Devre Dışı" }
foreach ($user in $mfaMissingUsers) {
$emailBody = @"
Sayın $($user.DisplayName),
Şirketimizin güvenlik politikası gereği, Microsoft 365 hesabınız için Çok Faktörlü Kimlik Doğrulama (MFA) etkinleştirmeniz gerekmektedir.
MFA'yı etkinleştirmek için:
1. https://aka.ms/mfasetup adresine gidin
2. Kurumsal hesabınızla oturum açın
3. Ek güvenlik doğrulama yöntemlerinizi kurun
Daha fazla bilgi için IT Yardım Masası ile iletişime geçebilirsiniz.
Saygılarımızla,
IT Güvenlik Ekibi
"@
# E-posta gönderme kodunu burada uygulayın
# Send-MailMessage vb.
}
Yöneticiler için PowerShell ile zorunlu MFA uygulama
# Yönetici hesapları için MFA'yı zorunlu kıl $adminUsers = $privilegedUsers | Where-Object { $_.MFADurumu -eq "Devre Dışı" } foreach ($admin in $adminUsers) { # Kullanıcı başına MFA'yı etkinleştir $st = New-Object -TypeName Microsoft.Online.Administration.StrongAuthenticationRequirement $st.RelyingParty = "*" $st.State = "Enabled" $sta = @($st) Set-MsolUser -UserPrincipalName $admin.KullanıcıPrincipalName -StrongAuthenticationRequirements $sta Write-Host "$($admin.KullanıcıAdı) ($($admin.Rol)) için MFA zorunlu kılındı" -ForegroundColor Green }
Microsoft Entra ID MFA durumunu izlemek ve raporlamak, organizasyonunuzun güvenlik duruşunu iyileştirmek için kritik bir uygulamadır. Bu rehberde açıklanan yöntemler ve araçlarla:
- Tüm kullanıcılarınızın MFA durumunu kapsamlı bir şekilde görüntüleyebilirsiniz
- Güvenlik açıklarını proaktif olarak tanımlayabilirsiniz
- Uyum durumunu ölçebilir ve raporlayabilirsiniz
- Güvenlik duruşunuzu sürekli olarak iyileştirebilirsiniz
MFA’yı tüm kullanıcılarınız için uyguladığınızda, hesap ele geçirme saldırılarına karşı önemli bir koruma katmanı eklemiş olursunuz. Düzenli denetimler ve raporlar, bu kritik güvenlik kontrolünün organizasyonunuzda etkili bir şekilde uygulandığından emin olmanıza yardımcı olacaktır.
Unutmayın ki, MFA tek başına yeterli değildir – kimlik güvenliğini kapsamlı bir şekilde ele alan bir yaklaşımın parçası olmalıdır. Koşullu erişim politikaları, risk tabanlı kimlik doğrulama ve en az ayrıcalık ilkesi ile birlikte kullanıldığında, MFA modern bir güvenlik stratejisinin güçlü bir bileşeni haline gelir.
Önemli Not: Bu rehberde sağlanan PowerShell betikleri, kendi ortamınıza uyarlanması gerekebilir. Üretim ortamında uygulamadan önce test ortamında denemeniz önerilir.
Önemli Not: Bu rehberde sağlanan PowerShell betikleri, kendi ortamınıza uyarlanması gerekebilir. Üretim ortamında uygulamadan önce test ortamında denemeniz önerilir.