OceanLotus: malware-update voor macOS

In maart 2019 werd een nieuw voorbeeld van macOS-malware van de cybergroep OceanLotus geüpload naar VirusTotal, een populaire online scanservice. Het uitvoerbare achterdeurbestand heeft dezelfde mogelijkheden als de vorige versie van de macOS-malware die we hebben onderzocht, maar de structuur is veranderd en moeilijker te detecteren geworden. Helaas konden we geen druppelaar vinden die bij dit monster hoort, dus we kennen de infectievector nog niet.

Wij hebben onlangs gepubliceerd bericht over OceanLotus en hoe operators doorzettingsvermogen proberen te bieden, de uitvoering van code versnellen en de footprint op Windows-systemen minimaliseren. Ook is bekend dat deze cybergroep ook een component voor macOS heeft. Dit bericht beschrijft de wijzigingen in de nieuwste versie van de malware voor macOS in vergelijking met de vorige versie (beschreven door Trend Micro), en beschrijft ook hoe u de decodering van tekenreeksen tijdens analyse kunt automatiseren met behulp van de IDA Hex-Rays API.

OceanLotus: malware-update voor macOS

Analyse

De volgende drie delen beschrijven de analyse van een monster met een SHA-1-hash E615632C9998E4D3E5ACD8851864ED09B02C77D2. Het bestand wordt genoemd zaklamp, detecteren ESET-antivirusproducten het als OSX/OceanLotus.D.

Anti-foutopsporing en sandbox-bescherming

Zoals alle binaire bestanden van macOS OceanLotus is het voorbeeld verpakt met UPX, maar de meeste identificatietools voor verpakkers herkennen het niet als zodanig. Dit komt waarschijnlijk omdat ze meestal een handtekening bevatten die afhankelijk is van de aanwezigheid van de “UPX”-reeks. Bovendien komen Mach-O-handtekeningen minder vaak voor en worden ze niet zo vaak bijgewerkt. Deze functie maakt statische detectie moeilijk. Interessant is dat het toegangspunt na het uitpakken zich aan het begin van de sectie bevindt __cfstring in het segment .TEXT. Deze sectie heeft vlagattributen zoals weergegeven in de onderstaande afbeelding.

OceanLotus: malware-update voor macOS
Figuur 1. MACH-O __cfstring sectie-attributen

Zoals weergegeven in figuur 2, zijn de codelocaties in de sectie __cfstring Hiermee kunt u een aantal demontagetools misleiden door code als tekenreeksen weer te geven.

OceanLotus: malware-update voor macOS
Figuur 2. Achterdeurcode gedetecteerd door IDA als gegevens

Eenmaal uitgevoerd, creëert het binaire bestand een thread als anti-debugger, waarvan het enige doel is om voortdurend te controleren op de aanwezigheid van een debugger. Voor deze stroom:

— Probeert een debugger los te maken door te bellen ptrace с PT_DENY_ATTACH als verzoekparameter
- Controleert of sommige exclusieve poorten open zijn door een functie aan te roepen task_get_exception_ports
- Controleert of de debugger is aangesloten, zoals weergegeven in de onderstaande afbeelding, door de aanwezigheid van de vlag te controleren P_TRACED in het huidige proces

OceanLotus: malware-update voor macOS
Figuur 3. De debugger-verbinding controleren met behulp van de sysctl-functie

Als de watchdog de aanwezigheid van een debugger detecteert, wordt de functie aangeroepen exit. Bovendien controleert het voorbeeld vervolgens de omgeving door twee opdrachten uit te voeren:

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

Het voorbeeld controleert vervolgens de geretourneerde waarde aan de hand van een hardgecodeerde lijst met tekenreeksen van bekende virtualisatiesystemen: akel, vmware, virtualbox of parallellen. Ten slotte controleert het volgende commando of de machine een van de volgende “MBP”, “MBA”, “MB”, “MM”, “IM”, “MP” en “XS” is. Dit zijn systeemmodelcodes, bijvoorbeeld: 'MBP' betekent MacBook Pro, 'MBA' betekent MacBook Air, enz.

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

Basis toevoegingen

Hoewel de achterdeurcommando's sinds het onderzoek van Trend Micro niet zijn veranderd, hebben we wel een paar andere wijzigingen opgemerkt. De C&C-servers die in dit voorbeeld worden gebruikt, zijn vrij nieuw en zijn gemaakt op 22.10.2018-XNUMX-XNUMX.

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

De bron-URL is gewijzigd in /dp/B074WC4NHW/ref=gbps_img_m-9_62c3_750e6b35.
Het eerste pakket dat naar de C&C-server wordt verzonden, bevat meer informatie over de hostmachine, inclusief alle gegevens die zijn verzameld door de opdrachten in de onderstaande tabel.

OceanLotus: malware-update voor macOS

