Hacken wie 1999 – Analysen automatisieren wie 2021 – Lacework

Hacken wie 1999 – Analysen automatisieren wie 2021

Lacework Labs

June 14, 2021

Jared Stroud
Cloud Security Researcher – Lacework Labs
 

Die Erkenntnisse

  • Lacework Labs veröffentlicht ein Ghidra-Skript, um die Extraktion von IRC-IPs/Domains, Kanälen und Kanal-Zugangsdaten zu automatisieren, die von den Bots von Katien IRC und dessen Varianten verwendet werden.
  • Lacework Labs Ghidra Scripts

Zusammenfassung

In der Vergangenheit hat Lacework Labs bereits über die Verwendung von IRC-Bots in Verbindung mit Cryptojacking-Angriffen berichtet. Diese IRC-Bots ermöglichen den Angreifern über das IRC-Protokoll einen Fernzugriff auf die Ziel-Hosts. Durch die Veröffentlichung dieses Ghidra-Skripts hoffen wir, Forschern und „Notfall-Ersthelfern“ bei der Automatisierung der Extraktion kritischer Informationen über Katien-Varianten wie Tsunami oder Ziggystartux zu helfen.

 

RFC 1459 – Ein Chatprotokoll in einer Welt von C2

Das IRC-Protokoll wurde ursprünglich in der im Mai 1993 veröffentlichten RFC 1459 definiert. Was zu Beginn als einfaches und leichtes Chat-Protokoll entwickelt worden war, wurde im Laufe der Jahre schnell zu einem gängigen Command-and-Control-Protokoll (TA0011) für verschiedene Malware-Proben. Einige bemerkenswerte Proben aus dem Jahr 2021, die IRC nutzen, sind „FreakOut“, ein Wurm, der vCenter von VMWare für den Erstzugriff nutzt, sowie die auf Windows-Containern basierte Malware „Siloscape“. Dieses 28 Jahre alte Protokoll ist noch immer lebendig und fester Bestandteil der Malware-Landschaft.

Ein produktiver IRC-Bot, mit dem Lacework Labs häufig zu tun hat, ist Katien. Die Verwendung von Katien und seiner dazugehörigen Varianten (ziggystartux, Tsunami, etc...) ist oft mit einem Exploit-Skript, das bekannte Exploits für den Erstzugriff nutzt, sowie mit einem Cryptojacking-Programm gekoppelt. Bemerkenswert ist dabei, dass die Tsunami-Variante von Katien in die ISO-Bilder von Linux Mint im Jahr 2016 integriert wurde, als die Webseite von Linux Mint kompromittiert wurde.

Lacework Labs hat Tsunami-Varianten identifiziert, die in Docker-Bilder eingebettet sind, gleichzeitig können sie aber auch als eigenständige Agenten genutzt werden. Aufgrund der Häufigkeit dieser Proben haben wir für eine automatische Extraktion von wichtigen Konfigurationsdetails der Benutzer Ghidra verwendet. Während Ihnen ein Skript in Ihrer bevorzugten Programmiersprache dabei helfen kann, wertvolle Informationen aus einer Binärdatei zu erfassen und zu extrahieren, erhalten Sie mit Ghidra Zugang zu einem leistungsstarken Reverse-Engineering-Ökosystem und profitieren von weiteren Einblicken in Malware-Varianten, auf die Ihr Unternehmen stoßen könnte.

 

Die Konfigurationsstruktur von Katien & Varianten

Ganz zu Beginn enthält der IRC-Bot von Katien (und dessen Varianten) einen Konfigurationsabschnitt, in dem jeweils mit dem Makro#define der Name des Prozesses (#define FAKENAME), der IRC-Kanal zum Beitreten (#define CHAN), und ggf. der Schlüssel, um dem IRC-Kanal beizutreten (#define KEY), definiert sind. Zum Glück ist der Quellcode für Forscher (und Gegner) verfügbar. Wenn wir den Beispielcode nehmen und zusammenstellen, erhalten wir die Debug-Symbole, mit denen wir verstehen, wie diese hartkodierten Werte in der zugrunde liegenden Binärdatei gespeichert sind.

Abbildung 1 – Katien-IRC-Konfiguration

Die ELF-Dateistruktur enthält einen Abschnitt namens „.rodata“ bestehend aus Zeichenketten. Die oben erwähnten hartcodierten Werte werden dort gespeichert. Nachdem Ghidra (oder Ihr bevorzugtes Disassembler-Tool) die Analyse der Binärdatei beendet hat, bietet der Sprung in den Abschnitt .rodata einen guten Ausgangspunkt für die Erfassung der Konfigurationsinformationen, die für die Verbindung mit einem IRC-Server erforderlich sind. Abbildung-2 unten zeigt den Anfang von .rodata in Ghidra, der drei verschiedene IRC-Domänen offenbart.

Abbildung 2 – Ghidra IRC rodata

Als erneute Verweise auf den Katien.c-Quellcode fungieren die Makros des Konfigurationsabschnitts ab Zeile 904. Der Konfigurationsabschnitt in Abbildung-3 unten enthält eine con()-Funktion, gefolgt von einem IRC-Befehl, der über den erstellten Socket gesendet wird.

Abbildung 3 – Katien-Konfiguration innerhalb der „main“-Funktion

