Поделиться через


Рекомендации по безопасности. Обновление назначения ролей для проверки подлинности Microsoft Entra

Обнаружена ошибка безопасности, которая влияет на проверку подлинности Microsoft Entra для Иммерсивное средство чтения. Мы советуем изменить разрешения для Иммерсивное средство чтения ресурсов.

Общие сведения

При первоначальном создании ресурсов Иммерсивное средство чтения и их настройке для проверки подлинности Microsoft Entra необходимо предоставить разрешения для удостоверения приложения Microsoft Entra для доступа к ресурсу Иммерсивное средство чтения. Это называется назначением ролей. Ранее для разрешений использовалась роль Azure Пользователь Cognitive Services.

Во время аудита безопасности было обнаружено, что эта роль пользователя Cognitive Services имеет разрешения на перечисление ключей. Это связано с тем, что Иммерсивное средство чтения интеграции включают использование этого маркера доступа Microsoft Entra в клиентских веб-приложениях и браузерах. Если маркер доступа был украден плохим субъектом или злоумышленником, возникает озабоченность по поводу того, что этот маркер доступа может использоваться list keys для Иммерсивное средство чтения ресурса. Если злоумышленник сможет выполнить операцию list keys для вашего ресурса, он получит объект Subscription Key для вашего ресурса. Объект Subscription Key для ресурса используется в качестве механизма проверки подлинности и считается секретом. Если злоумышленник получит объект Subscription Key ресурса, он сможет выполнять допустимые и прошедшие проверку подлинности вызовы API к конечной точке ресурса Иммерсивного средства чтения, что может привести к отказу в обслуживании из-за увеличения объемов использования и применения регулирования в конечной точке. При этом также будет возможно незаконное использование ресурса Иммерсивного средства чтения, что может привести к увеличению расходов по вашему счету.

На практике, однако, эта атака или эксплойт, скорее всего, не возникает или даже не может быть возможно. Для Иммерсивное средство чтения сценариев клиенты получают маркеры доступа Microsoft Entra с аудиториейhttps://cognitiveservices.azure.com. Чтобы обеспечить успешное использование list keys ресурса, маркер доступа Microsoft Entra должен иметь аудиторию https://management.azure.com. Как правило, это не очень беспокоит, так как маркеры доступа, используемые для Иммерсивное средство чтения сценариев, не будут работатьlist keys, так как у них нет требуемой аудитории. Чтобы изменить аудиторию маркера доступа, злоумышленнику придется перехватывать код приобретения маркера и изменять аудиторию перед вызовом в идентификатор Microsoft Entra для получения маркера. Опять же, это вряд ли будет использоваться, так как, как рекомендуется Иммерсивное средство чтения проверки подлинности, мы советуем клиентам создавать маркеры доступа Microsoft Entra на серверной части веб-приложения, а не в клиенте или браузере. В таких случаях, так как получение маркера происходит в серверной службе, это не так вероятно или, возможно, даже возможно, что злоумышленник может компрометации этого процесса и изменения аудитории.

Реальная проблема возникает, когда или если любой клиент будет получать маркеры из идентификатора Microsoft Entra ID непосредственно в клиентском коде. Мы настоятельно советуем против этого, но так как клиенты могут реализовать, как они видят, это возможно, что некоторые клиенты делают это.

Чтобы устранить проблемы с любой возможностью использования маркера list keysдоступа Microsoft Entra, мы создали новую встроенную роль Azure, которая Cognitive Services Immersive Reader User не имеет разрешений list keys. Эта новая роль не является общей ролью для платформы служб искусственного интеллекта Azure, такой как Cognitive Services User роль. Эта новая роль связана с Иммерсивное средство чтения и разрешает только вызовы к API-интерфейсам Иммерсивное средство чтения.

Мы советуем всем клиентам использовать новую Cognitive Services Immersive Reader User роль вместо исходной Cognitive Services User роли. Ниже приводится скрипт, с помощью которого в каждом из ресурсов можно изменить разрешения для назначения роли.

