
Quebrando a criptografia BitLocker baseada na vulnerabilidade CVE-2023-21563
Reprodução em máquina virtual. A máquina local (atacante) usa Ubuntu 22.04.5 LTS, as vítimas são Windows 10 21H2 19041.1 e Windows 11 21H2 22000.318, ambas com criptografia BitLocker ativada. Uso QEMU como gerenciador de máquinas virtuais e virt-manager para administração. Aqui utilizo a VM Windows 11 para as operações.
Meus arquivos de reprodução são originários do repositório GitHub da Syss, com adaptações de versões de ferramentas e tratamento de alguns casos inesperados. Pode ser usado diretamente após download, ou modificado conforme necessidade. As imagens ISO das VMs vieram do UUP Dump, que oferece downloads de várias versões do Windows. Após o download, execute o arquivo .cmd ou .sh para obter a imagem ISO.
A instalação e uso do QEMU e virt-manager não serão detalhados aqui, mas para novos usuários, no virt-manager, vá em "Edit -> Preferences -> General -> Enable XML editing" para habilitar a edição XML, permitindo editar diretamente o arquivo de configuração XML da VM.
Ao criar a VM, selecione "Local install media (ISO image or CDROM)" e escolha a imagem ISO do Windows 11 baixada. Aloque os recursos adequados (CPU, memória, espaço em disco, etc.) e, por fim, certifique-se de marcar "Customize configuration before install" para editar a configuração antes da instalação. Pode haver problemas na identificação automática do sistema; nesse caso, selecione manualmente "Microsoft Windows 10/11".
Agora vamos configurar. O ponto mais importante (pois não pode ser alterado depois, ao contrário de outras configurações) é: na guia "Overview", escolha Firmware como "UEFI x86_64: /usr/share/OVMF/OVMF_CODE_4M.ms.fd". Se não selecionar isso, exclua a VM e recrie (não é trabalhoso).

Em seguida, vá para a guia "Boot Options" e garanta que "SATA CDROM 1" esteja marcado; caso contrário, não será possível instalar o sistema. Você pode mover "SATA CDROM 1" para o topo da lista para simplificar a inicialização. Agora já pode criar a VM. Após instalar o sistema, faremos as demais alterações de configuração de forma unificada.
Viu "Press any key to boot from CD or DVD..."? Pressione qualquer tecla para entrar na tela de instalação e siga as instruções. Se acidentalmente entrar em outra página, não se preocupe: selecione "Boot Manager" e depois "UEFI: QEMU DVD-ROM" para voltar à tela anterior e pressionar qualquer tecla para iniciar.

Agora instale o sistema: marque a opção de não ter chave do produto e instale a versão Professional. Depois virão telas de criação de conta, etc. Recomendo usar "Entrar offline" para reduzir problemas. Se essa opção não aparecer, use Shift + F10 para abrir o prompt de comando e digite OOBE\BYPASSNRO para habilitar a criação de conta offline.
Após entrar normalmente, no terminal digite msinfo32 para ver as informações do sistema (verifique se é UEFI na máquina física) e desligue a VM. Agora vamos modificar a configuração:
<rom enabled="no"/> para habilitar a inicialização pela rede. Exemplo:<interface type="network">
<mac address="52:54:00:2f:53:4e"/>
<source network="default"/>
<model type="virtio"/>
<boot order="2"/>
<rom enabled="no"/>
<address type="pci" domain="0x0000" bus="0x01" slot="0x00" function="0x0"/>
</interface>
Optar pela configuração de rede virtio deve-se principalmente à sua característica de "paravirtualização" de hardware, comunicando-se diretamente com o host. Além disso, desabilitar a ROM de inicialização de rede permite que o firmware UEFI se comunique diretamente com a placa de rede virtio através do protocolo PXE embutido, evitando interferências desnecessárias durante a inicialização e garantindo que possamos entrar no sistema sem problemas para configurações e testes posteriores.
Entre na VM e use a unidade de CD para instalar os drivers virtio (isso é feito automaticamente). Teste se a rede está funcionando. Em seguida, ative a criptografia BitLocker. Crie um arquivo "flag" na área de trabalho para verificação posterior.
Se estiver reproduzindo em máquina física, basta conectar o atacante e a vítima com um cabo de rede; não é necessário configurar virtio. As outras configurações são basicamente as mesmas. A única diferença é que a máquina física pode ter várias interfaces de rede; é preciso selecionar a interface correta para configurar.
A configuração da vítima está concluída. Desligue a VM. Agora podemos seguir as etapas definidas anteriormente no princípio da exploração da vulnerabilidade.
Aqui fornecemos um diagrama de referência do fluxo completo do ataque. Primeiro, veja uma visão geral; depois, implementaremos passo a passo:

Na máquina local (atacante), os seguintes pacotes devem estar instalados:
No Ubuntu ou Debian, use o seguinte comando para instalar:
sudo apt install dnsmasq libwin-hivex-perl python3-impacket
Nos arquivos do projeto, execute o script build.sh para gerar o bitpixie-initramfs. Se quiser modificar para adaptar ao ambiente local, edite o build.sh para configurar as ferramentas e versões desejadas e, em seguida, execute novamente para gerar o bitpixie-initramfs.
Depois, no terminal, digite ifconfig para consultar o gateway virtual da máquina local (atacante). Exemplo:
virbr0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.123.1 netmask 255.255.255.0 broadcast 192.168.123.255
ether 52:54:00:23:11:39 txqueuelen 1000 (Ethernet)
RX packets 46749 bytes 4384179 (4.3 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 67170 bytes 414459630 (414.4 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Use os seguintes comandos para iniciar o servidor TFTP (para o processo de inicialização PXE) e o servidor SMB (para transferir o script de modificação do arquivo BCD). Preencha a interface que acabamos de consultar (no meu caso, virbr0).
# Iniciar o servidor TFTP e DHCP
./start-server.sh pxe <interface>
# Iniciar o servidor SMB para transferência do arquivo BCD
./start-server.sh smb <interface>