In letzter Zeit haben wir mehrere Stealer-Malware wie Remcos, DcRAT,AgentTesla, VIPKeyLogger, usw., die über eine steganografische Kampagne verbreitet wurden. Die Kampagne existiert zwar schon länger, ist aber noch nicht lange aktiv. Interessant ist die Art und Weise, wie der Angriff orchestriert wird.
In diesem Blog diskutieren wir die Verbreitung von Remcos und AsyncRAT über die von uns beobachtete Kampagne.
Infektionskette:
Die Infektionskette beginnt mit einer Phishing E-Mail mit einer Excel-Datei, die eine Sicherheitslücke in Excel ausnutzt und eine HTTP-Anfrage zum Download einer HTA-Datei stellt. Die HTA-Datei mit VBS-Code schreibt eine Batch-Datei, die eine Verbindung zu einer URL herstellt und ein weiteres verschleiertes VBS-Skript herunterlädt. Das VBS-Skript lädt eine JPG-Datei mit gepolsterter Base64-kodierter Second-Stage-Datei herunter. Nutzlast (bösartiger Loader) Datei, die dekodiert wird, und eine Funktion VAI wird über ein Skript aufgerufen. Die Loader-Datei, die eine URL und den Namen des Zielprozesses als Argument erhält, lädt eine umgekehrt base64-kodierte Datei herunter, die uns nach der Dekodierung die endgültige Nutzlast liefert.

Phishing-E-Mail: Der erste Angriffspunkt ist eine Phishing-E-Mail, die ein schädliches Excel-Dokument enthält, das sich als echte Datei tarnt und Benutzer dazu verleitet, den Anhang mit dem schädlichen Code zu öffnen.

Excel-Dokument mit schädlichem OLE-Paket:
Bei der Datei handelt es sich um einen Exploit, der die Sicherheitslücke CVE-2017-0199 ausnutzt. Sie enthält ein eingebettetes OLE2-Linkobjekt, das beim Öffnen der Datei eine HTTP-Anfrage ausgibt.

.HTA-Skript
Die .hta-Datei enthält VBS-Code (Abb. 4), der eine Batchdatei schreibt, die eine Verbindung zu einer eingefügten URL herstellt und eine VBS-Datei herunterlädt, bei der es sich um ein Skript mit einem großen Stück Müllcode handelt (Abb. 5).

Das Skript schreibt VBS-Skript2:

Nach der Entfernung des Junk-Codes und der Vereinfachung erhalten wir ein Base-64-codiertes Skript, das mit Powershell (Fig.6).


Beachten Sie, dass hier beim Aufrufen der VAI-Methode im ersten Argument eine URL übergeben wird, die in der Variable $deject gespeichert ist. Das fünfte Argument ist ebenfalls wichtig und wird später bei der Besprechung unserer zweiten Nutzlast, der Injector-DLL, besprochen.
Auf ähnliche Weise fanden wir AsyncRAT Bei der Verbreitung ist die ursprüngliche Kette meist dieselbe, wir konnten sie jedoch nicht zurückverfolgen. Im Fall von AsyncRAT tarnt sich das VBS-Skript als prnmngr.vbs und täuscht dem Benutzer vor, es sei ein echtes Skript, das Drucker oder Druckerverbindungen hinzufügt, entfernt und auflistet sowie den Standarddrucker einstellt und anzeigt. Dazwischen ist jedoch ein kleiner Teil Schadcode eingefügt, um Verdacht zu vermeiden.

