OceanLotus: Malware-Update für macOS

Im März 2019 wurde ein neues Beispiel von macOS-Malware der Cyber-Gruppe OceanLotus auf VirusTotal hochgeladen, einen beliebten Online-Scan-Dienst. Die ausführbare Backdoor-Datei verfügt über dieselben Funktionen wie die vorherige Version der von uns untersuchten macOS-Malware, ihre Struktur hat sich jedoch geändert und sie ist schwieriger zu erkennen. Leider konnten wir zu dieser Probe keinen Tropfer finden, sodass wir den Infektionsvektor noch nicht kennen.

Wir haben kürzlich veröffentlicht Beitrag über OceanLotus und wie Betreiber versuchen, Persistenz bereitzustellen, die Codeausführung zu beschleunigen und den Platzbedarf auf Windows-Systemen zu minimieren. Es ist auch bekannt, dass diese Cybergruppe auch eine Komponente für macOS hat. Dieser Beitrag beschreibt die Änderungen in der neuesten Version der Malware für macOS im Vergleich zur Vorgängerversion (beschrieben von Trend Micro) und beschreibt außerdem, wie Sie die Entschlüsselung von Zeichenfolgen während der Analyse mithilfe der IDA Hex-Rays-API automatisieren können.

OceanLotus: Malware-Update für macOS

Analyse

Die nächsten drei Teile beschreiben die Analyse einer Probe mit einem SHA-1-Hash E615632C9998E4D3E5ACD8851864ED09B02C77D2. Die Datei heißt Taschenlampe, ESET-Antivirenprodukte erkennen es als OSX/OceanLotus.D.

Anti-Debugging und Sandbox-Schutz

Wie alle macOS OceanLotus-Binärdateien ist das Beispiel mit UPX gepackt, aber die meisten Tools zur Identifizierung von Paketern erkennen es nicht als solches. Dies liegt wahrscheinlich daran, dass sie meist eine Signatur enthalten, die vom Vorhandensein der „UPX“-Zeichenfolge abhängt. Darüber hinaus sind Mach-O-Signaturen weniger verbreitet und werden nicht so oft aktualisiert. Diese Funktion erschwert die statische Erkennung. Interessanterweise befindet sich der Einstiegspunkt nach dem Auspacken am Anfang des Abschnitts __cfstring im Segment .TEXT. Dieser Abschnitt verfügt über Flag-Attribute, wie im Bild unten gezeigt.

OceanLotus: Malware-Update für macOS
Abbildung 1. MACH-O __cfstring-Abschnittsattribute

Wie in Abbildung 2 dargestellt, sind die Codepositionen im Abschnitt __cfstring ermöglicht es Ihnen, einige Demontagetools auszutricksen, indem Code als Zeichenfolgen angezeigt wird.

OceanLotus: Malware-Update für macOS
Abbildung 2. Von IDA als Daten erkannter Backdoor-Code

Nach der Ausführung erstellt die Binärdatei einen Thread als Anti-Debugger, dessen einziger Zweck darin besteht, kontinuierlich zu prüfen, ob ein Debugger vorhanden ist. Für diesen Fluss:

– Versucht, jeden Debugger aufzurufen ptrace с PT_DENY_ATTACH als Anforderungsparameter
– Überprüft, ob einige exklusive Ports geöffnet sind, indem eine Funktion aufgerufen wird task_get_exception_ports
– Überprüft, ob der Debugger verbunden ist, wie in der Abbildung unten gezeigt, indem das Vorhandensein des Flags überprüft wird P_TRACED im aktuellen Prozess

OceanLotus: Malware-Update für macOS
Abbildung 3. Überprüfen der Debugger-Verbindung mithilfe der sysctl-Funktion

Wenn der Watchdog das Vorhandensein eines Debuggers erkennt, wird die Funktion aufgerufen exit. Darüber hinaus überprüft das Beispiel dann die Umgebung, indem es zwei Befehle ausführt:

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

Das Beispiel prüft dann den Rückgabewert anhand einer hartcodierten Liste von Zeichenfolgen aus bekannten Virtualisierungssystemen: acle, VMware, virtualbox oder Parallelen. Abschließend prüft der nächste Befehl, ob es sich bei der Maschine um eine der folgenden Maschinen handelt: „MBP“, „MBA“, „MB“, „MM“, „IM“, „MP“ und „XS“. Dabei handelt es sich um Systemmodellcodes, zum Beispiel bedeutet „MBP“ MacBook Pro, „MBA“ bedeutet MacBook Air usw.

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

Grundlegende Ergänzungen

Während sich die Backdoor-Befehle seit der Recherche von Trend Micro nicht geändert haben, sind uns einige andere Änderungen aufgefallen. Die in diesem Beispiel verwendeten C&C-Server sind relativ neu und wurden am 22.10.2018 erstellt.

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

Die Ressourcen-URL wurde in geändert /dp/B074WC4NHW/ref=gbps_img_m-9_62c3_750e6b35.
Das erste an den C&C-Server gesendete Paket enthält weitere Informationen über den Host-Computer, einschließlich aller von den Befehlen in der folgenden Tabelle erfassten Daten.

OceanLotus: Malware-Update für macOS

