- Si BitLocker sin contraseña depende de un TPM discreto (discrete TPM), se puede capturar la clave en texto plano en el bus SPI justo cuando la VMK pasa del TPM al CPU durante el arranque
- El experimento con una Lenovo L13 se hizo con un DSLogic Plus de menos de 100 dólares, pero sus límites de muestreo fueron un obstáculo importante para leer de forma estable un bus SPI de 33 MHz
- Los datos capturados deben interpretarse en el orden SPI → TIS → TPM 2.0, y la clave de 32 bytes se encuentra en el búfer de respuesta de
TPM2_Unseal, empezando por5761 - Con la clave extraída, se monta la partición de BitLocker con
dislocker-fuse, y al reemplazarsethc.exeporcmd.exese obtiene hasta una shell SYSTEM al presionar Shift cinco veces - Un TPM discreto por sí solo no ofrece protección suficiente; la defensa real depende de usar fTPM o configurar un PIN o passphrase en BitLocker
Debilidad de BitLocker sin contraseña y del TPM discreto
- La partición de BitLocker está cifrada con la FVEK (Full Volume Encryption Key)
- A su vez, la FVEK está cifrada con la VMK (Volume Master Key), que se guarda en el disco junto con los datos cifrados
- Gracias a esta estructura, es posible rotar claves sin volver a cifrar todo el disco
- La VMK se almacena en el TPM
- Por eso, el disco solo puede descifrarse al arrancar en esa computadora
- Active Directory cuenta con un mecanismo de recuperación
- El punto débil aparece en el momento en que el CPU le pide al TPM que entregue la VMK para descifrar el disco
- La VMK viaja en texto plano por el bus SPI entre el TPM y el CPU
- Si se captura ese valor, puede usarse para descifrar el disco de BitLocker
Equipo usado para capturar la comunicación del TPM
- El equipo de prueba fue un analizador lógico DSLogic Plus
- Se compró en 2021 por menos de 100 dólares, impuestos y envío incluidos
- Para obtener una señal estable, la frecuencia de muestreo debe ser de unas 3 a 4 veces la frecuencia del bus
- El bus SPI objetivo era de 33 MHz, así que se necesitaba al menos muestreo a 100 MHz
- Las especificaciones del DSLogic Plus hablan de hasta 400 MHz con 16 canales, pero en uso real hay restricciones
- El DSLogic Plus tiene límites claros según el método de captura y la cantidad de canales
- Cuantos más canales se capturan al mismo tiempo, más baja es la frecuencia de muestreo
- El modo stream permite capturar grandes volúmenes de datos durante alrededor de un minuto, pero está limitado a 100 MHz con 3 canales
- El modo buffer puede muestrear a 400 MHz, pero solo funciona unos pocos milisegundos, así que no es práctico para este trabajo
- Una opción más profesional es Saleae, que cuesta unas 10 veces más, y se puede revisar otro equipo en la lista de hardware compatible con sigrok
Conexión a la placa y momento de captura
- SPI es un bus compartido, así que no hace falta conectarse directamente a los pines diminutos del TPM
- Si hay un componente más grande conectado al mismo bus SPI, se puede enganchar ahí
- En el experimento se identificó y usó una memoria SPI flash cercana
- Como el componente tenía marcado, fue fácil buscar la hoja de datos y confirmar su función
- Con el DSLogic solo se capturaron 3 líneas SPI debido a la caída en la frecuencia de muestreo
- Las líneas importantes son CLK, MOSI y MISO
- El voltaje umbral debe fijarse cerca de la mitad del voltaje de la señal
- El voltaje medido fue de 3.3 V, y el umbral adecuado era de alrededor de 1.6 V
- La VMK buscada se usa en la etapa tardía del POST
- En la Lenovo L13 fue justo después de la pantalla de arranque, alrededor del segundo 14 de un arranque total de unos 25 segundos
- Antes de eso también hay actividad SPI, pero corresponde sobre todo a lecturas y verificaciones de arranque temprano, no a comunicación con el TPM
- Se puede empezar la captura justo al arrancar o, para reducir datos innecesarios, comenzar alrededor de 7 segundos después
Interpretación de SPI, TIS y TPM 2.0
- Las señales capturadas deben interpretarse en tres capas: SPI, TIS y TPM 2.0
- SPI es un protocolo simple, así que puede interpretarse con un analizador lógico común
- El valor del bit se toma del estado de la línea de datos cuando el reloj pasa de 0 a 1
- En el ejemplo, MOSI está en 0 durante 8 pulsos de reloj, así que se interpreta como
0x00; MISO solo tiene activo el primer bit, así que se interpreta como0x80
- La parte más difícil fue TIS (TPM Interface Specification)
- No se encontró un decodificador funcional, así que se procesó manualmente
- Los decodificadores de libsigrok no lograron interpretar bien los datos, pero sí ayudaron a ubicar aproximadamente las secciones donde ocurrían intercambios con el TPM
- La falla pudo deberse a la ausencia de Chip Select en la captura, a un reloj impreciso, a bytes faltantes o a otra causa
- Las solicitudes del maestro al esclavo muestran un patrón repetitivo
- El esclavo envía
80para indicar que está listo - El maestro envía el encabezado
D4 00 24y los bytes del TPM - El esclavo confirma la lectura con
01 FF
- El esclavo envía
- Las respuestas del esclavo al maestro dependen de la configuración y lectura de registros
- El frame de ejemplo es el resultado de leer 1 byte en la dirección
D4 00 24 - El esclavo inicia la transacción con
80, y luego aparece el valor de interés0x80
- El frame de ejemplo es el resultado de leer 1 byte en la dirección
Cómo encontrar la clave en la respuesta de TPM2_Unseal
- El comando TPM que solicita el retorno de la clave es TPM2_Unseal
- Este comando está definido en la especificación TPM 2.0 parte 3
- Para aislar las transacciones TPM, se puso el foco en la respuesta de la línea MISO más que en los frames de solicitud
- En los datos SPI crudos se filtró con la máscara
80 00 00 00 01 ..y se conservó solo el último byte comodín - El inicio de una transacción TPM se identifica por los encabezados
80 01o80 02 - La respuesta que contiene la clave es una respuesta de autenticación más larga y empieza con
80 02
- En los datos SPI crudos se filtró con la máscara
- Entre el comando Unseal y la respuesta hubo un retraso de unos 10 ms
- El encabezado
80 02indica una sesión con contraseña, a diferencia del encabezado80 01en texto plano que usan la mayoría de las solicitudes - Parece que la demora se debe al procesamiento de la autenticación de la solicitud y del HMAC de la respuesta
- El encabezado
- Los comandos y respuestas TPM se obtuvieron reensamblando los bytes uno por uno
- Para la decodificación se usó la herramienta tpmstream-web
- La clave dentro del búfer de respuesta empieza con
5761y tiene una longitud de 32 bytes
Montaje del disco y puerta trasera
- Después de guardar la clave extraída en un archivo, se pasa a
dislocker-fusepara montar la partición de BitLocker - El comando de ejemplo crea el archivo con la clave, conecta
/dev/sdd3a./mnt/y luego vuelve a montardislocker-fileen./mnt2/ - La puerta trasera más simple consiste en sobrescribir el programa de sticky keys de Windows con
cmd.exe- Se copia
Windows/System32/cmd.exesobreWindows/System32/sethc.exe - Al volver a poner el disco en la laptop y arrancar, al presionar Shift cinco veces se obtiene una shell SYSTEM
- Se copia
Límites del equipo y medidas de defensa
- No es fácil recomendar el DSLogic para este trabajo
- Muchas capturas fallaron y tuvieron que descartarse
- Muestrear a 3 veces la velocidad del bus apenas alcanzó para obtener un reloj consistente y se perdieron algunos bytes
- Debido a las limitaciones del equipo, tomó mucho tiempo entender a fondo el protocolo e interpretar manualmente las capturas
- Si el equipo va a comprarlo una empresa, probablemente conviene adquirir un analizador lógico profesional
- Usar un TPM discreto, contra lo esperado, no mejora la seguridad del sistema y puede crear una ilusión de seguridad
- Hay dos defensas principales
- Usar fTPM
- Si se tiene que usar TPM discreto, configurar un PIN o una passphrase en BitLocker
- Microsoft también recomienda configurar un PIN o una passphrase de BitLocker en las áreas de la organización que requieren un nivel más alto de protección de datos
1 comentarios
Opiniones de Hacker News
Todos los TPM admiten sesiones cifradas para impedir este tipo de ataques de intermediario. Basta con usar
TPM2_StartAuthSessiony especificar cifrado para cada comando de la sesión, pero BitLocker no lo usa, así que es una falla grave. Microsoft debería corregirlo.En comparación, systemd usa sesiones cifradas cuando se utiliza cifrado de disco LUKS junto con un TPM: https://github.com/systemd/systemd/commit/acbb504eaf1be51572...
Pregunto porque no conozco bien los TPM: ¿cómo funcionan las sesiones autenticadas? ¿Cómo demuestra el sistema operativo su identidad ante el TPM de una forma que un atacante no pueda falsificar en un ataque real de intermediario? Cualquier secreto o clave almacenado del lado del sistema operativo parecería tener que estar en texto plano en el disco, ya que todavía no se tiene la clave de cifrado.
Incluso si el sistema operativo de alguna manera verifica la identidad del TPM y hace que no se pueda eludir modificando algunos archivos del disco, no veo qué impediría que un atacante ejecute la misma rutina en un emulador. A menos que se integre con algún entorno de ejecución seguro del lado de la CPU, como Intel ME o SGX, parece difícil obtener seguridad real con este enfoque, y entonces quizá ni siquiera haría falta el TPM en primer lugar.
También hay otro artículo de 2021:
https://arstechnica.com/gadgets/2021/08/how-to-go-from-stole...
Algunos fabricantes de laptops ofrecen una configuración que borra el TPM si se abre la laptop. Si la abriste para ver si podías agregar RAM, más vale que tengas acceso a la clave de recuperación de BitLocker o una copia de respaldo.
Me imagino que también se podría acceder cortando el plástico. Algo al estilo de la escena de extracción del parásito en Matrix.
No es nada nuevo. La configuración predeterminada no exige PIN, pero la documentación de Microsoft describe varios ataques y recomienda configurar un PIN de BitLocker para bloquearlos por completo. Como el TPM impide ataques de fuerza bruta, el PIN puede ser bastante débil.
Ejemplo: https://learn.microsoft.com/en-us/windows/security/operating...
Behavior:Win32/AccessibilityEscalationEn BitLocker y en este tipo de cifrado, nunca entendí la arquitectura en la que el sistema proporciona automáticamente la clave de descifrado. Si te roban la laptop completa, ¿qué seguridad ofrece BitLocker? Desde el punto de vista del atacante, el sistema arranca y simplemente pide la contraseña de la cuenta de usuario.
Según entiendo, protege mis datos cuando alguien saca el disco duro de la laptop e intenta ejecutarlo en otro sistema. Por esta posible confusión tonta, siempre he configurado BitLocker con una contraseña que debo ingresar manualmente, y también lo he hecho siempre con LUKS. ¿Estoy completamente equivocado?
Lo normal es que borre el disco y lo venda, y probablemente no intente en realidad un ataque de arranque en frío. Pero todo depende del modelo de amenazas. En lo personal, la razón principal por la que uso cifrado de disco completo en mis equipos personales es reducir la necesidad de destruir físicamente el almacenamiento al desecharlo.
Aunque falle un disco duro, no tengo que desmontarlo físicamente para asegurarme de que mis datos desaparecieron. Mis dispositivos normalmente están en suspensión cuando estoy fuera, así que si alguien quisiera hacer un ataque de arranque en frío, de todos modos podría hacerlo.
Como dices, si la clave de descifrado se proporciona automáticamente al sistema, esa clave está en la RAM y queda lista para que un atacante la exporte y la reutilice en el disco cifrado. Los ataques de arranque en frío[1] son un vector de ataque sobre el que vale la pena leer más para decidir si encaja con tu modelo de amenazas.
[1] https://en.wikipedia.org/wiki/Cold_boot_attack
Si la clave pasa por un bus compartido, ¿significa que cualquier componente del sistema puede interceptarla tan fácilmente como este analizador lógico? Suena como una pesadilla de seguridad de la cadena de suministro
Si cualquiera puede arrancar la laptop y acceder al disco duro descifrado, ¿qué diferencia hace esnifar primero la clave? Si podías arrancar la laptop, de todos modos ya podías acceder al resultado final
Si quieres que BitLocker te proteja en caso de que alguien robe la laptop, de todos modos tienes que usar contraseña y desactivar la suspensión, dejando solo la hibernación
Entonces, ¿qué está haciendo realmente ahora el hardware “confiable” del TPM? ¿También se pueden falsificar las mediciones de arranque? Además, esto es absurdamente tonto. ¿Por qué el material de claves anda en texto claro por el bus? ¿No hay nada parecido a un protocolo de intercambio de claves?
[1] Aquí también se menciona el borrado seguro, y ese sí es un caso aún más débil. Pero si el cifrado de disco completo incluye una EEPROM que puedes sacar del zócalo y destruir físicamente, esa parte se resuelve igual de eficazmente
Me da curiosidad qué software usó para convertir la señal cruda en 0 y 1. Desde hace tiempo tengo un proyecto similar: leer datos digitales de casetes de los años 80. Logré obtener archivos
.wavbastante decentes de las cintas, pero aún no he encontrado una herramienta o biblioteca adecuada para convertirlos en 0 y 1.Claro que la parte realmente divertida empezará después de comenzar a decodificar los 0 y 1. Sé cómo están codificados los bits: es modulación por desplazamiento de frecuencia[0]. Lo que no sé es qué usar para decodificar eso en un flujo de bits que pueda procesar después.
[0] https://en.wikipedia.org/wiki/Frequency-shift_keying
Puedes comparar la salida de un par de estos filtros para producir una salida digital. También se podría usar una transformada discreta de Fourier deslizante dispersa, pero la interpolación entre bins de frecuencia es más engorrosa, mientras que el filtro Goertzel se encarga de eso por ti
No conozco un algoritmo o software único que convierta cualquier señal cruda en bytes. Hay que identificar qué esquema de modulación usa la señal y encontrar el decodificador correspondiente o escribirlo uno mismo. En general implica filtrado y varios algoritmos matemáticos, pero los programas para decodificación básica suelen ser bastante cortos y simples.
Es una habilidad bastante genial para aprender, porque las mismas técnicas se pueden usar en todo tipo de áreas. Por ejemplo, después de aprender un poco de DSP, se me abrieron muchas posibilidades en comunicaciones inalámbricas, música y diseño de sonido, imágenes y procesamiento de video
O, como el autor menciona DSlogic, tal vez exista un fork de esos programas hecho por el fabricante de ese analizador lógico
La señal cruda normalmente entra a un disparador Schmitt para implementar histéresis y obtener bordes estables. Así se compensan la polaridad de la señal de la cinta y las variaciones del motor
Es irónico lo de que “usar un TPM físico separado en realidad reduce la seguridad”.
Mi laptop de 2015 no tenía TPM físico, y al intentar activarlo aparecía “Permitir BitLocker sin un TPM compatible (requiere una contraseña o clave de inicio en una unidad flash USB)”, así que pensé que era menos seguro. Menos mal que de todos modos no usé BitLocker
Me da mucha risa que todavía funcione tal cual el truco de primaria de la época de Windows Vista de cambiar el nombre del símbolo del sistema por el de un controlador de accesibilidad.
Uno se imaginaría que, si algo se ejecuta con privilegios de administrador sin iniciar sesión, Windows lo autenticaría, pero Windows parece ser 75% teatro de seguridad y el otro 25% también otra clase de teatro
En 2021 se explicó la misma técnica:
https://dolosgroup.io/blog/2021/7/9/from-stolen-laptop-to-in...