OceanLotus: actualización de malware para macOS

En marzo de 2019, se subió una nueva muestra de malware para macOS del grupo cibernético OceanLotus a VirusTotal, un popular servicio de escaneo en línea. El archivo ejecutable de puerta trasera tiene las mismas capacidades que la versión anterior del malware macOS que estudiamos, pero su estructura ha cambiado y se ha vuelto más difícil de detectar. Desafortunadamente, no pudimos encontrar un gotero asociado con esta muestra, por lo que aún no conocemos el vector de infección.

Recientemente publicamos post sobre OceanLotus y cómo los operadores intentan brindar persistencia, acelerar la ejecución del código y minimizar el espacio en los sistemas Windows. También se sabe que este grupo cibernético también tiene un componente para macOS. Esta publicación detalla los cambios en la versión más reciente del malware para macOS en comparación con la versión anterior (descrito por Trend Micro), y también describe cómo se puede automatizar el descifrado de cadenas durante el análisis utilizando la API IDA Hex-Rays.

OceanLotus: actualización de malware para macOS

análisis de

Las siguientes tres partes describen el análisis de una muestra con un hash SHA-1. E615632C9998E4D3E5ACD8851864ED09B02C77D2. El archivo se llama linterna, los productos antivirus de ESET lo detectan como OSX/OceanLotus.D.

Protección antidepuración y sandbox

Como todos los archivos binarios de macOS OceanLotus, el ejemplo está empaquetado con UPX, pero la mayoría de las herramientas de identificación de empaquetadores no lo reconocen como tal. Probablemente esto se deba a que en su mayoría contienen una firma que depende de la presencia de la cadena "UPX". Además, las firmas Mach-O son menos comunes y no se actualizan con tanta frecuencia. Esta característica dificulta la detección estática. Curiosamente, después de desempacar, el punto de entrada está al comienzo de la sección. __cfstring en el segmento .TEXT. Esta sección tiene atributos de bandera como se muestra en la imagen a continuación.

OceanLotus: actualización de malware para macOS
Figura 1. Atributos de la sección MACH-O __cfstring

Como se muestra en la Figura 2, las ubicaciones de los códigos en la sección __cfstring le permite engañar a algunas herramientas de desmontaje mostrando el código como cadenas.

OceanLotus: actualización de malware para macOS
Figura 2. Código de puerta trasera detectado por IDA como datos

Una vez ejecutado, el binario crea un hilo como antidepurador cuyo único propósito es verificar continuamente la presencia de un depurador. Para este flujo:

— Intenta desconectar cualquier depurador, llamando ptrace с PT_DENY_ATTACH como parámetro de solicitud
- Comprueba si algunos puertos exclusivos están abiertos llamando a una función task_get_exception_ports
- Comprueba si el depurador está conectado, como se muestra en la siguiente figura, verificando la presencia de la bandera P_TRACED en el proceso actual

OceanLotus: actualización de malware para macOS
Figura 3. Comprobación de la conexión del depurador mediante la función sysctl

Si el perro guardián detecta la presencia de un depurador, la función se llama exit. Además, el ejemplo comprueba el entorno ejecutando dos comandos:

ioreg -l | grep -e "Manufacturer" и sysctl hw.model

Luego, el ejemplo compara el valor de retorno con una lista codificada de cadenas de sistemas de virtualización conocidos: tío, vmware, virtualbox o paralelas. Finalmente, el siguiente comando verifica si la máquina es una de las siguientes “MBP”, “MBA”, “MB”, “MM”, “IM”, “MP” y “XS”. Estos son códigos de modelo del sistema, por ejemplo, "MBP" significa MacBook Pro, "MBA" significa MacBook Air, etc.

system_profiler SPHardwareDataType 2>/dev/null | awk '/Boot ROM Version/ {split($0, line, ":");printf("%s", line[2]);}

Adiciones básicas

Si bien los comandos de la puerta trasera no han cambiado desde la investigación de Trend Micro, sí notamos algunas otras modificaciones. Los servidores C&C utilizados en este ejemplo son bastante nuevos y se crearon el 22.10.2018/XNUMX/XNUMX.

- daff.faybilodeau[.]com
- sarc.onteagleroad[.]com
- es.charlineopkesston[.]com

La URL del recurso ha cambiado a /dp/B074WC4NHW/ref=gbps_img_m-9_62c3_750e6b35.
El primer paquete enviado al servidor C&C contiene más información sobre la máquina host, incluidos todos los datos recopilados por los comandos de la siguiente tabla.

OceanLotus: actualización de malware para macOS

