28. März 2025

Eine alte, neue Bedrohung: SharpRhino

Zusammenfassung

  • SharpRhino basiert auf dem Open-Source-Projekt „ThunderShell“
  • Opfer erhalten einen NSIS-Installer, der PowerShell-Skripte ablegt
  • Powershell-Skripte enthalten kodierte .NET-Assemblys
  • NET-Payload wird zur Kommunikation mit dem C2-Server verwendet
  • Kann Befehle remote ausführen
  • Der Netzwerkverkehr wird mit RC4 verschlüsselt und im Base64-Format kodiert

Einleitung

Hunters International, eine berüchtigte Hackergruppe, die für ihre Ransomware-as-a-Service-Aktivitäten bekannt ist, setzt eine neue RAT-Malware ein. Der erste Angriff mit dieser Malware wurde Anfang August 2024 entdeckt. Aufgrund der verwendeten Programmiersprache C# wurde sie SharpRhino genannt. Der Trojaner wird den Opfern als legitime Software geliefert und ermöglicht den Remote-Zugriff auf ihre Computer. Mit dieser Software können Cyberkriminelle verschiedene Befehle ausführen und weitere Malware verbreiten.

Technische Details

Überblick

Die untersuchte Variante wird als Installer an die Opfer ausgeliefert, der mit dem Nullsoft Scriptable Install System (NSIS) erstellt wurde. Die Datei hat die Bezeichnung „Angryip.org“ und verfügt über ein gültiges digitales Zertifikat, der Firmenname ist jedoch gefälscht und existiert nicht.

Acronis

Dieser Installer enthält einen weiteren Installer, ein kennwortgeschütztes Archiv und zusätzliche Dateien, die bei der Ausführung der Malware verwendet werden.

Acronis

Installation

Wenn der Installer ausgeführt wird, legt er alle eingebetteten Dateien im Ordner „C:\ProgramData\Microsoft\WindowsUpdate24“ ab und führt die Datei „ipscan-3.9.1-setup.exe“ aus, bei der es sich um einen Installer für die legitime Software „Angry IP Scanner“ handelt.

Acronis

Während die Benutzer:innen durch diesen Installer abgelenkt werden, extrahiert die Malware Dateien aus dem kennwortgeschützten Archiv „UpdateFull.zip“. Zum Entpacken des Archivs wird das eingebettete Programm „7za.exe“ verwendet. In der Befehlszeile sehen wir das Kennwort für das Archiv:

C:\ProgramData\Microsoft\WindowsUpdate24\7za.exe x C:\ProgramData\Microsoft\WindowsUpdate24\UpdateFull.7z -pTG98HJerxsdqWE45 -oC:\ProgramData\Microsoft\WindowsUpdate24

Das Archiv enthält den folgenden Inhalt:

Acronis

Die Variante erstellt nach dem Entpacken einen neuen Ordner (C:\ProgramData\Microsoft\LogUpdateWindows) und kopiert die aus dem Archiv extrahierten Dateien in diesen Ordner. Die Nutzung von zwei verschiedenen Installationsordnern kann Cyberkriminellen helfen, dauerhaft auf dem System zu bleiben, selbst wenn einer der Ordner gelöscht wird, da die Dateien in diesen Ordnern während des Ausführungsprozesses ähnlich sind.  Anschließend wird dem Pfad „HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run“ ein neuer Registry-Schlüssel hinzugefügt, der auf die Datei „Microsoft.AnyKey.lnk“ verweist. Diese Datei ist eine Verknüpfung und enthält das nächste Ziel:

C:\ProgramData\Microsoft\LogUpdateWindows\Microsoft.AnyKey.exe abnormal c:\programdata\%username%0 cmd /c C:\ProgramData\Microsoft\LogUpdateWindows\LogUpdate.bat

Bei der ausführbaren Datei „Microsoft.AnyKey.exe“, die ebenfalls aus dem Archiv stammt, handelt es sich um ein legitimes Programm, das Teil der Node.js-Tools für Visual Studio ist und den Namen „Microsoft.NodejsTools.PressAnyKey.exe“ trägt.

Ausführung

Die Dateien „LogUpdate.bat“ und „WindowsUpdate.bat“ haben die gleiche Funktion, laden aber unterschiedliche Dateien.

Acronis

