Bootkits: Infected, Atacando el arranque

El proceso de arranque es un momento crítico en la inicialización del hardware y la carga del sistema operativo. Esta circunstancia supone una oportunidad inmejorable para que un software malicioso tome control de la máquina de forma totalmente silenciosa y transparente para el sistema operativo. En este caso hablamos de los –bootkits-, cuya finalidad es también infectar un sistema,  pero aprovechando la oportunidad del arranque para lograrlo.

Este tipo de software es considerado una de las variantes de malware más peligrosas y de difícil detección/eliminación.


Bootkits - BLOG - 2

Veamos un poco de qué va todo esto… };-]

¿Rootkit o bootkit? ¿Cuál es la diferencia entre ellos?

La razón por la cual esa pregunta es tan frecuente es muy sencilla: aunque los bootkit sean descendientes de los rootkit, su ubicación y la forma de afectar un equipo difieren ampliamente. La definición de bootkit en nuestro glosario explica la sutil diferencia:

Bootkits - BLOG - 3

Vemos entonces que tiene muchas veces, de hecho, características de un rootkit… entonces, ¿por qué no los clasificamos como tal?

¿Qué es un rootkit?

Bootkits - BLOG - 5

Un rootkit es un código utilizado por atacantes para poder obtener privilegios de administrador(o root, en plataformas Linux) y poder realizar acciones como cambiar contraseñas, ejecutar programas, instalar aplicaciones y, básicamente, hacer lo que quiera.

Otra característica es que son muy difíciles de detectar, ya que una de sus características más destacadas es la capacidad de ocultarse, además de ocultar otras amenazas que instala en el sistema. Su detección normalmente se da de forma indirecta, o sea, manualmente o a través deprogramas específicos que buscan comportamiento extraño, que acusaría la presencia no deseada de rootkits. En este video podemos ver una solución de seguridad detectando y eliminando un rootkit.

Bootkits - BLOG - 6

Es importante destacar que en vez de un código malicioso en sí mismo, se trata de unaherramienta que oculta el acceso y control de un sistema por parte de un atacante.

¿Qué es un bootkit?

Bootkits - BLOG - 7

Por otra parte, los bootkits son rootkits específicamente programados para infectar el Master Boot Record (MBR). Este contiene las instrucciones para cargar y ejecutar el sistema operativo, por lo que su infección se da un nivel anterior al arranque del sistema operativo, haciendo que su detección y limpieza sean mucho más difíciles. Cuando un comando es enviado para leer el MBR desde el SO, el bootkit responde enviando la versión original del MBR.

Con la llegada del UEFI y Secure Boot, los bootkit casi dejaron de existir para Windows (por lo menos en la más reciente versión del Sistema Operativo de Microsoft, Windows 8), pero vulnerabilidades generadas por firmwares poco seguras permitieron una vez más la infección de computadoras con bootkits.

Bootkits - BLOG - 8

La paradoja de efectividad versus costo versus complejidad juega en contra de ambas amenazas. Más allá de la evolución de la familia, los fabricantes de productos de seguridad digital y de sistemas operativos han desarrollado formas de prevenir y/o detectar la mayoría de estas amenazas, por lo tanto la adquisición de un rootkit/bootkit en el mercado negro hoy en día es muy cara y no suele ser efectiva si las potenciales víctimas están protegidas.

Las tecnologías encontradas en soluciones de seguridad Anti-Stealth (detección de rootkits) eHIPS (que sirve para monitorear la actividad del sistema y emplear un conjunto de reglas predefinidas con el fin de reconocer un comportamiento sospechoso del sistema), aliadas a las buenas prácticas de actualizar siempre la versión del Sistema Operativo e instalar los últimos parches de seguridad, normalmente protegen los usuarios de rootkits -y por ende, de los bootkits, ya que ahora entendemos que son rootkits específicos para el mecanismo de arranque del sistema.

Dicho lo cuál, continuamos… }:)


Mecanismos de arranque: BIOS y UEFI

Bootkits - BLOG - 10

Para introducir el concepto de bootkit es conveniente conocer con cierto detalle que sucede en la puesta en marcha de un PC y qué elementos intervienen.