Unten sehen Sie den Codeabschnitt, der das JPG-Bild von der fest codierten URL [hxxps://watchonlinehotvideos[.]top/omfg[.]jpg] heruntergeladen hat, ähnlich wie im vorherigen Fall erklärt


Wie wir es uns für das vorherige Skript notiert haben, ist hier das erste übergebene Argument unsere umgekehrte URL in der Variable $restoredtext und sieht aus wie ein Kauderwelschwert/eine zufällige Zeichenfolge, die in anderen Argumenten übergeben wird. Auch hier werden wir das fünfte Argument im Hinterkopf behalten.
In beiden Fällen wird Steganographie verwendet. Die heruntergeladene JPG-Datei (Abb. 11) tarnt sich als harmloses Bild, enthält aber Base64-kodierte Malware. Wie in Abb. 7 zu sehen ist, wird der Marker < > und < > um die gesamte schädliche Datei zu erhalten, die dann dekodiert wird.

Bei beiden Dateien handelt es sich um VB.NET-DLL-Dateien mit dem internen Dateinamen „Microsoft.Win32.TaskScheduler.dll“, möglicherweise um den Benutzern vorzugaukeln, dass es sich um eine Microsoft-DLL handelt.

Beide DLLs sind verschleiert, allerdings auf unterschiedlichen Ebenen. Die DLL, die wir aus Remcos Kampagne erhalten haben, enthält sogar einige gängige .NET-Funktionsnamen, die verschleiert sind, während andere Teile unverschlüsselt bleiben. Der Code der DLL war jedoch derselbe und machte dasselbe.
Der DLL-Code ist verschleiert, aber wir können die übergebenen Argumente sehen. Der Bedrohungsakteur rief die VAI-Methode mit 15 Argumenten auf. Basierend auf den übergebenen Argumenten verfügt die Methode über Funktionen wie das Laden einer weiteren ausführbaren Malware-Datei durch Process Hollowing, das Erstellen von Persistenz usw.

Das erste Argument, das im Skript (Abb. 7/Abb. 10) beim Aufrufen der Methode übergeben wird, ist unsere in der Variable $deject/$restoredtext gespeicherte URL, die hier als QBXtX übergeben wird.
Der Wert „Persistenz“ ist ein Nullwert bzw. ein Kauderwelsch. Der andere übergebene Wert wird als 1 dekodiert und an Delegate11.smethod_0 übergeben, das einen booleschen Wert zurückgibt. Der endgültige Wert ist also 0 und die Bedingung schlägt fehl. Daher gibt es keine Aktivität, die persistent bleibt.

Die umgekehrte URL, die im Argument QBXtX übergeben wird, ist in „text5“ gespeichert und wird umgekehrt. Mithilfe des Webclients werden die Daten in der Zeichenfolge „text6“ heruntergeladen, bei denen es sich um Base64-codierte Daten im umgekehrten Format handelt (Abb. 14). Dies ist unsere endgültige Nutzlast, die zusammen mit dem Pfad „C:\Windows\SysWOW64“ (decodiert aus Class219.smethod(10577)) von „caspol.exe“ / „msbuild.exe“ (fünftes Argument) als Argument an die Funktion „Tools.Ande“ übergeben wird. Diese Funktion führt die Prozessaushöhlung mit dem Zielprozess durch, der als fünftes Argument angegeben wird (Abb. 15).

Wie oben gezeigt, wird mithilfe der CreateProcess-API im angehaltenen Zustand ein neuer Prozess erstellt. Die Zuordnung des neu erstellten Prozesses wird mithilfe von NtUnmapViewOfSection aufgehoben und der Speicher mithilfe von VirtualAllocEx zugewiesen, in den anschließend der Schadcode eingeschleust wird. Mithilfe von SetThreadContext wird der Einstiegspunkt zum eingeschleusten Code hinzugefügt, und schließlich wird der Prozess mit ResumeThread fortgesetzt.
In unserem Fall ist die endgültige Nutzlast, die wir erhalten haben, ein Remcos- und AsyncRAT-Beispiel (Abb. 16).

Endgültige Nutzlast: Remcos
Remcos ist seit seiner Einführung im Jahr 2016 in der Malware-Welt präsent. Von der Version 1.0 bis zur neuesten Version ist Remcos aufgrund seiner Kernfunktionalität der Befehls- und Steuerungsfunktion immer noch relevant. Angefangen als Closed-Source-Tool, das als Fernsteuerungs- und Überwachungssoftware vermarktet wurde, hat Remcos eine lange Entwicklung hinter sich.
Remcos verfügen meist über einen Einstellungsblock mit einer Reihe von Konfigurationen, der verschlüsselt und im Ressourcenbereich „EINSTELLUNGEN“ gespeichert ist. Er wird beim Start entschlüsselt und initialisiert Remcos mit dem Einstellungsblock.


Remcos verbindet sich mit C2 für die C&C-Kommunikation und wartet weiterhin auf die vom Angreifer gesendeten Befehle. Die wichtigsten Details aus den extrahierten Konfigurationsdaten lauten wie folgt:
C2: interestedthingsforkissinggirlwithloves[.]duckdns[.]org
Dateiname: Remcos.exe
Botnet-Name: zyno007
Mutex erstellt: Rmc-IB3RDF
Darüber hinaus wird in einigen Fällen beobachtet, dass Remcos auch Malware wie AgentTesla einsetzt.
Endgültige Nutzlast: AsyncRAT
AsyncRAT ist ein in C# geschriebener Remote Access Trojaner (RAT), der Standard-RAT- und Informationsdiebstahlfunktionen bietet, darunter die Möglichkeit, Tastatureingaben zu protokollieren, zusätzliche Nutzlast auszuführen/einzuschleusen, Befehls- und Steuerungsfunktionen usw.
Die Funktionen der Hintertür basieren auf der eingebetteten Konfiguration. Wie in der folgenden Abbildung (Abb. 19) zu sehen ist, beginnt die Ausführung mit einer De_lay-Funktion, die die Ruhedauer definiert, hauptsächlich um Sandboxen zu umgehen.

Die Funktion InitializeSettings() greift hier auf die gesamte fest codierte Konfiguration zu, die AES-verschlüsselt ist.

Die Funktion verifyhash() (Abb. 20) prüft abschließend anhand des Serverzertifikats und der Serversignatur, ob die Konfigurationen gültig sind. Die wichtigsten Details aus den extrahierten Konfigurationsdaten sind wie folgt:
Anschlüsse: 7878
Gastgeber:148[.]113[.]214[.]176
Version: 1.0.7
MTX: asasasas2242dqwe
Pastebin: null
Gruppe:Diama
Der Pastebin-Wert wird von der API „WebClient.DownloadString“ (Abb. 21) verwendet, die zusätzliche Ressourcen und andere Nutzdaten von Pastebin oder anderen Domänen herunterladen kann. In unserem Fall ist er null, daher werden Hosts und Port aus der Konfiguration ausgewählt und eine Socket-Verbindung zur Interaktion mit C2 verwendet.

IOCS:
| Remcos IOCs |
| 9d66405aebff0080cc5d28a1684d501fa7e183dc8b6340475fc06845509cb466 |
| 42813b301da721c34ca1aca29ce2e4c7d71ae580b519a3332a4ba71870b6a58e |
| f67c6341bfe37f5b05c00a0dda738f472fdabd6ea94ca8dc761f57f11ce12036 |
| aed291c023c3514fb97b4e08e291e03f52de91a2a8d311491b4ab8299db0aa0f |
| faed55ed0102b1b2e3d853e8633abecbb9cec6a5f41c630097d8eaeefafba060 |
| C2: interestedthingsforkissinggirlwithloves[.]duckdns[.]org |
| C2: freebirdkissingonmylipswithnicefeelings[.]duckdns[.]org |
| AsyncRAT |
| b8fc29c02005c84131f34de083c2e81cdf615ff405877f9e73400bf35513c053 |
| 2d4ab87f9ea104075d372f4c211b1fb89adec60208d370b8fb2d748e1a73186c |
| b2e8f720740bbd46f6ae3f450f265ace1044fe232141fbd84f269eafeb290812 |
| a582e7e5b3ac37895e7cf484aaa8ea477deb90d99b47b2d9bfc018c604573889 |
| C2: 148[.]113[.]214[.]176 |
Erkennungen:
Backdoor.Remcos
Backdoor.MsilFC.S13564499
Trojan.loaderCiR
MITRE-ANGRIFF-TTPs:
| Taktik | Technik-ID | Name |
| Erstzugriff (TA0001) | T1566 | Phishing |
| Ausführung (TA0002) |
T1204 |
Benutzerausführung |
| Persistenz (TA0003) | T1547.001 | Registrierungsschlüssel ausführen/Startordner |
| Verteidigungsflucht (TA0005) | T1055 | Prozessinjektion |
| T1027 | Verschleierte Dateien oder Informationen | |
| T1036.004 | Maskierung von Aufgaben oder Diensten | |
| Entdeckung (TA0007) | T1614 | Erkennung des Systemstandorts |
| Exfiltration (TA0010) | T1041 | Exfiltration über den Command-and-Control-Kanal |
| Befehl und Kontrolle (TA0011) | T1001.0012 | Steganographie |
Fazit:
In diesem Blogbeitrag haben wir die vollständige Angriffskette der jüngsten Steganographic-Kampagne besprochen, bei der sich herausstellte, dass eine harmlos aussehende JPG-Datei eine Injector-DLL mit schädlichen Funktionen enthielt. Wir haben außerdem untersucht, wie jede schädliche Nutzlast sorgfältig heruntergeladen und methodisch ausgeführt wurde. Der Angriff basierte stark auf ausgeklügelten Maskierungstechniken, die selbst erfahrene Benutzer oft täuschen können. Wie üblich begann die Ereigniskette mit einer Phishing-E-Mail, die einen Exploit enthielt, der über mehrere Stufen schließlich RemcosRAT/AsyncRAT ausbrachte (mit der Möglichkeit, dass weitere RATs oder Backdoors auf ähnliche Weise verbreitet werden). Der Command-and-Control-Server kann in diesem Fall zusätzliche Nutzlasten ausbringen und so das System des Opfers weiter kompromittieren.
Diese Kampagne unterstreicht, wie wichtig es ist, wachsam zu bleiben und robuste Cybersicherheitspraktiken anzuwenden, um sowohl unsere Sicherheit als auch die Integrität unserer Daten zu gewährleisten.
Autor:
Kirti Kshatriya
Mitverfasser:
Manoj Kumar Neelamegam



