
Descifrando el cifrado de BitLocker basado en la vulnerabilidad CVE-2023-21563
Reproducción en máquina virtual. La máquina local (atacante) utiliza el sistema Ubuntu 22.04.5 LTS, las máquinas víctimas son Windows 10 21H2 19041.1 y Windows 11 21H2 22000.318, ambas con cifrado BitLocker habilitado. Se utiliza QEMU como gestor de máquinas virtuales y virt-manager para la administración; aquí uso la máquina virtual Windows 11 para las operaciones.
Mis archivos de reproducción provienen del Repositorio de GitHub de Syss, sobre los cuales realicé adaptaciones de versiones de herramientas y manejo de algunos casos inesperados. Se pueden descargar y usar directamente, o modificar según sea necesario. Los archivos de imagen de la máquina virtual provienen de UUP Dump, que ofrece descargas de varias versiones de Windows; después de la descarga, ejecute el archivo .cmd o .sh para obtener el archivo ISO.
La instalación y uso de QEMU y virt-manager no se detallarán aquí, pero los usuarios nuevos deben habilitar la edición XML en virt-manager a través de 'Edit -> Preferences -> General -> Enable XML editing', para poder editar directamente el archivo de configuración XML de la máquina virtual.
Al crear la máquina virtual, seleccione 'Local install media (ISO image or CDROM)' y elija la imagen ISO de Windows 11 descargada previamente. Asigne los recursos adecuados (CPU, memoria, espacio en disco, etc.), y al final asegúrese de seleccionar 'Customize configuration before install', para poder editar la configuración antes de la instalación. Aquí, puede haber problemas al detectar automáticamente el sistema; en ese caso, podemos seleccionar manualmente 'Microsoft Windows 10/11'.
Ahora comenzamos la configuración. El punto más importante (porque esto no se puede cambiar después, otros ajustes se pueden modificar tras la creación) es que en la pestaña Overview, seleccione Firmware como 'UEFI x86_64: /usr/share/OVMF/OVMF_CODE_4M.ms.fd'. Si no selecciona esto, simplemente elimine la máquina virtual y vuelva a crearla, no es complicado.

Luego vaya a la pestaña 'Boot Options', asegúrese de que 'SATA CDROM 1' esté marcado, de lo contrario no podremos instalar el sistema. Puede mover 'SATA CDROM 1' a la parte superior de la lista para simplificar el arranque. En este punto, ya puede crear la máquina virtual; después de instalar el sistema, realizaremos las demás modificaciones de configuración.
¿Ve 'Press any key to boot from CD or DVD...'? Presione cualquier tecla para ingresar a la interfaz de instalación y siga las instrucciones para completar la instalación. Si accidentalmente entra en una página diferente, no se preocupe, seleccione 'Boot Manager' y luego 'UEFI: QEMU DVD-ROM' para volver a la interfaz anterior y presione cualquier tecla para arrancar.

A continuación, instale el sistema; marque directamente la opción de no tener clave de producto e instale la edición Pro. Luego viene el registro de cuenta, etc.; se recomienda usar la opción de cuenta sin conexión para evitar problemas. Si no aparece esa opción, use Shift + F10 para abrir el símbolo del sistema y escriba OOBE\BYPASSNRO para habilitar la opción de creación de cuenta sin conexión.
Una vez dentro normalmente, puede escribir msinfo32 en el terminal para ver la información del sistema (en una máquina física, verifique que sea UEFI), luego apague la máquina y realice los siguientes cambios de configuración:
<rom enabled="no"/> para habilitar el arranque en red. Ejemplo:<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>
La elección de la configuración de red virtio se debe principalmente a su característica de 'semi-virtualización' del hardware de red, que se comunica directamente con el host. Al mismo tiempo, deshabilitar la ROM de arranque en red permite que el firmware UEFI se comunique directamente con la NIC virtio a través del protocolo PXE incorporado, evitando interferencias innecesarias durante el arranque y garantizando que podamos ingresar al sistema sin problemas para realizar configuraciones y pruebas posteriores.
Ingrese a la máquina virtual, instale los controladores virtio desde la unidad de CD, se configurarán automáticamente. Puede hacer una prueba simple de conectividad de red. Luego, realice el cifrado de BitLocker; puede crear un archivo flag en el escritorio para su verificación posterior.
Si se reproduce en una máquina física, solo necesita conectar la máquina atacante y la víctima con un cable de red, no es necesario configurar virtio; las demás configuraciones son básicamente las mismas. La única precaución es que la máquina física puede tener múltiples interfaces de red, por lo que debe seleccionar la interfaz correcta para la configuración.
La configuración de la máquina víctima está completa; luego apáguela. A continuación, podemos proceder con la explotación de la vulnerabilidad siguiendo los pasos establecidos en el principio de explotación anterior.
Aquí proporcionamos un diagrama de referencia del flujo completo del ataque; puede echar un vistazo general al proceso, luego lo implementaremos paso a paso:

La máquina local (atacante) debe tener instalados los siguientes paquetes:
En Ubuntu o Debian, puede instalarlos con el siguiente comando:
sudo apt install dnsmasq libwin-hivex-perl python3-impacket
En los archivos proporcionados en el proyecto, ejecute el archivo build.sh para generar bitpixie-initramfs. Si desea modificar y adaptar a su entorno local, puede modificar build.sh, configurar las herramientas y versiones que desee, y luego volver a ejecutar para regenerar bitpixie-initramfs.
Luego, en el terminal, escriba ifconfig para consultar la puerta de enlace virtual de nuestra máquina local (atacante). A continuación, un ejemplo de mi máquina local:
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