OceanLotus: përditësimi i malware për macOS

Në mars 2019, në VirusTotal, shërbimi popullor online për skanimin, u ngarkua një mostër e re e malware për macOS nga grupi kibernetik OceanLotus. Skedari ekzekutues i backdoor-it ka të njëjtat mundësi si versioni i mëparshëm i malware për macOS që kemi studiuar, por struktura e tij është ndryshuar dhe tani është më e vështirë të zbulohet. Fatkeqësisht, ne nuk arritëm të gjejmë dropper-in e lidhur me këtë mostër, prandaj për momentin nuk e dimë vektorin e infektimit.

SĂ« fundmi publikuan njĂ« postim mbi OceanLotus dhe si operatorĂ«t pĂ«rpiqen tĂ« sigurojnĂ« qĂ«ndrueshmĂ«rinĂ«, tĂ« pĂ«rshpejtojnĂ« ekzekutimin e kodit dhe tĂ« minimizojnĂ« gjurmĂ«t e pranisĂ« nĂ« sistemet Windows. ËshtĂ« e njohur gjithashtu se ky grup kibernetik ka njĂ« komponent pĂ«r macOS. NĂ« kĂ«tĂ« postim pĂ«rshkruhen nĂ« detaje ndryshimet nĂ« versionin mĂ« tĂ« ri tĂ« malware pĂ«r macOS nĂ« krahasim me variantin e mĂ«parshĂ«m (tĂ« pĂ«rshkruar nga Trend Micro), si dhe tregohet se si gjatĂ« analizĂ«s mund tĂ« automatizohet dekodimi i vargjeve me anĂ« tĂ« IDA Hex-Rays API.

OceanLotus: përditësimi i malware për macOS

Analiza

Në tri pjesët e ardhshme përshkruhet analiza e mostrës me hash SHA-1 E615632C9998E4D3E5ACD8851864ED09B02C77D2. Skedari quhet flashlightd, produktet antivirus ESET e detektojnë atë si OSX/OceanLotus.D.

Antidebugging dhe mbrojtja nga sandbox

Si tĂ« gjitha binarĂ«t e macOS tĂ« OceanLotus, mostra Ă«shtĂ« e paketuar me UPX, por shumica e mjeteve tĂ« identifikimit tĂ« paketuesve nuk e njohin atĂ« si tĂ« tillĂ«. Ndoshta, sepse ato kryesisht pĂ«rmbajnĂ« njĂ« nĂ«nshkrim qĂ« varet nga prania e vargut “UPX”, pĂ«rveç kĂ«saj, nĂ«nshkrimet Mach-O hasen mĂ« rrallĂ« dhe nuk pĂ«rditĂ«sohen aq shpesh. Kjo veçori e bĂ«n tĂ« vĂ«shtirĂ« zbulimin statik. ËshtĂ« interesante se pas shpĂ«rbĂ«rjes, pika e hyrjes ndodhet nĂ« fillim tĂ« seksionit __cfstring nĂ« segmentin .TEXT. NĂ« kĂ«tĂ« seksion ka atribute flag, siç tregohet nĂ« figurĂ«n mĂ« poshtĂ«.

OceanLotus: përditësimi i malware për macOS
Figura 1. Atributet e seksionit MACH-O __cfstring

Siç tregohet në figurën 2, vendosjet e kodit në seksionin __cfstring lejojnë mashtrimin e disa mjeteve të disasembler-it, duke e paraqitur kodin si vargje.

OceanLotus: përditësimi i malware për macOS
Figura 2. Kodi i backdoor-it identifikohet nga IDA si të dhëna

Pas ekzekutimit, skedari binar krijon një ffushë si mjet mbrojtjeje nga debugging, qëllimi i vetëm i të cilit është të kontrollojë vazhdimisht prania e ndonjë debugger-i. Për këtë, ffusha:

— PĂ«rdor pĂ«r tĂ« shkĂ«putur çdo debugger duke thirrur ptrace me PT_DENY_ATTACH si parametĂ«r kĂ«rkese
— Kontrollon nĂ«se disa porta pĂ«rjashtimi janĂ« tĂ« hapura, duke thirrur funksionin task_get_exception_ports
— Kontrollon nĂ«se debugguer-i Ă«shtĂ« i lidhur, siç tregohet nĂ« figurĂ«n mĂ« poshtĂ«, duke kontrolluar praninĂ« e flags P_TRACED nĂ« procesin aktual

