fbpx
Capital Software

El troyano «Asnarök» es un ataque dirigido a los Firewalls SOPHOS

Firewall | LightRead.News

Malware personalizado utilizado para comprometer firewalls físicos y virtuales

Sophos y sus clientes fueron víctimas de un ataque coordinado por un adversario desconocido. Este ataque reveló una vulnerabilidad de inyección SQL previamente desconocida que condujo a la ejecución remota de código en algunos de nuestros productos de firewall. Como se describe en el KBA, la vulnerabilidad se ha corregido desde entonces.

Esta publicación es el resultado de muchas horas de investigación e ingeniería inversa por parte de los equipos de seguridad internos de SophosLabs y Sophos, trabajando en conjunto con la gestión de productos para coordinar una revisión y una respuesta global dentro de los dos días posteriores al descubrimiento de este ataque. En aras de la transparencia, queremos describir la naturaleza del ataque y un análisis detallado del malware basado en nuestra investigación y comprensión actual.

Hubo una importante orquestación involucrada en la ejecución del ataque, utilizando una cadena de scripts de shell de Linux que eventualmente descargaron malware ejecutable binario ELF compilado para un sistema operativo de firewall. Este ataque apuntó a los productos de Sophos y aparentemente estaba destinado a robar información confidencial del firewall.

Cómo comenzó el ataque

El proceso de infección comenzó cuando un atacante descubrió y explotó una vulnerabilidad de ejecución remota de código de inyección SQL de día cero. La explotación de esta vulnerabilidad dio como resultado que el atacante pudiera insertar un comando de una línea en una tabla de base de datos.

Este comando inyectado inicial activó un dispositivo afectado para descargar un script de shell de Linux llamado Install.sh desde un servidor remoto en el dominio malicioso sophosfirewallupdate[.]Com . El comando también escribió este script de shell en el directorio/tmp en el dispositivo, usó el programa chmod para designar el archivo como ejecutable y lo ejecutó.

El script (escrito en el dispositivo como x.sh) ejecutó una serie de comandos SQL y soltó archivos adicionales en el sistema de archivos virtual para sentar las bases para el resto del ataque.

El script Install.sh, inicialmente, ejecutó una serie de comandos SQL de Postgres para modificar o poner a cero los valores de ciertas tablas en la base de datos, una de las cuales normalmente muestra la dirección IP administrativa del dispositivo. Parece que este fue un intento de ocultar el ataque, pero fracasó: en algunos dispositivos, la actividad del script de shell dio como resultado que la propia línea de comando SQL inyectada del atacante se mostrara en la interfaz de usuario del panel administrativo del firewall. En lugar de lo que debería haber sido una dirección, mostraba una línea de comandos de shell.

Esta secuencia de comandos también dejó caer al menos otras dos secuencias de comandos de shell en el directorio / tmp, y modificó al menos una secuencia de comandos de shell que forma parte del sistema operativo del firewall para agregar un conjunto de comandos al final de la secuencia de comandos. Este último script, en particular, es relevante porque el malware modificó los servicios para garantizar que se ejecutara cada vez que se iniciaba el firewall; sirvió como un mecanismo indirecto de persistencia para el malware.

El juego de tres conchas ELF

La secuencia de comandos del instalador, x.sh, eliminó dos secuencias de comandos de shell completamente nuevas y modificó una secuencia de comandos existente que forma parte del sistema operativo.

Uno de los scripts de shell eliminados se llamaba .lp.sh y su función principal era conectarse al sitio malicioso sophosfirewallupdate y descargar un archivo ejecutable ELF de Linux compilado para ejecutarse en el sistema operativo de firewall llamado lp . El script escribió ese archivo descargado en / tmp con un nombre de archivo de solo b .

El programa b , cuando se ejecuta, se elimina del sistema de archivos del dispositivo, por lo que solo estaba presente en la memoria. Apareció en la lista de procesos como un programa cuyo nombre, cssconf.bin , está a un carácter de un proceso legítimo que normalmente se ejecuta en un firewall, cscconf.bin . La lista de procesos resaltada a continuación muestra el programa malicioso tal como habría aparecido ejecutándose en un firewall infectado. También es notable que enumeró su ID de proceso principal como 1, lo que el cscconf.bin legítimo nunca hubiera hecho.

Mientras b estaba en la memoria, repitió una serie de tareas cada 3 a 6 horas, un intervalo de retraso elegido al azar la primera vez que se ejecutó, y se reutilizó posteriormente.

Primero, b verificó si podía hacer una conexión a una máquina con la dirección IP de 43.229.55.44 . Si el ELF no pudo establecer una conexión con esa dirección IP, intentó resolver la dirección IP para el dominio malicioso sophosproductupdate [.] Com .

Si resolvió la IP para ese dominio y DNS no devolvió un valor de 127.0.0.1 como resultado, entonces descargó otro ejecutable ELF de Linux llamado Sophos.dat , que discutiremos en la siguiente sección.

El script de shell número dos que dejó caer el script Install.sh/x.sh se escribió en el directorio /tmp con un nombre de archivo de .pg.sh. Su objetivo principal era descargar un segundo ejecutable ELF diferente, que se llamaba bk en el servidor web y se escribía en el sistema de archivos con el nombre .post_MI.

