Español | English
rss facebook linkedin Twitter

TDL3 Anti-Hook detection

Una de las familias de rootkits que siempre ha dado que hablar es TDL o TDSS. Este tipo de rootkit siempre ha destacado por su técnica de ocultación en disco. Podemos ver su evolución en un post que escribió DiabloNova.

Su última versión que salió a finales del año pasado fue TDL3. El análisis TDL3: Part I Why so serious? Let’s put a smile …” muestra detalladamente el comportamiento y características de este rootkit.

Una de las cosas que me ha llamado la atención es lo que en el análisis anterior llama "Anti-Hook detection". Es decir, donde y como TDL3 pone los hooks para que éstos no sean detectados por las herramientas antirookit. El TDL3 utiliza estos hooks para permanecer oculto en el disco como otros rootkits, como por ejemplo el mebroot :

TDL3 concretamente utiliza las dispatch routines de atapi.sys para poner sus hooks. Una herramienta antirookit que detecta los hooks en las dispatch routines de los drivers es rootkit unhooker aka rkuk. Examinamos una máquina infectada por TDL3 con rkuk y vemos como TDL3 hace correctamente su labor de ocultar el hook:


¿Cuál es el motivo por el cual TDL3 no es detectado por las herramientas antirookit? Examinamos el hook en la dispatch routine para conocer la respuesta:

Vemos como el hook salta a una zona de memoria del propio driver atapi.sys por lo que rkuk determina como correcto este salto y no detecta el hook. Es decir, lo que busca TDL3 es que la dirección de memoria de la dispatch routine esté dentro de atapi.sys y luego saltar a su módulo:

donde el handle en atapi.sys es:

Este código es insertado por TDL3 en una zona de atapi.sys no utilizada( padding ):


La técnica de poner uno o varios saltos en el módulo a hookear( con el fin de hacer ver a las herramientas antirookit que no es un hook ) es bastante común, y las herramientas antirookit incorporan su detección para seguir hooks en apis en ring3 o ring0 pero no ha sido empleado para seguir hooks en las dispatch routine.

Vemos que hubiera pasado si no hubiera utilizado esta técnica y hubiera puesto el hook directamente en la dispatch routine, como indica el siguiente escenario:

Si modificamos el hook de la dispatch routine( con modificar una MJ_FUNCTION es suficiente ) de atapi.sys para que salte directamente a su código:

y si volvemos a escanear con rkuk vemos como es capaz de detectar perfectamente el hook en la disptach routine:


Alonso Candado Sánchez
S21Sec e-crime

2 comentarios:

Dreg dijo...

ostias, muy guapo tio! :-)

Pluf dijo...

mu guapo :)


(+34 902 222 521)


24 horas / 7 días a la semana



© Copyright S21sec 2013 - Todos los derechos reservados


login