Die Dateien „Wiaphoh7um.t“ und „kautix2aeX.t“ enthalten beide verschleierte Daten. Die Rohdaten und der Schlüssel sind für diese Dateien unterschiedlich, aber die Ergebnisdaten sind die gleichen. Nach der Entschlüsselung definiert die Variante diese Daten als .NET-Assembly und führt eine Methode mit einigen Parametern aus.

Acronis

Nachdem alle Daten aus dem Skript gespeichert wurden, können wir die nächsten Variablen beobachten:

Die Variablen $var1, $var2, $var3 bestimmen die referenzierten Assemblys und bilden durch Verkettung folgenden String:

System.Drawing.dllSystem.Web.Extensions.dllSystem.Windows.Forms.dll

$var4 ist für jede Datei unterschiedlich und enthält eine C2-Serveradresse. Es folgt eine Tabelle mit den Argumenten, die beim Aufruf der .NET-Assembly für jede Datei verwendet werden:

Acronis

„$fjwZrHB1k2RF“ ist eine .NET-Assembly, die in den Speicher geladen wird. Nach der Erstellung eines Absturzabbildes kann der C#-Code betrachtet werden. Das PowerShell-Skript ruft eine Funktion aus dem Namensraum „Bzxmlpi“ und der Klasse „OyrWkb“ auf. Am Anfang dieser Klasse fällt auf, dass einige zusätzliche Importe geladen werden und die Variablennamen nicht lesbar sind.

Acronis

Tatsächlich handelt es sich bei dieser Datei um eine modifizierte Version des Open-Source-Projekts „ThunderShell“. Am Quellprojekt wurden einige Änderungen vorgenommen:

  • Die Funktionen Keylogger, Screenshot und Laden von .NET-Assemblys sowie die Serverbefehle, die diese Funktionen repräsentieren, wurden entfernt.
  • Alle Klassen, Funktionen und Variablennamen wurden umbenannt.
  • Es wurden Standardwerte hinzugefügt, die verwendet werden, wenn der Payload ohne Argumente ausgeführt werden.
Acronis
Vergleich des Codes von SharpRhino und ThunderShell

Diese Funktion erzeugt zunächst einen zufälligen 16-Byte-String. Bei der Initialisierung der Klasse „Random“ verwendet die Variante das aktuelle Datum, die aktuelle Uhrzeit und die Prozess-ID als Seed. Anschließend werden einige Umgebungsvariablen wie COMPUTERNAME, USERDOMAIN und USERNAME abgefragt. Alle diese Daten werden formatiert:

Acronis

Als Ergebnis wird der folgende String erzeugt:

Acronis

Als nächstes übergibt die Variante diesen String an eine Funktion, die ihn an den Server sendet. Diese Funktion verschlüsselt die Daten mit einem RC4-Schlüssel, der als zweites Argument übergeben wird.

Acronis
RC4-Verschlüsselungsroutine

Nach der Verschlüsselung werden einige Daten an die Anfrage angehängt und der verschlüsselte String im Base64-Format kodiert. Alle diese Daten werden dann an den Server gesendet.

Acronis

Bei dieser ersten Verbindung wird die Antwort des Servers ignoriert. Wenn die Variante in eine Schleife gerät, verbindet sie sich erneut mit dem Server, aber beide Argumente sind „null“. Anschließend wird die Antwort gespeichert und mit den gespeicherten Werten verglichen. Wenn der Befehl „delay“ empfangen wird, nimmt die Variante ein zusätzliches Argument an und ändert den Wert, der an die Funktion „sleep“ übergeben wird. Wird der Befehl „exit“ empfangen, wird die Schleife unterbrochen und die Ausführung beendet. Wenn die Malware andere Daten als „delay“ oder „exit“ empfängt, erstellt sie einen neuen Thread mit einer Funktion, die die empfangenen Daten als Argument erhält. Alle diese Aktionen werden mit einer Verzögerung von 95 Sekunden zwischen jedem Schleifendurchlauf wiederholt.

Acronis

Die vom Server erhaltene Antwort wird an die Deserialisierungsfunktion in der Klasse „zWxFlnVASjHYb“ übergeben, die die folgenden Daten sammelt und speichert: „UUID“, „ID“ und „Data“.

Acronis

C2-Server