OceanLotus: përditësimi i malware për macOS
Figura 3. Kontrolli i lidhjes së debugguer-it përmes funksionit sysctl

Nëse skema e mbikëqyrjes zb discovers praninë e debugguer-it, thirret funksioni exit. Përveç kësaj, modeli kontrollon mjedisin duke ekzekutuar dy urdhra:

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

MĂ« pas modeli kontrollon vlerĂ«n e kthyer sipas njĂ« liste tĂ« parametrave tĂ« koduar tĂ« sistemeve tĂ« njohura tĂ« virtualizimit: acle, vmware, virtualbox ose parallels. SĂ« fundi, komanda e mĂ«poshtme kontrollon nĂ«se makina Ă«shtĂ« njĂ« nga kĂ«to "MBP", "MBA", "MB", "MM", "IM", "MP" dhe "XS". KĂ«to janĂ« kodet e modeleve tĂ« sistemit, pĂ«r shembull, "MBP" do tĂ« thotĂ« MacBook Pro, "MBA" – MacBook Air, etj.

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

Shtesat kryesore

Megjithëse komandat e backdoor-it nuk janë ndryshuar që nga studimi i Trend Micro, ne kemi vënë re disa modifikime të tjera. Serverët C&C të përdorur në këtë model janë mjaft të rinj, data e krijimit të tyre është 22.10.2018.

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

Burimi URL ka ndryshuar në /dp/B074WC4NHW/ref=gbps_img_m-9_62c3_750e6b35.
Pakoja e parë e dërguar në serverin C&C përmban më shumë informacion rreth makinës host, përfshirë të dhënat të gjitha që janë mbledhur nga komandat në tabelën më poshtë.

OceanLotus: përditësimi i malware për macOS

PĂ«rveç kĂ«saj, ndryshimet nĂ« konfiguracion, modeli pĂ«rdor pĂ«r filtrimin rrjetor jo bibliotekĂ«n libcurl, por njĂ« bibliotekĂ« tĂ« jashtme. PĂ«r ta gjetur, backdoor-i pĂ«rpiqet tĂ« dekodojĂ« çdo skedar nĂ« katalogun aktual duke pĂ«rdorur AES-256-CBC me tastin gFjMXBgyXWULmVVVzyxy, i plotĂ«suar me zeros. Çdo skedar dekodohet dhe ruhet si /tmp/store, dhe pĂ«rpjekja pĂ«r ta ngarkuar si bibliotekĂ« Ă«shtĂ« bĂ«rĂ« duke pĂ«rdorur funksionin dlopen. Kur pĂ«rpjekja pĂ«r dekodimin çon nĂ« njĂ« thirrje tĂ« suksesshme dlopen, backdoor-i nxjerr funksionet e eksportuara Boriry dhe ChadylonV, tĂ« cilat duket se janĂ« pĂ«rgjegjĂ«se pĂ«r ndĂ«rveprimin rrjetor me serverin. Nuk kemi dropper-in ose skedarĂ« tĂ« tjerĂ« nga vendndodhja fillestare e modelit, kĂ«shtu qĂ« nuk mund tĂ« analizojmĂ« kĂ«tĂ« bibliotekĂ«. PĂ«r mĂ« tepĂ«r, pasi komponenti Ă«shtĂ« i koduar, rregulli YARA i bazuar nĂ« kĂ«to rreshta nuk do tĂ« pĂ«rputhet me skedarin e gjetur nĂ« disk.

Siç është përshkruar në artikullin e mësipërm, krijohet cliendIDKy ky identifikues është një hash MD5 i vlerës së kthyer nga një nga komandat e mëposhtme:

— 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}' (merrni adresĂ«n MAC)
— komandĂ« e panjohur (“x1ex72x0a“), e cila pĂ«rdoret nĂ« shembujt e mĂ«parshĂ«m

Para hashimit, njĂ« karakter “0” ose “1” shtohet vlerĂ«s sĂ« kthyer, i cili tregon nĂ«se ka privilegje root. Ky clientID ruhet nĂ« /Library/Storage/File System/HFS/25cf5d02-e50b-4288-870a-528d56c3cf6e/pivtoken.appex, nĂ«se kodi Ă«shtĂ« ekzekutuar nga root ose nĂ« ~/Library/SmartCardsServices/Technology/PlugIns/drivers/snippets.ecgML nĂ« tĂ« gjitha rastet e tjera. Skedari zakonisht fshehet me funksionin _chflags, marka e tij e kohĂ«s ndryshohet me komandĂ«n touch -t me njĂ« vlerĂ« tĂ« rastĂ«sishme.

