Analyse des Verhaltens des Pegasus-Trojaners im Netzwerk

Der Quellcode für den Pegasus-Banking-Trojaner wurde kürzlich veröffentlicht . Trotz der Erwähnung der Carbanak-Gruppe im Namen des Archivs bestritten Forscher von Minerva Labs die Beteiligung des Trojaners an dieser Gruppe und bewiesen ihre Beteiligung an der Buhtrap- Gruppe (Ratopak). Im Archiv finden Sie eine kurze Beschreibung der Arbeit des Trojaners, seiner Quellcodes, eine Beschreibung des Bankzahlungssystems und die Daten der Mitarbeiter vieler russischer Banken.

Die Quellcode-Architektur dieser Malware ist sehr interessant. Die Funktionalität ist in Module unterteilt, die bei der Kompilierung zu einem einzigen „Binpack“ zusammengefasst werden. Der Kompilierungsprozess umfasst auch das Signieren ausführbarer Dateien mit einem Zertifikat aus der Datei tric.pfx, die sich nicht im Archiv befindet.

Nicht weniger merkwürdig ist die Netzwerkaktivität von Pegasus, der nach einer Infektion versucht, sich innerhalb der Domäne zu verbreiten, und weiß, wie Daten mithilfe von Pipes und dem Mailslot-Transport zwischen Computern übertragen werden. Wir haben uns auf die Untersuchung der Funktionen der Netzwerkaktivität des Trojaners konzentriert und dem Produkt PT Network Attack Discovery schnell Pegasus-Erkennungen hinzugefügt. Auf diese Weise können alle Benutzer die Aktivität dieses Trojaners und seine Änderungen in ihrem Netzwerk rechtzeitig erkennen. In diesem Artikel werde ich eine detaillierte Beschreibung der Netzwerkverteilungsmechanismen und der Interaktion zwischen Kopien von Pegasus geben.



Intro


Auf dem Computer injiziert das Hauptmodul InstallerExe den Code mithilfe der Process Hollowing-Technik in svchost.exe. Nach der Initialisierung der Hauptmodule startet Pegasus mehrere parallele Prozesse:

  1. Domänenreplikation - befasst sich mit Informationen innerhalb des Netzwerks und versucht, diese auf andere Windows-Computer zu übertragen.
  2. Der Mailslot-Listener wartet auf Broadcast-Maillot-Nachrichten, über die Pegasus abgebaute Konten versendet. Der Steckplatzname wird zur Kompilierungszeit generiert.
  3. Der Pipe Server Listener hört auf die Windows Pipe mit dem Namen, der im Namen des Computers generiert wurde. Diese Pipes werden hauptsächlich verwendet, um andere Pegasus-Kopien im Netzwerk und deren Interaktion zu erkennen.
  4. Anmeldekennwörter versuchen regelmäßig alle paar Minuten, Kontodaten mit einem Modul von Mimikatz zu sichern.
  5. Die Netzwerkkonnektivität ist für die Kommunikation mit dem CnC-Server und das regelmäßige Messaging verantwortlich.

// start transports which links data with our CB-manager pwInitPipeServerAsync(dcmGetServerCallback()); mwInitMailslotServer(dcmGetServerCallback()); ... // start broadcasting creds to other machines cmStartupNetworkBroadcaster(); 

Domänenreplikation


Eines der Subsysteme in Pegasus ist für die seitliche Bewegung in einem Windows-Netzwerk verantwortlich. Die Verteilung ist in zwei wichtige Schritte unterteilt:

  1. Erkennung benachbarter Autos.
  2. Replikationsversuch auf einen Computer.

Die Erkennung benachbarter Computer in einer Domäne erfolgt über zwei API-Aufrufe:

NetServerEnum, für das der Browserdienst erforderlich ist und WNetOpenEnum / WNetEnumResource aufgerufen wird.
Alle in der Domäne gefundenen Computer müssen gescannt werden, wenn sie bereits infiziert sind. Pegasus fragt den generierten Rohrnamen mehr als 20 Mal hintereinander alle 200 Millisekunden ab. Wir haben dieses abnormale Verhalten als einen der Indikatoren für die Pegasus-Aktivität in der Domäne verwendet. Nachdem keine Anzeichen einer Infektion festgestellt wurden, fährt die Malware mit dem nächsten Schritt fort - dem Replikationsversuch.

