IISpy: un backdoor del lado del servidor con funciones anti forenses
Investigadores de ESET han descubierto y analizado un backdoor previamente indocumentado que se implementa como una extensión para Internet Information Services (IIS), el software del servidor web de Microsoft. Este backdoor, al cual hemos llamado IISpy, utiliza una variedad de trucos para interferir con el registro de los servidores y evadir la detección, con el fin de realizar tareas de espionaje durante largo plazo. Las soluciones de seguridad de ESET detectan IISpy como Win Win{32,64}/BadIIS.
Esta publicación es la segunda entrega de una serie en la que los investigadores de ESET analizan detenidamente una serie de amenazas dirigidas al servidor web IIS. En la entrega anterior analizamos las características de un malware para IIS utilizado para el ciberdelito. Para obtener una guía completa sobre cómo detectar, analizar y eliminar el malware para IIS, consulte nuestro whitepaper Anatomy of native IIS malware, en el cual IISpy aparece como una de las familias analizadas (Grupo 7).
Resumen del ataque
Según la telemetría de ESET, este backdoor ha estado activo al menos desde julio de 2020 y se ha utilizado con Juicy Potato (detectado como Win64/HackTool.JuicyPotato por las soluciones de seguridad de ESET), que es una herramienta de escalación de privilegios. Sospechamos que los atacantes primero obtienen acceso inicial al servidor IIS a través de la explotación de alguna vulnerabilidad, y luego utilizan Juicy Potato para obtener los privilegios de administrador necesarios para instalar IISpy como una extensión nativa para IIS.
Por otra pare, según nuestra telemetría IISpy afecta a una pequeña cantidad de servidores IIS ubicados en Canadá, EE. UU. y los Países Bajos, pero es probable que esta no sea la imagen completa, ya que todavía es común que los administradores no utilicen ningún software de seguridad en los servidores y, por lo tanto, nuestra visibilidad de los servidores IIS es limitada.
Debido a que está configurado como una extensión para IIS, IISpy puede ver todas las solicitudes HTTP recibidas por el servidor IIS comprometido y dar forma a la respuesta HTTP con la que responderá el servidor. IISpy utiliza este canal para implementar su comunicación con el C&C, lo que le permite operar como un “implante de red pasivo”. Como se muestra en la Imagen 1, el operador (no el backdoor) inicia la conexión enviando una solicitud HTTP especial al servidor comprometido. El backdoor reconoce la solicitud del atacante, extrae y ejecuta los comandos de backdoor embebidos y modifica la respuesta HTTP para incluir la salida del comando.
Los siguientes comandos de backdoor son los que soporta:
- Obtener información del sistema
- Cargar/descargar archivos
- Ejecutar archivos o comandos de la shell
- Crear un reverse shell
- Crear/listar/mover/renombrar/eliminar archivos y carpetas
- Crear un mapeo entre una unidad local y una remota
- Exfiltrar los datos recopilados
IISpy ignora todas las demás solicitudes HTTP enviadas al servidor IIS comprometido por sus visitantes legítimos, las cuales aún son manejadas por los módulos benignos del servidor.
Comunicación de red
Las solicitudes de control de los operadores de IISpy tienen una estructura predefinida, con una relación específica (oculta) entre los encabezados de Cookie y de Host, y la URL. Para identificar dichas solicitudes, IISpy primero calcula el hash MD5 de la URL y del encabezado del Host de una solicitud HTTP entrante y divide cada MD5 en cuatro palabras dobles:
- <h0><h1><h2><h3> = md5(Host Header value)
- <r0><r1><r2><r3> = md5(Raw URL value)
Luego, verifica si el encabezado de Cookie contiene una substring creada a partir de estos valores:
- <r1><h2>=<h3><r2><r3><r0><h0><h1>
La Imagen 2 ilustra cómo se ensambla esta substring. Los comandos de backdoor están integrados en el cuerpo HTTP, cifrados mediante AES-CBC y codificados en base64.
Tenga en cuenta que esta estructura de control de solicitudes es exclusiva de IISpy: todos los otros backdoors para IIS conocidos (que hemos documentado en nuestro whitepaper Anatomy of native IIS malware) están controladas por contraseñas hardcodeadas, URI específicas o encabezados HTTP personalizados. A diferencia de esos “secretos”, las solicitudes de control de de IISpy son más difíciles de identificar y encontrar en los registros, lo cual es un intento de que la comunicación con su C&C pase desapercibida.
Otro truco de este estilo es utilizado para el otro lado de la comunicación: IISpy embebe su respuesta cifrada y codificada dentro de una imagen PNG falsa, entre los encabezados del archivo PNG como un chunk de TEXT o BLOB. Para responder a una solicitud HTTP de control, IISpy reemplaza el cuerpo de la respuesta HTTP original (enviada por el servidor IIS) con el archivo PNG falso y establece el encabezado Content-Type en image/png para darle más credibilidad.
Ambos lados de la comunicación con el C&C están cifradas con AES-CBC y codificados en base64, utilizando estos parámetros:
- Encryption key: DA1F8BE19D9122F6499D72B90299CAB080E9D599C57E802CD667BF53CCC9EAB2
- IV: 668EDC2D7ED614BF8F69FF614957EF83EE
Análisis técnico
Desde el punto de vista técnico, IISpy se implementa como un módulo nativo para IIS: una DLL en C++ implementada en la carpeta %windir%\system32\inetsrv\ o %windir%\system32\inetsrv\ en el servidor IIS comprometido, bajo el nombre cache.dll o logging.dll.
IISpy está configurado como una extensión para IIS en el archivo de configuración %windir%\system32\inetsrv\config\ApplicationHost.config, por lo que es cargado automáticamente por el proceso de trabajo de IIS (w3wp.exe), el cual maneja todas las solicitudes enviadas al servidor web IIS. En lo que respecta a la ejecución y la persistencia, la configuración de IISpy como un módulo para IIS contempla todos los requerimientos; todo lo que queda por implementar dentro del módulo malicioso es la actual solicitud de procesamiento (y como bonus, algunos trucos anti detección y anti forense). Cubrimos ambos en esta sección.
Diseño del módulo
IISpy está escrito usando el API para IIS en C++ y usa instancias de las interfaces IHttpContext, IHttpRequest y IHttpResponse para analizar las solicitudes HTTP y manipular las respuestas HTTP.
Como lo requieren todos los módulos nativos para IIS, exporta una función llamada RegisterModule, donde crea una instancia de sus clases principales y registra sus métodos para eventos de servidor utilizando el método IHttpModuleRegistrationInfo::SetRequestNotifications, como se muestra en la Imagen 3.
La clase principal de IISpy se heredada de CHttpModule y, como se observa en la Imagen 4, anula tres de sus métodos: controlares (handlers) de eventos para los eventos del servidor:
- Se llama a OnBeginRequest cada vez que el servidor comienza a procesar una nueva solicitud HTTP, e IISpy usa este handler para analizarlo en busca de solicitudes de los atacantes.
- OnEndRequest, llamado con el último paso dentro del pipeline de procesamiento de solicitudes HTTP, implementa el intérprete del backdoor para IISpy
- OnLogRequest, llamado justo antes de que el servidor IIS registre una solicitud HTTP procesada, implementa la función anti registro de IISpy
IISpy registra estos handlers con la prioridad más alta (a través del API IHttpModuleRegistrationInfo::SetPriorityForRequestNotification). Dado que se pueden registrar varios módulos para IIS (maliciosos y regulares) para el mismo evento, esto asegura que el handler de IISpy se ejecutará antes que cualquier otro handler registrado para el mismo evento.
Comandos de backdoor
En su controlador OnEndRequest, IISpy descifra el cuerpo HTTP de la solicitud de un atacante y extrae sus parámetros, que se organizan como pares clave-valor y se enumeran en la Tabla 1.
Tabla 1. Parámetros de solicitud del atacante de IISpy
Key | Value |
---|---|
/mode | Command type |
/action | Command |
/path /binary /data … | Command arguments (see Table 2 for full list) |
/credential/username | Local user username, used for impersonation |
/credential/password | Local user password, used for impersonation |
Si las credenciales están presentes, IISpy las usa para iniciar sesión como usuario (a través de LogonUserW, ImpersonateLoggedOnUser) para ejecutar los comandos de backdoor en el contexto del usuario. Los comandos y argumentos de backdoor también se organizan como pares clave-valor anidados, como se muestra en la Tabla 2.
Command type (/mode value) | Command (/action value) | Arguments (key names) | Command description | Returned data (map structure or description) |
---|---|---|---|---|
init | N/A | N/A | Collects basic system information: computer name and domain, username and domain, logical drives information. | /computer/domain /computer/name /user/domain /user/name /- /name /type |
file | list | /path | Collects information about the files in the specified folder. | /- /name /attr /size /create /access /write |
get | /path /binary | Downloads the file with the specified name from the compromised IIS server. | The contents of the file, encrypted and embedded within a fake PNG image (a PNG header followed by non-image data). | |
create | /path /directory /data | Creates a new file or directory in the specified path. Optional /data argument can hold the file content. | /- /file /attr /size /create /access /write | |
upload | /path /data | Uploads a file with the specified name to the compromised server. The /data entry contains base64-encoded file content. | /- /file /attr /size /create /access /write | |
delete | /path /files /name /attr | Deletes the list of files/directories in the given path. | /files /code /name | |
move | /path /dest /copy /files /name /new | Copies or renames files from the list, from the source directory to the destination directory. | /files /code /name | |
time | /path /create /access /write | Modifies file timestamps | N/A | |
drive | map | /letter /share /username /password | Creates a mapping between a local and a remote drive, using the specified credentials for the network resource. | N/A |
remove | /letter | Removes an existing drive mapping | N/A | |
cmd | exec | /cmd | Executes the specified command, either under the context of the current user, or the user provided in arguments. Returns the command output. | /output |
Tabla 2. Argumentos y comandos de backdoor de IISpy
Después de ejecutar el comando de backdoor, IISpy cifra y codifica los datos de retorno y los usa para modificar la respuesta HTTP a la solicitud del atacante. Los datos de retorno también se organizan como pares clave-valor, con las entradas enumeradas en la Tabla 2, más dos entradas adicionales basadas en el resultado de GetLastError (o mensajes de error personalizados):
- /error/code
- /error/message
Función antiregistro
Finalmente, IISpy implementa el handler de eventos OnLogRequest, llamado justo antes de que el servidor IIS registre una solicitud HTTP procesada. El backdoor utiliza este controlador para modificar las entradas de registro de las solicitudes que provienen de los atacantes para que parezcan solicitudes casuales. Como se observa en la Imagen 5, se siguen estos pasos:
- Reescribe el método HTTP en la solicitud a GET
- Vuelva a escribir la URL de la solicitud a /
- Elimine estos encabezados de la solicitud: Cookie, Origin, Referer, Sec-Fetch-Mode, Sec-Fetch-Site, Content-Type, Content-Length, X-Forwarded-IP, X-Forwarded-For, X-Forwarded-By, X-Forwarded-Proto
Con las entradas de registro modificadas de esta manera, los atacantes intentan ocultar aún más los rastros de sus actividades maliciosas para dificultar el posible análisis forense.
Conclusión
IISpy es un complejo backdoor del lado del servidor que aprovecha la extensibilidad del software del servidor web IIS para su persistencia, ejecución y mecanismos de C&C. Diseñado para el espionaje a largo plazo en servidores IIS comprometidos, se vale de ciertos trucos para mezclarse con el tráfico regular de la red y para borrar los registros incriminatorios.
Las organizaciones que manejan datos confidenciales en sus servidores deben estar atentas, como las organizaciones que tienen habilitado el servicio Outlook en la web (OWA) en sus servidores de correo electrónico de Exchange: OWA se implementa a través de IIS y es un objetivo interesante para el espionaje. En cualquier caso, la mejor manera de mantener IISpy fuera de sus servidores es mantenerlos actualizados y considerar cuidadosamente qué servicios están expuestos a Internet, para reducir el riesgo de explotación del servidor.
Detalles técnicos adicionales del malware, así como Indicadores de compromiso y reglas de YARA pueden encontrarse en nuestro whitepaper y en GitHub. Por cualquier consulta o para enviar muestras relacionadas con el tema, escríbanos a threatintel@eset.com.
Esté atento a la última entrega de esta serie en la cual analizamos extensiones maliciosas para IIS utilizadas para el fraude de SEO.
Fuente: WeLiveSecurity
Comentarios
Publicar un comentario
siempre es bueno, leer tus comentarios