Güvenlik önerisi: Microsoft Entra kimlik doğrulaması için rol atamasını güncelleştirme

Tam Ekran Okuyucu için Microsoft Entra kimlik doğrulamasını etkileyen bir güvenlik hatası bulundu. Tam Ekran Okuyucu kaynaklarınızdaki izinleri değiştirmenizi öneririz.

Background

başlangıçta Tam Ekran Okuyucu kaynaklarınızı oluşturduğunuzda ve bunları Microsoft Entra kimlik doğrulaması için yapılandırdığınızda, Microsoft Entra uygulama kimliğinin Tam Ekran Okuyucu kaynağınıza erişmesi için izinler vermek gerekir. Bu, rol ataması olarak bilinir. Daha önce izinler için kullanılan Azure rolü Bilişsel Hizmetler Kullanıcı rolü idi.

Bir güvenlik denetimi sırasında, bu Bilişsel Hizmetler Kullanıcı rolünün anahtarları listeleme izinleri olduğu keşfedildi. Tam Ekran Okuyucu tümleştirmeleri bu Microsoft Entra erişim belirtecinin istemci web uygulamalarında ve tarayıcılarında kullanılmasını içerdiğinden bu durum biraz endişelendiriyor. Erişim belirteci kötü bir aktör veya saldırgan tarafından çalındıysa, bu erişim belirtecinin Tam Ekran Okuyucu kaynağınız için kullanılabilmesinden list keys endişe vardır. Bir saldırgan kaynağınız için bunu yapabilirse list keys kaynağınızın değerini Subscription Key alır. Subscription Key Kaynağınız için kimlik doğrulama mekanizması olarak kullanılır ve gizli dizi olarak kabul edilir. Bir saldırganın kaynağına Subscription Keysahip olması, Tam Ekran Okuyucu kaynak uç noktanıza geçerli ve kimliği doğrulanmış API çağrıları yapmasına izin verir ve bu da uç noktanızdaki kullanımın ve azaltmanın artması nedeniyle Hizmet Reddi'ne yol açabilir. Ayrıca Tam Ekran Okuyucu kaynağınızın yetkisiz kullanımına da izin verir ve bu da faturanızdaki ücretlerin artmasına neden olur.

Ancak pratikte, bu saldırı veya açık kullanmak mümkün olmayabilir veya mümkün olmayabilir. müşteriler, Tam Ekran Okuyucu senaryolar için hedef kitlesine https://cognitiveservices.azure.comsahip Microsoft Entra erişim belirteçlerini alır. Kaynağınızın başarılı list keys olması için Microsoft Entra erişim belirtecinin hedef kitlesine https://management.azure.comsahip olması gerekir. Genel olarak ifade etmek gerekirse, Tam Ekran Okuyucu senaryolar için kullanılan erişim belirteçleri gerekli hedef kitleye list keyssahip olmadığından için bu durum pek sorun oluşturmaz. Erişim belirtecindeki hedef kitleyi değiştirmek için, belirteci almak için Microsoft Entra ID'ye çağrı yapılmadan önce saldırganın belirteç alma kodunu ele geçirmesi ve hedef kitleyi değiştirmesi gerekir. Tam Ekran Okuyucu kimlik doğrulaması en iyi uygulaması olarak müşterilerin istemci veya tarayıcıda değil web uygulaması arka uçta Microsoft Entra erişim belirteçleri oluşturmalarını öneririz. Bu gibi durumlarda, belirteç alımı arka uç hizmetinde gerçekleştiğinden, saldırganın bu süreci tehlikeye atması ve hedef kitleyi değiştirmesi o kadar olası veya belki de mümkün değildir.

Asıl sorun, herhangi bir müşterinin doğrudan istemci kodunda Microsoft Entra Id'den belirteç alması veya alması durumunda ortaya çıkar. Buna karşı kesinlikle tavsiyede bulunuruz, ancak müşteriler uygun gördükleri şekilde uygulamada serbest oldukları için, bazı müşterilerin bunu yapması mümkündür.