Die Replikation ist wie folgt. Unter Verwendung der gefundenen Konten (KM) auf dem Host versucht Pegasus, sich mit dem SMB-Protokoll für die IPC $ - und ADMIN $ -Bälle am Computer anzumelden. Wenn Zugriff auf IPC $ und kein Zugriff auf ADMIN $ besteht, kommt Pegasus zu dem Schluss, dass dies richtig ist Das Konto ist unzureichend und muss als ungültig markiert werden. Nachdem die Malware Zugriff auf den ADMIN $ ball erhalten hat, der ein Alias ​​für den Ordner% windir% ist, versucht sie, die Architektur des Computers zu ermitteln, um in Zukunft das entsprechende Modul verwenden zu können.

Der Architekturbestimmungsalgorithmus basiert auf PE-Dateikopfzeilen auf dem Remotecomputer. Als solche Datei versucht Pegasus, die ersten 4 Kilobyte notepad.exe aus dem Ordner% windir% zu lesen. Ein offensichtlicher Nachteil dieser Methode besteht darin, dass sich der Editor unter Windows Server 2012 im Pfad% windir% \ System32 befindet.

Speicherort notepad.exe unter Windows 7:

 C:\Users\Administrator>where notepad.exe C:\Windows\System32\notepad.exe C:\Windows\notepad.exe 

Unter Windows Server 2012:

 C:\Users\Administrator>where notepad.exe C:\Windows\System32\notepad.exe 

Wenn notepad.exe nicht erkannt wird, kann Pegasus den Server nicht infizieren, selbst wenn er über Kontoinformationen mit den erforderlichen Rechten verfügt. Das einfache Fehlen eines Notizblocks in% windir% kann die Verbreitung von Pegasus unter Windows Server 2012 stoppen. Die diesbezügliche Verwendung von regedit.exe ist zuverlässiger.

Nach erfolgreicher Definition der Architektur des Zielservers lädt Pegasus einen kleinen RSE-Dropper (Remote Service Exe) mit einer Größe von etwa 10 Kilobyte, dessen Aufgabe es ist, das Binpack von den Pegasus-Modulen in klarer Form über die Pipe zu laden und die Steuerung auf das Shellcode-Modul zu übertragen. Der Dropper-Name besteht pseudozufällig und besteht aus einer Folge von Hexadezimalzeichen mit einer Länge von 8 bis 15 Zeichen. Der Pseudozufallsgenerator wird abhängig vom Namen der Zielmaschine initialisiert und ist zwischen den Starts gleich, um ein mögliches Durcheinander von% windir% mit früheren Kopien der Pipette zu vermeiden.



Der Dropper wird vom Antivirus auf Integrität und mögliche Löschung überprüft. Anschließend wird er von einem der beiden implementierten Mechanismen - SCM oder WMI - gestartet. Zunächst versucht Pegasus, RSE über den WMI-Mechanismus zu starten, und verwendet dann nur den Service Control Manager (SCM). Dies liegt daran, dass SCM mehr Spuren in Windows-Protokollen hinterlässt. Die Entwickler von Pegasus planten auch andere Verteilungsmethoden - Wsh Remote, Powershell Remoting, Task Scheduler und ein Modul zur Ausführung von Befehlen über RDP waren in der Entwicklung.

Wie oben erwähnt, überprüft und öffnet der Dropper nach einem erfolgreichen Start die Pipe zum Abhören und überträgt die Steuerung auf die eingehende Nutzlast.



Da Pegasus-Code von der Process Hollowing-Methode in den Prozess svchost.exe eingefügt wird, sollte weder das ursprüngliche InstallerExe-Modul im Falle einer Primärinfektion noch der RSE-Dropper im Falle einer Verteilung auf der Festplatte verbleiben. Wenn die Pipette immer noch über einen bekannten Pfad zugänglich ist, entfernt Pegasus sie auf seine eigene Weise:

  1. Überschreiben des Inhalts der Datei mit zufälligen Daten;
  2. Überschreiben mit leeren Daten (Nullen);
  3. Datei umbenennen;
  4. Löschen von Dateien.



