A
finales de 2010, ya
publicamos algunas
noticias acerca de la familia SpyEye (con vídeo incluido) en
las que se hablaba de su interesante panel de control. Dos años después, el
troyano sigue gozando de una estupenda salud, y su variante que infecta también
a los teléfonos móviles, está consiguiendo un éxito importante. Hablemos ahora
de sus técnicas de ocultación y algunas curiosidades.
SpyEye es un troyano bancario del
tipo DIY ("hágalo usted mismo")
muy popular. Su nivel de sofisticación es punta de lanza del malware actual.
Sus últimas versiones incorporan la infección del móvil con sistema operativo
Android o Blackberry cuando se usa el SMS como segundo canal de autenticación
de algunos bancos. Así, el troyano tiene el control sobre los dos dispositivos
involucrados en la transacción.
SpyEye tiene muchas "virtudes". Entre ellas, es un
rookit que impide que se vean sus ficheros si se explora el sistema desde el
explorador. Se suele copiar en:
C:\$recycle$
Que queda invisible al
explorador. Se puede consultar sin embargo, desde la línea de comando.
Hasta aquí "normal", esto ya lo hacía Zeus
desde 2006 y rootkits en años anteriores. Algo que lo diferencia de algunas
versiones de Zeus, es que SpyEye es invisible también en línea de comando,
gracias a que modifica el comportamiento de dos funciones de Windows a bajo
nivel: NtQueryDirectoryFile y NtVdmControl.
En la captura, en el directorio
$recycled$ falta un ejecutable. ¿Dónde está? Lo que vemos es el archivo de
configuración. El archivo está ahí, incluso oculto para el cmd. Si intentamos
copiar cualquier fichero en la misma ruta... nos dice que ese nombre ya está
siendo usado.
Ocultación en el registro
Durante el análisis de este tipo
de malware, una técnica habitual es comprobar con la herramienta Autoruns qué
se arranca en Windows. Autoruns recopila de forma muy eficaz todos los puntos
que pueden servir para lanzar código que se inicia con el sistema operativo. ¿Dónde
se ubican estas versiones de SpyEye para lanzarse en el inicio? Mientras que
Zeus trabaja en la shell del Winlogon (más "rebuscado"), esta versión de SpyEye, sorprendentemente,
utiliza una zona muy común para arrancar programas en el inicio:
HKLM\Software\Microsoft\Windows\CurrentVersion\run
... pero que se oculta, tanto a
los ojos la herramienta "normal"
de registro (regedit), como para Autoruns. De nuevo el rootkit de este malware
va un poco más allá (los rootkits como tal, insistimos, ya contiene estas
técnicas desde hace tiempo). En este caso, parchea en memoria la API NtEnumerateValueKey,
que usa ntdll.dll. Esto es muy eficaz, puesto que la API se encuentra a muy bajo
nivel. Es decir, cualquier programador usará APIs comunes como RegEnumValue o RegOpenKey,
pero estas, internamente, llamarán a NtEnumerateValueKey. Con esto consigue
engañar a la inmensa mayoría de programas que quieran leer el registro...
aunque no a todos
Autorunsc, el más sincero
Como curiosidad, parece que una
de las versiones de SpyEye comete algún tipo de error a la hora de "parchear" en memoria la función. Así,
permite que, la primera vez que se lanza Autorunsc (la versión de línea de
comandos de Autorun), se pueda leer bien el registro, mientras que en sucesivas
consultas... se oculta.
Esta imagen lo resume un poco
todo. La entrada "oficial"
en el registro es solo la correspondiente a ctfmon.exe. Sin embargo, existe otra
que solo se puede "ver" en el resultado de Autorunsc después de la
infección, volcado en un texto. Se observa la entrada:
YZ5CZHZY5D1EWA9X
C:\$Recycle$\B8DEA5BBC55.exe /q
c:\$recycle$\b8dea5bbc55.exe
7678946538a76066a7d0829584eaa0e3 (MD5)
9c36092b853526aa340239ac70f5dfb1ced1e921
(SHA-1)
e20b15ec8f0a5cffce47923dc79934e8c6dd9295c7256881f3d399632e7eaa90
(SHA-256)
Invisible al resto de programas.
Si se lanza de nuevo autorunsc y se consulta el registro... desaparecerá. El
funcionamiento interno de Autorun y Autorunsc es el mismo, llaman a las mismas
API de sistema para leer los valores del registro, así que solo cabe achacar el
comportamiento a algún error del troyano, que subsana en sucesivas consultas.
Más curioso todavía
¿Qué hacer entonces para eludir
el parcheo en memoria que hace el troyano? Como hemos dicho, lanzando
autorunsc.exe la primera vez, será incapaz de ocultarse. Pero existe otro
método. SpyEye no afecta a los procesos que se llamen skype.exe. Lo tiene
"incrustado" en su código. No
es una "puerta trasera"
sino que muy probablemente, lo hará para que no le llegue tanto tráfico desde
esa aplicación, que quizás no le interese. Así, si renombramos autorunsc.exe a
skype.exe, el valor oculto volverá a aparecer. Se observa en la figura el incremento
de tamaño del fichero de texto resultante con uno y otro nombre. El aumento de
tamaño corresponde a la entrada oculta.
Igualmente, renombrando
autoruns.exe a skype.exe, se ve gráficamente la entrada.
Más información:
Bypassing the SpyEye "rootkit", or
how to perform a quick disinfection
Analysis of TR/Spy.SpyEye
Vídeo: Así funciona SpyEye (I)
Así funciona SpyEye (y II)
Sergio de los Santos
Twitter: @ssantosv




...Perdonad que me repita con el comentario: Esto sí es divulgación científica en estado puro. En una palabra "encomiable".
ResponderEliminarMis felicitaciones a Sergio por este excelente análisis.
ResponderEliminarAgradecer y reconocer esta publicación, el trabajo es bueno, estoy buscando tiempo para leer el informe original, si es que me lo envian.
ResponderEliminarNo he visto ByteHero en la lista, alguien sabe si ha sido evaluado?
Gracias por la información al equipo de una al dia y a Sergio, esto nos ayuda a ver las vulnerabilidad des los sistemas antivirus.
ResponderEliminarTengo una duda,
?se les notifica a las compañias de antivirus para actualizen sus sistemas?
Gracias, Saludos.
Qué buen trabajo, Felicitaciones!, nos aporta muchísimo...
ResponderEliminar