için Microsoft Entra erişim belirtecini kullanma olasılığıyla ilgili endişeleri azaltmak için list keysadlı ve izinleri olmayan yeni bir yerleşik Azure rolü Cognitive Services Immersive Reader User oluşturduk list keys. Bu yeni rol, Rol gibi Cognitive Services User Azure yapay zeka hizmetleri platformu için paylaşılan bir rol değildir. Bu yeni rol Tam Ekran Okuyucu özgüdür ve yalnızca Tam Ekran Okuyucu API'lere çağrı yapılmasına izin verir.

TÜM müşterilere özgün Cognitive Services User rol yerine yeni Cognitive Services Immersive Reader User rolü kullanmalarını öneririz. Aşağıda, rol atama izinlerine geçiş yapmak için kaynaklarınızın her birinde çalıştırabileceğiniz bir betik sağladık.

Bu öneri, uygulama senaryosu veya saldırı olasılığı ne olursa olsun bu güvenlik açığının herkes için düzeltme eki uygulandığından emin olmak için TÜM müşteriler için geçerlidir.

Bunu yapmazsanız, hiçbir şey kırılmaz. Eski rol çalışmaya devam eder. Çoğu müşteri için güvenlik etkisi çok azdır. Ancak, ele alınan güvenlik sorunlarını azaltmak için yeni role geçmenizi öneririz. Bu güncelleştirmeyi uygulamak bir güvenlik önerisidir; Bu bir emir değil.

Nasıl yapılır: Tam Ekran Okuyucu kaynağı oluşturma altında betiğimizle oluşturduğunuz tüm yeni Tam Ekran Okuyucu kaynakları otomatik olarak yeni rolü kullanır.

Rolü güncelleştirme ve abonelik anahtarlarınızı döndürme

Nasıl yapılır: Şubat 2022'den önce Tam Ekran Okuyucu kaynağı oluşturma başlığı altındaki yönergeleri kullanarak bir Tam Ekran Okuyucu kaynağı oluşturup yapılandırdıysanız, tüm Tam Ekran Okuyucu kaynaklarınızdaki rol atama izinlerini güncelleştirmek için aşağıdaki işlemi gerçekleştirmenizi öneririz. İşlem, tek bir kaynakta rol atamasını güncelleştirmek için bir betik çalıştırmayı içerir. Birden çok kaynağınız varsa bu betiği her kaynak için bir kez olmak üzere birden çok kez çalıştırın.

Aşağıdaki betiği kullanarak rolü güncelleştirdikten sonra, kaynağınızdaki abonelik anahtarlarını döndürmenizi de öneririz. Bu, anahtarlarınızın güvenlik açığından etkilenmesi ve birinin sizin izniniz olmadan abonelik anahtarı kimlik doğrulamasıyla kaynağınızı kullanması durumunda olur. Anahtarları döndürmek önceki anahtarları geçersiz hale getirir ve daha fazla erişimi reddeder. Geçerli Tam Ekran Okuyucu SDK uygulaması başına herkes olması gereken Microsoft Entra kimlik doğrulamasını kullanan müşteriler için, Microsoft Entra erişim belirteçleri abonelik anahtarı için değil kimlik doğrulaması için kullanıldığından anahtarları döndürmenin Tam Ekran Okuyucu hizmeti üzerinde hiçbir etkisi yoktur. Abonelik anahtarlarını döndürmek de başka bir önlemdir.

Abonelik anahtarlarını Azure portalında döndürebilirsiniz. Kaynağınıza ve ardından Keys and Endpoint bölümüne gidin. Üst kısımda ve Regenerate Key2düğmeleri Regenerate Key1 bulunur.

Screenshot of the Azure portal showing an Immersive Reader resource with the Keys and Endpoint section selected, which shows the Regenerate Keys buttons at the top.

