El març de 2019, es va penjar una nova mostra de programari maliciós de macOS del grup cibernètic OceanLotus a VirusTotal, un popular servei d'escaneig en línia. El fitxer executable de la porta del darrere té les mateixes capacitats que la versió anterior del programari maliciós de macOS que vam estudiar, però la seva estructura ha canviat i s'ha tornat més difícil de detectar. Malauradament, no hem pogut trobar un comptagotes associat a aquesta mostra, de manera que encara no coneixem el vector d'infecció.
Fa poc que hem publicat
Anàlisi
Les tres parts següents descriuen l'anàlisi d'una mostra amb un hash SHA-1 E615632C9998E4D3E5ACD8851864ED09B02C77D2
. El fitxer s'anomena llanterna, els productes antivirus ESET el detecten com a OSX/OceanLotus.D.
Protecció antidepuració i sandbox
Com tots els binaris de macOS OceanLotus, la mostra està empaquetada amb UPX, però la majoria de les eines d'identificació de l'empaquetador no la reconeixen com a tal. Probablement això es deu al fet que majoritàriament contenen una signatura que depèn de la presència de la cadena "UPX", a més, les signatures Mach-O són menys comunes i no s'actualitzen tan sovint. Aquesta característica dificulta la detecció estàtica. Curiosament, després de desembalar, el punt d'entrada és al principi de la secció __cfstring
en el segment .TEXT
. Aquesta secció té atributs de bandera com es mostra a la imatge següent.
Figura 1. Atributs de la secció MACH-O __cfstring
Com es mostra a la figura 2, les ubicacions del codi a la secció __cfstring
us permet enganyar algunes eines de desmuntatge mostrant el codi com a cadenes.
Figura 2. Codi backdoor detectat per IDA com a dades
Un cop executat, el binari crea un fil com a antidepurador l'únic objectiu del qual és comprovar contínuament la presència d'un depurador. Per a aquest flux:
— Intenta desenganxar qualsevol depurador, trucant ptrace
с PT_DENY_ATTACH
com a paràmetre de sol·licitud
- Comprova si alguns ports exclusius estan oberts cridant una funció task_get_exception_ports
- Comprova si el depurador està connectat, com es mostra a la figura següent, comprovant la presència de la bandera P_TRACED
en el procés actual
Figura 3. Comprovació de la connexió del depurador mitjançant la funció sysctl
Si el gos vigilant detecta la presència d'un depurador, es crida la funció exit
. A més, la mostra comprova l'entorn executant dues ordres:
ioreg -l | grep -e "Manufacturer" и sysctl hw.model
A continuació, la mostra comprova el valor de retorn amb una llista codificada de cadenes de sistemes de virtualització coneguts: acle, vmware, virtualbox o paral·lelismes. Finalment, la següent comanda comprova si la màquina és una de les següents "MBP", "MBA", "MB", "MM", "IM", "MP" i "XS". Aquests són codis de model de sistema, per exemple, "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]);}
Principals incorporacions
Tot i que les ordres de la porta posterior no han canviat des de la investigació de Trend Micro, vam notar algunes altres modificacions. Els servidors C&C utilitzats en aquesta mostra són força nous i es van crear el 22.10.2018/XNUMX/XNUMX.
- daff.faybilodeau[.]com
- sarc.onteagleroad[.]com
- au.charlineopkesston[.]com
L'URL del recurs ha canviat a /dp/B074WC4NHW/ref=gbps_img_m-9_62c3_750e6b35
.
El primer paquet enviat al servidor C&C conté més informació sobre la màquina host, incloses totes les dades recollides per les ordres de la taula següent.
A més d'aquest canvi de configuració, la mostra no utilitza una biblioteca per al filtratge de xarxa gFjMXBgyXWULmVVVzyxy
, encoixinat amb zeros. Cada fitxer es desxifra i es desa com a /tmp/store
, i es fa un intent de carregar-lo com a biblioteca mitjançant la funció dlopen
, la porta del darrere extreu les funcions exportades Boriry
и ChadylonV
, que aparentment són els responsables de la comunicació de xarxa amb el servidor. No tenim el comptagotes ni altres fitxers de la ubicació original de la mostra, de manera que no podem analitzar aquesta biblioteca. A més, com que el component està xifrat, una regla YARA basada en aquestes cadenes no coincidirà amb el fitxer que es troba al disc.
Tal com es descriu a l'article anterior, es crea ID client. Aquest ID és el hash MD5 del valor de retorn d'una de les ordres següents:
- 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}'
(obté l'adreça MAC)
- equip desconegut ("x1ex72x0a
"), que s'utilitza en mostres anteriors
Abans del hash, s'afegeix un "0" o un "1" al valor de retorn per indicar els privilegis de root. Això ID client emmagatzemat en /Library/Storage/File System/HFS/25cf5d02-e50b-4288-870a-528d56c3cf6e/pivtoken.appex
, si el codi s'executa com a root o a ~/Library/SmartCardsServices/Technology/PlugIns/drivers/snippets.ecgML en la resta de casos. El fitxer normalment s'amaga amb la funció touch –t
amb un valor aleatori.
Descodificació de cadenes
Igual que amb les opcions anteriors, les cadenes es xifren mitjançant AES-256-CBC (clau hexadecimal: 9D7274AD7BCEF0DED29BDBB428C251DF8B350B92
encoixinat amb zeros i IV ple de zeros) mitjançant la funció
Conèixer el prototip de funció desxifrar, l'script troba totes les referències creuades a aquesta funció, tots els arguments, després desxifra les dades i col·loca text sense format dins d'un comentari a l'adreça de referència creuada. Perquè l'script funcioni correctament, s'ha de configurar amb l'alfabet personalitzat que utilitza la funció de descodificació base64 i s'ha de definir una variable global que contingui la longitud de la clau (en aquest cas un DWORD, vegeu la figura 4).
Figura 4. Definició de la variable global key_len
A la finestra Funció, podeu fer clic amb el botó dret a la funció de desxifrar i fer clic a "Extreu i desxifra arguments". L'script hauria de col·locar les línies desxifrades als comentaris, tal com es mostra a la figura 5.
Figura 5. El text desxifrat es col·loca als comentaris
D'aquesta manera, les cadenes desxifrades es col·loquen convenientment juntes a la finestra IDA xrefs per a aquesta funció tal com es mostra a la figura 6.
Figura 6. Xrefs per a la funció f_decrypt
El guió final es pot trobar a
Sortida
Com ja s'ha esmentat, OceanLotus millora i actualitza constantment el seu conjunt d'eines. Aquesta vegada, el grup cibernètic ha millorat el programari maliciós perquè funcioni amb usuaris de Mac. El codi no ha canviat gaire, però com que molts usuaris de Mac ignoren els productes de seguretat, protegir el programari maliciós de la detecció és d'una importància secundària.
Els productes ESET ja estaven detectant aquest fitxer en el moment de la investigació. Com que la biblioteca de xarxa utilitzada per a la comunicació C&C ara està xifrada al disc, encara no es coneix el protocol de xarxa exacte utilitzat pels atacants.
Indicadors de compromís
Els indicadors de compromís, així com els atributs MITRE ATT&CK també estan disponibles a
Font: www.habr.com