Diese hartcodierte Zeichenkette kann als „Anker“ für die Erstellung eines Ghidra-Skripts dienen. Wenn wir also zuerst diese hartkodierte Zeichenkette identifizieren, können wir beispielsweise um eine bestimmte Anzahl von Bytes zurückspringen und landen im Konfigurationsbereich im Abschnitt .text (wo der eigentliche Code der Binärdatei gespeichert ist). Auch in Varianten wie Tsunami und Ziggystartux steht dieser hartkodierte Wert unterhalb des Konfigurationsabschnitts.

Abbildung-4 zeigt den Verweis der NICK-Zeichenfolge vom Abschnitt .rodata (links) auf den Abschnitt .text (rechts), mit dem wir genau dort landen, wo wir sein müssen, um die Konfigurationsinformationen zu identifizieren.

Abbildung 4 – Verweis auf die NICK-Zeichenkette

Ein kritischer Aspekt bei dieser Methodik ist, dass sie auch „spröde“ Skripte erzeugt. Wenn eine Zeichenkette beispielsweise nicht gefunden wird, würde das Ghidra-Skript die Anwendung beenden. Das Verständnis von Tools und Skripten zum Thema Reverse Engineering und den damit verbundenen Einschränkungen ist entscheidend, um feststellen zu können, wo Probleme auftreten können. Dabei spielt es keine Rolle, ob es sich um Tools handelt, die „lügen“, indem sie nicht die Daten anzeigen, die Sie erwarten, oder gar um etwas Kriminelles wie Anti-Reversing- oder Anti-Debugging-Techniken, die häufig von Malware-Programmierern eingesetzt werden. 

 

Skriptanalyse mit Ghidra – PwnKatien

Nachdem die manuelle Methodik nun besprochen wurde, können wir einen Blick auf die Ghidra-API-Dokumentation zur Verschriftlichung und Automatisierung unserer Analyse werfen. Der API-Befehl find in der FlatAPI von Ghidra ermöglicht das Durchsuchen des gesamten Adressbereichs nach einer bestimmten Zeichenkette. Es gibt noch weitere Funktionsdefinitionen dieses Befehls, die es ermöglichen, den Suchumfang auf eine bestimmte Start- und Endadresse zu beschränken. Durch die Verwendung der Benutzerzeichenkette IRC NICK identifizieren wir die Funktion main im Abschnitt .text der Binärdatei (falls sie nicht bereits bezeichnet ist) sowie Konfigurationsinformationen im Abschnitt .rodata. Abbildung 5 zeigt, ob die Zeichenkette identifiziert wurde, und verweist dann auf diese Zeichenkette.

Abbildung 5 – Verweise auf die NICK-Zeichenkette identifizieren

Als nächstes durchsucht das Ghidra-Skript die Verweise, die über die Funktion getReferencesTo erhalten wurden, und gibt Verweise auf verschiedene Konfigurationselemente innerhalb der Binärdatei aus. Wenn Ihre Binärdatei keine „main“-Funktion identifiziert hat, versucht dieses Skript, diese zu bezeichnen.

Schließlich werden die Offsets zu den Konfigurationsinformationen in der Ghidra-Konsole ausgegeben. Je nach Konfiguration des IRC-Bots kann es dabei in manchen Fällen zu Abweichungen um eine Handvoll Bytes kommen. Bei internen Tests auf verschiedenen Bots ist das Team von Lacework Labs jedoch durchgehend in den richtigen Abschnitten gelandet, um Daten abzurufen.

Abbildung 6 – Verweise und Offsets identifizieren

Durch die Ausführung dieses Ghidra-Skripts werden Inhalte in der Ghidra-Konsole angezeigt. Abbildung 7 unten zeigt die Ausführung des Ghidra-Skripts entlang der Adressen für verschiedene Konfigurationswerte. Die Adressen innerhalb der Konsole sind anklickbar, was eine schnelle Navigation zu den Ressourcen innerhalb der Abschnitte .text und .rodata der Binärdatei ermöglicht.

Abbildung 7 – Ausgabe der Ghidra-Konsole

 

Fazit

Nachdem Sie diesen manuellen Prozess der Identifizierung einer Zeichenkette als „Anker“ durchlaufen haben, ist es ein Kinderspiel, die Analyse und Identifizierung von Adressen und Werten, an denen Sie interessiert sind, über die Skripting-API von Ghidra zu automatisieren. 

Ein zusätzliches „Ätsch!“, mit dem Sie rechnen müssen, sind Änderungen am Quellcode, die von Malware-Programmierern vorgenommen werden. Lacework Labs hat Situationen identifiziert, in denen der Konfigurationsabschnitt der Domains und IPs verschlüsselt oder anderweitig verschleiert ist und zudem zahlreiche IRC-Server enthält, was zu einer falschen Berechnung im Offset dieses speziellen Ghidra-Skripts führt. Berücksichtigen Sie immer die Möglichkeiten Ihrer Tools und wie diese von einem Angreifer umgangen werden können.

Für weitere Inhalte dieser Art folgen Sie uns in den sozialen Medien unter @LaceworkLabs Twitter oder LinkedIn, um über unsere neuesten Forschungen auf dem Laufenden zu bleiben.