OceanLotus: Malware ĝisdatigo por macOS

En marto 2019, nova specimeno de macOS malware de la cibergrupo OceanLotus estis alŝutita al VirusTotal, populara interreta skana servo. La plenumebla dosiero malantaŭporda havas la samajn kapablojn kiel la antaŭa versio de la macOS-malware, kiun ni studis, sed ĝia strukturo ŝanĝiĝis kaj ĝi fariĝis pli malfacile detektebla. Bedaŭrinde, ni ne povis trovi guton asociitan kun ĉi tiu specimeno, do ni ankoraŭ ne konas la infektan vektoron.

Ni ĵus publikigis afiŝo pri OceanLotus kaj kiel funkciigistoj provas provizi persiston, akceli kodan ekzekuton kaj minimumigi piedsignon sur Vindozaj sistemoj. Estas ankaŭ konata, ke ĉi tiu cibergrupo ankaŭ havas komponanton por macOS. Ĉi tiu afiŝo detaligas la ŝanĝojn en la plej nova versio de la malware por macOS kompare kun la antaŭa versio (priskribita de Trend Micro), kaj ankaŭ priskribas kiel vi povas aŭtomatigi la malĉifradon de ŝnuroj dum analizo uzante la IDA Hex-Rays API.

OceanLotus: Malware ĝisdatigo por macOS

Анализ

La sekvaj tri partoj priskribas la analizon de specimeno kun SHA-1 hash E615632C9998E4D3E5ACD8851864ED09B02C77D2. La dosiero estas nomita poŝlampo, ESET-antivirusaj produktoj detektas ĝin kiel OSX/OceanLotus.D.

Kontraŭ-sencimiga kaj sablokesto-protekto

Kiel ĉiuj macOS OceanLotus binaroj, la specimeno estas pakita kun UPX, sed la plej multaj pakaĵidentigiloj ne rekonas ĝin kiel tia. Ĉi tio verŝajne estas ĉar ili plejparte enhavas subskribon dependantan de la ĉeesto de la "UPX" ĉeno, krome, Mach-O-subskriboj estas malpli oftaj kaj ne estas ĝisdatigitaj tiel ofte. Ĉi tiu funkcio malfaciligas senmovan detekton. Kurioze, post malpakado, la enirpunkto estas komence de la sekcio __cfstring en la segmento .TEXT. Ĉi tiu sekcio havas flagajn atributojn kiel montrite en la bildo sube.

OceanLotus: Malware ĝisdatigo por macOS
Figuro 1. MACH-O __cfstring-sekciaj atributoj

Kiel montrite en Figuro 2, la kodaj lokoj en la sekcio __cfstring permesas vin trompi iujn malmuntajn ilojn per montrado de kodo kiel ŝnuroj.

OceanLotus: Malware ĝisdatigo por macOS
Figuro 2. Malantaŭa kodo detektita de IDA kiel datumoj

Post kiam ekzekutita, la binaro kreas fadenon kiel kontraŭ-eraĉilo, kies sola celo estas kontinue kontroli la ĉeeston de erarserĉilo. Por ĉi tiu fluo:

— Provas malkroĉi ajnan erarserĉilon, vokante ptrace с PT_DENY_ATTACH kiel peta parametro
- Kontrolas ĉu iuj ekskluzivaj havenoj estas malfermitaj per vokado de funkcio task_get_exception_ports
- Kontrolas ĉu la erarserĉilo estas konektita, kiel montrite en la suba figuro, kontrolante la ĉeeston de la flago P_TRACED en la nuna procezo

OceanLotus: Malware ĝisdatigo por macOS
Figuro 3. Kontrolo de la erarĉimilo-konekto uzante la sysctl-funkcion

Se la gardohundo detektas la ĉeeston de erarserĉilo, la funkcio estas vokita exit. Aldone, la specimeno tiam kontrolas la medion rulante du komandojn:

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

La provaĵo tiam kontrolas la revenvaloron kontraŭ malmola kodita listo de ŝnuroj de konataj virtualigsistemoj: aklo, vmware, virtualabuloparaleloj. Fine, la sekva komando kontrolas ĉu la maŝino estas unu el la jenaj "MBP", "MBA", "MB", "MM", "IM", "MP" kaj "XS". Ĉi tiuj estas sistemaj modelkodoj, ekzemple, "MBP" signifas MacBook Pro, "MBA" signifas MacBook Air, ktp.

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

Ĉefaj aldonoj

Kvankam la malantaŭpordaj komandoj ne ŝanĝiĝis post la esplorado de Trend Micro, ni rimarkis kelkajn aliajn modifojn. La C&C-serviloj uzataj en ĉi tiu specimeno estas sufiĉe novaj kaj estis kreitaj la 22.10.2018/XNUMX/XNUMX.

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

La URL de la rimedo ŝanĝiĝis al /dp/B074WC4NHW/ref=gbps_img_m-9_62c3_750e6b35.
La unua pako sendita al la C&C-servilo enhavas pli da informoj pri la gastiga maŝino, inkluzive de ĉiuj datumoj kolektitaj de la komandoj en la suba tabelo.

OceanLotus: Malware ĝisdatigo por macOS

