Im MĂ€rz 2019 wurde in VirusTotal, einem beliebten Online-Scan-Service, ein neues Muster von Malware fĂŒr macOS der Cybergruppe OceanLotus hochgeladen. Die ausfĂŒhrbare Datei des Backdoors hat die gleichen Funktionen wie die zuvor von uns untersuchte Version der Malware fĂŒr macOS, aber ihre Struktur hat sich geĂ€ndert und sie ist schwerer zu erkennen. Leider konnten wir den Dropper, der mit diesem Muster verbunden ist, nicht finden, sodass wir bisher den Infektionsvektor nicht kennen.
KĂŒrzlich haben wir einen und darĂŒber, wie die Betreiber versuchen, Persistenz zu gewĂ€hrleisten, die CodeausfĂŒhrung zu beschleunigen und die Spuren in Windows-Systemen zu minimieren. Es ist auch bekannt, dass diese Cybergruppe ein Component fĂŒr macOS hat. In diesem Beitrag werden die Ănderungen der neuesten Version der Malware fĂŒr macOS im Vergleich zur vorherigen Version (), sowie erlĂ€utert, wie bei der Analyse die Dekodierung von Strings mithilfe der IDA Hex-Rays API automatisiert werden kann.

Analyse
In den nĂ€chsten drei Abschnitten wird die Analyse des Musters mit dem SHA-1-Hash E615632C9998E4D3E5ACD8851864ED09B02C77D2beschrieben. Die Datei heiĂt flashlightd, die Antivirenprodukte von ESET erkennen sie als OSX/OceanLotus.D.
Anti-Debugging und Sandbox-Schutz
Wie alle macOS-BinÀrdateien von OceanLotus ist das Muster mit UPX verpackt, aber die meisten Packungskennungstools erkennen es nicht als solches. Wahrscheinlich, weil sie hauptsÀchlich eine Signatur enthalten, die von der PrÀsenz der Zeichenfolge 'UPX' abhÀngt, zudem sind Mach-O-Signaturen seltener und werden nicht so hÀufig aktualisiert. Dieses Merkmal macht die statische Erkennung schwierig. Interessanterweise befindet sich nach dem Entpacken der Einstiegspunkt am Anfang des Abschnitts __cfstring im Segment .TEXT. In diesem Abschnitt gibt es die Attribute flag, wie in der untenstehenden Abbildung gezeigt.

Abbildung 1. Attribute des MACH-O Abschnitts __cfstring
Wie in Abbildung 2 zu sehen ist, ermöglicht die Positionierung des Codes im Abschnitt __cfstring Manche Disassembler zu tÀuschen, indem sie den Code als Strings anzeigen.

Abbildung 2. Der Code des Backdoors wird von IDA als Daten identifiziert.
Nach dem Start erstellt die BinĂ€rdatei einen Thread als SchutzmaĂnahme gegen Debugger, dessen einzige Aufgabe es ist, stĂ€ndig nach einem Debugger zu suchen. Zu diesem Zweck
versucht es, jeden Debugger zu trennen, indem es ptrace c PT_DENY_ATTACH als Parameter fĂŒr die Anfrage verwendet.
Es ĂŒberprĂŒft, ob einige Ausnahmeports geöffnet sind, indem es die Funktion task_get_exception_ports
â ĂberprĂŒft, ob der Debugger verbunden ist, wie in der Abbildung unten dargestellt, indem das Vorhandensein eines Flags ĂŒberprĂŒft wird P_TRACED im aktuellen Prozess

