Loading...
Blogs & Stories

SpiderLabs-Blog

Mit mehr als einer halben Million Lesern pro Jahr ist dies die Anlaufstelle der Sicherheitsgemeinschaft für technische Informationen zu den neuesten Bedrohungen, Informationen zu kritischen Sicherheitslücken und aktuellen Forschungsergebnissen.

Pingback: Backdoor am Ende des ICMP-Tunnels

Einleitung

In diesem Beitrag analysieren wir einen Teil einer Malware, auf die wir kürzlich bei der Untersuchung einer Sicherheitsverletzung gestoßen sind. Was unsere Aufmerksamkeit erregte, war die Beständigkeit der Malware, wie sie ICMP-Tunneling für ihre Backdoor-Kommunikation nutzte und wie sie mit verschiedenen Modi arbeitete, um ihre Chancen auf einen erfolgreichen Angriff zu erhöhen. Malware, die ICMP verwendet, ist nicht neu, aber relativ ungewöhnlich. Daher – und aufgrund bestimmter Zeichenfolgen – haben wir beschlossen, diese Malware „Pingback“ zu nennen. Im Folgenden beschreiben wir, wie die Protokolle von Pingback funktionieren, und stellen Beispielcode zur Verfügung, der zeigt, wie wir mit der Malware interagiert haben.

Zunächst sehen wir uns an, wie Pingback durch DLL-Hijacking Persistenz erreicht.

Persistenz durch DLL-Hijacking

DLL (Dynamic Link Library)-Hijacking ist eine Technik, bei der eine legitime Anwendung zum Vorladen einer schädlichen DLL-Datei verwendet wird. Angreifer missbrauchen häufig die DLL-Suchreihenfolge von Windows und nutzen diese, um eine schädliche DLL-Datei anstelle der legitimen Datei zu laden.

Bei der von uns untersuchten Datei handelte es sich um eine DLL-Datei namens oci.dll. Während unserer ersten Untersuchung wussten wir bereits, dass die Datei verdächtig ist. Wir konnten jedoch nicht herausfinden, wie sie in das System gelangte, da die DLL nicht über die herkömmliche rundll32.exe geladen wurde.

Bild 1: oci.dll Datei-Informationen

 

Später fanden wir heraus, dass die Datei über einen legitimen Dienst namens msdtc (auch bekannt als Microsoft Distributed Transaction Coordinator) geladen wurde. Dieser Dienst koordiniert, wie der Name schon sagt, Transaktionen, die sich über mehrere Maschinen erstrecken, z.B. Datenbanken, Message Queues und File-Systeme.

Es stellte sich heraus, dass der msdtc-Dienst oci.dll indirekt über MSDTCTM.DLL lädt. Diese lädt eine ODBC-Bibliothek, um Oracle-Datenbanken mit dem Namen MTXOCI.DLL zu unterstützen. Diese Bibliothek sucht und versucht, drei Oracle ODBC-DLLs zu laden: oci.dll, SqlLib80.dll und xa80.dll.

Bild 2: Schadhafte oci.dll wird indirect vom msdtc-Dienst geladen.

 

Bild 3: MTxOCI.DLL lädt drei Plugin-DLLs, die die Oracle-ODBC-Schnittstelle unterstützen.

 

Standardmäßig sind die drei Oracle-DLLs nicht im Windows-Systemverzeichnis vorhanden. Theoretisch kann ein Angreifer mit Systemberechtigungen eine schadhafte DLL ablegen und unter Verwendung eines der von MTxOCI geladenen DLL-Dateinamen speichern. Wir haben versucht, alle drei DLL-Dateinamen abzulegen, aber nur oci.dll wurde vom Dienst erfolgreich geladen.

Bild 4: oci.dll läuft im Hintergrund und wird von msdtc.exe geladen.

 

msdtc wird beim Start standardmäßig nicht ausgeführt. Um persistent zu bleiben, muss der msdtc-Dienst so konfiguriert werden, dass er automatisch startet. So benötigt der Angreifer Systemberechtigungen, um den msdtc-Starttyp neu zu konfigurieren. Dies kann manuell per SC-Befehl, über schadhafte Skripts oder über einen Malware-Installer erfolgen.

Unsere Theorie ist, dass die Malware von einer separat ausführbaren Datei installiert wurde. Tatsächlich haben wir bei unserer Suche in VirusTotal ein Sample mit ähnlichen IOCs gefunden, das oci.dll im Windows-Systemverzeichnis installiert und dann den msdtc-Dienst so einstellt, dass er automatisch startet.

Bild 5: Ein Loader, der den msdtc-Dienst so konfiguriert, dass er automatisch startet

 

