Bluepill tiene dos aspectos: cómo ocurre la infección y si puedes detectarla una vez que sucedió.
El primer aspecto es el mismo que para todo el malware realmente. El aspecto novedoso de bluepill fue la afirmación "es indetectable".
Se realizó una extensa investigación al respecto, y se han diseñado varios métodos para la detección.
Debe tener en cuenta que, hasta el momento, no se observaron amenazas de Bluepill en su hábitat natural.
Detectar si el sistema operativo se está ejecutando dentro de una máquina virtual
Los primeros métodos publicados para la detección involucraron el tiempo. De una entrevista con Anthony Liguori :
La virtualización de hardware requiere una técnica conocida como "captura y
emulación". La idea es que el hardware atrape ciertas instrucciones.
y el VMM emula esas instrucciones de tal manera que hace que el
El software cree que se está ejecutando en una máquina virtual.
La emulación de software implica que estas instrucciones demoran mucho más
completa cuando se ejecuta bajo un VMM luego en hardware normal. Este hecho
es lo que se puede usar para detectar la presencia de una VMM.
Me acerqué a Rutkowska sobre esto y ella intentó abordarlo en
su prototipo ajustando uno de los relojes de los procesadores en cada salida.
Sin embargo, no hay nada que pueda sobre las fuentes de tiempo externas.
y ella ha sido admitida a esto en su blog.
Ella se refiere a esto como una debilidad teórica en su sistema pero yo
Asegúrate de que es bastante práctico explotar.
La autora original del concepto bluepill (Joanna Rutkowska) también publicó otro artículo (RedPill) que podría aprovecharse para detectar un rootkit de BluePill.
No pude encontrar el documento, pero encontré este excelente resumen :
int swallow_redpill () {
unsigned char m[2+4], rpill[] = "\x0f\x01\x0d\x00\x00\x00\x00\xc3";
*((unsigned*)&rpill[3]) = (unsigned)m;
((void(*)())&rpill)();
return (m[5]>0xd0) ? 1 : 0;
}
El corazón de este código es en realidad la instrucción SIDT (codificada como
0F010D [addr]), que almacena el contenido del descriptor de interrupción
registro de tabla (IDTR) en el operando de destino, que es en realidad un
ubicación de la memoria. Lo que es especial e interesante sobre SIDT
La instrucción es que se puede ejecutar en modo no privilegiado (ring3).
pero devuelve el contenido del registro sensible, utilizado internamente
por sistema operativo.
Porque solo hay un registro IDTR, pero hay al menos dos sistemas operativos
ejecutándose simultáneamente (es decir, el host y el SO huésped), VMM necesita
reubicar el IDTR del huésped en un lugar seguro, para que no
conflicto con el de un host. Desafortunadamente, VMM no puede saber si (y
cuándo) el proceso que se ejecuta en el SO huésped ejecuta la instrucción SIDT, ya que
no tiene privilegios (y no genera excepciones). Por lo tanto, la
El proceso obtiene la dirección reubicada de la tabla IDT. Se observó que
en VMWare, la dirección reubicada de IDT es la dirección 0xffXXXXXX,
Mientras que en Virtual PC es 0xe8XXXXXX. Esto fue probado en VMWare
Workstation 4 y Virtual PC 2004, ambos ejecutándose en el sistema operativo Windows XP.
Otro método se revisa en este artículo es de 2008:
La idea es interceptar el inicio de un hipervisor por otro hipervisor
(Llamemos a este último un Sistema Virtual de Prevención de Intrusiones, o
VIPS). Cuando se inicia cualquier hipervisor (malicioso o legítimo), se vuelve
Modo raíz de VM en. Este evento puede ser fácilmente interceptado por un VIPS. Asi que
¿que sigue? Hay 2 formas de manejar este evento: bloqueando un
hipervisor completamente, o permitir que funcione a través de la emulación.
La primera forma consiste en emular una PC con la función HVT desactivada en
BIOS. Esto bloqueará el funcionamiento de un rootkit HVT.
La segunda forma consiste en permitir que un hipervisor funcione a través de
Virtualización de hardware emulado (o anidamiento). Esto debe hacerse para
software de virtualización legítimo.
En ambos casos (bloqueando o emulando), un VIPS intercepta un hipervisor
En el momento trata de empezar. VIPS puede leer el cuerpo del hipervisor
y analizarlo. Se puede mostrar un mensaje de notificación.
¿Es esto realmente una amenaza
Luego están los aspectos prácticos del ataque a considerar.
Un rootpit de bluepill necesita implementar xen o algo similarmente complejo, lo cual es un gran esfuerzo. Dado que realmente no hay garantía de que no se detectará ni se bloqueará de todos modos, los atacantes elegirán una ruta más fácil que sea la de los rootkits clásicos.
Creo que esto es parte de la razón por la que los rootkits de Bluepill no se han visto en la naturaleza.