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

Në mars 2019, një mostër e re e malware macOS nga grupi kibernetik OceanLotus u ngarkua në VirusTotal, një shërbim popullor skanimi në internet. Skedari i ekzekutueshëm i backdoor ka të njëjtat aftësi si versioni i mëparshëm i malware macOS që kemi studiuar, por struktura e tij ka ndryshuar dhe është bërë më i vështirë për t'u zbuluar. Fatkeqësisht, nuk mundëm të gjenim një pikatore të lidhur me këtë mostër, kështu që nuk e dimë ende vektorin e infeksionit.

Së fundmi kemi publikuar postim për OceanLotus dhe se si operatorët po përpiqen të ofrojnë qëndrueshmëri, të përshpejtojnë ekzekutimin e kodit dhe të minimizojnë gjurmën në sistemet Windows. Dihet gjithashtu se ky grup kibernetik ka edhe një komponent për macOS. Ky postim detajon ndryshimet në versionin më të ri të malware për macOS në krahasim me versionin e mëparshëm (përshkruar nga Trend Micro), dhe përshkruan gjithashtu se si mund të automatizoni deshifrimin e vargjeve gjatë analizës duke përdorur API-në Hex-Rays IDA.

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

Analizë

Tre pjesët e ardhshme përshkruajnë analizën e një kampioni me një hash SHA-1 E615632C9998E4D3E5ACD8851864ED09B02C77D2. Skedari quhet elektrik dore, produktet antivirus ESET e zbulojnë atë si OSX/OceanLotus.D.

Mbrojtje kundër korrigjimit dhe sandbox

Ashtu si të gjithë binarët macOS OceanLotus, mostra është e paketuar me UPX, por shumica e mjeteve të identifikimit të paketuesit nuk e njohin atë si të tillë. Kjo është ndoshta sepse ato kryesisht përmbajnë një nënshkrim që varet nga prania e vargut "UPX", përveç kësaj, nënshkrimet Mach-O janë më pak të zakonshme dhe nuk përditësohen aq shpesh. Kjo veçori e bën të vështirë zbulimin statik. Është interesante se pas shpaketimit, pika e hyrjes është në fillim të seksionit __cfstring në segment .TEXT. Ky seksion ka atribute flamuri siç tregohet në imazhin 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, vendndodhjet e kodit në seksion __cfstring ju lejon të mashtroni disa mjete çmontimi duke shfaqur kodin si vargje.

OceanLotus: Përditësimi i malware për macOS
Figura 2. Kodi i Backdoor i zbuluar nga IDA si të dhëna

Pasi të ekzekutohet, binar krijon një thread si një anti-debugger qëllimi i vetëm i të cilit është të kontrollojë vazhdimisht praninë e një korrigjuesi. Për këtë rrjedhë:

— Përpiqet të heqë ndonjë korrigjues, duke telefonuar ptrace с PT_DENY_ATTACH si parametër i kërkesës
- Kontrollon nëse disa porte ekskluzive janë të hapura duke thirrur një funksion task_get_exception_ports
- Kontrollon nëse korrigjuesi është i lidhur, siç tregohet në figurën më poshtë, duke kontrolluar praninë e flamurit P_TRACED në procesin aktual

OceanLotus: Përditësimi i malware për macOS
Figura 3. Kontrollimi i lidhjes së korrigjuesit duke përdorur funksionin sysctl

Nëse mbikëqyrësi zbulon praninë e një korrigjuesi, thirret funksioni exit. Për më tepër, mostra më pas kontrollon mjedisin duke ekzekutuar dy komanda:

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

Mostra më pas kontrollon vlerën e kthyer kundrejt një liste të koduar të vargjeve nga sistemet e njohura të virtualizimit: acle, vmware, VirtualBox ose paralele. Më në fund, komanda tjetër kontrollon nëse makina është një nga "MBP", "MBA", "MB", "MM", "IM", "MP" dhe "XS". Këto janë kode të modelit të sistemit, për shembull, "MBP" do të thotë MacBook Pro, "MBA" do të thotë MacBook Air, etj.

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

Shtesat kryesore

Ndërkohë që komandat e pasme nuk kanë ndryshuar që nga hulumtimi i Trend Micro, ne vumë re disa modifikime të tjera. Serverët C&C të përdorura në këtë mostër janë mjaft të rinj dhe u krijuan më 22.10.2018.

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

URL-ja e burimit ka ndryshuar në /dp/B074WC4NHW/ref=gbps_img_m-9_62c3_750e6b35.
Paketa e parë e dërguar te serveri C&C përmban më shumë informacion rreth makinës pritëse, duke përfshirë të gjitha të dhënat e mbledhura nga komandat në tabelën e mëposhtme.

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