Während unserer Analyse haben wir außerdem festgestellt, dass der VMTools-Dienst in einer VMware-Umgebung auch MTXOCI und schließlich die schadhafte OCI.DLL lädt.

Bild 6: Im Process Explorer haben wir festgestellt, dass OCI.DLL auch vom VMTools-Dienst in einer VMware-Umgebung geladen wird.

 

Bevor wir uns nun Pingback selbst und seiner Funktionsweise zuwenden, erklären wir zunächst, was ICMP ist und wie ICMP-Tunneling funktioniert.

ICMP-Grundlagen

Das Internet Control Message Protocol (ICMP) ist ein Protokoll der Netzwerkebene, das hauptsächlich von Netzwerkgeräten zu Diagnose- und Steuerungszwecken genutzt wird. Es wird in Dienstprogrammen wie Ping verwendet, um die Erreichbarkeit und Roundtrip-Zeit, Traceroute und Path MTU Discovery zu ermitteln, um eine Paketfragmentierung zu vermeiden und die Leistung zu verbessern. ICMP kann auch von Cyberkriminellen missbraucht werden, um die Netzwerkumgebung eines Ziels zu scannen und abzubilden. Dies ist einer der Gründe, warum es einige Debatten darüber gibt, ob ICMP deaktiviert werden sollte oder nicht. In den meisten Fällen achten Benutzer zudem nicht auf ICMP-Pakete, da sie keine offenen Ports auf dem Computer anzeigen.

Die Malware Pingback, die im Mittelpunkt unserer Untersuchung stand, verwendet das ICMP-Protokoll für ihre Hauptkommunikation. Sie bleibt für den Benutzer verborgen, da Ports von netstat nicht aufgelistet werden können. Im Folgenden wird detailliert beschrieben, wie Pingback das ICMP-Protokoll verwendet, um Daten zwischen dem infizierten Host und dem Host des Angreifers hin und her zu schicken; eine Technik namens ICMP-Tunneling.

Um ICMP-Tunneling zu erklären, müssen wir zunächst erklären, was man unter einem ICMP-Paket versteht:

Bild 7: Ein Diagramm eines ICMP-Pakets; die ICMP-Datengröße variiert. Wir gehen davon aus, dass die maximale IP-Übertragungseinheit 1.500 Byte beträgt. Die Paketgrößenbeschränkung für ICMP-Daten ist die maximal zulässige Größe eines IPv4-Netzwerkpakets abzüglich des 20-Byte-IP-Header und des 8-Byte-ICMP-Header.

 

Ein ICMP-Paket wird auf der IP-Ebene aufgebaut und verfügt über einen 8-Byte-ICMP-Header. Die Paketgrößenbeschränkung für ICMP-Daten ist die maximal zulässige Größe eines IPv4-Netzwerkpakets abzüglich des 20-Byte-IP-Header und des 8-Byte-ICMP-Header – oder ungefähr 64K. Die ICMP-Daten werden durch den Nachrichtentyp bestimmt. Die Nachrichtentypen sind hier definiert: https://www.iana.org/assignments/icmp-parameters/icmp-parameters.xhtml

Ein ICMP-Tunnel nutzt hauptsächlich diese zwei Typen:

Code Typ Beschreibung
0 Echo Reply  ping reply
8 Echo  ping

 

In der folgenden Abbildung definiert ein Echo-Paket-Header den ICMP-Typ, den Code, die Prüfsumme, die Kennung und die Sequenznummer. Schließlich kann ein Angreifer im ICMP-Datenbereich beliebige Daten einklinken, die an einen Remote-Host gesendet werden sollen. Dieser antwortet auf die gleiche Weise, indem er eine Antwort in ein anderes ICMP-Paket einklinkt und es zurücksendet.

Bild 8: ICMP-Paket; die Größe der vom Angreifer gesendeten ICMP-Daten beträgt immer 788 Bytes.

 

Bild 9: Paketerfassung des ICMP-Pakets des Angreifers

ICMP-Tunneling

Nachdem wir die Grundlagen dargelegt haben und nun wissen, wie ein Angreifer Daten in ICMP-Pakete einklinkt, können wir erklären, wie genau diese Malware funktioniert.

Pingback verwendet speziell die Echo (Ping-)Request oder die ICMP-Nachricht vom Typ 8. Es wird ein Sniffer für jede IP-Adresse auf dem Host gestartet, der einen Thread erzeugt, um Pakete auf jeder einzelnen IP-Adresse zu sniffen. Um zwischen eigenen und anderen Paketen zu unterscheiden, ignoriert der Sniffer alles, was kein ICMP-Echo-Paket ist und nicht die ICMP-Sequenznummer 1234, 1235 oder 1236 enthält. Er ignoriert auch Pakete, die nicht für die angegebene IP-Adresse bestimmt sind.

