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
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ë.
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.
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
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.
Përveç këtij ndryshimi të konfigurimit, mostra nuk përdor një bibliotekë për filtrimin e rrjetit 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
, 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 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
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).
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.
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.
Figura 6. Funksioni Xrefs për f_decrypt
Skriptin përfundimtar mund ta gjeni në
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ë
Burimi: www.habr.com