¿Qué es Logofail?
LogoFail es una vulnerabilidad capaz de permitir la ejecución de un virus virtualmente indetectable y resistente al formateo de disco. Hoy en día existen diversas pruebas de concepto (PoC) sin embargo no se conoce que esté siendo explotada de forma activa.
Un poco de historia: BIOS y UEFI
Antes de 2006, para arrancar un ordenador, un pequeño chip con un pequeño programa llamado BIOS (Basic Input Output System) detectaba el procesador, la memoria RAM, los discos, escogía el primer disco y trataba de cargar el sistema operativo, así hasta que empezaba la carga o bien no quedaba ninguna unidad más por analizar.
Con el tiempo, las empresas decidieron actualizar ese programa e introducir nuevas características. En 1998 crearon una especificación llamada EFI (Extended Firmware Interface). Esta especificación no estuvo exenta de polémicas, pues se creía que podrían emplear la excusa del cambio de BIOS a EFI para que los ordenadores no volviesen a ser máquinas de propósito general.
Un firmware no es más que un software que se ejecuta en dispositivos como chips, microcontroladores, procesadores, etc. En principio su modificación no es habitual sin embargo suele ser posible. Realmente el cambio de BIOS a UEFI era la complejidad de esa pieza de software.
Casi 10 años después empezó a usarse la nueva especificación UEFI, por sus siglas Interfaz de Firmware Extensible Unificada / Unified Extensible Firmware Interface. Este nuevo estándar añadía mayor funcionalidad soportando arranques de sistemas de 32 y 64 bits, haciendo este firmware modular e incorporando un «Boot Manager» o gestor de arranque que se ejecutaba antes de cargar el sistema operativo.
Dentro de este gestor de arranque se incluyó un mecanismo «denominado Secure Boot» (arranque seguro) cuya intención era garantizar la integridad del núcleo del sistema operativo, impidiendo la ejecución de sistemas alterados (con posible malware instalado). Esto se garantizaba mediante el uso de una firma digital, en caso de no existir o ser inválida, se detenía el arranque del sistema mostrando un aviso del error.
Este mecanismo de secure boot tampoco estuvo exento de polémica, puesto que impedía cargar sistemas operativos alternativos como GNU/Linux sin entrar en la «BIOS» (UEFI) a configurar distintas opciones y esto sólo si el fabricante lo permitía. En esta época la lucha de los fabricantes contra GNU/Linux fue bastante cruenta y también fue conocido el caso de algún fabricante que alteraba las tablas ACPI en la suspensión del equipo cuando detectaba que se había cargado un kernel de Linux en lugar de Windows, haciendo imposible que volviese de la suspensión.
Durante años (y todavía se ve en BIOS relativamente recientes) en las BIOS se han incorporado los ajustes de secure boot y CSM boot (Compatibility Support Module) que permiten cargar sistemas operativos antiguos.
Normalmente verás que al programa de configuración de una placa base se le sigue llamando BIOS.
Logofail no es algo nuevo, la historia se repite
Volviendo al tema, el mecanismo de secure boot es a día de hoy una buena idea para asegurar la integridad del sistema y el UEFI tiene muchas nuevas funciones, como mostrar un logotipo personalizado por el usuario o el fabricante. Además hay que ahorrar y por eso algunas partes serán implementadas empleando librerías de terceros, que por supuesto están ya muy probadas, así que ¿Qué podría salir mal?
Ya en 2009 tenemos las primeras noticias de problemas con las imágenes en el arranque. El paper «Attacking Intel® BIOS» de Rafal Wojtczuk y Alexander Tereshkin presentado en el evento: Black Hat USA el 30 de julio de 2009 en Las Vegas. Aquí se utilizó para cambiar las tablas ACPI, pero ya anunciaba que en el futuro se podría hacer malware persistente. En 2009 ya se trataba el mismo problema: El código ejecutado antes de mostrar el logotipo (o el propio logotipo) NO tenía que estar firmado y se confiaba en él.
Logofail por su nombre ¿Cómo produce el fallo en la validación de logos?
Los fabricantes incluyen parsers o analizadores sintácticos (programas que interpretan/traducen datos) para los formatos de imagen más habitual: BMP, GIF, PNG, JPEG… Quizás habría que preguntarse la necesidad, puesto que sería más simple implementar un sólo formato estándar y que un software del fabricante actualice en ese sólo formato el archivo de logotipo en la BIOS.
Además que el usuario puede pasar la foto en cualquier formato, hay diversas opciones de personalización y no sólo eso ¡El parseo se hace durante el tiempo de arranque! Se utilizan librerías de terceros y no hay mitigaciones para evitar explorar vulnerabilidades. Hay algunos fabricantes que se salvan de esta vulnerabilidad, pero porque bloquean el cambio del logotipo en general, no porque hayan implementado bien los parsers.
Mediante una imagen mal formada, se logra provocar un fallo que permite el almacenamiento y la ejecución de código en el propio firmware y sin firmar antes del proceso de arranque que empieza a comprobar las firmas y la carga del sistema. Al no requerir que el código esté firmado en esta primera parte de la ejecución del arranque, podemos ejecutar cualquier cosa.
Este error en los parsers es similar al utilizado por Pegasus en su vector de infección por un zero day al recibir una imagen en un mensaje. A fin de cuentas los buffer overflow / buffer underflow siguen de rabiosa actualidad.
Impacto potencial . Consecuencias y riesgos asociados
Afecta a BIOS de los principales fabricantes: insyde, phoenix, ami, tiaonocore… Cada uno con su CVE asociado. Posiblemente haya más fabricantes afectados. Algunos modelos de equipos que bloquean el cambio de logotipo no están afectados.
Esto tiene impacto en equipos que ejecuten cualquier sistema operativo Windows o Linux e incluso podría afectar a entornos de servidores. No se requiere acceso físico a la máquina.
A esto hay que añadir la persistencia e imposibilidad de eliminación, salvo para un usuario avanzado. La prueba de concepto de los investigadores cambia el logotipo de windows y crea un archivo en el escritorio.
Potencialmente se podría mentir al sistema operativo y decirle que todos los drivers tienen una firma válida para que pueda ejecutar cualquier código sin firmar con acceso directo al propio núcleo del sistema.
Cómo protegerse de Logofail
Actualiza tu firmware (si tu fabricante ha sacado actualización).
Actualiza tu sistema operativo y aplicaciones para no verte afectado por una vulnerabilidad que se haga con acceso a tu sistema en primer lugar y trate de mantener su persistencia de este modo.
¡Con cuidado y suerte!
Conclusión
Una vulnerabilidad en el corazón del hardware es grave y puede traer consecuencias desastrosas para nuestra seguridad. Es conveniente actualizar el firmware de nuestra placa base y aplicar todas las actualizaciones que el fabricante saque relacionadas con esta vulnerabilidad, así como el propio sistema operativo, para tratar de evitar que de este modo llegue al hardware.
En entornos empresariales o de administraciones públicas es muy conveniente actualizar el hardware si el fabricante no ha sacado actualizaciones de firmware o de lo contrario adoptar otras medidas que nos aseguren no infectarnos y/o que no estamos infectados.
También puedes leer más sobre esta vulnerabilidad en:
- Tom’s Hardware. Artículo sobre logofail
- Wikipedia. Artículo de LogoFAIL (inglés)
- El chapuzas Informático. Artículo sobre logofail
- (Vídeo) Windows Secure Boot Compromised! What You Need to Know by a Retired Microsoft Engineer
Fuentes
- PoC: Prueba de concepto (vídeo): https://www.youtube.com/watch?v=EufeOPe6eqk
- The Far-Reaching Consequences of LogoFAIL
- Presentación en Backhat EU
- Diapositivas Blackhat EU
- Common Vulnerabilities and Exposures (CVE):
Además, por añadir fuego al asunto, se han visto expuestas algunas llave de firma:
- Intel Boot Guard Keys exposed
- Leaked Intel Boot Guard keys: What happened? How does it affect the software supply chain?