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