Rol atamanızı güncelleştirmek için Azure PowerShell kullanma

  1. Azure Cloud Shell'i açarak başlayın. Cloud Shell'in sol üstteki açılan listede veya yazarak pwshPowerShell olarak ayarlandığından emin olun.

  2. Aşağıdaki kod parçacığını kopyalayıp kabuğa yapıştırın.

    function Update-ImmersiveReaderRoleAssignment(
        [Parameter(Mandatory=$true, Position=0)] [String] $SubscriptionName,
        [Parameter(Mandatory=$true)] [String] $ResourceGroupName,
        [Parameter(Mandatory=$true)] [String] $ResourceName,
        [Parameter(Mandatory=$true)] [String] $AADAppIdentifierUri
    )
    {
        $unused = ''
        if (-not [System.Uri]::TryCreate($AADAppIdentifierUri, [System.UriKind]::Absolute, [ref] $unused)) {
            throw "Error: AADAppIdentifierUri must be a valid URI"
        }
    
        Write-Host "Setting the active subscription to '$SubscriptionName'"
        $subscriptionExists = Get-AzSubscription -SubscriptionName $SubscriptionName
        if (-not $subscriptionExists) {
            throw "Error: Subscription does not exist"
        }
        az account set --subscription $SubscriptionName
    
        # Get the Immersive Reader resource 
        $resourceId = az cognitiveservices account show --resource-group $ResourceGroupName --name $ResourceName --query "id" -o tsv
        if (-not $resourceId) {
            throw "Error: Failed to find Immersive Reader resource"
        }
    
        # Get the Microsoft Entra application service principal
        $principalId = az ad sp show --id $AADAppIdentifierUri --query "objectId" -o tsv
        if (-not $principalId) {
            throw "Error: Failed to find Microsoft Entra application service principal"
        }
    
        $newRoleName = "Cognitive Services Immersive Reader User"
        $newRoleExists = az role assignment list --assignee $principalId --scope $resourceId --role $newRoleName --query "[].id" -o tsv
        if ($newRoleExists) {
            Write-Host "New role assignment for '$newRoleName' role already exists on resource"
        } 
        else {
            Write-Host "Creating new role assignment for '$newRoleName' role"
            $roleCreateResult = az role assignment create --assignee $principalId --scope $resourceId --role $newRoleName
            if (-not $roleCreateResult) {
                throw "Error: Failed to add new role assignment"
            }
            Write-Host "New role assignment created successfully"
        }
    
        $oldRoleName = "Cognitive Services User"
        $oldRoleExists = az role assignment list --assignee $principalId --scope $resourceId --role $oldRoleName --query "[].id" -o tsv
        if (-not $oldRoleExists) {
            Write-Host "Old role assignment for '$oldRoleName' role does not exist on resource"
        }
        else {
            Write-Host "Deleting old role assignment for '$oldRoleName' role"
            az role assignment delete --assignee $principalId --scope $resourceId --role $oldRoleName
            $oldRoleExists = az role assignment list --assignee $principalId --scope $resourceId --role $oldRoleName --query "[].id" -o tsv
            if ($oldRoleExists) {
                throw "Error: Failed to delete old role assignment"
            }
            Write-Host "Old role assignment deleted successfully"
        }
    }
    
  3. işlevini Update-ImmersiveReaderRoleAssignmentçalıştırın ve <PARAMETER_VALUES> yer tutucuları kendi değerlerinizle uygun şekilde değiştirin.

    Update-ImmersiveReaderRoleAssignment -SubscriptionName '<SUBSCRIPTION_NAME>' -ResourceGroupName '<RESOURCE_GROUP_NAME>' -ResourceName '<RESOURCE_NAME>' -AADAppIdentifierUri '<MICROSOFT_ENTRA_APP_IDENTIFIER_URI>'
    

    Tam komut aşağıdakine benzer şekilde görünür. Burada, komutun tamamını görebilmeniz için her parametreyi kendi satırına yerleştiriyoruz. Bu komutu olduğu gibi kopyalamayın veya kullanmayın. komutunu kopyalayın ve kendi değerlerinizle kullanın. Bu örnekte için <PARAMETER_VALUES>sahte değerler vardır. Bu değerler için kendi adlarınızla geldiğinizde sizinki farklı olacaktır.

    Update-ImmersiveReaderRoleAssignment
        -SubscriptionName 'MyOrganizationSubscriptionName'
        -ResourceGroupName 'MyResourceGroupName'
        -ResourceName 'MyOrganizationImmersiveReader'
        -AADAppIdentifierUri 'https://MyOrganizationImmersiveReaderAADApp'
    
    Parametre Açıklamalar
    SubscriptionName Azure aboneliğinizin adı.
    ResourceGroupName Tam Ekran Okuyucu kaynağınızı içeren kaynak grubunun adı.
    ResourceName Tam Ekran Okuyucu kaynağınızın adı.
    AADAppIdentifierUri Microsoft Entra uygulamanızın URI'sini.

Sonraki adım