Nach einer erfolgreichen Infektion wird der Verteilungsprozess für die Domänenreplikation erneut gestartet.

Mailslot funktioniert


Nachdem Pegasus entweder von einer anderen Kopie von Pegasus oder vom Modul mod_LogonPasswords auf die Kontodaten zugegriffen hat, werden US-Daten nach Domänen gesendet. Die Verteilung erfolgt über den Mailslot-basierten SMB-Mechanismus, der die unidirektionale Übertragung eines kleinen Teils der Daten über eine Domäne ermöglicht. Die Verteilung erfolgt nach einem zufällig generierten Slotnamen. Damit alle infizierten Computer in der Domäne Daten unter einem einzigen Namen senden und empfangen können, wird der Pseudozufallsgenerator für Namen aus der in der Konfiguration während des Builds angegebenen Variablen TARGET_BUILDCHAIN_HASH initialisiert.

Da der Mailslot-Mechanismus die maximale Paketgröße begrenzt, wird nach dem Prinzip der letzten Mailing-Zeit jeweils nur ein KM gesendet: Unter allen verfügbaren KMs wird die Domain, deren letztes Mailing-Datum das älteste ist, von der Domain gesendet.

Daten in Mailslot werden nicht im Klartext übertragen, sondern in drei Ebenen der XOR-Verschlüsselung eingeschlossen, und die Schlüssel werden zusammen mit den Daten übertragen. Die erste Datenschicht ist der NetMessageEnvelope-Umschlag mit Datenintegritätsprüfung durch den SHA1-Algorithmus, der für alle über das lokale Netzwerk übertragenen Daten verwendet wird. 4 Datenbytes am Anfang des Pakets sind der Schlüssel, der durch Bitverschiebungen von 5 Bits nach rechts pro Zyklus geändert wird. Innerhalb des Umschlags befindet sich eine XOR-codierte Datenstruktur mit direkten US-Feldern und dem Datum, an dem sie hinzugefügt wurden. Der 8-Byte-Schlüssel befindet sich ebenfalls am Anfang der Struktur, wird jedoch ohne Offsets angewendet. Nach dem Dekodieren der KM-Struktur müssen nur noch die einzelnen Felder aus den ENC_BUFFER-Strukturen wie Computername, Domänenname, Benutzername und Kennwort deserialisiert werden. Diese Felder werden mit einem 8-Byte-Schlüssel mit Offsets verschlüsselt. Das Skript zum Entschlüsseln des Mailslot-Pakets und ein Beispiel für ein solches Paket finden Sie hier: Skript , PCAP .

Der Zeitraum für das Senden von Mailslot-Nachrichten in der Release-Version liegt zwischen 20 Sekunden und 11 Minuten.

 // some random wait before making next step DbgPrint("going to sleep"); #ifdef _DEBUG // debug - 2-5 s Sleep(rg.rgGetRnd(&rg, 2000, 5000)); #else // release - 20 - 650 s //Sleep(rg.rgGetRnd(&rg, 2000, 65000) * 10); Sleep(rg.rgGetRnd(&rg, 2000, 15000)); #endif 

Neben dem Austausch von Konten wird der Mailslot-Mechanismus verwendet, um nach einem infizierten Computer mit Internetzugang zu suchen und für den Internetzugang zu werben. Der NetMessageEnvelope-Umschlag speichert den Typ der gesendeten Nachricht. Der Datenaustausch zwischen der Maschine ohne Zugang und der Maschine mit Internetzugang erfolgt über die Leitungen.

Rohr funktioniert


Für die bidirektionale Kommunikation oder die Übertragung großer Datenmengen verwenden Pegasus-Kopien Pipes als Kommunikationskanal. Der Name der Pipe wird zwar ebenfalls von einem Pseudozufallsgenerator generiert, hängt jedoch vom Namen der Maschine und des Builds ab und ermöglicht es den Client- und Serverteilen, denselben Namen zu verwenden.

Bei der Einwegkommunikation, beispielsweise beim Übertragen von binpack während der Replikation auf einen anderen Computer, werden die Daten nicht verschlüsselt und im Klartext übertragen. Binpack beginnt mit einer SHELLCODE_CONTEXT-Struktur mit einer Länge von 561 Bytes.



