Prólogo
La posibilidad de infectar el BIOS existe desde hace mucho tiempo. Uno de los mejores artículos sobre este tema, en mi opinión, está publicado en la revista Phrack y en el sitio pinczakko hay mucha información útil. En este momento hay una tendencia clara que podría llamar el “regreso a las raíces”. El contagio de la MBR, la intercepción de los indicadores de diferentes tablas del sistema operativo y la infección de los componentes del sistema son cosas que ya hemos visto hace mucho tiempo.
Al igual que en el caso de la MBR, la infección del BIOS permite que el código malicioso se inicie muy temprano, inmediatamente después de encender el ordenador. Desde ese momento surge la posibilidad de controlar todas las etapas del inicio del ordenador y del sistema operativo. Es evidente que este método de inicio es atractivo para los escritores de virus, pero también son evidentes las dificultades a las que se enfrentan. Sobre todo, la falta de normas en los formatos de los diferentes BIOS: el creador de programa malicioso debe soportar los BIOS de diferentes fabricantes y entender a la perfección el algoritmo de actualización del firmware del ROM.
En este artículo examinaré un programa malicioso real, que combina dos tecnologías de infección: del BIOS y de la MBR; analizaré su instalación y su forma de evitar ser detectado, pero dejaré de lado los métodos que usa para irrumpir en el sistema y para lucrar. En este momento el peligro de infección del BIOS afecta sólo a las tarjetas madre con BIOS de la compañía AWARD.
Instalación
El troyano se propaga como un módulo ejecutable que contiene todos los componentes necesarios para su funcionamiento. Nuestros productos lo detectan como Rootkit.Win32.Mybios.a.
Lista de componentes:
- driver para el trabajo con el BIOS, bios.sys (DeviceBios);
- driver para hacer invisible la infección, my.sys (Devicehide);
- componente del BIOS, hook.rom;
- biblioteca de control del driver bios.sys, flash.dll;
- utilitario del fabricante para el trabajo con la imagen del BIOS, cbrom.exe;
Lo primero que hace el dropper es descifrar el fichero con un algoritmo simple e iniciar el proceso de instalación. Copia en el disco duro y ejecuta el driver bios.sys, que después usará para recopilar la información necesaria sobre el BIOS. Más adelante daremos más detalles sobre sus funcionalidades.
Después, graba en el disco el driver my.sys, directamente en la raíz del disco del sistema.
El algoritmo usado a continuación puede dividirse en dos partes.
Si detecta un BIOS de AWARD, ejecuta el siguiente algoritmo:
- lee el BIOS de la memoria, busca SMI_PORT y determina el tamaño del BIOS;
- crea una imagen del BIOS en el disco (c:bios.bin);
- en caso de que no encuentre el módulo hook.rom en la imagen del BIOS guardada en el disco, lo agrega a ésta;
- copia del disco e instala la imagen “infectada” en el ROM;
Si se usa un BIOS que no es de AWARD, el dropper infecta la MBR. Este mecanismo permite al rootkit funcionar en cualquier sistema, sin depender del fabricante del BIOS.
BIOS.SYS y CBROM.EXE
El instalador del rootkit usa el driver bios.sys, que tiene tres funcionalidades.
Figura 1. Procedimiento dispatch del driver bios.sys
El dropper usa primera función, que yo llamé FindSMIPORTAndBIOSSize , para determinar el tipo de BIOS, entre otras cosas.
Para determinar el tipo de BIOS busca una firma “mágica” en la memoria.
Figura 2. Firma “mágica” en el BIOS
Si encuentra la firma, la función sigue haciendo su trabajo y trata de encontrar SMI_PORT y determinar el tamaño del BIOS. En todos los demás caso, la función devuelve un código de error y el dropper se limita a infectar el MBR.
Si se encontró un BIOS de AWARD, y están presentes las variables SMI_PORT y BIOSSize, se hace una llamada a la función MakeBIOSBackup que guarda la imagen del BIOS en el disco como un fichero c:bios.bin.
En la imagen guardada en el disco, el dropper verifica que esté presente su módulo y si no lo está, agrega ISA ROM en la imagen del BIOS. Para esto se usa el utilitario cbrom.exe (cbrom c:bios.bin /isa hook.rom). El utilitario cbrom.exe también se guarda en los recursos de instalador y se graba en el disco.
Figura 3. El BIOS antes de la infección
Figura 4. El BIOS después de la infección
Preste atención al módulo 11 de la lista. Es el ISA ROM agregado bajo el nombre hook.rom.
Con la siguiente llamada de la función FlashROM, la imagen infectada se graba en el ROM y se ejecuta cada vez que se enciende el equipo.
MY.SYS
Para camuflar la infección se usa un driver de rootkit bastante simple, my.sys. Intercepta las funciones IRP_MJ_READ, IRP_MJ_WRITE y IRP_MJ_DEVICE_CONTROL del driver encargado del dispositivo DeviceHarddisk0DR0. No es un nivel muy bajo, en comparación con TDL4, por ejemplo. Un poco más adelante se hará comprensible como se inicia este driver.
Figura 5. Captura de las funciones del driver disk.sys
No tiene sentido detenerse demasiado tiempo en las intercepciones, porque son bastante triviales. Durante la lectura se suplanta CompletionRoutine y durante el intento de lectura de los sectores bajo control se devuelve un buffer vacío.
Figura 6. Primer sector del disco físico
La captura de IRP_MJ_WRITE no permite grabar datos en los sectores bajo control.
La captura de IRP_MJ_DEVICE_CONTROL controla las llamadas IOCTL_DISK_GET_DRIVE_LAYOUT_EX, IOCTL_STORAGE_GET_MEDIA_TYPES_EX, IOCTL_DISK_GET_DRIVE_GEOMETRY_EX y devuelve un código de error.
BIOS y MBR
BIOS
Ejecutándose desde el BIOS, el programa malicioso puede controlar cualquier etapa de inicialización del ordenador y del sistema operativo. Y ha llegado el momento de ver qué trucos han utilizado los autores del virus.
El módulo que se agrega al BIOS se diferencia de la MBR infectad y de los demás sectores en sólo una función, que junto con cierta información adicional, entra en un sólo sector (512 bytes). ISA ROM ocupa 0x1E00 bytes y la MBR con los sectores adicionales, 0x1C00 bytes.
Figura 7. Principio del ISA ROM
Figura 8. Llamada de la única función Main en ISA ROM
La única tarea de esta función es constatar que en la MBR está presente la copia infectada y repetir la infección si no lo está. Como tanto la MBR infectada como los sectores correspondientes se encuentran en el módulo ISA ROM, en caso de que no se encuentre la infección, se puede “reinfectar” la MBR directamente desde el BIOS. Esto aumenta las posibilidades de que el ordenador siga infectado, incluso si se cura la MBR.
Figura 9. Función Main que revisa y reinfecta la MBR
La presencia de la infección se determina buscando una constante “mágica” en un desplazamiento (offset) fijo en la MBR. La constante int1 debe estar presente en el sector infectado.
Figura 10. La constante “mágica” en la MBR
Si la función CheckMBRInfected no detecta infección en la MBR, su siguiente acción es infectarla junto con los 13 sectores que le siguen.
Con esto termina el trabajo del módulo ISA ROM agregado al BIOS.
La mayor parte del trabajo la hace el código que se ejecuta desde la MBR.
MBR
Al igual que todos los demás casos de infección de la MBR que hemos analizado, el algoritmo es casi el mismo: contar los sectores que van después de la MBR y entregar el control al código leído, que se encarga de la mayor parte del trabajo.
El troyano guarda la MBR original en el momento de la infección en el séptimo sector del disco y la usa para obtener la tabla de particiones (y devolverle el control cuando termina el trabajo).
En el código ejecutado en esta etapa hay un intérprete simple de los formatos de sistemas de ficheros NTFS y FAT32. SU principal objetivo es buscar en el disco los sectores que corresponden a los ficheros winlogon.exe y wininit.exe, que son los componentes encargados de gestionar la entrada del usuario en el sistema.
Figura 11. Búsqueda de winlogon.exe o wininit.exe
Si encuentra estos sectores, infecta el fichero ejecutable winlogon.exe o wininit.exe (es decir, usa la tecnología de los virus para ficheros) directamente en los sectores del disco donde se encuentran. El esquema de infección se encuentra en el octavo sector del disco.
Figura 12. Punto de entrada de winlogon.exe antes de la infección
Figura 13. Punto de entrada de winlogon.exe después de la infección
El código es bastante pequeño y por esto realiza sólo dos tareas:
- descargar de un enlace determinado fichero y ejecutarlo;
- iniciar el driver del rootkit (my.sys, ubicado en el disco C:), que se encargará de proteger los sectores infectados del disco;
Erratas jocosas
No podemos dejar de mencionar un aspecto curioso que deleitará a los amantes del inglés y de los que saben cómo se escribe correctamente AWARD. En el código malicioso es raro encontrar mensajes de ajuste, porque podrían ayudar a los analistas de virus. Pero a veces pasa que los mensajes de ajuste se filtran en el “producto final”.
Listado de los mensajes de ajuste en el driver bios.sys:
- Flash Aword BIOS form diks c bios.bin success.
- SMI_AutoErase Aword Bios Failed.
- ExAllocatePool read file NonPagedPool failed.
- Backup Aword BIOS to disk c bios.bin success.
- MmMapIoSpace physics address:0x%x failed.
- This is not a Aword BIOS!
Conclusión
Los escritores de virus con frecuencia integran en un solo programa diferentes métodos para infectar del equipo y consolidar el programa malicioso en el sistema operativo. Al mismo tiempo buscan nuevos lugares para instalar programas maliciosos. Ahora los creadores de programas maliciosos usan, en su mayor parte, ideas conocidas con anterioridad (a veces como meros conceptos) y en parte ya olvidadas, y las plasman en su producto final. Las tecnologías de 16 bytes resucitadas son un buen ejemplo.
Es probable que en el futuro aparezcan rootkits similares para BIOS de otros fabricantes.
MYBIOS. ¿Es posible infectar el BIOS?