Anschließend werden die Daten im folgenden Format interpretiert:

Bild 10: Die ICMP-Daten der Malware werden durch diese C-Struktur dargestellt. Detaillierte Informationen zu den Feldern cmd und cmd_line finden Sie im Anhang.

 

Die Sequenz wird als Nachrichtentyp für die einzelnen ICMP-Daten verwendet. Derzeit werden drei Nachrichtentypen unterstützt:

  • 1234 – Das Paket enthält einen Befehl oder Daten.
  • 1235 and 1236 – nur für die reine ICMP-Paketkommunikation verwendet; 1235, als die Daten am anderen Ende empfangen wurden, und 1236, als neue Daten von der Malware empfangen wurden.

Pingback unterstützt mehrere Befehle, darunter:

  • shelleine Shell ausführen
  • downloadEs stehen drei verschiedene Download-Modi zur Verfügung:
    • Modus 1: Der infizierte Host stellt eine Verbindung zum Host des Angreifers her (funktioniert gut, wenn eingehende TCP-Verbindungen von der Firewall blockiert werden).
    • Modus 2: Der infizierte Host öffnet einen Socket auf einem bestimmten Port und wartet darauf, dass der Angreifer eine Verbindung herstellt.
    • Modus 3: Rein ICMP-basiert, dies ist jedoch sehr langsam und die aktuelle Implementierung ist in Bezug auf die Flow Control nicht sehr zuverlässig.
  • uploadunterstützt ebenfalls drei verschiedene Modi, ähnlich wie der Download-Befehl.
  • execBefehl auf dem infizierten Host ausführen

Sie können sehen, dass Pingback eine Kombination aus ICMP zum Initiieren eines der Befehle und TCP verwendet, um eine bessere Leistung und Zuverlässigkeit zu erzielen. Ein reiner ICMP-Modus ist ebenfalls vorhanden, ist jedoch nicht sehr zuverlässig.

Protokoll-Beispiel

Um eine Datei im Modus 1 herunterzuladen, führt der Angreifer Folgendes aus:

  • Einen Socket erstellen und auf einem Port lauschen
  • Folgendes ICMP-Paket senden:
    • ICMP-Echo-Request mit Sequenz 1234
    • Payload enthält: „download“, Name der herunterzuladenden Datei, IP-Adresse und Port des neu erstellten Sockets, an den die Malware die Datei streamen wird.
  • Auf Verbindungen warten und Daten empfangen. Es gibt hier ein zusätzliches Protokoll, das relativ einfach ist (senden und empfangen) und auf den „END\x00“-String wartet.

Wir haben eine Quelle bereitgestellt, um alle drei Modi und die meisten von Pingback unterstützten Befehle zu demonstrieren.

Die Quelle ist hier verfügbar:

https://github.com/SpiderLabs/pingback

Wir haben auch ein Video vorbereitet, das zeigt, wie unser Client mit der Malware interagiert, die in einem isolierten infizierten System ausgeführt wird.

Schlusswort

ICMP-Tunneling ist nicht neu. Dieses spezielle Beispiel hat allerdings unser Interesse geweckt, da es ein reales Beispiel für Malware ist, die diese Technik verwendet, um der Erkennung zu entgehen. In der „realen Welt“ ist ICMP für die Diagnose und Performance von IP-Verbindungen nützlich. Es ist sehr hilfreich, sie zu aktivieren, allerdings müssen hier immer reale Bedrohungen im Blick behalten werden. Wir schlagen zwar nicht vor, ICMP zu deaktivieren, wir empfehlen jedoch, Monitoring einzurichten, um solche verdeckten Kommunikationen über ICMP zu erkennen.

Für Netzwerkadministratoren und Fachpersonal kann eine Regel implementiert werden, um zu überprüfen, ob ein Paket ein ICMP-Echo (Typ 8) ist, die Datengröße 788 Byte oder mehr beträgt und ob die ICMP-Sequenznummer 1234, 1235 oder 1236 lautet. Backdoor-Befehls-Strings wie „download“, „upload“, „exec“, „exep“, „rexec“ und „shell“, die in einem ICMP-Datenpaket enthalten sind, können ebenfalls markiert werden. Trustwave Managed IDS-Geräte können diesen schadhaften Datenverkehr ebenfalls erkennen.

Schließlich gelangte diese Malware nicht über ICMP in das Netzwerk, sondern nutzt ICMP für die verdeckte Bot-Kommunikation. Der ursprüngliche Eintrittsvektor wird noch untersucht.