Um zu sehen, wie die Kommunikation funktioniert, können wir den Server aus dem Quellprojekt verwenden, da der Link in der Variante bereits offline war. Zuerst müssen wir die Konfiguration des Servers ändern. Die Konfiguration enthält eine Reihe von Feldern, darunter die IP-Adresse des Servers, den Verschlüsselungsschlüssel, die GUI-Einstellungen und die HTTP- und HTTPS-Einstellungen. Dann müssen wir die Parameter „callback-url“, „gui-host“ und „encryption-key“ ändern. Die Parameter für den Codierungsschlüssel entnehmen wir einer Variante von SharpRhino.

Acronis

Der Server ist eine Python-Applikation und benötigt einen laufenden Redis-Server. Nach dem Start werden einige Informationen über den Server ausgegeben.

Acronis

Dazu gehört eine Web-GUI-Adresse. Nach dem Öffnen müssen sich die Benutzer:innen zunächst anmelden. Der eingegebene Benutzername spielt dabei keine Rolle. Es muss jedoch das Kennwort aus der Konfigurationsdatei verwendet werden. Nach der Anmeldung wird das Dashboard angezeigt. Es enthält Informationen über Sitzungen und Protokolle.

Acronis

Die Schaddaten können in der Web-GUI erstellt werden. Die IP-Adresse des Servers und der Payload-Typ müssen angegeben werden.

Acronis

Nach der Auswahl einer Sitzung können Angreifer:innen mit ihr interagieren. Durch Eingabe von „help“ werden alle unterstützten Befehle angezeigt, die in der Sitzung genutzt werden können.

Acronis

C2-Kommunikation

Diese Befehle haben vordefinierte Strings, die an die Daten angehängt werden, die die Angreifer:innen als Argumente eingeben. Bei der Verwendung von „shell [command]“ wird z. B. „cmd.exe /c“ an den Anfang des zu sendenden Strings angehängt. Ein weiteres Beispiel ist der Befehl „ps“, der das PowerShell-Skript an den Client sendet:

Acronis

Der Befehl wird RC4-verschlüsselt mit Base64-Kodierung an den Client gesendet. Er enthält die Parameter ID und UUID, wobei ID die Client-ID und UUID die Befehls-ID ist.

Acronis

Alle diese Daten werden an den neuen Thread übergeben. Die Funktion in diesem Thread verwendet PowerShell-Module, um die übergebenen Befehle auszuführen.

Acronis

Über die Pipeline erhält die Variante die Ausgabe des ausgeführten Befehls. Diese Daten werden dann verschlüsselt und zurück an den Server gesendet.

Acronis

Fazit

ThunderShell, ein älteres Open-Source-Projekt, das zuletzt vor fast vier Jahren aktualisiert wurde, wurde von Hunters International verwendet, um Malware an Opfer zu verteilen. Die Malware kommt in Form eines Installers für das Dienstprogramm „Angry IP Scanner“, der bösartige PowerShell-Skripte ablegt und ausführt. Diese Skripte verwenden PowerShell-Funktionen, um kodierte .NET-Assemblys auszuführen, sodass keine zusätzliche kompilierte ausführbare Datei erforderlich ist – der schädliche Code wird im Speicher aufgerufen und ausgeführt.

Der Originalcode wurde zwar modifiziert, seine Hauptfunktion – die Remote-Ausführung von Befehlen auf Zielsystemen – blieb jedoch erhalten. Hier liegt die Gefahr solcher Open-Source-Projekte. Sie werden meist zu Lern- oder Pentesting-Zwecken entwickelt, aber für reale Angriffe eingesetzt.

Von Acronis erkannt 

Acronis
Acronis

Kompromittierungsindikatoren (Indicators of Compromise, IoCs) 

Dateien

Dateiname
SHA256
ipscan-3.9.1-setup.exe
09b5e780227caa97a042be17450ead0242fd7f58f513158e26678c811d67e264
kautix2aeX.t
9a8967e9e5ed4ed99874bfed58dea8fa7d12c53f7521370b8476d8783ebe5021
LogUpdate.bat
d2e7729c64c0dac2309916ce95f6a8253ca7f3c7a2b92b452e7cfb69a601fbf6
UpdateFull.7z
fe07d238cd17be4b5f8396a27dc395e675732be17aed103033fff56c18009e6d
Wiaphoh7um.t
3f1443be65525bd71d13341017e469c3e124e6f06b09ae4da67fdeaa6b6c381f
WindowsUpdate.bat
b57ec2ea899a92598e8ea492945f8f834dd9911cff425abf6d48c660e747d722

Netzwerkindikatoren

URL
https://cdn-server-1.xiren77418.workers.dev
https://cdn-server-2.wesoc40288.workers.dev