Abbildung 3. ĂberprĂŒfung der Verbindung des Debuggers durch die Funktion sysctl
Wenn das WĂ€chter-Schema das Vorhandensein eines Debuggers erkennt, wird die Funktion aufgerufen exit. DarĂŒber hinaus ĂŒberprĂŒft das Sample dann die Umgebung, indem es zwei Befehle ausfĂŒhrt:
ioreg -l | grep -e "Manufacturer" und sysctl hw.model
Danach ĂŒberprĂŒft das Sample den RĂŒckgabewert anhand einer fest codierten Liste von Zeichenfolgen bekannter Virtualisierungssysteme: acle, vmware, virtualbox oder parallels. SchlieĂlich ĂŒberprĂŒft der folgende Befehl, ob der Rechner einem der folgenden âMBPâ, âMBAâ, âMBâ, âMMâ, âIMâ, âMPâ und âXSâ entspricht. Diese sind Modellcodes des Systems, z.B. bedeutet âMBPâ MacBook Pro, âMBAâ â MacBook Air usw.
system_profiler SPHardwareDataType 2>/dev/null | awk '/Boot ROM Version/ {split($0, line, ":");printf("%s", line[2]);}'
Hauptaddons
Obwohl sich die Backdoor-Befehle seit der Trend Micro-Untersuchung nicht geÀndert haben, haben wir einige andere Modifikationen festgestellt. Die C&C-Server, die in diesem Sample verwendet werden, sind relativ neu, das Erstellungsdatum ist der 22.10.2018.
â daff.faybilodeau[.]com
â sarc.onteagleroad[.]com
â au.charlineopkesston[.]com
Die URL-Ressource hat sich geÀndert in /dp/B074WC4NHW/ref=gbps_img_m-9_62c3_750e6b35.
Das erste Paket, das an den C&C-Server gesendet wird, enthĂ€lt mehr Informationen ĂŒber die Host-Maschine, einschlieĂlich aller Daten, die von den Befehlen in der untenstehenden Tabelle gesammelt werden.

DarĂŒber hinaus verwendet das Sample zur Netzwerkfilterung nicht die Bibliothek , sondern eine externe Bibliothek. Um diese zu finden, versucht die Backdoor, jede Datei im aktuellen Verzeichnis zu entschlĂŒsseln, unter Verwendung von AES-256-CBC mit dem SchlĂŒssel gFjMXBgyXWULmVVVzyxy, ergĂ€nzt durch Nullen. Jede Datei wird entschlĂŒsselt und als /tmp/store, und der Versuch, sie als Bibliothek zu laden, wird unter Verwendung der Funktion . Wenn der Versuch der EntschlĂŒsselung zu einem erfolgreichen Aufruf fĂŒhrt dlopen, extrahiert die Backdoor die exportierten Funktionen Boriry und ChadylonV, die anscheinend fĂŒr die Netzwerkinteraktion mit dem Server verantwortlich sind. Wir haben keinen Dropper oder andere Dateien aus dem ursprĂŒnglichen Speicherort des Samples, daher können wir diese Bibliothek nicht analysieren. DarĂŒber hinaus, da die Komponente verschlĂŒsselt ist, wird eine YARA-Regel, die auf diesen Zeichenfolgen basiert, nicht mit der auf der Festplatte gefundenen Datei ĂŒbereinstimmen.
Wie in dem oben genannten Artikel beschrieben, wird ein cliendID. Diese Kennung ist ein MD5-Hash des RĂŒckgabewerts eines der folgenden Befehle:
â 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}' (MAC-Adresse abrufen)
â unbekannter Befehl ("x1ex72x0a"), der in den vorherigen Mustern verwendet wird
Vor dem Hashing wird dem RĂŒckgabewert ein Zeichen "0" oder "1" hinzugefĂŒgt, das auf das Vorhandensein von Root-Rechten hinweist. Dieses clientID wird gespeichert in /Library/Storage/File System/HFS/25cf5d02-e50b-4288-870a-528d56c3cf6e/pivtoken.appex, wenn der Code als Root ausgefĂŒhrt wird, oder in ~/Library/SmartCardsServices/Technology/PlugIns/drivers/snippets.ecgML in allen anderen FĂ€llen. Die Datei wird normalerweise mit der Funktion , ihr Zeitstempel wird mit dem Befehl touch ât einem zufĂ€lligen Wert geĂ€ndert.
EntschlĂŒsselung von Zeichenfolgen
Wie in den vorherigen Versionen sind die Zeichenfolgen mit AES-256-CBC verschlĂŒsselt (hexadezimaler SchlĂŒssel: 9D7274AD7BCEF0DED29BDBB428C251DF8B350B92 auf Null erweitert, und IV ist mit Nullen gefĂŒllt) durch die Funktion . Der SchlĂŒssel wurde im Vergleich zu frĂŒheren Versionen geĂ€ndert, aber da die Gruppe immer noch dasselbe VerschlĂŒsselungsalgorithmus verwendet, kann die EntschlĂŒsselung automatisiert werden. Neben diesem Beitrag veröffentlichen wir ein IDA-Skript, das die Hex-Rays API zur EntschlĂŒsselung der im BinĂ€rdatei vorhandenen Zeichenfolgen verwendet. Dieses Skript kann bei zukĂŒnftigen Analysen von OceanLotus und der Analyse vorhandener Muster helfen, die wir bisher nicht erhalten konnten. Das Skript basiert auf einer universellen Methode zur Beschaffung der an die Funktion ĂŒbergebenen Argumente. DarĂŒber hinaus sucht es nach Zuweisungen der Parameter. Diese Methode kann wiederverwendet werden, um eine Liste der Funktionsargumente zu erhalten und sie dann an den Callback weiterzugeben.
Mit dem Wissen um das Prototyp der Funktion decrypt, findet das Skript alle Querverweise auf diese Funktion, alle Argumente, entschlĂŒsselt die Daten und fĂŒgt den Klartext innerhalb eines Kommentars an der Querverweis-Adresse ein. Damit das Skript korrekt funktioniert, muss ein benutzerdefiniertes Alphabet festgelegt werden, das von der Base64-Dekodierungsfunktion verwendet wird, und eine globale Variable muss definiert werden, die die LĂ€nge des SchlĂŒssels enthĂ€lt (in diesem Fall DWORD, siehe Abbildung 4).