Anhang

cmd – Bot-Befehle und kann einer der folgenden sein:

  • exep (execute process) – ein Binary/Befehl auf dem Remote-Host ausführen
  • download (Download Modus 1) – Die erste Verbindung des Angreifers erfolgt über ICMP und erscheint als Ping-Paket. Das ICMP-Echo-Paket enthält Daten, die den Host und den Port des Angreifers angeben, zu dem die Malware eine Verbindung herstellt. Die ICMP-Daten enthalten auch einen Dateipfad, den der Angreifer anfordert. Anhand der Host- und Port-Informationen erstellt die Malware einen neuen Socket und überträgt dann die angeforderte Datei zurück an den Angreifer.
  • upload (Upload Modus 1) – Die erste Verbindung des Angreifers wird über ICMP hergestellt. Die Malware empfängt die erste Verbindung und verbindet sich dann wieder mit dem im ICMP-Echo-Paket angegebenen Host und Port des Angreifers. Sie empfängt dann die Datei vom Angreifer, die auf der lokalen Festplatte des infizierten Systems gespeichert werden soll.
  • download2 (Download Modus 2) – Das erste ICMP-Paket wird vom Angreifer gesendet. Das ICMP-Echo-Paket enthält den angeforderten Dateinamen und Pfad im infizierten System. Außerdem enthält es eine Portnummer, an die sich die Malware binden und die sie abhören wird. Die Malware wartet dann darauf, dass der Angreifer eine Verbindung herstellt, und beginnt danach mit der Übertragung der angeforderten Datei.
  • upload2 – (Upload Modus 2) – Das erste ICMP-Paket wird vom Angreifer gesendet. Das ICMP-Echo-Paket enthält den Dateinamen der zu empfangenden Datei. Es enthält auch eine Portnummer, an die sich die Malware binden und die sie abhören wird. Die Malware erstellt dann die Datei auf dem Remote-Host und wartet darauf, dass der Angreifer eine Verbindung herstellt. Sobald die Verbindung hergestellt ist, beginnt der Angreifer mit der Übertragung des Dateiinhalts an den Remote-Host.
  • download3 (Download Modus 3) – Eine Datei wird ausschließlich über ICMP-Daten an den Angreifer gesendet. Obwohl dieser Modus verdeckter ist, da er nur als Ping-Pakete erscheint, ist dies langsamer als die direkte Verwendung von TCP, da jeweils nur ein Paket übertragen werden kann. Die Malware muss auf eine Bestätigung durch den Angreifer warten.
  • upload3 (Upload Modus 3) – Wie Download-Modus 3, allerdings lädt der Angreifer die Datei nur über ICMP hoch; auch langsamer und unzuverlässiger, aber verdeckter als andere Modi.
  • shell – Malware auffordern, sich mit einer Shell zurück zum Angreifer zu verbinden. Die erste Anfrage erfolgt über ein ICMP-Paket, das Informationen wie die Host-IP des Angreifers und den Port enthält, zu dem die Malware eine TCP-Verbindung herstellt.

cmd_line - Im exep-Befehl enthält diese Variable den Befehl, der auf dem Remote-Host ausgeführt werden soll. Während des Download- und Upload-Befehls enthält diese Variable den Namen der Remote-Datei.

IOC:

Datei:

Filename: Oci.dll
SHA256: E50943D9F361830502DCFDB00971CBEE76877AA73665245427D817047523667F
PDB path: c:\Users\XL\Documents\Visual Studio 2008\Projects\PingBackService0509\x64\Release\PingBackService0509.pdb

Netzwerk:

Source: <Attacker IP address>
Destination: <Target host>
ICMP Type: 8
Sequence Number: 1234|1235|1236
Data size: 788 bytes

PCAP: https://github.com/SpiderLabs/IOCs-IDPS/tree/master/Pingback

Yara:

rule PingBack
{
    meta:
        description = "This rule detects PingBack malware"
        author = "Trustwave SpiderLabs"
        date = "May 4th, 2021"
    
    strings:
        $string1 = "Sniffer ok!" ascii
        $string2 = "lock2" ascii
        $string3 = "recvfrom failed" ascii
        $string4 = "rexec" ascii
        $string5 = "exep" ascii
        $string6= "download" ascii
        $string7 = "download2" ascii
        $string8 = "download3" ascii
        $string9 = "upload" ascii
        $string10 = "upload2" ascii
        $string11 = "upload3" ascii
        $string12 = "cmd.exe" ascii
        $string13 = "PingBackService" ascii
    
    condition:
        all of them
}

 

Verwandte SpiderLabs-Blogs