Krom ĉi tiu agorda ŝanĝo, la specimeno ne uzas bibliotekon por retfiltrado libcurl, sed ekstera biblioteko. Por trovi ĝin, la malantaŭa pordo provas malĉifri ĉiun dosieron en la nuna dosierujo uzante AES-256-CBC per la ŝlosilo gFjMXBgyXWULmVVVzyxy, plenigita per nuloj. Ĉiu dosiero estas deĉifrita kaj konservita kiel /tmp/store, kaj provo ŝargi ĝin kiel biblioteko estas farita uzante la funkcion dlopen. Kiam provo de deĉifrado rezultigas sukcesan vokon dlopen, la malantaŭa pordo ĉerpas eksportitajn funkciojn Boriry и ChadylonV, kiuj ŝajne respondecas pri retkomunikado kun la servilo. Ni ne havas la guton aŭ aliajn dosierojn el la origina loko de la specimeno, do ni ne povas analizi ĉi tiun bibliotekon. Krome, ĉar la komponanto estas ĉifrita, YARA-regulo bazita sur ĉi tiuj ŝnuroj ne kongruos kun la dosiero trovita sur disko.

Kiel priskribite en la supra artikolo, ĝi kreas klientoID. Ĉi tiu ID estas la MD5 hash de la revena valoro de unu el la sekvaj komandoj:

- 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}' (ricevu MAC-adreson)
- nekonata teamo ("x1ex72x0a"), kiu estas uzata en antaŭaj specimenoj

Antaŭ hashing, "0" aŭ "1" estas aldonita al la revenvaloro por indiki radikajn privilegiojn. Ĉi tio klientoID stokita en /Library/Storage/File System/HFS/25cf5d02-e50b-4288-870a-528d56c3cf6e/pivtoken.appex, se la kodo estas rulita kiel radiko aŭ en ~/Library/SmartCardsServices/Technology/PlugIns/drivers/snippets.ecgML en ĉiuj aliaj kazoj. La dosiero estas kutime kaŝita uzante la funkcion _chflags, ĝia tempomarko estas ŝanĝita per la komando touch –t kun hazarda valoro.

Malkodado de ŝnuroj

Kiel ĉe antaŭaj opcioj, la ĉenoj estas ĉifritaj per AES-256-CBC (deksesuma ŝlosilo: 9D7274AD7BCEF0DED29BDBB428C251DF8B350B92 plenigita kun nuloj, kaj IV plenigita per nuloj) tra la funkcio CCCrypt. La ŝlosilo ŝanĝiĝis de antaŭaj versioj, sed ĉar la grupo daŭre uzas la saman kordan ĉifrad-algoritmon, malĉifrado povas esti aŭtomatigita. Krom ĉi tiu afiŝo, ni publikigas IDA-skripton, kiu uzas la Hex-Rays API por deĉifri la ĉenojn ĉeestantajn en la binara dosiero. Ĉi tiu skripto povas helpi kun estonta analizo de OceanLotus kaj analizo de ekzistantaj specimenoj, kiujn ni ankoraŭ ne povis akiri. La skripto baziĝas sur universala metodo por ricevi argumentojn transdonitajn al funkcio. Aldone, ĝi serĉas parametrajn taskojn. La metodo povas esti reuzata por ricevi liston de funkcio-argumentoj kaj poste transdoni ĝin al la revokilo.

Konante la funkciprototipon malĉifri, la skripto trovas ĉiujn krucreferencojn al ĉi tiu funkcio, ĉiujn argumentojn, tiam deĉifras la datumojn kaj metas klartekston ene de komento ĉe la krucreferenca adreso. Por ke la skripto funkciu ĝuste, ĝi devas esti agordita al la kutima alfabeto uzata de la malkoda funkcio baza64, kaj tutmonda variablo devas esti difinita enhavanta la longon de la ŝlosilo (ĉi-kaze DWORD, vidu Figuro 4).

OceanLotus: Malware ĝisdatigo por macOS
Figuro 4. Difino de la tutmonda variablo key_len

En la Funkcia fenestro, vi povas dekstre alklaki la deĉifradan funkcion kaj alklaki "Eltiri kaj malĉifri argumentojn." La skripto devus meti la deĉifritajn liniojn en komentojn, kiel montrite en Figuro 5.

OceanLotus: Malware ĝisdatigo por macOS
Figuro 5. La malĉifrita teksto estas metita en la komentojn

Tiel la deĉifritaj ŝnuroj estas oportune kunmetitaj en la IDA fenestro ksrefs por ĉi tiu funkcio kiel montrite en Figuro 6.

OceanLotus: Malware ĝisdatigo por macOS
Figuro 6. Xrefs al f_decrypt funkcio

La fina skripto troveblas ĉe Github-deponejo.

konkludo

Kiel jam menciite, OceanLotus konstante plibonigas kaj ĝisdatigas sian ilaron. Ĉi-foje, la cibergrupo plibonigis la malware por labori kun Mac-uzantoj. La kodo ne multe ŝanĝiĝis, sed ĉar multaj Mac-uzantoj ignoras sekurecajn produktojn, protekti malbonware kontraŭ detekto estas de duaranga graveco.

ESET-produktoj jam detektis ĉi tiun dosieron dum la esploro. Ĉar la retbiblioteko uzata por C&C komunikado nun estas ĉifrita sur disko, la preciza retprotokolo uzata de la atakantoj ankoraŭ ne estas konata.

Indikiloj de kompromiso

Indikiloj de kompromiso same kiel MITRE ATT&CK-atributoj estas ankaŭ haveblaj sur GitHub.

fonto: www.habr.com

Aldoni komenton