Anteriormente mencionamos que Install.sh, el dropper de la primera etapa, ejecutó varios comandos SQL de Postgres. Uno de estos comandos modificó una entrada de valor de servicio específico para que .post_MI se ejecute siempre que se ejecute ese servicio; Esto proporcionó persistencia al iniciar el malware en cada reinicio.

Este ejecutable tenía una funcionalidad limitada: verificó si un archivo llamado .a.PGSQL (más sobre esto en un minuto) se había escrito en el directorio /tmp, y si no lo encontró, intentó descargar un shell script del servidor web alojado en ragnarokfromasgard.com , llamado patch.sh . En el momento en que realizamos el análisis del ataque, este servidor no respondía.

El tercer script de shell es una modificación de un script de shell que ya forma parte del sistema operativo interno del firewall, denominado generate_curl_ca_bundle.sh . El script Install.sh/x.sh realizó una copia de respaldo del original (anteponiendo un punto al nombre del archivo, .generate_curl_ca_bundle.sh ) antes de modificar el script original para agregar código al archivo. Ese código escribió y dejó caer otro script de shell, /tmp/I (solo una letra mayúscula i ).

El script I tenía dos funciones principales. Primero, realizó un «toque» del archivo /tmp/.a.PGSQL (un acto que, si el archivo no existía, lo creó en el directorio /tmp). Lo mencionado anteriormente . El ejecutable post_MI ELF se verificó para ver si existía .a.PGSQL como parte de su ejecución.

El script I luego recuperó un archivo de script de shell llamado lc del dominio sophosfirewallupdate , y lo escribió en el directorio / tmp como .n.sh y lo ejecutó . Este script replicó el mismo comportamiento que el script .lp.sh (mencionado anteriormente) e intentó descargar y ejecutar el ejecutable ELF del sitio web malicioso sophosfirewallupdate . Esta descarga de fue el mecanismo de persistencia, dado que el proceso se eliminó del disco como una de sus primeras acciones.

Proceso de exfiltración de datos

Nota: Esta sección describe nuestra comprensión de las capacidades de exfiltración de datos del malware al momento de la publicación de este artículo, pero no hemos descubierto ninguna evidencia de que los datos recopilados se hayan extraído con éxito.

Los pasos que involucran los scripts de shell y los ejecutables binarios ELF aparentemente se realizaron para llevar el ataque al punto donde el malware descargó y ejecutó un archivo que había sido llamado Sophos.dat en el servidor remoto, guardado en el sistema de archivos como 2own .

La tarea principal de este malware parecía ser el robo de datos, que podría realizar recuperando el contenido de varias tablas de bases de datos almacenadas en el firewall, así como ejecutando algunos comandos del sistema operativo. En cada paso, el malware recopiló información y luego la concatenó en un archivo que almacenó temporalmente en el firewall con el nombre Info. xg.

Primero, el binario intentó recuperar la dirección IP pública donde se instaló el firewall. Primero hizo esto al consultar el sitio web ifconfig.me , y si ese sitio no fue accesible por alguna razón, trató de hacer lo mismo contactando checkip.dyndns.org .

A continuación, consultó varias áreas de almacenamiento de datos en el firewall para recuperar información sobre el firewall y sus usuarios.

El siguiente diagrama muestra la capacidad del malware para filtrar datos. A la fecha de publicación, no hemos descubierto ninguna evidencia de que los datos recopilados se hayan extraído con éxito.

El malware demostró la capacidad de recuperar solo información residente del firewall, que puede haber incluido:

  • La licencia del cortafuegos y el número de serie
  • Una lista de las direcciones de correo electrónico de las cuentas de usuario que se almacenaron en el dispositivo, seguida del correo electrónico principal que pertenece a la cuenta de administrador del firewall
  • Los nombres de los usuarios del cortafuegos, los nombres de usuario, la forma cifrada de las contraseñas y el hash SHA256 salado de la contraseña de la cuenta del administrador. Las contraseñas no se almacenaron en texto sin formato.
  • Una lista de las ID de usuario permitidas para usar el firewall para SSL VPN y las cuentas a las que se les permitió usar una conexión VPN «sin cliente».

El malware luego consultó una base de datos interna del firewall para recuperar una lista de los permisos de asignación de direcciones IP para los usuarios del firewall, así como información sobre el dispositivo en sí: qué versión del sistema operativo se estaba ejecutando, qué tipo de CPU y cantidad de memoria estaba presente en el dispositivo; cuánto tiempo había estado operativo desde el último reinicio (el «tiempo de actividad»); y la salida de las tablas ifconfig y ARP.

Una vez que el malware escribió toda esta información en Info.xg , la comprimió con la herramienta de compresión de alquitrán y luego utilizó OpenSSL para cifrar el archivo comprimido. El atacante usó el algoritmo Triple-DES para cifrar el archivo, y para una frase de paso, la palabra » GUCCI » en mayúsculas. Luego, el malware tenía la intención de cargar el archivo encriptado a una máquina en la dirección IP 38.27.99.69 , y luego limpió sus pistas eliminando los archivos creados temporalmente mientras recopilaba la información.

Remediación y respuesta

Los archivos asociados con este ataque se han agregado a la definición Linux/Agnt-G y los dominios y las direcciones IP se han marcado como maliciosos en el servicio de reputación de dominio de SophosXL.

Ya se ha lanzado una actualización de revisión para los clientes de Sophos para parchear la vulnerabilidad utilizada por los atacantes para acceder a los firewalls. Si no tiene habilitadas las actualizaciones automáticas en el firewall, siga estas instrucciones para habilitarlas.

Desde que se descubrió el ataque, Sophos ha tomado una serie de pasos, que podemos resumir de la siguiente manera: SophosLabs bloqueó dominios encontrados en el análisis forense inicial del ataque, y luego identificó y bloqueó dominios adicionales y direcciones IP asociadas con el ataque. Notificamos a los clientes sobre los pasos de mitigación. Emitimos una actualización de telemetría a los firewalls; y diseñamos, desarrollamos y probamos un hotfix para mitigar la inyección SQL y este ataque, y luego enviamos el hotfix a los dispositivos compatibles. Sophos también ha enviado una solicitud de CVE y agregará el número de CVE al artículo de la base de conocimiento una vez que esté disponible. También hemos tomado medidas adicionales que quedan fuera del alcance de este artículo.

Hay algunos pasos que los clientes de Sophos pueden tomar para fortalecer sus entornos y remediar un dispositivo de firewall afectado. Estos pasos se mantienen actualizados y se describen en la entrada de la base de conocimiento de Sophos sobre este tema.

Indicadores de compromiso (IoC)

Indicadores de archivo

Nombre del archivoSHA256Tipo de archivoFuncionalidad
Install.sh [/tmp/x.sh]736da16da96222d3dfbb864376cafd58239344b536c75841805c661f220072e5GolpetazoScript de instalación principal. Configuración comprometida del firewall, descartó dos archivos y modificó un tercero.
Script de Shell
lc [/tmp/.n.sh]a226c6a641291ef2916118b048d508554afe0966974c5ca241619e8a375b8c6bGolpetazoLp descargado (cuentagotas ELF)
Script de Shell
bk [/var/newdb/global/.post_MI]4de3258ebba1ef3638642a011020a004b4cd4dbe8cd42613e24edf37e6cf9d71DUENDEPatch.sh descargado
Binario X86
lp [/ tmp / b]9650563aa660ccbfd91c0efc2318cf98bfe9092b4a2abcd98c7fc44aad265fdaDUENDECuentagotas principal. Módulo descargado 2own (exfiltración de datos)
Binario X86
in.s_h8e9965c2bb0964fde7c1aa0e8b5d74158e37443d857fc227c1883aa74858e985GolpetazoForma ligeramente modificada de install.sh
Script de Shell
2own31e43ecd203860ba208c668a0e881a260ceb24cb1025262d42e03209aed77fe4DUENDEMódulo de robo de datos. Exfiltra a 38.27.99.69
Script X86

Indicadores de red

URLS

hxxps: //sophosfirewallupdate.com/sp/Install.sh
hxxp: //sophosfirewallupdate.com/sh_guard/lc
hxxps: //sophosfirewallupdate.com/bk
hxxps: //sophosfirewallupdate.com/sp/lp
hxxps: //ragnarokfromasgard.com/sp/patch.sh
hxxps: //sophosfirewallupdate.com/sp/sophos.dat
hxxps: //sophosfirewallupdate.com/in_exit
hxxps: //sophosfirewallupdate.com/sp/lpin
hxxp: //sophosfirewallupdate.com/bkin
hxxp: //filedownloaderservers.com/bkin
hxxps: //sophosfirewallupdate.com/sp/p.sh
hxxps: //sophosfirewallupdate.com/sp/ae.sh

DOMINIOS

sophosfirewallupdate.com
filedownloaderservers.com
ragnarokfromasgard.com
sophosenterprisecenter.com
sophoswarehouse.com
sophosproductupdate.com
sophostraining.org

DOMINIOS SOSPECHOSOS ADICIONALES

filedownloaderserverx.com
filedownloaderserver.com
updatefileservercross.com

IPs

43.229.55.44
38.27.99.69

Rutas del sistema de archivos

/tmp/x.sh
/var/newdb/global/.post_MI
/scripts/vpn/ipsec/generate_curl_ca_bundle.sh (modificado)
/scripts/vpn/ipsec/.generate_curl_ca_bundle.sh (original)
/ tmp / I
/tmp/.a.PGSQL
/tmp/.n.sh
/tmp/.pg.sh
/tmp/.lp.sh
/ tmp / b
/ tmp / 2own
/tmp/Info.xg
/tmp/%s_.xg.rel
/tmp/%s_.xg.salt
/ tmp / ip (resultado de http://checkip.dyndns.org/ip_dyn)
/ tmp / ip_dyn (resultado de https://ifconfig.me/ip)
Abrir chat
1
Escanea el código
Hola, bienvenido a Capital Software, somos una empresa de soluciones informáticas. ¿En qué podemos ayudarte hoy?