Share via


Biztonsági tanácsadás: Szerepkör-hozzárendelés frissítése a Microsoft Entra-hitelesítéshez

Biztonsági hibát észleltek, amely hatással van a Microsoft Entra Modern olvasó hitelesítésére. Javasoljuk, hogy módosítsa a Modern olvasó erőforrásaira vonatkozó engedélyeket.

Háttér

Amikor először létrehozza Modern olvasó erőforrásait, és konfigurálja őket a Microsoft Entra-hitelesítéshez, engedélyeket kell adnia a Microsoft Entra-alkalmazás identitásához a Modern olvasó erőforrás eléréséhez. Ezt szerepkör-hozzárendelésnek nevezzük. A korábban engedélyekhez használt Azure-szerepkör a Cognitive Services felhasználói szerepköre volt.

Egy biztonsági audit során kiderült, hogy ez a Cognitive Services-felhasználó szerepkör rendelkezik a kulcsok listázására vonatkozó engedélyekkel. Ez kissé aggasztó, mivel Modern olvasó integrációk során a Microsoft Entra hozzáférési jogkivonatot használják ügyfél-webalkalmazásokban és böngészőkben. Ha a hozzáférési jogkivonatot egy rossz szereplő vagy támadó lopta el, aggodalomra ad okot, hogy ezt a hozzáférési jogkivonatot használhatja list keys a Modern olvasó erőforráshoz. Ha egy támadó képes lenne list keys az erőforrásra, akkor beszerezné az Subscription Key erőforrást. Az Subscription Key erőforrás hitelesítési mechanizmusként használatos, és titkos kódnak minősül. Ha egy támadó rendelkezik az erőforrássalSubscription Key, az lehetővé tenné számukra, hogy érvényes és hitelesített API-hívásokat kezdeményezhessenek a Modern olvasó erőforrásvégpontra, ami szolgáltatásmegtagadáshoz vezethet a végpont megnövekedett használata és szabályozása miatt. Emellett lehetővé tenné a Modern olvasó erőforrás jogosulatlan használatát is, ami megnövelné a számlán lévő díjakat.

A gyakorlatban azonban ez a támadás vagy kihasználás nem valószínű, vagy akár nem is lehetséges. Modern olvasó forgatókönyvek esetében az ügyfelek Microsoft Entra hozzáférési jogkivonatokat szereznek be a célközönséggelhttps://cognitiveservices.azure.com. Az erőforrás sikeres list keys használatához a Microsoft Entra hozzáférési jogkivonatnak rendelkeznie kell egy célközönségével https://management.azure.com. Általánosságban elmondható, hogy ez nem sok aggodalomra ad okot, mivel a Modern olvasó forgatókönyvekhez használt hozzáférési jogkivonatok nem működneklist keys, mivel nem rendelkeznek a szükséges célközönségekkel. A hozzáférési jogkivonat célközönségének módosításához a támadónak eltérítenie kell a jogkivonat beszerzési kódját, és módosítania kell a célközönséget, mielőtt a Microsoft Entra ID-ra irányuló hívást kezdeményezné a jogkivonat beszerzéséhez. Ez valószínűleg nem lesz kihasználva, mert Modern olvasó hitelesítési ajánlott eljárásként azt javasoljuk, hogy az ügyfelek ne az ügyfélben vagy a böngészőben, hanem a webalkalmazás háttérrendszerén hozzanak létre Microsoft Entra hozzáférési jogkivonatokat. Ezekben az esetekben, mivel a jogkivonat-beszerzés a háttérszolgáltatásban történik, nem valószínű, hogy a támadók veszélyeztethetik ezt a folyamatot, és megváltoztathatják a célközönséget.

Az igazi aggodalom akkor merül fel, ha egy ügyfél közvetlenül ügyfélkódban szerezne be jogkivonatokat a Microsoft Entra ID-ból. Határozottan javasoljuk ezt, de mivel az ügyfelek szabadon implementálhatják a megfelelőnek látja őket, lehetséges, hogy egyes ügyfelek ezt teszik.

Annak érdekében, hogy enyhítsük a Microsoft Entra hozzáférési jogkivonat list keyshasználatának esetleges lehetőségével kapcsolatos aggodalmakat, létrehoztunk egy új, beépített Azure-szerepkört, amelynek a neve Cognitive Services Immersive Reader User nem rendelkezik engedélyekkel list keys. Ez az új szerepkör nem közös szerepkör az Azure AI-szolgáltatások platformjához, például Cognitive Services User a szerepkörhöz. Ez az új szerepkör a Modern olvasó vonatkozik, és csak az API-k Modern olvasó hívását teszi lehetővé.

