Comunicado de Segurança da Microsoft 4092731
Atualizar para o algoritmo de geração de chave de máquina dos Serviços de Nuvem do Azure
Publicado: terça-feira, 8 de maio de 2018 | Atualizado em 29 de junho de 2018
Versão: 1.2
Resumo executivo
A Microsoft está lançando este comunicado de segurança para fornecer informações relacionadas a uma atualização na maneira como as chaves de computador são geradas para os Serviços de Nuvem do Azure. Esse cenário pode afetar os clientes que estão usando as Funções Web dos Serviços de Nuvem do Azure. As chaves de máquina em implantações existentes foram geradas com entropia insuficiente e usando algoritmos criptográficos preteridos.
Para resolver esse problema, a Microsoft lançou uma atualização para o algoritmo que está sendo usado para gerar chaves de máquina em novas implantações de Função Web dos Serviços de Nuvem do Azure, incluindo o uso de geração de números aleatórios criptograficamente fortes. Todas as Funções Web existentes manterão suas chaves de computador geradas anteriormente, a menos que sejam reimplantadas. Dadas determinadas informações detalhadas, um invasor pode ser capaz de adivinhar chaves de máquina criadas pelo algoritmo preterido. Chaves de máquina vulneráveis podem, em algumas circunstâncias, permitir o desvio do recurso de segurança.
Este comunicado fornece orientação para que os clientes identifiquem se são afetados por esse cenário e quais, se houver, ações precisam tomar.
Serviços de nuvem afetados
As implantações do Azure que usam Funções Web são afetadas por esse problema. A única exceção é se você forneceu sua própria chave de máquina no Web.config no Pacote CS. As Funções de Trabalho do Azure, as Máquinas Virtuais e todas as outras ofertas do Azure não são afetadas.
Perguntas frequentes
1. Como saber se sou afetado?
Todas as Funções Web do Serviço de Nuvem do Azure são afetadas por esse problema, exceto se você forneceu suas próprias chaves de computador no Web.config no Pacote CS. As Funções de Trabalho do Serviço de Nuvem do Azure, as Máquinas Virtuais e todas as outras ofertas do Azure não são afetadas.
ASP.NET usa chaves de máquina para várias finalidades, incluindo:
- Antiviolação com dados de estado de exibição de formulário da Web
- Geração e validação de cookies de sessão ASP.NET Web Form
- Tokens anti-CSRF
- Criptografia usando os métodos machinekey.protect e machinekey.unprotect.
2. Existem pré-requisitos para corrigir meu aplicativo afetado?
Sim, se sua Função Web foi implantada com uma versão desativada do SDK do Azure para .Net, ela não usará o Algoritmo de Geração de Chave de Máquina avançado. https://azure.microsoft.com/en-us/downloads/archive-net-downloads/ Consulte as versões suportadas. Para atualizar para uma versão suportada, clique no link no site referenciado anteriormente para baixar e reimplantar seu projeto com uma versão do SDK compatível. Depois de validar que seu projeto é implantado com um SDK compatível, siga as etapas adicionais neste comunicado.
3. Como faço para corrigir meu aplicativo afetado?
Para gerar as novas chaves de máquina, você precisa reimplantar suas .cspkg e .cscfg como um novo Serviço de Nuvem, implantar sua carga de trabalho no slot de preparo e executar uma implantação de troca (Troca VIP) ou injetar suas próprias chaves de máquina e, em seguida, executar uma atualização simultânea. Uma operação típica de implantação de atualização não será suficiente. A seguir estão descritas as opções de mitigação de alto nível e as etapas detalhadas descritas abaixo:
Opção 1: implante sua carga de trabalho em um novo serviço de nuvem. Atualize seu CNAME para apontar o tráfego para seu novo serviço de nuvem. Quando o tráfego zero está indo para o site antigo, você pode excluir o serviço de nuvem antigo.
Opção 2: implante seu Serviço de Nuvem no slot de preparo e execute uma implantação de permuta.
Opção 3: Gere suas próprias chaves de máquina no Web.config e execute uma atualização simultânea. Isso atualizará todas as instâncias de uma só vez e, portanto, causará tempo de inatividade do aplicativo.
Recomendamos que você use a Opção 1 para evitar tempo de inatividade. Também recomendamos que você execute a mitigação durante períodos de baixa utilização, pois as sessões podem ser interrompidas enquanto as chaves do computador são alteradas.
Nota: O endereço IP do seu aplicativo será alterado assim que você obtiver as novas chaves de máquina com a Opção 1 e a Opção 2.
4. Eu usei a chave de máquina para criptografar dados persistentes usando MachineKey.Encode()/MachineKey.Protect(). Como recupero os dados?
Se o MachineKey foi usado para criptografar dados ( usando MachineKey.Encode()/MachineKey.Protect() ), então a chave de máquina antiga e os algoritmos definidos no web.config devem ser usados para descriptografar os dados (chamando MachineKey.Decode()/MachineKey.Unprotect() respectivamente ) antes de executar as etapas de mitigação. Depois que as etapas de mitigação forem concluídas, todas as chamadas para MachineKey.Encode()/MachineKey.Protect() e MachineKey.Decode()/MachineKey.Unprotect() usarão a chave de máquina atualizada e os algoritmos do web.config.
5. Como sei que meu aplicativo está usando o novo algoritmo de chave de máquina?
Se você tiver apenas uma implantação em seu serviço de nuvem, a verificação para ver o certificado de Chave de Máquina do Azure na guia Certificado do Serviço de Nuvem no Portal de Gerenciamento do Azure será suficiente. Se esse certificado estiver presente, sua implantação está usando o algoritmo de chave de máquina.
Se você tiver duas implantações em seu serviço de nuvem (produção e preparo), precisará acessar a área de trabalho remota em suas funções Web e examinar a Configuração do IIS. Se você vir o certificado de chave de máquina, você está usando o novo algoritmo de chave de máquina. Você precisará fazer essa verificação para uma função Web em cada implantação. Se você não conseguir se conectar à VM, registre um tíquete de suporte (instruções em #7) e nossa equipe de suporte poderá ajudar a confirmar se suas implantações estão usando a nova chave de máquina.
6. O que é o certificado "Microsoft Azure Service Management for MachineKey"?
Esse é o certificado usado para criptografar as chaves da máquina junto com o algoritmo avançado.
7. Quem gerencia o certificado "Microsoft Azure Service Management for MachineKey" e o que acontece quando ele expira?
O Azure gerencia esse certificado. Os clientes não precisam se preocupar com a data de expiração desse certificado porque ele é usado uma vez para gerar as novas chaves de máquina com o novo algoritmo. A data de expiração não causará nenhum impacto.
8. O certificado pode ser excluído ou removido da VM?
Não, o certificado não pode ser removido.
9. Se eu tiver dúvidas sobre as etapas de mitigação, o que posso fazer?
Envie um caso de suporte em Serviços de Nuvem usando seu processo de escalonamento padrão. Para escalar no Portal do Azure, siga estas etapas:
- Vá para Ajuda + Suporte no Portal do Azure.
- Selecione o tipo de problema técnico .
- Selecione sua assinatura e, em seguida, selecione o serviço Serviços de Nuvem (funções Web/Funções de trabalho) em Serviços.
- Clique em Avançar , escolha Atualização de certificado MachineKey como o tipo de problema e preencha os detalhes do tíquete de suporte.
Etapas detalhadas para executar a mitigação
Opção 1: reimplante seu serviço de nuvem.
Realize uma reimplantação via Portal:
- Crie um novo serviço de nuvem com seu .cspkg e .cscfg. Veja os detalhes aqui.
- Atualize o registro CName ou A para apontar o tráfego para o novo serviço de nuvem.
- Exclua seu serviço de nuvem antigo depois que seu tráfego estiver apontando para o novo Serviço de Nuvem.
Execute uma reimplantação por meio do PowerShell:
Crie um novo serviço de nuvem com seu .cspkg e .cscfg. Veja os detalhes aqui.
Exemplo: New-AzureService -ServiceName "yourServiceName" -Label "MyTestService" -Location "South Central US"
Crie uma nova implantação com seus .cspkg e .cscfg. Veja os detalhes aqui.
Exemplo: New-AzureDeployment -ServiceName "yourServiceName" -Slot "Production" -Package "YourCspkgFile.cspkg" -Configuration "YourConfigFile.cscfg"
Atualize o registro CName ou A para apontar o tráfego para o novo serviço de nuvem.
Exclua seu serviço de nuvem anterior que não tenha chaves de máquina atualizadas depois que seu tráfego estiver apontando para o novo Serviço de Nuvem. Veja os detalhes aqui.
Exemplo: Remove-AzureService -ServiceName "yourOldServiceName"
Execute uma reimplantação via API Rest:
Crie um novo serviço de nuvem Veja os detalhes aqui.
Exemplo: https://management.core.windows.net/<subscription-id>/services/hostedservices
Crie uma nova implantação usando a API de criação de implantação. Se você precisar encontrar seu .cspkg e .cscfg, você pode chamar Get-Package API).
Exemplo: https://management.core.windows.net/<subscription-id>/services/hostedservices/<cloudservice-name>/deploymentslots/production
Exclua seu serviço de nuvem anterior que não tenha chaves de máquina atualizadas depois que seu tráfego estiver apontando para o novo Serviço de Nuvem. Veja os detalhes aqui.
Exemplo: https://management.core.windows.net/<subscription-id>/services/hostedservices/<old-cloudservice-name>
Opção 2: Implantação de permuta.
O uso da opção 2 requer que você tenha um slot de preparo vazio. Se você tiver uma implantação no slot de preparo atualmente, poderá excluí-la e seguir estas etapas:
Execute a implantação de permuta via portal:
Atualize sua implantação do Serviço de Nuvem carregando seus .cspkg e .cscfg no slot de preparo. Ele conterá o novo certificado para gerar as chaves do computador. Veja os detalhes aqui.
Troque os slots de produção e de preparo. Veja os detalhes aqui.
Exclua o slot de preparo com a implantação de produção anterior. Veja detalhes aqui
Execute a implantação de permuta por meio do PowerShell.
Implante seu cspkg e cscfg no slot de preparo. Veja os detalhes aqui.
Exemplo: New-AzureDeployment -ServiceName "yourServiceName" -Slot "Staging" -Package "YourCspkgFile.cspkg" -Configuration "YourConfigFile.cscfg"
Troque os slots de produção e de preparo. Veja os detalhes aqui.
Exemplo: Move-AzureDeployment -ServiceName "yourServiceName"
Exclua o slot de preparo com a implantação de produção anterior.
Exemplo: Remove-AzureDeployment -ServiceName "yourServiceName" -Slot "Staging"
Execute a implantação de permuta via API rest:
Crie uma nova implantação no slot de preparo usando a API de criação de implantação. Se você precisar encontrar seu .cspkg e .cscfg, você pode chamar Get-Package API).
Exemplo: https://management.core.windows.net/<subscription-id>/services/hostedservices/<cloudservice-name>/deploymentslots/staging
Troque seus slots de produção e preparo usando a Implantação de permuta.
Exemplo: https://management.core.windows.net/<subscription-id>/services/hostedservices/<cloudservice-name>
Excluir o slot de preparo com a implantação de produção anterior
Exemplo: https://management.core.windows.net/<subscription-id>/services/hostedservices/<cloudservice-name>/deploymentslots/staging
Opção 3: Gere suas próprias chaves de máquina no Web.config e execute uma implantação simultânea.
Gere um novo elemento XML de chave de máquina no PowerShell (consulte o Apêndice A).
Atualize seu WebConfig com as novas chaves de máquina. Veja as instruções.
Reempacote seu serviço de nuvem.
Execute uma implantação de atualização usando o arquivo .cscfg que contém as novas chaves de máquina. O modo deve ser definido como simultâneo ou isso pode fazer com que seu aplicativo fique em um estado não íntegro.
Aviso de isenção de responsabilidade
As informações fornecidas neste comunicado são fornecidas "no estado em que se encontram", sem garantia de qualquer tipo. A Microsoft se isenta de todas as garantias, expressas ou implícitas, incluindo as garantias de comercialização e adequação a uma finalidade específica. Em nenhuma circunstância a Microsoft Corporation ou seus fornecedores serão responsáveis por quaisquer danos, incluindo danos diretos, indiretos, incidentais, consequenciais, perda de lucros comerciais ou danos especiais, mesmo que a Microsoft Corporation ou seus fornecedores tenham sido avisados da possibilidade de tais danos. Alguns estados não permitem a exclusão ou limitação de responsabilidade por danos consequenciais ou incidentais, portanto, a limitação acima pode não se aplicar.
Revisões
- V1.0 (8 de maio de 2018): Comunicado publicado.
- V1.1 (24 de maio de 2018): Adicionada FAQ #4 para explicar como recuperar dados persistentes depois que os dados são criptografados usando MachineKey.Encode()/MachineKey.Protect(). Esta é apenas uma alteração informativa.
- V1.2 (29 de junho de 2018): Referências alteradas do sistema operacional convidado do Azure para os Serviços de Nuvem do Azure