Naast deze configuratiewijziging maakt het voorbeeld geen gebruik van een bibliotheek voor netwerkfiltering libkrull, maar een externe bibliotheek. Om het te vinden, probeert de achterdeur elk bestand in de huidige map te decoderen met behulp van AES-256-CBC met de sleutel gFjMXBgyXWULmVVVzyxy, opgevuld met nullen. Elk bestand wordt gedecodeerd en opgeslagen als /tmp/store, en er wordt geprobeerd het als bibliotheek te laden met behulp van de functie dlopen. Wanneer een decoderingspoging resulteert in een succesvolle oproep dlopen, extraheert de achterdeur geëxporteerde functies Boriry и ChadylonV, die blijkbaar verantwoordelijk zijn voor de netwerkcommunicatie met de server. We hebben de dropper of andere bestanden van de oorspronkelijke locatie van het voorbeeld niet, dus we kunnen deze bibliotheek niet parseren. Omdat de component gecodeerd is, zal een YARA-regel op basis van deze strings bovendien niet overeenkomen met het bestand dat op schijf wordt gevonden.

Zoals beschreven in het bovenstaande artikel, creëert het klant identificatie. Deze ID is de MD5-hash van de geretourneerde waarde van een van de volgende opdrachten:

- 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}' (haal MAC-adres op)
- onbekend team ("x1ex72x0a"), die in eerdere voorbeelden werd gebruikt

Vóór het hashen wordt een "0" of "1" toegevoegd aan de geretourneerde waarde om root-rechten aan te geven. Dit klant identificatie opgeslagen in /Library/Storage/File System/HFS/25cf5d02-e50b-4288-870a-528d56c3cf6e/pivtoken.appex, als de code wordt uitgevoerd als root of in ~/Library/SmartCardsServices/Technology/PlugIns/drivers/snippets.ecgML in alle andere gevallen. Het bestand wordt meestal verborgen met behulp van de functie _chflags, wordt de tijdstempel gewijzigd met behulp van de opdracht touch –t met een willekeurige waarde.

Tekenreeksen decoderen

Net als bij eerdere opties worden de tekenreeksen gecodeerd met AES-256-CBC (hexadecimale sleutel: 9D7274AD7BCEF0DED29BDBB428C251DF8B350B92 opgevuld met nullen en IV gevuld met nullen) via de functie CCCcrypt. De sleutel is gewijzigd ten opzichte van eerdere versies, maar omdat de groep nog steeds hetzelfde string-encryptie-algoritme gebruikt, kan de decryptie worden geautomatiseerd. Naast dit bericht brengen we een IDA-script uit dat de Hex-Rays API gebruikt om de tekenreeksen in het binaire bestand te decoderen. Dit script kan helpen bij toekomstige analyse van OceanLotus en analyse van bestaande monsters die we nog niet hebben kunnen verkrijgen. Het script is gebaseerd op een universele methode voor het ontvangen van argumenten die aan een functie worden doorgegeven. Bovendien zoekt het parametertoewijzingen op. De methode kan opnieuw worden gebruikt om een ​​lijst met functieargumenten op te halen en deze vervolgens door te geven aan de callback.

Het functieprototype kennen decoderen, vindt het script alle kruisverwijzingen naar deze functie en alle argumenten, decodeert vervolgens de gegevens en plaatst platte tekst in een opmerking op het kruisverwijzingsadres. Om het script correct te laten werken, moet het worden ingesteld op het aangepaste alfabet dat wordt gebruikt door de base64-decoderingsfunctie, en moet er een globale variabele worden gedefinieerd die de lengte van de sleutel bevat (in dit geval een DWORD, zie Figuur 4).

OceanLotus: malware-update voor macOS
Figuur 4. Definitie van de globale variabele key_len

In het Functievenster kunt u met de rechtermuisknop op de decoderingsfunctie klikken en op 'Argumenten extraheren en decoderen' klikken. Het script moet de gedecodeerde regels in commentaar plaatsen, zoals weergegeven in Figuur 5.

OceanLotus: malware-update voor macOS
Figuur 5. De gedecodeerde tekst wordt in het commentaar geplaatst

Op deze manier worden de gedecodeerde strings handig bij elkaar geplaatst in het IDA-venster referentietekeningen voor deze functie, zoals weergegeven in Figuur 6.

OceanLotus: malware-update voor macOS
Figuur 6. Xrefs naar f_decrypt-functie

Het definitieve script is te vinden op Github-repository.

Uitgang

Zoals reeds vermeld, is OceanLotus voortdurend bezig met het verbeteren en bijwerken van zijn toolkit. Deze keer heeft de cybergroep de malware verbeterd zodat deze met Mac-gebruikers kan werken. De code is niet veel veranderd, maar omdat veel Mac-gebruikers beveiligingsproducten negeren, is het beschermen van malware tegen detectie van secundair belang.

ESET-producten detecteerden dit bestand al op het moment van onderzoek. Omdat de netwerkbibliotheek die wordt gebruikt voor C&C-communicatie nu op schijf is gecodeerd, is het exacte netwerkprotocol dat door de aanvallers wordt gebruikt nog niet bekend.

Indicatoren van compromis

Indicatoren van compromissen en MITRE ATT&CK-attributen zijn ook beschikbaar op GitHub.

Bron: www.habr.com

Voeg een reactie