Përveç këtij ndryshimi të konfigurimit, mostra nuk përdor një bibliotekë për filtrimin e rrjetit libcurl, por një bibliotekë e jashtme. Për ta gjetur atë, porta e pasme përpiqet të deshifrojë çdo skedar në drejtorinë aktuale duke përdorur AES-256-CBC me çelësin gFjMXBgyXWULmVVVzyxy, i mbushur me zero. Çdo skedar deshifrohet dhe ruhet si /tmp/store, dhe një përpjekje për ta ngarkuar atë si një bibliotekë bëhet duke përdorur funksionin dlopen. Kur një përpjekje për deshifrim rezulton në një telefonatë të suksesshme dlopen, backdoor nxjerr funksionet e eksportuara Boriry и ChadylonV, të cilat me sa duket janë përgjegjëse për komunikimin në rrjet me serverin. Ne nuk kemi pikatore ose skedarë të tjerë nga vendndodhja origjinale e mostrës, kështu që nuk mund ta analizojmë këtë bibliotekë. Për më tepër, duke qenë se komponenti është i koduar, një rregull YARA i bazuar në këto vargje nuk do të përputhet me skedarin e gjetur në disk.

Siç përshkruhet në artikullin e mësipërm, ajo krijon ID e klientit. Ky ID është hash MD5 i vlerës së kthyer të njërës prej komandave të 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}' (merr adresën MAC)
- ekip i panjohur ("x1ex72x0a"), e cila është përdorur në mostrat e mëparshme

Para hashimit, një "0" ose "1" i shtohet vlerës së kthimit për të treguar privilegjet e rrënjës. Kjo klientID të ruajtura në /Library/Storage/File System/HFS/25cf5d02-e50b-4288-870a-528d56c3cf6e/pivtoken.appex, nëse kodi ekzekutohet si rrënjë ose në ~/Library/SmartCardsServices/Technology/PlugIns/drivers/snippets.ecgML në të gjitha rastet e tjera. Skedari zakonisht fshihet duke përdorur funksionin _chflamuj, stampa e saj kohore ndryshohet duke përdorur komandën touch –t me një vlerë të rastësishme.

Dekodimi i vargjeve

Ashtu si me opsionet e mëparshme, vargjet janë të koduara duke përdorur AES-256-CBC (çelës heksadecimal: 9D7274AD7BCEF0DED29BDBB428C251DF8B350B92 i mbushur me zero dhe IV i mbushur me zero) përmes funksionit CCCcrypt. Çelësi ka ndryshuar nga versionet e mëparshme, por duke qenë se grupi ende përdor të njëjtin algoritëm të enkriptimit të vargut, deshifrimi mund të automatizohet. Përveç këtij postimi, ne po lëshojmë një skript IDA që përdor API-në Hex-Rays për të deshifruar vargjet e pranishme në skedarin binar. Ky skenar mund të ndihmojë me analizën e ardhshme të OceanLotus dhe analizën e mostrave ekzistuese që ne nuk kemi arritur ende t'i marrim. Skripti bazohet në një metodë universale për marrjen e argumenteve të kaluara në një funksion. Për më tepër, ai shikon caktimet e parametrave. Metoda mund të ripërdoret për të marrë një listë të argumenteve të funksionit dhe më pas ta kalojë atë në kthimin e thirrjes.

Njohja e prototipit të funksionit decrypt, skripti gjen të gjitha referencat e kryqëzuara për këtë funksion, të gjitha argumentet, më pas deshifron të dhënat dhe vendos tekstin e thjeshtë brenda një komenti në adresën e referencës së kryqëzuar. Që skripti të funksionojë siç duhet, ai duhet të vendoset në alfabetin e personalizuar të përdorur nga funksioni i dekodimit base64 dhe duhet të përcaktohet një variabël global që përmban gjatësinë e çelësit (në këtë rast një DWORD, shih Figurën 4).

OceanLotus: Përditësimi i malware për macOS
Figura 4. Përkufizimi i ndryshores globale key_len

Në dritaren e Funksionit, mund të klikoni me të djathtën mbi funksionin e deshifrimit dhe të klikoni "Nxjerrja dhe deshifrimi i argumenteve". Skripti duhet të vendosë linjat e deshifruara në komente, siç tregohet në Figurën 5.

OceanLotus: Përditësimi i malware për macOS
Figura 5. Teksti i deshifruar vendoset në komente

Në këtë mënyrë vargjet e deshifruara vendosen 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. Funksioni Xrefs për f_decrypt

Skriptin përfundimtar mund ta gjeni në Reparti i Github.

Prodhim

Siç është përmendur tashmë, OceanLotus po përmirëson dhe përditëson vazhdimisht paketën e veglave. Këtë herë, grupi kibernetik ka përmirësuar malware për të punuar me përdoruesit e Mac. Kodi nuk ka ndryshuar shumë, por meqenëse shumë përdorues të Mac injorojnë produktet e sigurisë, mbrojtja e malware nga zbulimi është e një rëndësie dytësore.

Produktet ESET po e zbulonin tashmë këtë skedar në kohën e kërkimit. Për shkak se biblioteka e rrjetit e përdorur për komunikimin C&C tani është e koduar në disk, protokolli i saktë i rrjetit i përdorur nga sulmuesit nuk dihet ende.

treguesit e kompromisit

Treguesit e kompromisit si dhe atributet MITER ATT&CK janë gjithashtu të disponueshme në GitHub.

Burimi: www.habr.com

Shto një koment