Además de este cambio de configuración, el ejemplo no utiliza una biblioteca para el filtrado de red. libcurl, sino una biblioteca externa. Para encontrarlo, la puerta trasera intenta descifrar cada archivo en el directorio actual usando AES-256-CBC con la clave gFjMXBgyXWULmVVVzyxy, rellenado con ceros. Cada archivo se descifra y se guarda como /tmp/store, y se intenta cargarlo como biblioteca usando la función abrir. Cuando un intento de descifrado resulta en una llamada exitosa dlopen, la puerta trasera extrae funciones exportadas Boriry и ChadylonV, que aparentemente son responsables de la comunicación de la red con el servidor. No tenemos el cuentagotas ni otros archivos de la ubicación original de la muestra, por lo que no podemos analizar esta biblioteca. Además, dado que el componente está cifrado, una regla YARA basada en estas cadenas no coincidirá con el archivo encontrado en el disco.

Como se describe en el artículo anterior, crea Identificación del cliente. Este ID es el hash MD5 del valor de retorno de uno de los siguientes comandos:

- ioreg -rd1 -c IOPlatformExpertDevice | awk '/IOPlatformSerialNumber/ { split($0, line, """); printf("%s", line[4]); }'
- ioreg -rd1 -c IOPlatformExpertDevice | awk '/IOPlatformUUID/ { split($0, line, """); printf("%s", line[4]); }'
- ifconfig en0 | awk '/ether /{print $2}' (obtener dirección MAC)
- equipo desconocido ("x1ex72x0a"), que se utiliza en muestras anteriores

Antes del hash, se agrega un "0" o un "1" al valor de retorno para indicar privilegios de root. Este Identificación del cliente guardado en /Library/Storage/File System/HFS/25cf5d02-e50b-4288-870a-528d56c3cf6e/pivtoken.appex, si el código se ejecuta como root o en ~/Library/SmartCardsServices/Technology/PlugIns/drivers/snippets.ecgML en todos los demás casos. El archivo generalmente se oculta usando la función _chflags, su marca de tiempo se cambia usando el comando touch –t con un valor aleatorio.

Cadenas de decodificación

Al igual que con las opciones anteriores, las cadenas se cifran mediante AES-256-CBC (clave hexadecimal: 9D7274AD7BCEF0DED29BDBB428C251DF8B350B92 relleno con ceros y IV lleno de ceros) a través de la función CCCripta. La clave ha cambiado con respecto a las versiones anteriores, pero como el grupo todavía utiliza el mismo algoritmo de cifrado de cadenas, el descifrado se puede automatizar. Además de esta publicación, estamos lanzando un script IDA que utiliza la API Hex-Rays para descifrar las cadenas presentes en el archivo binario. Este script puede ayudar con análisis futuros de OceanLotus y análisis de muestras existentes que aún no hemos podido obtener. El script se basa en un método universal para recibir argumentos pasados ​​a una función. Además, busca asignaciones de parámetros. El método se puede reutilizar para obtener una lista de argumentos de función y luego pasarla a la devolución de llamada.

Conociendo el prototipo de función. descifrar, el script encuentra todas las referencias cruzadas a esta función, todos los argumentos, luego descifra los datos y coloca texto sin formato dentro de un comentario en la dirección de referencia cruzada. Para que el script funcione correctamente, se debe configurar el alfabeto personalizado utilizado por la función de decodificación base64 y se debe definir una variable global que contenga la longitud de la clave (en este caso, un DWORD, consulte la Figura 4).

OceanLotus: actualización de malware para macOS
Figura 4. Definición de la variable global key_len

En la ventana Función, puede hacer clic derecho en la función de descifrado y hacer clic en "Extraer y descifrar argumentos". El script debe colocar las líneas descifradas en los comentarios, como se muestra en la Figura 5.

OceanLotus: actualización de malware para macOS
Figura 5. El texto descifrado se coloca en los comentarios.

De esta manera, las cadenas descifradas se colocan juntas cómodamente en la ventana IDA. referencias externas para esta función como se muestra en la Figura 6.

OceanLotus: actualización de malware para macOS
Figura 6. Referencias externas a la función f_decrypt

El guión final se puede encontrar en Repositorio de Github.

conclusión

Como ya se mencionó, OceanLotus mejora y actualiza constantemente su conjunto de herramientas. Esta vez, el grupo cibernético ha mejorado el malware para que funcione con usuarios de Mac. El código no ha cambiado mucho, pero dado que muchos usuarios de Mac ignoran los productos de seguridad, proteger el malware para que no sea detectado es de importancia secundaria.

Los productos de ESET ya estaban detectando este archivo en el momento de la investigación. Debido a que la biblioteca de red utilizada para la comunicación C&C ahora está cifrada en el disco, aún no se conoce el protocolo de red exacto utilizado por los atacantes.

Indicadores de compromiso

Los indicadores de compromiso y los atributos MITRE ATT&CK también están disponibles en GitHub.

Fuente: habr.com

Añadir un comentario