OceanLotus: actualización de malware para macOS

En marzo de 2019, cargouse unha nova mostra de malware de macOS do grupo cibernético OceanLotus en VirusTotal, un popular servizo de dixitalización en liña. O ficheiro executable de porta traseira ten as mesmas capacidades que a versión anterior do malware de macOS que estudamos, pero a súa estrutura cambiou e volveuse máis difícil de detectar. Desafortunadamente, non puidemos atopar un contagotas asociado a esta mostra, polo que aínda non coñecemos o vector da infección.

Publicamos recentemente publicación sobre OceanLotus e como os operadores intentan proporcionar persistencia, acelerar a execución do código e minimizar a pegada nos sistemas Windows. Tamén se sabe que este grupo cibernético tamén ten un compoñente para macOS. Esta publicación detalla os cambios na versión máis recente do malware para macOS en comparación coa versión anterior (descrito por Trend Micro), e tamén describe como pode automatizar o descifrado de cadeas durante a análise mediante a API IDA Hex-Rays.

OceanLotus: actualización de malware para macOS

Análise

As seguintes tres partes describen a análise dunha mostra cun hash SHA-1 E615632C9998E4D3E5ACD8851864ED09B02C77D2. O ficheiro chámase lanterna, os produtos antivirus de ESET detectan como OSX/OceanLotus.D.

Protección antidepuración e sandbox

Como todos os binarios de macOS OceanLotus, a mostra está empaquetada con UPX, pero a maioría das ferramentas de identificación de empaquetadores non a recoñecen como tal. Probablemente, isto débese principalmente a que conteñen unha sinatura dependente da presenza da cadea "UPX", ademais, as sinaturas de Mach-O son menos comúns e non se actualizan con tanta frecuencia. Esta característica dificulta a detección estática. Curiosamente, despois de desembalar, o punto de entrada está ao comezo da sección __cfstring no segmento .TEXT. Esta sección ten atributos de bandeira como se mostra na imaxe de abaixo.

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

Como se mostra na Figura 2, as localizacións do código na sección __cfstring permítelle enganar algunhas ferramentas de desmontaxe mostrando código como cadeas.

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

Unha vez executado, o binario crea un fío como un antidepurador cuxo único propósito é comprobar continuamente a presenza dun depurador. Para este fluxo:

— Intenta desenganchar calquera depurador, chamando ptrace с PT_DENY_ATTACH como parámetro de solicitude
- Comproba se algúns portos exclusivos están abertos chamando a unha función task_get_exception_ports
- Comproba se o depurador está conectado, como se mostra na figura seguinte, comprobando a presenza da bandeira P_TRACED no proceso actual

OceanLotus: actualización de malware para macOS
Figura 3. Comprobación da conexión do depurador mediante a función sysctl

Se o vixilante detecta a presenza dun depurador, chámase a función exit. Ademais, a mostra verifica o ambiente executando dous comandos:

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

A mostra verifica entón o valor de retorno cunha lista codificada de cadeas de sistemas de virtualización coñecidos: acle, vmware, caixa virtual ou paralelos. Finalmente, o seguinte comando comproba se a máquina é un dos seguintes "MBP", "MBA", "MB", "MM", "IM", "MP" e "XS". Estes son códigos de modelo de sistema, por exemplo, "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]);}

Engadidos básicos

Aínda que os comandos das portas traseiras non cambiaron desde a investigación de Trend Micro, observamos algunhas outras modificacións. Os servidores C&C utilizados nesta mostra son bastante novos e creáronse o 22.10.2018/XNUMX/XNUMX.

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

O URL do recurso cambiou a /dp/B074WC4NHW/ref=gbps_img_m-9_62c3_750e6b35.
O primeiro paquete enviado ao servidor C&C contén máis información sobre a máquina host, incluíndo todos os datos recollidos polos comandos da táboa seguinte.

OceanLotus: actualización de malware para macOS

