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 Key
sahip 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.com
sahip 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.com
sahip olması gerekir. Genel olarak ifade etmek gerekirse, Tam Ekran Okuyucu senaryolar için kullanılan erişim belirteçleri gerekli hedef kitleye list keys
sahip 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 keys
adlı 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 Key2
düğmeleri Regenerate Key1
bulunur.
Rol atamanızı güncelleştirmek için Azure PowerShell kullanma
Azure Cloud Shell'i açarak başlayın. Cloud Shell'in sol üstteki açılan listede veya yazarak
pwsh
PowerShell olarak ayarlandığından emin olun.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" } }
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.