SpyEye y sus curiosas técnicas de ocultación
--------------------------------------------
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.
http://1.bp.blogspot.com/-3g79ay9N_mw/T2M8rVbA4_I/AAAAAAAAAXc/TCnLODjUd4k/s1
600/autorun2.png
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.
http://4.bp.blogspot.com/-jJQkzb3usbw/T2M840aYrUI/AAAAAAAAAXk/zzBu2Ruz7u0/s1
600/autoruns3.png
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.
http://1.bp.blogspot.com/-ikJ7Xmr1sx4/T2M9NItOtlI/AAAAAAAAAXs/UY_YYAN4lVs/s1
600/autoruns4.png
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.
http://2.bp.blogspot.com/-TCugKkYP0uY/T2M9W7chT2I/AAAAAAAAAX0/lG1-PG1G0ME/s1
600/autorun7.png
Igualmente, renombrando autoruns.exe a skype.exe, se ve gráficamente la
entrada.
http://1.bp.blogspot.com/-L3YPg7Wep80/T2M9gyV0_kI/AAAAAAAAAX8/mDpJOY7rQFA/s1
600/autorun8.png