Untersuchung der Konfiguration des LuminosityLink-Fernzugriffstrojaners

Dieser Beitrag ist auch verfügbar in: 日本語 (Japanisch)

In den letzten Wochen habe ich Zeit damit verbracht, die eingebettete Konfiguration des LuminosityLink-Fernzugriffstrojaners (RAT) zu untersuchen. Für diejenigen, die es nicht wissen, LuminosityLink ist eine Malware-Familie kostet $ 40 Das gibt vor, ein Systemverwaltungsprogramm zu sein. Bei der Ausführung nutzt die Malware jedoch einen sehr aggressiven Keylogger sowie eine Reihe anderer schädlicher Funktionen, mit denen ein Angreifer die volle Kontrolle über einen Opfercomputer erlangen kann.

LuminosityLink 1

Abbildung 1 LuminosityLink-Website

Auf Anfrage eines Kollegen wurde ich gebeten, die Konfiguration eines LuminosityLink-Beispiels zu extrahieren, und obwohl ich die Malware einfach in einer Sandkastenumgebung hätte ausführen und die Konfiguration aus dem Speicher ziehen können, entschied ich mich zu sehen, ob ich die gleiche Aktion gegen die statische Binärdatei ausführen könnte.

Dies führte dazu, dass ich verstand, wie die Konfiguration in der Binärdatei verschlüsselt ist und wie diese Konfiguration analysiert wird. Ich habe ein Skript erstellt, um diese Aktion gegen ein unverändertes LuminosityLink-Malware-Beispiel auszuführen, das ich in diesem Blogbeitrag teilen werde. Außerdem habe ich mir die ungefähr 18.000 LuminosityLink-Samples angesehen, die Palo Alto Networks im Laufe der Zeit gesammelt hat, und mit diesem Skript konnte ich die Konfigurationen von 14.700 Samples extrahieren. (Diese Daten finden Sie im Anhang dieses Beitrags.)

Übersicht über LuminosityLink

LuminosityLink wurde ursprünglich im Mai 2015 veröffentlicht und erfreut sich zunehmender Beliebtheit, wie die folgende Tabelle zeigt. Bis heute hat Palo Alto Networks ungefähr 50.000 versuchte Infektionen mit LuminosityLink gegen unsere Kunden verfolgt.

LuminosityLink 2

Abbildung 2 Autofokusdiagramm der LuminosityLink-Sitzungen über die Zeit.

LuminosityLink verkauft derzeit für $40 und kann direkt vom Autor erworben werden. Mit diesem Paket können Angreifer einen LuminosityLink-Server hosten und benutzerdefinierte Binärdateien generieren, die mit ConfuserEx 0.4.0 verschleiert werden. ConfuserEx ist ein Open-Source-Projekt, das die zugrunde liegenden verschleiert .NET-Code, so dass es viel schwieriger für Reverse Engineers, die es dekompilieren. Dies ist wichtig für später zu beachten, wenn wir darüber diskutieren, wie der Verschlüsselungsprozess rückgängig gemacht werden kann.

Wie bereits erwähnt, sind eine Reihe von Konfigurationsoptionen enthalten, wie wir im folgenden Screenshot sehen können.

LuminosityLink 3

Abbildung 3 Client-Konfigurationsoptionen in LuminosityLink

Nach der Ausführung erhalten Angreifer eine Vielzahl von Optionen, darunter Keylogging, Remotedesktop, Kennwortdiebstahl und Interaktion mit einer Shell auf dem Gerät.

Reverse Engineering der Konfiguration

Der erste Schritt beim Parsen der Konfiguration von LuminosityLink besteht darin, sie statisch zu extrahieren. Ich habe zunächst ein sauberes LuminosityLink-Beispiel mit einem Programm namens dnSpy geöffnet, um nach Hinweisen zu suchen, wo die Konfiguration gespeichert werden könnte. (Als kurze Anmerkung empfehle ich dnSpy sehr, da es nicht nur die mitgelieferte .NET-Binärdatei hervorragend dekompiliert, sondern auch mit einem integrierten Debugger ausgestattet ist, der bei der Lösung von Problemen wie dem, mit dem wir konfrontiert sind, von entscheidender Bedeutung ist.)