Independientemente del sistema operativo, la práctica totalidad de ordenadores domésticos tipo PC-compatible utilizan para su arranque uno de estos dos mecanismos firmware:

–  el tradicional basado en BIOS.

– o el más moderno UEFI (Interfaz unificado extensible del hardware).

BIOS (Basic Input/Output System) es un estándar firmware para la verificación e inicialización del hardware y la gestión del arranque del sistema operativo de un ordenador tipo PC. Aparece en 1975 por primera vez en dispositivos con sistema operativo CP/M. Posteriormente IBM divide BIOS en dos partes: modo real (con acceso total a cualquier dirección de memoria física)   y modo protegido (con memoria virtual y control de acceso a memoria). BIOS es un sistema de 16 bits con ciertas limitaciones en cuanto a seguridad (código no firmado digitalmente y arranque en modo real de CPU) y restricciones de tamaño para manejar discos/particiones.

UEFI es un firmware que nace con el objetivo de relevar a BIOS, superando a este último en asuntos como la limitación del tamaño de particiones de disco o la seguridad intrínseca del proceso de arranque. En 1998 nace EFI, una iniciativa de que ha ido   pasando por distintas evoluciones, hasta llegar a la especificación UEFI en 2005. En 2006 es adoptada como mecanismo de arranque en dispositivos Apple basados en Intel. Desde 2011 la mayoría de los PCs incorporan firmware UEFI sin embargo aunque es muy habitual el uso del módulo de compatibilidad CSM (Compatibility Support Module) para arrancar el sistema al viejo estilo BIOS. Desde 2012, todos los ordenadores con Windows 8 incorporan UEFI.

Manejo de particiones y seguridad: BIOS vs UEFI

Bootkits - BLOG - 11

BIOS utiliza el primer sector del disco de arranque (512 bytes),  denominado MBR (Master Boot Record) para almacenar el código inicial de arranque, parámetros de disco y la tabla de particiones. Para la tabla de particiones se destinan 16 bytes y con un máximo 4 particiones primarias. BIOS utiliza entradas de direccionamiento lógico de bloque o LBA de 32 bits, que unido a un tamaño de bloque en disco de 512 bytes resulta en un límite de espacio máximo de 2^32 * 512 = 2TB.

A diferencia de BIOS, UEFI almacena integrado en el propio firmware  tanto el código de arranque como una  tabla de particiones GPT, y puede manejar hasta 128 particiones. Se establecen 64 bits para LBA lo que se traduce en un máximo tamaño (para discos con sectores de 512 bytes) de 2^64 * 512 = 9 ZB. Adicionalmente y por compatibilidad con BIOS   puede hacer uso de MBR. UEFI reserva una pequeña partición en formato FAT32 para ubicar ficheros que gestionan el arranque del kernel (bootloader).

Bootkits - BLOG - 13
– Manejo de particiones: BIOS/MBR vs UEFI/GPT –

En cuanto a la seguridad, BIOS no firma digitalmente el código firmware, confiando en un control CRC para verificar la integridad del mismo. UEFI sin embargo, utiliza criptografía  para verificar mediante firma digital el firmware y el código de arranque  (Secure Boot). Por otra parte, BIOS se inicia con la CPU en modo real de ejecución, lo que permite un acceso total a la memoria y recursos hardware. El modo protegido se emplea en UEFI durante todo el proceso, haciendo uso de memoria virtual lo que restringe el acceso arbitrario a cualquier zona de memoria y acceso directo al hardware.

Conociendo los dos mecanismos principales de arranque de un PC es necesario saber qué sucede en todo el proceso, desde que se conecta el ordenador hasta que se carga el sistema operativo.

Arrancando el sistema: Desde el interruptor al   Sistema Operativo

Bootkits - BLOG - 14

Secuencia de arranque BIOS

En   un arranque basado en BIOS, tras encender la computadora se ejecuta un test de hardware, y el firmware BIOS almacenado en flash/rom se carga en memoria y busca el primer dispositivo de arranque disponible siguiendo el orden configurado. A continuación, se lee el primer sector del dispositivo conocido como MBR (Master Boot Record). El MBR consta de un total de 512 bytes que contiene el código inicial de arranque (fase 1), unos parámetros descriptivos del disco, la tabla de particiones y firma del disco, terminando con un marcador de 2 bytes que identifican el MBR (0x55AA). La firma son 32 bits destinados únicamente a identificar el hardware del disco.