Эта рекомендация применяется ко ВСЕМ заказчикам и позволяет гарантировать, что данная уязвимость будет исправлена во всех случаях, независимо от сценария реализации или вероятности атаки.

Если вы НЕ СДЕЛАЕТЕ этого, ничего не нарушится. Старая роль будет по-прежнему работать. Влияние на безопасность для большинства заказчиков минимально. Однако мы советуем перейти на новую роль, чтобы устранить проблемы безопасности, рассмотренные. Применение этого обновления — это рекомендация по обеспечению безопасности; это не мандат.

Все новые Иммерсивное средство чтения ресурсы, создаваемые с помощью нашего скрипта, см. в руководстве. Создание ресурса Иммерсивное средство чтения автоматически использует новую роль.

Обновление роли и смена ключей подписки

Если вы создали и настроили ресурс Иммерсивное средство чтения с помощью инструкций по созданию ресурса Иммерсивное средство чтения до февраля 2022 года, мы советуем выполнить следующую операцию, чтобы обновить разрешения на назначение ролей для всех Иммерсивное средство чтения ресурсы. Эта операция предусматривает запуск скрипта для обновления назначения роли для одного ресурса. При наличии нескольких ресурсов запустите этот скрипт по одному разу для каждого ресурса.

После обновления роли с помощью следующего скрипта мы также советуем сменить ключи подписки на ресурс. Это в случае, если ваши ключи были скомпрометированы эксплойтом, и кто-то фактически использует ресурс с проверкой подлинности ключа подписки без вашего согласия. Поворот ключей отрисовывает предыдущие ключи недопустимыми и запрещает дальнейший доступ. Для клиентов, использующих проверку подлинности Microsoft Entra, которые должны быть всеми для текущей реализации пакета SDK для Иммерсивное средство чтения, смена ключей не влияет на службу Иммерсивное средство чтения, так как маркеры доступа Microsoft Entra используются для проверки подлинности, а не ключа подписки. Смена ключей подписки — это просто дополнительная мера предосторожности.

Ключи подписки можно повернуть в портал Azure. Перейдите к ресурсу и перейдите к разделу Keys and Endpoint . В верхней части представлены кнопки Regenerate Key1 и Regenerate Key2.

Снимок экрана: портал Azure с выбранным ресурсом Иммерсивное средство чтения с выбранным разделом

Обновление назначения ролей с помощью Azure PowerShell

  1. Для начала откройте Azure Cloud Shell. Проверьте, задано ли для Cloud Shell значение PowerShell в раскрывающемся списке в верхнем левом углу или путем ввода pwsh.

  2. Скопируйте следующий фрагмент кода и вставьте его в оболочку.

    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. Запустите функцию Update-ImmersiveReaderRoleAssignment, заменив <PARAMETER_VALUES> заполнители собственными значениями в соответствии с соответствующими параметрами.

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

    Полная команда выглядит примерно так: Здесь мы помещаем каждый параметр в собственную строку для ясности, чтобы увидеть всю команду. Не копируйте или не используйте эту команду как есть. Скопируйте и используйте команду с собственными значениями. В этом примере имеются фиктивные значения для <PARAMETER_VALUES>объекта . Ваши будут отличаться, так как вы придумали свои собственные имена для этих значений.

    Update-ImmersiveReaderRoleAssignment
        -SubscriptionName 'MyOrganizationSubscriptionName'
        -ResourceGroupName 'MyResourceGroupName'
        -ResourceName 'MyOrganizationImmersiveReader'
        -AADAppIdentifierUri 'https://MyOrganizationImmersiveReaderAADApp'
    
    Параметр Комментарии
    SubscriptionName Название подписки Azure.
    ResourceGroupName Имя группы ресурсов, содержащей ресурс Иммерсивное средство чтения.
    ResourceName Имя ресурса Иммерсивного средства чтения.
    AADAppIdentifierUri Универсальный код ресурса (URI) для приложения Microsoft Entra.

Следующий шаг