Integridade do código da plataforma

Um desafio significativo na operação de um sistema complexo como o Microsoft Azure é garantir que apenas software autorizado esteja em execução no sistema. O software não autorizado apresenta vários riscos para qualquer negócio:

  • Riscos de segurança, como ferramentas de ataque dedicadas, malware personalizado e software de terceiros com vulnerabilidades conhecidas
  • Riscos de conformidade quando o processo de gerenciamento de alterações aprovado não é usado para trazer novo software
  • Risco de qualidade proveniente de software desenvolvido externamente, que pode não cumprir os requisitos operacionais do negócio

O Azure enfrenta o mesmo desafio com uma complexidade significativa. Milhares de servidores executam software que milhares de engenheiros desenvolvem e mantêm. Esta escala apresenta uma grande superfície de ataque que os processos empresariais sozinhos não conseguem gerir.

Adicionando um portão de autorização

O Azure utiliza um processo de engenharia rico que implementa portas na segurança, conformidade e qualidade do software implementado. Este processo inclui controlo de acesso ao código-fonte, revisões de código por pares, análise estática para vulnerabilidades de segurança, o Ciclo de Vida de Desenvolvimento de Segurança (SDL) da Microsoft e testes funcionais e de qualidade. A Microsoft precisa garantir que o software implementado flui através deste processo. A integridade do código ajuda a alcançar essa garantia.

Integridade do código como uma porta de autorização

A integridade do código é um serviço ao nível do kernel que ficou disponível a partir do Windows Server 2016. A integridade do código pode aplicar uma política de controle de execução estrita sempre que um driver ou uma biblioteca vinculada dinamicamente (DLL) é carregado, um binário executável é executado ou um script é executado. Sistemas semelhantes, como o DM-Verity, existem para Linux. Uma política de integridade de código consiste num conjunto de indicadores de autorização, quer certificados de assinatura de código quer hashes de ficheiros SHA-256, que o kernel compara antes de carregar ou executar um binário ou script.

A integridade do código permite aos administradores de sistema definir uma política que autoriza apenas binários e scripts que certificados específicos assinam ou que correspondem a hashes SHA-256 especificados. O kernel impõe essa política bloqueando a execução de tudo o que não atende à política definida.

Uma política de integridade de código pode bloquear software crítico em produção e causar uma falha, a menos que a política esteja perfeitamente correta. Dada esta preocupação, poderá perguntar por que a monitorização de segurança não é suficiente para detetar execuções não autorizadas de software. A integridade do código tem um modo de auditoria que, em vez de impedir a execução, pode alertar quando software não autorizado é executado. O alerta pode acrescentar muito valor para enfrentar riscos de conformidade. No entanto, para riscos de segurança como ransomware ou malware personalizado, atrasar a resposta mesmo por alguns segundos pode ser a diferença entre proteção e um adversário ganhar uma presença persistente na sua frota. No Azure, a Microsoft investe significativamente para gerir qualquer risco relacionado com a integridade do código que possa contribuir para uma interrupção com impacto no cliente.

Processo de construção

Como descrito anteriormente, o sistema de compilação do Azure tem um conjunto rico de testes para garantir que as alterações de software são seguras e compatíveis. Após a validação de uma compilação, o sistema de compilação assina-a usando um certificado de compilação do Azure. O certificado indica que a compilação passou por todo o processo de gestão de mudanças. O teste final que a build realiza é a Validação de Assinatura de Código (CSV). O CSV confirma que os binários recém-construídos cumprem a política de integridade do código antes da Microsoft os implementar em produção. Esta validação confere à Microsoft grande confiança de que binários assinados incorretamente não causarão uma falha que afete o cliente. Se o CSV encontrar um problema, a compilação falha e os engenheiros responsáveis são alertados para investigar e corrigir o problema.

Segurança durante a implantação

Apesar de o Azure executar CSV em todas as compilações, alguma alteração ou inconsistência na produção pode ainda assim causar uma falha relacionada com a integridade do código. Por exemplo, uma máquina pode executar uma versão antiga da política de integridade do código, ou pode estar num estado pouco saudável que produz falsos positivos na integridade do código. À escala do Azure, a Microsoft já viu de tudo. O Azure continua a proteger contra o risco de uma interrupção durante a implementação.

Todas as alterações no Azure devem ser implementadas através de uma série de etapas. As primeiras fases são instâncias internas de teste do Azure. A fase seguinte serve apenas outras equipas de produtos da Microsoft. A etapa final atende clientes terceirizados. Quando o Azure implementa uma alteração, a alteração passa por cada fase, sequencialmente, e faz uma pausa para avaliar o estado da fase. Se a mudança não tiver impacto negativo, avança para a fase seguinte. Se a Microsoft fizer uma alteração má numa política de integridade de código, a implementação em fases deteta a alteração e reverte-a.

resposta a incidentes

Mesmo com esta proteção em camadas, um servidor na frota pode bloquear software devidamente autorizado e causar um problema de contacto com o cliente, um dos piores cenários da Microsoft. A última camada de defesa é a investigação humana. Cada vez que a integridade do código bloqueia um arquivo, ele gera um alerta para os engenheiros de plantão investigarem. O alerta permite aos engenheiros iniciar investigações de segurança e intervir, seja o problema indicar um ataque real, um falso positivo ou outra situação que impacte o cliente. Este alerta minimiza o tempo necessário para mitigar quaisquer problemas relacionados com a integridade do código.

Próximos passos

Para saber mais sobre como a Microsoft gere a integridade e segurança da plataforma, veja: