OceanLotus: actualització de programari maliciós per a macOS

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 publicació sobre OceanLotus i com els operadors intenten proporcionar persistència, accelerar l'execució del codi i minimitzar la petjada als sistemes Windows. També se sap que aquest grup cibernètic també té un component per a macOS. Aquesta publicació detalla els canvis en la versió més recent del programari maliciós per a macOS en comparació amb la versió anterior (descrit per Trend Micro), i també descriu com podeu automatitzar el desxifrat de cadenes durant l'anàlisi mitjançant l'API IDA Hex-Rays.

OceanLotus: actualització de programari maliciós per a macOS

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.

OceanLotus: actualització de programari maliciós per a macOS
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.

OceanLotus: actualització de programari maliciós per a macOS
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

OceanLotus: actualització de programari maliciós per a macOS
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.

OceanLotus: actualització de programari maliciós per a macOS

A més d'aquest canvi de configuració, la mostra no utilitza una biblioteca per al filtratge de xarxa libcurl, sinó una biblioteca externa. Per trobar-lo, la porta del darrere intenta desxifrar tots els fitxers del directori actual mitjançant AES-256-CBC amb la clau 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ó aigua oberta. Quan un intent de desxifrat té com a resultat una trucada satisfactòria 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ó _chflags, la seva marca de temps es canvia mitjançant l'ordre 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ó CCCrypt. La clau ha canviat respecte a les versions anteriors, però com que el grup encara utilitza el mateix algorisme de xifratge de cadenes, el desxifrat es pot automatitzar. A més d'aquesta publicació, estem llançant un script IDA que utilitza l'API Hex-Rays per desxifrar les cadenes presents al fitxer binari. Aquest script pot ajudar amb l'anàlisi futura d'OceanLotus i l'anàlisi de mostres existents que encara no hem pogut obtenir. L'script es basa en un mètode universal per rebre arguments passats a una funció. A més, cerca assignacions de paràmetres. El mètode es pot reutilitzar per obtenir una llista d'arguments de funció i després passar-la a la devolució de trucada.

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).

OceanLotus: actualització de programari maliciós per a macOS
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.

OceanLotus: actualització de programari maliciós per a macOS
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.

OceanLotus: actualització de programari maliciós per a macOS
Figura 6. Xrefs per a la funció f_decrypt

El guió final es pot trobar a Dipòsit Github.

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 GitHub.

Font: www.habr.com

Afegeix comentari