Während der bidirektionalen Übertragung, beispielsweise beim Proxying von Daten zwischen einer Pegasus-Kopie ohne Internetzugang und einem CnC-Server, wird dieselbe NetMessageEnvelope-Umschlagstruktur mit XOR-Verschlüsselung verwendet wie im Fall von Mailslot, weil Sie können zwischen verschiedenen Nachrichtentypen im ID-Feld unterscheiden.

Architektonisch wird das Datenproxying über eine Anforderung durchgeführt, um einen Teil der Daten zu übertragen (PMI_SEND_QUERY), die Anforderungs-ID als Antwort zu empfangen und den Status der Aufgabe anhand der ID (PMI_CHECK_STATUS_QUERY) abzufragen. In der Regel wird eine andere Envelope-Struktur als Last übertragen, wobei verschiedene Funktionen und eine weitere Verschlüsselungsebene hinzugefügt werden.

Darüber hinaus endet die Arbeit mit Pipes nicht mit der Interaktion zwischen infizierten Computern. Das Modul mod_KBRI_hd fügt Code in die cmd.exe-Prozesse ein, die MoveFileExW-Aufrufe abfangen und alle kopierten Daten analysieren, da dies Teil des Zahlungsprozesses ist. Wenn die kopierte Datei Daten enthält, die für Angreifer von Interesse sind - Daten mit Zahlungen -, wird eine Benachrichtigung darüber an den CnC-Server gesendet. Die Kommunikation zwischen dem in cmd.exe eingefügten mod_KBRI-Modul und einer Kopie von Pegasus erfolgt innerhalb des infizierten Computers über eine Pipe, deren Name nicht generiert, sondern im Quellcode fest codiert ist:

 \.\pipe\pg0F9EC0DB75F67E1DBEFB3AFA2 

Die Funktionalität des Moduls umfasst auch das Ersetzen von Datenkonten im laufenden Betrieb gemäß der Vorlage. Ein Beispiel für Muster, nach denen im Screenshot gesucht werden soll.

CNC-Verkehr


Ein separater Stream ist für den direkten Datenaustausch mit dem CnC-Server verantwortlich, der alle paar Minuten die Warteschlange von Datenblöcken aus internen Prozessen oder anderen Kopien von Malware überprüft und an den Server sendet.

Während der Initialisierung des Moduls mod_NetworkConnectivity wird eine mehrstufige Überprüfung der Netzwerkverbindung durchgeführt:

1) Erkennen der Proxy-Server-Einstellungen und Versuch, eine Verbindung zu www.google.com herzustellen :

  • Im Registrierungszweig \\ Software \\ Microsoft \\ Windows \\ CurrentVersion \\ Interneteinstellungen.
  • Über WPAD (rufen Sie WinHttpGetProxyForUrl auf).
  • Über die Proxy-Konfiguration für den aktuellen Benutzer (rufen Sie WinHttpGetIEProxyConfigForCurrentUser auf).

2) Überprüfen der Verbindung mit Microsoft Update-Servern und zurückgegebenen Daten ( authrootseq.txt , authrootstl.cab , rootupd.exe )

3) Testen von HTTPS-Verbindungen mit einer von 6 Adressen:


Erst nachdem alle Prüfungen bestanden wurden, glaubt Pegasus, über den erforderlichen Zugriff auf das externe Netzwerk zu verfügen, und kann dies über die Mailslot-Domain mit einer Nachricht ankündigen. Darüber hinaus kann sich Pegasus nur während der Geschäftszeiten - von 9 bis 19 Uhr Ortszeit - verkleiden und mit dem CnC-Server kommunizieren.

Pegasus sendet Datenblöcke, die in einem Umschlag verpackt sind, mit der Berechnung des Hashs des Betrags in verschlüsselter Form unter Verwendung der DES-Verschlüsselung im CRYPT_MODE_CBC / PKCS5_PADDING-Modus. Der Verschlüsselungsschlüssel hängt nur von der Variablen während der Kompilierung ab. Daher können wir den Datenverkehr zwischen der Malware und dem Server entschlüsseln, indem wir nur dessen BUILDCHAIN_HASH kennen. Im Quellcode im Archiv hatte diese Variable den Wert 0x7393c9a643eb4a76. Ein Skript zum Entschlüsseln des Eincheckens in den Server und ein Beispiel für ein solches Paket finden Sie hier: Skript , PCAP .