Beim ersten Öffnen einer Beispielbinärdatei habe ich nicht viel erwartet, da ich wusste, dass das Beispiel mit ConfuserEx verschleiert wurde. Als ich mir jedoch die Ressourcen des Beispiels ansah, sah ich einige Zeichenfolgen, die vielversprechend aussahen.

LuminosityLink 4

Abbildung 4 Eingebettete Ressourcenzeichenfolgen in LuminosityLink

Wie wir sehen können, enthält die Malware eine Reihe von Ressourcen, die wiederum scheinbar Base64-codierte Daten enthalten. Die Ressourcen “SMARTLOGS”, “XML” und “CONFIG” enthalten eine Fülle von Daten, die zu diesem Zeitpunkt noch unbekannt sind. Leider führt die Dekodierung dieser Zeichenfolgen zu Müll, was wahrscheinlich bedeutet, dass darunter eine andere Form der Verschlüsselung verwendet wird.

Ich untersuchte weiterhin den zugrunde liegenden Code, der zwar verschleiert ist, aber dennoch eine allgemeine Vorstellung davon bietet, was verschiedene Klassen tun. Mithilfe importierter Namespaces, API-Aufrufe und bestimmter nicht verschleierter Zeichenfolgen können wir Hinweise darauf erhalten, was im Programm vor sich geht. Insbesondere sehen wir die fd() -Klasse, die den Namespace von ‘System .Sicherheit.Kryptographie’, die sicherlich eine Untersuchung verdient, da wir vermuteten, dass Krypto gegen die zuvor referenzierten Ressourcenzeichenfolgen verwendet wird.

LuminosityLink 5

Abbildung 5 Kryptographie-Namespace, der von LuminosityLink verwendet wird

Wenn wir diese Klasse weiter untersuchen, sehen wir Verweise auf die folgenden Klassen und Funktionen:

  • MD5CryptoServiceProvider
  • ComputeHash
  • FromBase64String
  • RijndaelManaged

An dieser Stelle wandte ich mich an meinen Debugger, um zu sehen, wie diese Zeichenfolgen behandelt wurden. Ich habe Haltepunkte für verschiedene zuvor erwähnte Anrufe festgelegt. Insbesondere der Haltepunkt in der RijndaelManaged-Klasse liefert hervorragende Ergebnisse.

LuminosityLink 6

Abbildung 6 Erfolgreiche Wiederherstellung des AES-128-Schlüssels

Wir können nicht nur überprüfen, ob die AES-128-Verschlüsselung verwendet wird, sondern auch, ob die Ressourcenzeichenfolge “SMARTLOGS” verwendet wird. Wir können auch die Zeichenfolge identifizieren, die als Schlüssel verwendet wird, in diesem speziellen Beispiel “\\ecnOnuR \\ noisreVtnerruC \\ swodniW \\ tfosorciM \\ erawtfoS”. Weitere Untersuchungen zeigen, dass diese Zeichenfolge mit dem MD5-Algorithmus gehasht wird. Die ersten 15 Bytes dieses Hashs werden mit den gesamten 16 Bytes des Hashs verkettet, gefolgt von einem Nullbyte. Wir können diesen Entschlüsselungsprozess in Python als solchen replizieren:

1
2
3
4
5
6
7
8
9
10

def decrypt_data(Daten, key_string):
decoded_data = base64.b64decode(Daten)
m = hashlib.md5()
m.update(key_string)
md5 = m.digest()
Schlüssel = md5+md5+”\x00″
Modus = AES.MODE_ECB
iv = ‘\x00’ * 16
e = AES.new(Schlüssel, Modus, iv)
return e.decrypt(decoded_data)

Wir können weiter überprüfen, ob dies mit dem obigen Code korrekt ist. Im folgenden Beispiel wurde die Datenvariable mit der base64-codierten Zeichenfolge in der Ressource “SMARTLOGS” festgelegt, und die Variable key_string wurde auf den zuvor erwähnten umgekehrten Registrierungsschlüssel festgelegt.

1
2

>>> drucken decrypt_data(Daten, key_string)
172.16.1.100|11111|backup.dns.com|filename.exe|startup_name|folder_name|data_directory_name|backup_startup.exe/df5e0e1c667c399588b014cb9b4ae7b33c9c0b4cac9d4169f39197e41e9a43a4|Baujahr/1idsnb|

Mit Versuch und Irrtum können wir jede Variable, die in der obigen Konfiguration verwendet wird, erfolgreich zuordnen. Die letzte Variable erweist sich als sehr interessant, da jedes Zeichen mit Ausnahme von ‘1’ einer bestimmten Konfigurationsoption zugeordnet wird. Die folgende Abbildung wurde ermittelt:

  • i: Client-Installation / -Start aktivieren
  • d: Client-Persistenzmodul: Schützen Sie die Client-Binärdatei von Luminosity
  • s : Silent-Modus (Verstecken Leuchtkraft Fenster auf Client PC)
  • a: Proaktive Anti-Malware: Sauber Schädliche Dateien und Geschwindigkeit bis Client PC
  • n: Power Saver: Verhindern Schlaf Modus und Schalten sie Monitor nach 15 minuten inaktivität
  • m: Entfernen Datei nach Ausführung (Melt)
  • v: Anti-Virtuelle Maschinen/Debugging
  • h: Verstecken Datei und Verzeichnisse
  • b : Backup Startup

Mit diesem Wissen können wir die obige Konfiguration analysieren, was die folgenden Ergebnisse liefert.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

Domäne/IP: 172.16.1.100
Hafen: 11111
DNS sichern: backup.dns.com
Dateiname: Dateiname.exe
Startname: startup_name
Ordnername: Ordnername
Daten Verzeichnisname: data_directory_name
Backup Start Exe: backup_startup.exe
Mutex: df5e0e1c667c399588b014cb9b4ae7b33c9c0b4cac9d4169f39197e41e9a43a4
Build-ID: BuildID
Einstellungen:
Clientinstallation / -start aktivieren
Client Persistence Module: Schützen Sie die Client-Binärdatei von Luminosity
Silent Mode (Luminosity-Fenster auf dem Client-PC ausblenden)
Proaktive Anti-Malware: Bereinigen Sie schädliche Dateien und beschleunigen Sie den Client-PC
Energiesparmodus: Verhindern Sie den Ruhemodus und schalten Sie den Monitor nach 15 Minuten Inaktivität aus
Datei nach Ausführung entfernen (Melt)
Anti-virtuelle Maschinen / Debugging
Datei und Verzeichnisse ausblenden

Parsen von LuminosityLink-Konfigurationen im Maßstab

Mit diesem Wissen haben wir ein Skript erstellt, um die Konfiguration eines bestimmten Beispiels zu analysieren. Das Skript sucht nach Zeichenfolgen, die base64-codiert zu sein scheinen, mit einer Länge größer als 50, und verwendet einen Brute-Force-Ansatz. Obwohl es nicht elegant ist, macht es den Job ziemlich erfolgreich. Das Skript kann im Anhang dieses Blogposts heruntergeladen werden.

Beim Durchsuchen des Palo Alto Networks Repository mit Beispielen fanden wir ungefähr 18.000 Dateien, die als LuminosityLink gekennzeichnet waren. Für diese 18.000 Beispiele haben wir unser Skript zum Extrahieren und Analysieren statischer Konfigurationen angewendet und etwa 4.500 Konfigurationen erfolgreich abgerufen. Die verbleibenden Beispiele wurden über die integrierte ConfuserEx-Verschleierungsroutine hinaus gepackt, und daher waren die rohen Konfigurationszeichenfolgen nicht vorhanden.

Diese Beispiele wurden über eine lokale Instanz der Open-Source-Cuckoo-Sandbox ausgeführt, in der die Prozess-Dumps extrahiert wurden. Das gleiche Skript wurde auf diese Prozess-Dumps angewendet, wo wir weitere 10.200 Konfigurationen erhalten konnten, so dass wir insgesamt 14.700 analysierte LuminosityLink-Konfigurationen hatten.

Als die Proben verarbeitet wurden, wurden weitere Schlüssel entdeckt, die vom Autor verwendet wurden. Die folgenden zusätzlichen drei Zeichenfolgen wurden verwendet, um die Schlüssel für LuminosityLink-Samples zu generieren.

  • Diese conf’ig enthält nichts Nützliches. Hör auf, so zu tun, als wärst du cool, indem du es entschlüsselst.
  • Ressourcen.SMARTLOGS
  • Geben Sie ein Passwort an

Es scheint, als ob der Autor von LuminosityLink nicht ohne Sinn für Humor ist. Als wir ältere Beispiele analysierten, wurde außerdem festgestellt, dass sich die Konfiguration irgendwann zwischen Februar und Juni dieses Jahres geändert hat. Bei der Konfiguration älterer Samples standen weniger Optionen zur Verfügung. Das bereitgestellte Skript berücksichtigt diese Unterschiede und verschiedene verwendete Schlüssel.

Unter Verwendung der aggregierten Daten aus den 14.700 Konfigurationen wurden die folgenden übergeordneten Statistiken abgerufen:

LuminosityLink 7

Figure 7 Prevalence of enabled settings in LuminosityLink configurations

Top C2 TLDs/IP Addresses

  • ddnsnet
  • duckdnsorg
  • no-ipbiz
  • chickenkillercom
  • no-iporg
  • mooocom
  • fishdnscom
  • no-ipinfo
  • ignorelistcom
  • freednssu

Top Build IDs

  • HOME
  • Client
  • crtx1
  • M4CHINATION
  • CSGO
  • NEW
  • Slave
  • CAPO
  • Youtube
  • PROJECT.D

Top Executable Names

  • sysmon.exe
  • client.exe
  • helper.exe
  • repair.exe
  • winlogon.exe
  • svchost.exe
  • Luminosity.exe
  • WinCOMHost.exe
  • chrome.exe
  • windowsbootapp.exe

Top Anschlüsse

  • 6318
  • 1400
  • 1604
  • 1337
  • 3175
  • 22028
  • 9045
  • 2122
  • 100
  • 9999

Die analysierten Konfigurationsdaten, die im CSV-Dateiformat bereitgestellt werden, werden der Sicherheitsgemeinschaft frei zur Verfügung gestellt, in der Hoffnung, dass Schutzmaßnahmen gegen diese Bedrohung geschaffen werden.

Fazit

LuminosityLink wird zwar als Systemverwaltungsprogramm vermarktet, ist jedoch ein beeindruckender Keylogger und eine Hintertür, die von einer großen Anzahl von Kriminellen verwendet wird. Bis heute hat Palo Alto Networks über 50.000 versuchte Infektionen von LuminosityLink erlebt, die 18.000 einzigartige Proben umfassten. Die Malware ist billig und leicht zugänglich für die Öffentlichkeit, so dass dies eine gefährliche Bedrohung für Organisationen und Einzelpersonen gleichermaßen.

Durch Reverse Engineering von LuminosityLink-Beispielen konnten wir die eingebettete Konfiguration statisch extrahieren und analysieren, was wiederum wertvolle Informationen darüber liefert, mit welchen Hosts und Ports die Malware für die Kommunikation konfiguriert ist. Es enthält auch Informationen zu konfigurierten Schutzfunktionen, die in der ausführbaren Datei konfiguriert sind, sowie Installationsinformationen.

Kunden von Palo Alto Networks sind auf folgende Weise vor dieser Bedrohung geschützt:

Ein AutoFokus-Tag kann verwendet werden, um diese Malware-Familie zu verfolgen

  • Alle LuminosityLink-Beispiele werden in WildFire entsprechend als bösartig markiert
  • Alle identifizierten Domänen werden als bösartig gekennzeichnet
  • Der Netzwerkverkehr wird als Bedrohungs-ID entsprechend identifiziert und blockiert #14460 (Lumonositylink).Gen Befehls- und Kontrollverkehr)

Anhang

Ein Extraktions- und Parsing-Skript für LuminosityLink-Beispiele finden Sie hier.

Ein Skript zum Parsen einfacher Konfigurationszeichenfolgen finden Sie hier.

Eine CSV-Datei mit allen Konfigurationsdaten, die aus dem Palo Alto Networks Sample Set extrahiert wurden, finden Sie hier.

Erhalten Sie Updates von
Palo Alto
Networks!

Melden Sie sich an, um die neuesten Nachrichten, Cyber Threat Intelligence und Forschung von uns zu erhalten

Mit dem Absenden dieses Formulars stimmen Sie unseren Nutzungsbedingungen zu und erkennen unsere Datenschutzerklärung an.

Write a Comment

Deine E-Mail-Adresse wird nicht veröffentlicht.