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
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.
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.
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
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.
Ademais deste cambio de configuración, a mostra non usa unha biblioteca para o filtrado de rede 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 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 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
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).
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.
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.
Figura 6. Xrefs para a función f_decrypt
O guión final pódese atopar en
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
Fonte: www.habr.com