Abbildung 4. Definition der globalen Variable key_len
Im Fenster Funktion können Sie mit der rechten Maustaste die EntschlĂŒsselungsfunktion aufrufen und auf âExtrahieren und EntschlĂŒsseln der Argumenteâ klicken. Das Skript sollte die entschlĂŒsselten Zeilen in die Kommentare einfĂŒgen, wie in Abbildung 5 gezeigt.

Abbildung 5. Der entschlĂŒsselte Text ist in die Kommentare eingefĂŒgt
Auf diese Weise werden die entschlĂŒsselten Zeilen bequem im IDA-Fenster zusammen angeordnet xrefs fĂŒr diese Funktion, wie in Abbildung 6 dargestellt.

Abbildung 6. Xrefs zur Funktion f_decrypt
Die endgĂŒltige Version des Skripts kann auf .
Ausgabe
Wie bereits erwĂ€hnt, verbessern und aktualisieren OceanLotus stĂ€ndig ihr Toolset. Diesmal hat die Cybergruppe die Malware fĂŒr Mac-Nutzer optimiert. Der Code hat sich nicht stark verĂ€ndert, aber da viele Mac-Nutzer Sicherheitsprodukte ignorieren, hat der Schutz der Malware vor Erkennung eine untergeordnete Bedeutung.
ESET-Produkte haben diese Datei bereits zum Zeitpunkt der Untersuchung erkannt. Da die Netzwerkbibliothek, die fĂŒr die C&C-Kommunikation verwendet wird, jetzt auf der Festplatte verschlĂŒsselt ist, ist das genaue Netzwerkprotokoll, das von den Angreifern verwendet wird, derzeit unbekannt.
Indikatoren fĂŒr Kompromittierung
Die Indikatoren fĂŒr Kompromittierung sowie die MITRE ATT&CK-Attribute sind ebenfalls verfĂŒgbar unter .
Quelle: habr.com
