Microsoft Entra ID’de MFA Durumunu Kontrol Etme

Microsoft Entra ID'de MFA

Ç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

  1. Giriş ve MFA’nın Önemi
  2. Microsoft Entra ID’de MFA Durumu Kontrol Yöntemleri
    • Portal Üzerinden Kontrol
    • PowerShell ile MFA Durumu Kontrolü
    • Microsoft Graph API ile Sorgulama
  3. MFA Raporları Oluşturma
    • Temel MFA Durumu Raporu
    • Detaylı MFA Raporu
    • Koşullu Erişim Tabanlı MFA Raporu
  4. MFA Durumunu Değerlendirme ve Analiz
  5. Sık Karşılaşılan Sorunlar ve Çözümleri
  6. İyi Uygulama Örnekleri ve Öneriler
  7. 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:

  1. Kullanıcı Başına MFA: Her kullanıcıya doğrudan uygulanan, eski yöntem
  2. Koşullu Erişim Politikası Tabanlı MFA: Belirli koşullara göre MFA gerektirmenize olanak tanıyan modern yaklaşım
  3. 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:

  1. Microsoft Entra Yönetim Merkezi‘ne gidin ve yönetici olarak oturum açın
  2. Sol menüden Kimlik > Kullanıcılar > Tüm kullanıcılar seçeneğine tıklayın
  3. Ü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)
  4. 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:

  1. Microsoft Entra Yönetim Merkezi‘ne gidin
  2. Sol menüden Koruma > Koşullu Erişim > Politikalar‘a tıklayın
  3. Mevcut politikalarınızı gözden geçirin ve MFA gerektiren politikaları inceleyin
  4. 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:

  1. Microsoft Entra Yönetim Merkezi‘ne gidin
  2. Sol menüden Koruma > Güvenlik varsayılanları‘na tıklayın
  3. 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:

  1. 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:

  1. Tüm kullanıcılarınızın MFA durumunu kapsamlı bir şekilde görüntüleyebilirsiniz
  2. Güvenlik açıklarını proaktif olarak tanımlayabilirsiniz
  3. Uyum durumunu ölçebilir ve raporlayabilirsiniz
  4. 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.