Dekriptimi i vargjeve

Si nĂ« variantet e mĂ«parshme, vargjet janĂ« enkriptuar duke pĂ«rdorur AES-256-CBC (çelĂ«si hex: 9D7274AD7BCEF0DED29BDBB428C251DF8B350B92 i plotĂ«suar me zero, dhe IV e mbushur me zero) pĂ«rmes funksionit CCCrypt. ÇelĂ«si Ă«shtĂ« ndryshuar krahasuar me versionet e mĂ«parshme, por, pĂ«r shkak se grupi akoma pĂ«rdor tĂ« njĂ«jtin algoritĂ«m tĂ« enkriptimit tĂ« vargjeve, dekriptimi mund tĂ« automatizohet. PĂ«rveç kĂ«tij postimi, ne lĂ«shojmĂ« njĂ« skenar IDA qĂ« pĂ«rdor API-nĂ« Hex-Rays pĂ«r dekriptimin e vargjeve qĂ« janĂ« tĂ« pranishme nĂ« skedarin binar. Ky skenar mund tĂ« ndihmojĂ« nĂ« analizĂ«n e ardhshme tĂ« OceanLotus dhe analizĂ«n e mostravave ekzistuese, tĂ« cilat nuk kemi arritur ende t'i marrim. NĂ« themel tĂ« skenarit Ă«shtĂ« njĂ« metodĂ« universale pĂ«r marrjen e argumenteve tĂ« dĂ«rguara nĂ« funksion. PĂ«r mĂ« tepĂ«r, ai kĂ«rkon emrat e parametrave. Metoda mund tĂ« pĂ«rdoret sĂ«rish pĂ«r tĂ« marrĂ« njĂ« listĂ« tĂ« argumenteve tĂ« funksionit dhe pastaj t’i kaloni nĂ« njĂ« thirrje prapa (callback).

Duke ditur prototipin e funksionit decrypt, skenari gjen të gjitha lidhjet e kryqëzuara në këtë funksion, të gjitha argumentet, pastaj dekriptimon të dhënat dhe vendos tekstin e thjeshtë brenda një komenti në adresën e lidhjes kryqëzuese. Për të funksionuar si duhet, skenari duhet të ketë një alfabet të personalizuar që përdoret nga funksioni i dekodimit base64, dhe duhet të jetë e përcaktuar një variabël globale që përmban gjatësinë e çelësit (në këtë rast DWORD, shih figurën 4).

OceanLotus: përditësimi i malware për macOS
Figura 4. Përcaktimi i variablës globale key_len

Në dritaren e Funksionit, mund të thirret me klikim të djathtë funksi i dekriptimit dhe të zgjidhet «Nxirr dhe dekripto argumentet». Skripti duhet të vendosë stringjet e dekriptuara në komente, siç tregohet në figurën 5.

OceanLotus: përditësimi i malware për macOS
Figura 5. Teksti i dekriptuar është vendosur në komente

Kështu, stringjet e dekriptuara vendosen lehtësisht së bashku në dritaren IDA xrefs për këtë funksion, siç tregohet në figurën 6.

OceanLotus: përditësimi i malware për macOS
Figura 6. Xrefs për funksionin f_decrypt

Versioni përfundimtar i skriptit mund të gjendet në Github repository.

Përfundimi

Siç u tha tashmë, OceanLotus vazhdon të përmirësojë dhe të azhurnojë grupin e saj të mjeteve. Këtë herë, grupi kibernetik ka përmirësuar malware-n për përdoruesit e Mac. Kodi nuk ka pësuar shumë ndryshime, por, pasi shumë përdorues të Mac injorojnë produktet e sigurisë, mbrojtja e malware nga zbulimi ka rëndësi të dytë.

Produktet ESET tashmë kishin detektuar këtë skedar në momentin e hetimit. Meqenëse biblioteka rrjetësore e përdorur për komunikimin C&C tani është e enkriptuar në disk, protokolli i saktë rrjetësor i përdorur nga sulmuesit mbetet ende i panjohur.

Të dhëna të komprometimit

Të dhëna të komprometimit, si dhe atributet MITRE ATT&CK janë gjithashtu të disponueshme në GitHub.

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster