Comunicado de Segurança da Microsoft 4092731
Atualizar para o Algoritmo de Geração de Chaves 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 da máquina 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 obsoletos.
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 máquina geradas anteriormente, a menos que sejam reimplantadas. Dadas certas informações detalhadas, um invasor pode ser capaz de adivinhar chaves de máquina criadas pelo algoritmo preterido. As chaves de máquina vulneráveis podem, em algumas circunstâncias, permitir o desvio do recurso de segurança.
Este comunicado fornece orientações para que os clientes identifiquem se são afetados por esse cenário e quais, se houver, ações precisam tomar.
Serviços na 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 mais frequentes
1. Como sei 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 máquina 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ários fins, incluindo:
- Anti-adulteração com dados viewstate 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 a minha candidatura afetada?
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 aprimorado. 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 SDK suportada. Depois de validar que seu projeto é implantado com um SDK suportado, 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 seu .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 (VIP Swap) 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 descrevem-se as opções de mitigação de alto nível e as etapas detalhadas são 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 troca.
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 da máquina mudam.
Nota: O endereço IP da sua aplicação mudará assim que obtiver as novas chaves de máquina com a Opção 1 e a Opção 2.
4. Eu usei a chave da máquina para criptografar dados persistentes usando MachineKey.Encode()/MachineKey.Protect(). Como recupero os dados?
Se a MachineKey foi usada 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. Quando 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 a minha aplicação está a utilizar o novo algoritmo de chave de máquina?
Se você tiver apenas uma implantação em seu serviço de nuvem, verificar se o certificado de Chave de Máquina do Azure na guia Certificado do seu 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 do computador.
Se você tiver duas implantações em seu serviço de nuvem (produção e preparação), precisará da área de trabalho remota em suas funções Web e examinar a Configuração do IIS. Se vir o certificado de chave de máquina, está a utilizar 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, envie um tíquete de suporte (instruções em #7) e nossa equipe de suporte pode ajudar a confirmar se suas implantações estão usando a nova chave da máquina.
6. O que é o certificado "Microsoft Azure Service Management for MachineKey"?
Este é o certificado usado para criptografar as chaves da máquina juntamente 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, pois ele é usado uma vez para gerar as novas chaves de máquina com o novo algoritmo. A data de validade não causará qualquer 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 a sua subscrição e, em seguida, selecione o serviço Serviços na 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, em seguida, preencha os detalhes do tíquete de suporte.
Etapas detalhadas para executar a mitigação
Opção 1: Reimplante seu serviço de nuvem.
Execute uma reimplantação via Portal:
- Crie um novo serviço de nuvem com seus .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 antigo serviço de nuvem 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 seus .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 o serviço de nuvem anterior que não tem chaves de máquina atualizadas depois que o 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 create deployment. Se você precisar encontrar seus .cspkg e .cscfg, você pode chamar Get-Package API).
Exemplo: https://management.core.windows.net/<subscription-id>/services/hostedservices/<cloudservice-name>/deploymentslots/production
Exclua o serviço de nuvem anterior que não tem chaves de máquina atualizadas depois que o 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.
Usar a 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 do Swap via Portal:
Atualize sua implantação do Serviço de Nuvem carregando seus .cspkg e .cscfg no slot de preparação. Isso conterá o novo certificado para gerar as chaves da máquina. Veja os detalhes aqui.
Troque seus slots de produção e preparação. Veja os detalhes aqui.
Exclua seu slot de preparo com sua implantação de produção anterior. Veja os 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 seus slots de produção e preparação. Veja os detalhes aqui.
Exemplo: Move-AzureDeployment -ServiceName "yourServiceName"
Exclua seu slot de preparo com sua 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 create deployment. Se você precisar encontrar seus .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 Troca.
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 da máquina. Consulte 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 esteja em um estado não íntegro.
Exclusã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 SO convidado do Azure para os Serviços de Nuvem do Azure