Zusätzlich zu dieser Konfigurationsänderung verwendet das Beispiel keine Bibliothek für die Netzwerkfilterung libcurl, sondern eine externe Bibliothek. Um es zu finden, versucht die Hintertür, jede Datei im aktuellen Verzeichnis mithilfe von AES-256-CBC mit dem Schlüssel zu entschlüsseln gFjMXBgyXWULmVVVzyxy, mit Nullen aufgefüllt. Jede Datei wird entschlüsselt und gespeichert als /tmp/store, und es wird versucht, es als Bibliothek mit der Funktion zu laden öffnen. Wenn ein Entschlüsselungsversuch zu einem erfolgreichen Anruf führt dlopen, extrahiert die Hintertür exportierte Funktionen Boriry и ChadylonV, die offenbar für die Netzwerkkommunikation mit dem Server verantwortlich sind. Wir haben weder den Dropper noch andere Dateien vom ursprünglichen Speicherort des Beispiels, daher können wir diese Bibliothek nicht analysieren. Da die Komponente außerdem verschlüsselt ist, stimmt eine auf diesen Zeichenfolgen basierende YARA-Regel nicht mit der auf der Festplatte gefundenen Datei überein.

Wie im obigen Artikel beschrieben, wird es erstellt Kunden ID. Diese ID ist der 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)
- unbekanntes Team ("x1ex72x0a"), das in früheren Beispielen verwendet wurde

Vor dem Hashing wird dem Rückgabewert eine „0“ oder „1“ hinzugefügt, um Root-Rechte anzugeben. Das Kunden ID gespeichert /Library/Storage/File System/HFS/25cf5d02-e50b-4288-870a-528d56c3cf6e/pivtoken.appex, wenn der Code als Root oder in allen anderen Fällen in ~/Library/SmartCardsServices/Technology/PlugIns/drivers/snippets.ecgML ausgeführt wird. Normalerweise wird die Datei mit der Funktion ausgeblendet _chflags, wird sein Zeitstempel mit dem Befehl geändert touch –t mit einem zufälligen Wert.

Zeichenfolgen dekodieren

Wie bei den vorherigen Optionen werden die Zeichenfolgen mit AES-256-CBC verschlüsselt (Hexadezimalschlüssel: 9D7274AD7BCEF0DED29BDBB428C251DF8B350B92 mit Nullen aufgefüllt und IV mit Nullen gefüllt) durch die Funktion CCCrypt. Der Schlüssel hat sich gegenüber früheren Versionen geändert, aber da die Gruppe immer noch denselben String-Verschlüsselungsalgorithmus verwendet, kann die Entschlüsselung automatisiert werden. Zusätzlich zu diesem Beitrag veröffentlichen wir ein IDA-Skript, das die Hex-Rays-API verwendet, um die in der Binärdatei vorhandenen Zeichenfolgen zu entschlüsseln. Dieses Skript kann bei der zukünftigen Analyse von OceanLotus und der Analyse vorhandener Proben, die wir noch nicht erhalten konnten, hilfreich sein. Das Skript basiert auf einer universellen Methode zum Empfangen von Argumenten, die an eine Funktion übergeben werden. Darüber hinaus sucht es nach Parameterzuweisungen. Die Methode kann wiederverwendet werden, um eine Liste von Funktionsargumenten abzurufen und diese dann an den Rückruf zu übergeben.

Den Funktionsprototyp kennen entschlüsseln, findet das Skript alle Querverweise auf diese Funktion und alle Argumente, entschlüsselt dann die Daten und fügt Klartext in einen Kommentar an der Querverweisadresse ein. Damit das Skript ordnungsgemäß funktioniert, muss es auf das benutzerdefinierte Alphabet eingestellt werden, das von der Base64-Dekodierungsfunktion verwendet wird, und es muss eine globale Variable definiert werden, die die Länge des Schlüssels enthält (in diesem Fall ein DWORD, siehe Abbildung 4).

OceanLotus: Malware-Update für macOS
Abbildung 4. Definition der globalen Variablen key_len

Im Funktionsfenster können Sie mit der rechten Maustaste auf die Entschlüsselungsfunktion klicken und auf „Argumente extrahieren und entschlüsseln“ klicken. Das Skript sollte die entschlüsselten Zeilen in Kommentare einfügen, wie in Abbildung 5 dargestellt.

OceanLotus: Malware-Update für macOS
Abbildung 5. Der entschlüsselte Text wird in den Kommentaren platziert

Auf diese Weise werden die entschlüsselten Zeichenfolgen bequem im IDA-Fenster zusammengefügt XRefs für diese Funktion, wie in Abbildung 6 dargestellt.

OceanLotus: Malware-Update für macOS
Abbildung 6. Xrefs zur f_decrypt-Funktion

Das endgültige Skript finden Sie unter Github-Repository.

Abschluss

Wie bereits erwähnt, verbessert und aktualisiert OceanLotus sein Toolkit ständig. Diesmal hat die Cyber-Gruppe die Malware verbessert, um sie auf Mac-Benutzer abzuzielen. Am Code hat sich nicht viel geändert, aber da viele Mac-Benutzer Sicherheitsprodukte ignorieren, ist der Schutz von Malware vor Erkennung zweitrangig.

ESET-Produkte erkannten diese Datei zum Zeitpunkt der Recherche bereits. Da die für die C&C-Kommunikation verwendete Netzwerkbibliothek mittlerweile auf der Festplatte verschlüsselt ist, ist das genaue Netzwerkprotokoll, das die Angreifer verwenden, noch nicht bekannt.

Indikatoren für Kompromisse

Kompromittierungsindikatoren sowie MITRE ATT&CK-Attribute sind ebenfalls verfügbar GitHub.

Source: habr.com

Kommentar hinzufügen