Ademais deste cambio de configuración, a mostra non usa unha biblioteca para o filtrado de rede libcurl, pero unha biblioteca externa. Para atopalo, a porta traseira tenta descifrar todos os ficheiros do directorio actual usando AES-256-CBC coa chave gFjMXBgyXWULmVVVzyxy, acolchado con ceros. Cada ficheiro descífrase e gárdase como /tmp/store, e un intento de cargalo como biblioteca realízase mediante a función auga aberta. Cando un intento de descifrado resulta nunha chamada exitosa dlopen, a porta traseira extrae funcións exportadas Boriry и ChadylonV, que aparentemente son os responsables da comunicación de rede co servidor. Non temos o contagotas nin outros ficheiros da localización orixinal da mostra, polo que non podemos analizar esta biblioteca. Ademais, dado que o compoñente está cifrado, unha regra YARA baseada nestas cadeas non coincidirá co ficheiro atopado no disco.

Como se describe no artigo anterior, crea ID de cliente. Este ID é o hash MD5 do valor de retorno dun dos seguintes 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}' (obter enderezo MAC)
- equipo descoñecido ("x1ex72x0a"), que se usa en mostras anteriores

Antes do hash, engádese un "0" ou "1" ao valor de retorno para indicar os privilexios de root. Isto ID de cliente almacenado en /Library/Storage/File System/HFS/25cf5d02-e50b-4288-870a-528d56c3cf6e/pivtoken.appex, se o código se executa como root ou en ~/Library/SmartCardsServices/Technology/PlugIns/drivers/snippets.ecgML nos demais casos. O ficheiro adoita ocultarse mediante a función _chbandeiras, a súa marca de tempo cámbiase mediante o comando touch –t cun valor aleatorio.

Decodificación de cadeas

Do mesmo xeito que coas opcións anteriores, as cadeas cífranse mediante AES-256-CBC (chave hexadecimal: 9D7274AD7BCEF0DED29BDBB428C251DF8B350B92 acolchado de ceros e IV cheo de ceros) a través da función CCCrypt. A clave cambiou con respecto ás versións anteriores, pero como o grupo aínda usa o mesmo algoritmo de cifrado de cadeas, o descifrado pódese automatizar. Ademais desta publicación, estamos lanzando un script IDA que usa a API Hex-Rays para descifrar as cadeas presentes no ficheiro binario. Este script pode axudar na análise futura de OceanLotus e na análise de mostras existentes que aínda non puidemos obter. O script baséase nun método universal para recibir argumentos pasados ​​a unha función. Ademais, busca asignacións de parámetros. O método pódese reutilizar para obter unha lista de argumentos de función e despois pasalo á devolución de chamada.

Coñecer o prototipo da función descifrar, o script atopa todas as referencias cruzadas a esta función, todos os argumentos, despois descifra os datos e coloca texto simple dentro dun comentario no enderezo de referencia cruzada. Para que o script funcione correctamente, debe configurarse co alfabeto personalizado empregado pola función de decodificación base64 e debe definirse unha variable global que conteña a lonxitude da clave (neste caso un DWORD, consulte a Figura 4).

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

Na xanela Función, pode facer clic co botón dereito na función de descifrado e facer clic en "Extraer e descifrar argumentos". O script debe colocar as liñas descifradas nos comentarios, como se mostra na Figura 5.

OceanLotus: actualización de malware para macOS
Figura 5. O texto descifrado colócase nos comentarios

Deste xeito, as cadeas descifradas colócanse convenientemente xuntas na xanela IDA xrefs para esta función como se mostra na Figura 6.

OceanLotus: actualización de malware para macOS
Figura 6. Xrefs para a función f_decrypt

O guión final pódese atopar en Repositorio de Github.

Saída

Como xa se mencionou, OceanLotus mellora e actualiza constantemente o seu conxunto de ferramentas. Nesta ocasión, o grupo cibernético mellorou o malware para traballar cos usuarios de Mac. O código non cambiou moito, pero como moitos usuarios de Mac ignoran os produtos de seguridade, protexer o malware contra a detección é de importancia secundaria.

Os produtos ESET xa estaban detectando este ficheiro no momento da investigación. Debido a que a biblioteca de rede utilizada para a comunicación C&C agora está cifrada no disco, aínda non se coñece o protocolo de rede exacto utilizado polos atacantes.

Indicadores de compromiso

Tamén están dispoñibles os indicadores de compromiso, así como os atributos MITRE ATT&CK GitHub.

Fonte: www.habr.com

Engadir un comentario