Azt javasoljuk minden ügyfélnek, hogy az eredeti Cognitive Services User szerepkör helyett használja az új Cognitive Services Immersive Reader User szerepkört. Az alábbiakban egy szkriptet adtunk meg, amelyet az egyes erőforrásokon futtatva válthat a szerepkör-hozzárendelési engedélyekre.

Ez a javaslat minden ügyfélre vonatkozik, hogy a biztonsági rés mindenki számára ki legyen javítva, függetlenül a megvalósítási forgatókönyvtől vagy a támadás valószínűségétől.

Ha nem ezt teszi, semmi sem fog megszakadni. A régi szerepkör továbbra is működni fog. A legtöbb ügyfél biztonsági hatása minimális. Javasoljuk azonban, hogy migráljon az új szerepkörbe, hogy enyhítse a tárgyalt biztonsági problémákat. A frissítés alkalmazása biztonsági tanácsadási javaslat; Ez nem megbízatás.

Minden új Modern olvasó erőforrás, amelyet a szkriptünkkel hoz létre a Következő: Modern olvasó erőforrás létrehozása című témakörben, automatikusan használja az új szerepkört.

Szerepkör frissítése és az előfizetési kulcsok elforgatása

Ha Modern olvasó erőforrást hozott létre és konfigurált az Útmutató: Modern olvasó erőforrás létrehozása 2022 februárja előtt című témakör utasításaival, javasoljuk, hogy az alábbi műveletet végezze el a szerepkör-hozzárendelési engedélyek frissítéséhez az összes Modern olvasó-erőforráson. A művelet egy szkript futtatásával frissíti a szerepkör-hozzárendelést egyetlen erőforráson. Ha több erőforrással rendelkezik, futtassa ezt a szkriptet többször, mindegyik erőforráshoz egyszer.

Miután az alábbi szkripttel frissítette a szerepkört, azt is javasoljuk, hogy forgassa el az előfizetési kulcsokat az erőforráson. Ez abban az esetben fordul elő, ha a biztonsági rés feltörte a kulcsait, és valaki az Ön hozzájárulása nélkül használja az ön erőforrását előfizetési kulcs hitelesítésével. A kulcsok elforgatása érvénytelenné teszi az előző kulcsokat, és letiltja a további hozzáférést. A Microsoft Entra-hitelesítést használó ügyfelek esetében, amelyeknek az SDK jelenlegi Modern olvasó implementációja szerint mindenkinek kell lennie, a kulcsok elforgatása nincs hatással a Modern olvasó szolgáltatásra, mivel a Microsoft Entra hozzáférési jogkivonatokat a hitelesítéshez használják, nem az előfizetési kulcsot. Az előfizetési kulcsok elforgatása csak egy újabb elővigyázatosság.

Az előfizetési kulcsokat az Azure Portalon elforgathatja. Lépjen az erőforrásra, majd a szakaszra Keys and Endpoint . Felül vannak a gombok és a Regenerate Key1Regenerate Key2.

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.

A szerepkör-hozzárendelés frissítése az Azure PowerShell használatával

  1. Először nyissa meg az Azure Cloud Shellt. Győződjön meg arról, hogy a Cloud Shell PowerShellre van állítva a bal felső legördülő menüben, vagy írja be a kívánt értéket pwsh.

  2. Másolja és illessze be a következő kódrészletet a rendszerhéjba.

    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. Futtassa a függvényt Update-ImmersiveReaderRoleAssignment, és szükség szerint cserélje le a <PARAMETER_VALUES> helyőrzőket a saját értékeire.

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

    A teljes parancs a következőhöz hasonlóan néz ki. Itt minden paramétert a saját sorába helyezünk az egyértelműség érdekében, így az egész parancs látható. Ezt a parancsot ne másolja vagy használja a következőképpen. Másolja és használja a parancsot a saját értékeivel. Ez a példa hamis értékeket tartalmaz a <PARAMETER_VALUES>. Az Öné más lesz, mivel saját neveket hoz létre ezekhez az értékekhez.

    Update-ImmersiveReaderRoleAssignment
        -SubscriptionName 'MyOrganizationSubscriptionName'
        -ResourceGroupName 'MyResourceGroupName'
        -ResourceName 'MyOrganizationImmersiveReader'
        -AADAppIdentifierUri 'https://MyOrganizationImmersiveReaderAADApp'
    
    Paraméter Megjegyzések
    SubscriptionName Az Azure-előfizetés neve.
    ResourceGroupName A Modern olvasó erőforrást tartalmazó erőforráscsoport neve.
    ResourceName nevű erőforrásáról A Modern olvasó erőforrás neve.
    AADAppIdentifierUri A Microsoft Entra-alkalmazás URI-ja.

Következő lépés