Dieser Inhalt (Struktur INNER_ENVELOPE) wird beim Einchecken oder zusammen mit beliebigen Daten an den CnC-Server übertragen. Anfangs gibt es 28 Bytes einer Hüllkurve mit einem Längenfeld und einer SHA1-Summe.



Dieselben Daten werden während des Proxys durch Pipes zwischen Computern übertragen, jedoch in den uns bekannten NetMessageEnvelope-Umschlag mit einer Hash-Summe und XOR-Verschlüsselung eingeschlossen.

Der CnC-Operator kann Befehle zur Ausführung an Pegasus-Kopien und Nachrichten mit Befehlen oder anderen Daten senden. Beispielsweise kann EID_CREDENTIALS_LIST eigene Feldverschlüsselungsschichten enthalten, wie wir im Beispiel für Broadcast-Konten gesehen haben.

Erkennung


Zunächst waren wir daran interessiert, Pegasus-Aktivitäten im Netzwerk zu erkennen, und nachdem wir die Quellcodes sorgfältig untersucht und in der Testumgebung ausgeführt hatten, fanden wir die Netzwerkanomalien und -artefakte, die eindeutig auf das Vorhandensein dieser komplexen Malware im Netzwerk hinweisen. Pegasus kann wirklich als vielseitig bezeichnet werden - es verwendet aktiv das SMB-Protokoll, um Nachrichten zu senden und die Kommunikation mit anderen Kopien herzustellen, verteilt sich auf andere Computer und kommuniziert auf seine eigene spezielle Weise mit dem CnC-Server. Durch die Installation eines Peer-to-Peer-Netzwerks in der Domäne ebnen Kopien von Pegasus den Weg zum externen Netzwerk und kommunizieren mit dem CnC-Server, indem sie den Datenverkehr untereinander übertragen. Die Verwendung von Zertifikaten zum Signieren ausführbarer Dateien und der Zugriff auf Microsoft- und Mozilla-Ressourcen während der Verbindungsüberprüfung erschwert die Erkennung der Aktivität und Erkennung auf dem Host.

Das Pegasus-Quellcode-Projekt ist ziemlich gut strukturiert und beschrieben, sodass wir in naher Zukunft erwarten können, dass Teile seines Codes von anderen Schadprogrammen ausgeliehen werden und Änderungen auftreten.

Viele der Mechanismen für die Remote-Ausführung von Befehlen und die Suche nach Kontodaten blieben unrealisiert. Die Entwickler wollten außerdem die Möglichkeit hinzufügen, den Shellcode während der Implementierung im laufenden Betrieb zu ändern. Und das sind nicht alle ihre Ideen.

Wir haben mehrere Signaturen für PT NAD und IDS Suricata entwickelt, mit denen wir Pegasus-spezifische Netzwerkaktivitäten in verschiedenen Stadien ab den ersten Sekunden ihrer Aktivität identifizieren können. Sie finden offene Signaturen für Suricata IDS auf unserem Github und Twitter . Sie werden automatisch zu Ihren Suricata weitergeleitet, wenn Sie den Suricata-Update-Update-Mechanismus verwenden.

Wie die Signaturen für die Pegasus-Aktivität funktionieren, sehen Sie im folgenden Screenshot. Dies ist unser neues Produkt von PT Network Attack Discovery , das Vorfälle identifiziert und bei der Untersuchung hilft:



Darüber hinaus können die folgenden Kompromissindikatoren (IC) zur Erkennung verwendet werden:

  MAILSLOT \ 46CA075C165CBB2786 
 Pipe \ pg0F9EC0DB75F67E1DBEFB3AFA2

 hxxp: //denwer/pegasus/index.php
 hxxp: //mp3.ucrazy.org/music/index.php
 hxxp: //support.zakon-auto.net/tuning/index.asp
 hxxp: //video.tnt-online.info/tnt-comedy-tv/stream.php 

Gepostet von Cyril Shipulin von @attackdetection, Twitter | Telegramm

Source: https://habr.com/ru/post/de418017/


All Articles