Con amenazas de alto perfil como Regin, los errores son increíblemente raros. Sin embargo, cuando se trata de humanos escribiendo códigos, algunos errores son inevitables. Entre las cosas más interesantes que observamos en la operación del programa malicioso Regin, están los nombres de código olvidados de algunos de sus módulos.
Estos son:
- HOPSCOTCH
- LEGSPIN
- WILLISCHECK
- U_STARBUCKS
Decidimos hacer un análisis profundo de dos de estos módulos: Hopscotch y Legspin.
A pesar del nivel general de sofisticación (y a veces incluso de sobre-ingeniería) de la plataforma Regin, estas herramientas son sencillas, directas y ofrecen interfaces de consolas interactivas a los operadores de Regin. Lo que las hace interesantes es el hecho que se las desarrolló hace muchos años y que quizás se crearon incluso antes de la misma plataforma Regin.
El módulo Hopscotch
MD5 | 6c34031d7a5fc2b091b623981a8ae61c |
Tamaño | 36864 bytes |
Tipo | Win32 EXE |
Compilado | 2006.03.22 19:09:29 (GMT) |
Este módulo contiene otro binario, guardado como recurso 103:
MD5 | 42eaf2ab25c9ead201f25ecbdc96fb60 |
Tamaño | 18432 bytes |
Tipo | Win32 EXE |
Compilado | 2006.03.22 19:09:29 (GMT) |
Este módulo ejecutable se diseñó como una herramienta interactiva autónoma para movimientos laterales. No contiene exploits pero en vez de ello depende de credenciales previamente adquiridas para auto-autenticarse en la máquina remota mediante APIs estándar.
El módulo recibe el nombre de la máquina atacada y un nombre de un fichero remoto opcional desde la entrada normal (operador). Los atacantes pueden elegir entre varias opciones para su ejecución y la herramienta ofrece respuestas para lectura humana y sugerencias de posibles entradas.
Este es un ejemplo de la ejecución de ‘Hopscotch’ en una máquina virtual:
Mecanismo de autenticación (SU o NETUSE) [S]/N: |
¿Continuar? [n]: |
Ya existía un fichero con el mismo nombre en la máquina remota – No se elimina… |
El módulo puede recurrir a dos rutinas para auto-autenticarse en la máquina atacada: conectarse al recurso normal llamado “IPC$” (método llamado “NET USE”) o ingresar como un usuario local (“SU”, o “switch user”) que tiene los permisos necesarios para realizar otras acciones.
Después extrae una carga maliciosa ejecutable desde sus recursos y la escribe en un lugar en la máquina atacada. El lugar predeterminado para la carga es: %target%ADMIN$SYSTEM32SVCSTAT.EXE. Una vez hecho esto, se conecta con el administrador de servicio de la máquina remota y crea un nuevo servicio llamado “Service Control Manager” para ejecutar la carga. El servicio se inicia inmediatamente y tras ejecutarse por un segundo, se detiene y se elimina.
El módulo establece un canal bidireccional de comunicación cifrada con la carga remota SVCSTAT.EXE usando dos tubos nombrados. Uno sirve para enviar entradas desde el operador a la carga, y el otro escribe los datos desde la carga a la salida normal. Los datos se cifran con el algoritmo RC4 y el intercambio de llaves inicial se asegura con cifrado asimétrico.
%target%pipe{44fdg23a-1522-6f9e-d05d-1aaf0176138a}
Una vez hecho esto, la herramienta elimina el archivo remoto y cierra las sesiones autenticadas, eliminando así todo rastro de la operación.
El módulo de carga SVCSTAT.EXE lanza su copia en el proceso dllhost.exe. Después prepara los correspondientes tubos nombrados en la máquina atacada y espera la entrada de datos. Una vez que el módulo original se conecta con el tubo, establece el cifrado de la comunicación por el tubo y espera la entrada del shellcode.
El ejecutable se inyecta y se ejecuta en un nuevo proceso de dllhost.exe o svchost.exe, con sus entradas y salidas redirigidas a la extensión remota que inició el ataque. Esto le permite al operador controlar el módulo inyectado e interactuar con él.
El módulo Legspin
MD5 | 29105f46e4d33f66fee346cfd099d1cc |
Tamaño | 67584 bytes |
Tipo | Win32 EXE |
Compilado | 2003.03.17 08:33:50 (GMT) |
Este módulo también se desarrolló como una utilidad autónoma de línea de comandos para la administración de ordenadores. Cuando se ejecuta de forma remota se convierte en una poderosa puerta trasera. Vale la pena hacer notar que el programa posee soporte completo de consola y presenta una salida en colores cuando se ejecuta a nivel local. Incluso es capaz de distinguir entre consolas compatibles con Windows Console API y terminales compatibles con TTY que aceptan códigos de escape para colores.
Salida “Legspin” en una ventana de consola normal con resaltados en colores
Además de la marca de tiempo de compilación que se encuentra en los encabezados PE, hay dos referencias que apuntan a 2003 como el año real de su compilación. El programa imprime dos etiquetas de versiones:
- 2002-09-A, mencionada como “lib version”
- 2003-03-A
Además, el programa usa las funciones API heredadas, como “NetBIOS” que se introdujo en Windows 2000 y se menospreció en Windows Vista.
Una vez que arranca e inicializa, le proporciona al operador un símbolo de sistema interactivo, a la espera de la entrada de comandos. La lista de comandos disponibles es bastante extensa y les permite a los operadores realizar muchas tareas administrativas. Algunos de los comandos requieren información adicional que se le pide al operador, y los comandos proporcionan una descripción de texto de los parámetros disponibles. En realidad el programa es un shell administrativo que el atacante/usuario debe operar manualmente.
Comando | Descripción |
cd | Cambia el directorio en uso |
dir ls dirl dirs |
Lista de archivos y directorios |
tar | Encuentra archivos que correspondan con una determinada máscara y rango de tiempo, y escribe sus contenidos en un fichero comprimido cifrado con XOR. |
tree | Imprime un árbol de directorio usando seudográficos |
trash | Lee e imprime los contenidos del directorio “Recycle Bin” de Windows |
get | Recupera un fichero arbitrario desde la máquina atacada, comprimido con LZO |
put | Envía un fichero arbitrario a la máquina atacada, comprimido con LZO |
del | Elimina un fichero |
ren mv copy cp |
Copia o mueve un fichero a un nuevo lugar |
gtm | Obtiene la creación de ficheros, acceso, escribe marcas de tiempo y recuerda los valores |
stm | Establece la creación de ficheros, acceso, escribe marcas de tiempo en los valores previamente recuperados |
mtm | Modifica las marcas de tiempo de los ficheros previamente recuperados |
scan strings |
Encuentra e imprime todas las cadenas legibles desde un determinado fichero |
more | Imprime los contenidos de un fichero arbitrario |
access | Recupera e imprime las entradas DACL de ficheros o directorios |
audit | Recupera e imprime las entradas SACL de ficheros o directorios |
finfo | Recupera e imprime información de la versión desde un determinado fichero |
cs | Vacía los primeros 10.000 bytes desde un fichero arbitrario o desde varios ficheros de sistema:
advapi32.dll |
lnk | Busca ficheros LNK, analiza sintácticamente e imprime sus contenido |
info | Imprime la información general del sistema:
|
dl | Imprime información sobre los discos:
|
ps | Lista de todos los procesos en ejecución |
logdump | Inconcluso, sólo muestra la descripción del parámetro |
reglist | Vacía la información de registro para una colmena local o remota |
windows | Enumera todos los escritorios disponibles y todas las ventana abiertas |
view | Lista de todos los servidores visibles en un dominio |
domains | Lista de los controladores de dominios en una red |
shares | Lista de todos los recursos de red visibles |
regs | Imprime información adicional del sistema desde el registro:
|
ips | Lista de datos del adaptador de red:
|
times | Obtiene la hora actual desde una máquina local o remota |
who | Lista de los nombres de usuario actuales y los dominios a los que accedió la máquina |
net nbtstat tracert ipconfig netstat ping |
Ejecuta la utilidad de sistema correspondiente e imprime los resultados |
tel | Conecta a un determinado puerto TCP de un host, envía una cadena provista por el operador, imprime la respuesta |
dns arps |
Resuelve un host mediante peticiones DNS o ARP |
users | Lista de datos de todas las cuentas de usuario |
admins | Lista de datos de las cuentas de usuario con permisos administrativos |
groups | Lista de datos de grupos de usuario |
trusts | Lista de datos de cuentas interdominio de confianza del usuario |
packages | Imprime los nombres de paquetes de software instalados |
sharepw | Ejecuta un ataque de fuerza bruta para ingresar y obtener la contraseña de un recurso remoto |
sharelist | Conecta a un recurso remoto |
srvinfo | Recupera información de la configuración actual para un servidor especificado |
netuse | Conecta, desconecta o hace una lista de los recursos de red |
netshare | Crea o elimina recursos de red en la máquina actual |
nbstat | Lista de datos del adaptador NetBIOS LAN |
run | Crea un proceso y redirige sus salidas al operador |
system | Ejecuta un comando arbitrario mediante WinExec API |
exit | Sale del programa |
set | Determina varias variables internas usadas en otros comandos shell |
su | Ingresa como otro usuario |
kill | Termina un proceso por su PID |
kpinst | Modifica el valor de registro: [HKLMSOFTWAREMicrosoftWindows NTCurrentVersionWinlogon] System Normalmente, este valor debe apuntar a “lsass.exe” |
svc drv |
Crea, modifica o elimina un servicio de sistema |
help ? |
Imprime la lista de comandos compatibles |
El módulo Legspin que recuperamos no posee un mecanismo C&C incorporado. En lugar de ello, depende de la plataforma Regin para redirigir las entradas/salidas de la consola a/desde los operadores.
Conclusiones
A diferencia de otros módulos de Regin, Legspin y Hopscotch parecen ser herramientas autónomas desarrolladas mucho antes. En particular, la puerta trasera Legspin data de 2003,š e incluso quizás de 2002. Vale la pena remarcar que no todas las instalaciones de Regin contienen el módulo Legspin; en la mayoría de los casos, los atacantes manejan a sus víctimas mediante otras funciones de la plataforma Regin.
Esto significa que Legspin pudo haberse usado independientemente de la plataforma Regin, como una sencilla puerta trasera junto a un empacador de salidas/entradas.
Aunque más detalles de Regin van saliendo a la luz, todavía queda mucho por conocer. Una cosa está clara: lo que sabemos de Regin es, probablemente, información retirada que ha sido remplazada por nuevos módulos y técnicas con el pasar del tiempo.
Análisis de Hopscotch y Legspin de Regin