- Estructura de un MBR -
– Estructura de un MBR –

Dado el limitado tamaño disponible para código en el MBR (unos 400 bytes, dependiendo del sistema), éste se limita generalmente a localizar y saltar a la siguiente fase de arranque: el bootloader, o fase 2 del arranque.

El bootloader es una porción de código encargado que se encuentra en el primer sector de la partición marcada como partición de arranque VBR (volume boot record), la cual cuenta con una estructura similar al MBR. El bootloader contiene el código que gestiona las opciones   del menú de arranque (multi-sistema) y carga de sistema operativo.

Algunos de los bootloaders más conocidos son NTDLR (Windows 2000,XP), BOOTMGR (Windows 7,8, 10) o GRUB2 para Linux.

Bootkits - BLOG - 17
– VBR: primer sector de una partición de arranque –
- Secuencia de arranque en un sistema basado en BIOS –
– Secuencia de arranque en un sistema basado en BIOS –

Secuencia de arranque UEFI

Como se ha indicado, el proceso de arranque en un sistema basado en UEFI es distinto a BIOS e incorpora mejoras respecto a la limitación de número y tamaño de particiones, así como medidas de seguridad. Un sistema UEFI no necesita recuperar código de arranque desde un MBR/VBR puesto que se encuentra embebido en el firmware en ficheros con formato PE para binarios ejecutables y drivers.

Este firmware UEFI dispone de unas variables cuyos valores son accesibles y modificables para configurar la gestión del arranque. Esta interacción con el firmware y sus variables puede realizarse utilizando herramientas como efibootmgr para Linuxbootcfg para Windows o bless para Mac OS X.

- Linux, Windows y Mac OS X -
– Linux, Windows y Mac OS X –

Así por ejemplo, puede especificarse al firmware   donde encontrar el bootloader, el fichero que un sistema UEFI ubica en una partición especial con formato FAT32 y que contendrá la información para cargar el kernel del sistema operativo.

Adicionalmente, y por compatibilidad con BIOS, UEFI puede hacer uso tradicional de MBR/VBR. Por otra parte, UEFI hace uso del modo protegido de la CPU lo que se traduce en restricciones de acceso a memoria y entrada/salida hardware mientras que BIOS arranca en modo real, que permite acceso sin restricciones a los recursos con las implicaciones de seguridad que esto supone.

Finalmente, UEFI dispone de opciones (Secureboot) que realizan verificaciones criptográficas sobre bootloaders, drivers y variables UEFI antes de permitir el arranque.

- Arranque BIOS vs arranque UEFI. Fuente: NIST SP800-147 -
– Arranque BIOS vs arranque UEFI. Fuente: NIST SP800-147 –

Bootkits

Bootkits - BLOG - 21

El arranque representa, en cualquiera de las fases del mismo, una situación inmejorable para evitar medidas de protección, tratar de inyectar código al kernel del sistema operativo y tomar el control de la máquina en el momento de la carga. Un bootkit aprovecha esta circunstancia para conseguir la infección antes del inicio del sistema operativo con lo cual, su detección y eliminación es mucho más complicada.

Aunque la aparición de UEFI como relevo de BIOS puso muchas dificultades a este tipo de software para infectar un sistema, la evolución de los bootkits empieza a explorar nuevas vías para atacar y conseguir evadir las protecciones implementadas por UEFI.

Introducción: Evolución y muestras

El primer concepto de infección de arranque (y también de virus) data de 1987, conocido como Brain y aunque no podemos considerar este ejemplo como un bootkit con objetivo de controlar un sistema, sí es cierto que es la primera ocasión que aparece la idea de atacar el sector de   arranque de un sistema (en este acaso un disquete).

Pero es en la BlackHat de 2005 con una prueba de concepto denominada eEye , cuando se presenta una demostración de la manipulación del MBR para infectar un sistema Windows. Esta demostración fue el punto de partida de sucesivas pruebas que han ido evolucionando técnicamente y la aparición paralela de malware. Los puntos clave en la evolución de bootkits se representan en el siguiente diagrama:

- Hitos en la evolución de bootkits -
– Hitos en la evolución de bootkits –

Puntos de infección y clasificación de bootkits

Existen muchas variantes de bootkits que explotan distintas vías de infección, sin embargo las estrategias más comunes de ataque pasan por modificar el código de arranque del MBR/VBR en sistemas BIOS (cosa relativamente sencilla al carecer de firma criptográfica), ficheros de gestión de arranque del kernel o bootloaders, drivers o vías más intrusivas, como la modificación del firmware.

Algunos ejemplos.

Técnicas de modificación del código de arranque:

Modificación de MBR:

– Mebroot,TLD4, Oldmasco

Modificación de VBR:

– Rovnix, Gapz

Técnicas modificación bootloaders o firmware:

– Modificación bootloader: Ej: Dreamboot (Prueba de concepto, UEFI)

– Modificación firmware: Ej: Mebromi (BIOS)

- Clasificación de bootkits MBR/VBR (BIOS) - Fuente: ESET.
– Clasificación de bootkits MBR/VBR (BIOS) – Fuente: ESET.

Bootkits contra UEFI y protecciones del arranque

Como se ha apuntado, los sistemas basados en BIOS carecen de verificaciones criptográficas del código que se ejecuta en el arranque y por ello son más vulnerables a que los sistemas UEFI, los cuales firman digitalmente el código del proceso. Por esta razón la mayoría de los bootkits se centran en sistemas BIOS con MBR/VBR. Sin embargo en la actualidad los sistemas basados en BIOS empiezan a quedar obsoletos y por lo tanto comienzan a perder interés para los desarrolladores de malware. La consolidación del arranque  UEFI en sistemas modernos empieza a cerrar puertas a toda la línea tradicional de bootkits BIOS y es de esperar que el futuro de investigación y aparición de bootkits se focalice en UEFI.

Conseguir infectar y modificar el firmware resultaría ideal, pero resulta la opción mucho más complicada  y con mayor dependencia de la plataforma. La modificación de firmware de BIOS puede conseguirse de forma relativamente sencilla, puesto que no obliga a usar una firma criptográfica sino únicamente un checksum CRC y es posible su reescritura. UEFI implementa verificaciones tanto de los drivers y bootloaders (Secure Boot)  como del kernel del sistema operativo así como del firmware y se apoya en claves criptográficas almacenadas en ROM y en tecnología TPM, todo ello con el objetivo de evitar cualquier tipo de manipulación.

Ataques contra  la seguridad UEFI

Investigaciones como la prueba de concepto Dreamboot o la investigación presentada   en la conferencia Syscan2014: Setup for Failure: Defeating Secure Boot, abrieron las puertas a las posibilidades de evasión sobre los mecanismos de protección UEFI sobre drivers, bootloader y kernel. Se descubrieró la existencia de ciertos elementos integrantes de UEFI sobre los cuales no se aplica estrictamente la verificación de firma digital y que posibilitan abrir vías de ataque:

– Option ROMS: Ejecución de firmware de drivers no embebido en UEFI, generalmente localizado en tarjetas adicionales (video, tarjetas de red, discos)

– DXE (Driver Execution Environment): Inicialización y drivers

– Bootloader: Manipulaciones de variables EFI posibilitan evitar SecureBoot y cargar un bootloader manipulado. (Setup for Failure: Defeating Secure Boot Syscan 2014)

- Vías de ataque UEFI: Option ROM, DXE driver y bootloader - Fuente: ESET.
– Vías de ataque UEFI: Option ROM, DXE driver y bootloader – Fuente: ESET.

Futuro

UEFI, Secure Boot y sus mecanismos de protección pone muy difícil las cosas a los bootkits modernos. Por ello, nuevos vías de ataque que se centran en el firmware de dispositivos de red o discos duros están apareciendo en escena. El futuro del malware especializado en atacar procesos de arranque, drivers y control de dispositivos parece que puede dar mucho que hablar.


Incibe & TonyHAT - logos

Anuncios

Un comentario en “Bootkits: Infected, Atacando el arranque”

Responder

Por favor, inicia sesión con uno de estos métodos para publicar tu comentario:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s