Zusammenfassung
Die Play-Ransomware, auch bekannt als PlayCrypt, ist eine Ransomware, die erstmals im Juni 2022 auftauchte. Die Ransomware zielte auf Branchen wie das Gesundheitswesen und die Telekommunikation sowie auf ein breites Spektrum von Regionen wie Lateinamerika, Europa und Nordamerika ab. Die Play-Ransomware ist dafür bekannt, sich über kompromittierte gültige Konten oder durch Ausnutzen bestimmter Schwachstellen Zugriff auf Netzwerke zu verschaffen. Sobald es sich im Netzwerk befindet, nutzt es einen großen Pool bekannter Post-Exploitation-Tools, um seinen Angriff fortzusetzen. Tools wie Bloodhound, PsExec, Mimikatz und AdFind sind einige Beispiele für Tools, die zuvor bei Angriffen mit dieser Ransomware verwendet wurden.
Ein weiterer Aspekt, der die Malware berühmt macht, ist die Vielzahl an Anti-Analyse-Techniken, die sie in ihren Payloads verwendet, wie etwa der Missbrauch von SEH und die Verwendung von ROP zur Umleitung des Ausführungsflusses. Durch den Einsatz von Techniken zur Verlangsamung des Reverse-Engineering-Prozesses erschweren Bedrohungsakteure die Erkennung und Abwehr der Malware.
Bereits im Jahr 2022 veröffentlichten andere Forscher einen hervorragenden Blogbeitrag, in dem sie die Malware selbst und einige der von ihr verwendeten Anti-Analyse-Techniken analysierten. In diesem Blogbeitrag werfen wir erneut einen Blick auf die Anti-Analyse-Techniken der jüngsten Varianten der Play-Ransomware. Wir erklären, wie sie funktionieren und wie wir einige von ihnen mithilfe von Automatisierungsskripten besiegen können.
Renditeorientierte Programmierung (ROP)
Beim Reverse Engineering von Malware müssen wir zunächst sicherstellen, dass der Kontrollfluss nicht verschleiert wird, um die Malware richtig zu verstehen.
Um seinen Kontrollfluss zu verschleiern, verwendet die Play-Ransomware in ihrer Nutzlast häufig eine ROP-Technik. Dies geschieht durch den Aufruf von über hundert Funktionen, die den Wert oben auf dem Stapel patchen und dann den Ausführungsfluss dorthin umleiten. Bevor wir darüber sprechen, wie die Schadsoftware dies genau macht, schauen wir uns zunächst an, wie die Assembleranweisungen CALL und RET im Allgemeinen funktionieren.
Wenn ein CALL erfolgt (in diesem Fall genauer gesagt ein Near Call), schiebt der Prozessor den Wert des Befehlszeigerregisters (in diesem Fall EIP) in den Stapel und verzweigt dann zu der durch den Aufrufzieloperanden angegebenen Adresse, die in diesem Fall ein Offset relativ zum Befehlszeiger ist. Die Adresse im Befehlszeiger plus dieser Offset ergeben die Adresse der aufzurufenden Funktion.
Der RET-Befehl hingegen zeigt das Ende eines Funktionsaufrufs an. Dieser Befehl ist für die Übertragung des Programmkontrollflusses an die Adresse oben auf dem Stapel verantwortlich. Und ja, dies ist genau die Adresse, die ursprünglich durch den Aufrufbefehl gesendet wurde!
Unter Berücksichtigung des Gesagten wäre im Idealfall die hervorgehobene Adresse im Bild unten die nächste Anweisung, die nach einem Aufruf der Zielfunktion (sub_42a4b9) ausgeführt werden würde:
Wie die Malware die Funktionsweise der CALL- und RET-Anweisungen missbraucht, lässt sich im folgenden Bild beobachten:
Sobald die Funktion aufgerufen wird, wird die Adresse 0x42a4b4 in den Stapel geschoben, sodass ESP darauf zeigt. Die aufgerufene Funktion addiert dann den Wert 0xA zur von ESP angezeigten Adresse und kehrt anschließend mithilfe der RET-Anweisung zurück. Diese Vorgänge führen dazu, dass der Kontrollfluss zu 0x42a4be (0x42a4b4 + 0xa) statt zu 0x42a4b4 umgeleitet wird.
Durch die Anwendung dieser Technik macht die Schadsoftware nicht nur die statische Analyse komplexer, da der Programmfluss nicht trivial ist, sondern kann auch das Debuggen erschweren, denn wenn Sie diese Art von Funktion überspringen, können viele Dinge passieren, bevor die reguläre „nächste Anweisung“ ausgeführt wird.
Eine weitere Möglichkeit, mit der die Malware diese ROP-Technik implementiert, ist die Verwendung des im folgenden Code gezeigten Ansatzes, der bei Shellcodes sehr verbreitet ist. Der durch den Zieloperanden der Aufrufanweisung angegebene Offset ist Null, wodurch die Adresse der aufzurufenden Funktion genau der Adresse der nächsten Anweisung entspricht. Diese Adresse wird dann oben auf den Stapel gelegt und die restlichen Vorgänge sind genau dieselben wie im vorherigen Beispiel:
Um die Analyse der Play-Ransomware zu unterstützen, hat Netskope Threat Labs auf Grundlage früherer Arbeiten anderer Forscher ein Skript entwickelt, um die eingesetzte ROP-Verschleierung zu beheben.
Das Skript sucht nach möglichen ROP-Kandidaten, sammelt den Offset, der oben auf dem Stapel hinzugefügt werden soll, und patcht die Adressen, die die ROP-Aufrufe ausführen, mit einem absoluten Sprung, wobei das Ziel die zur Laufzeit berechnete geänderte Transferadresse ist.
Nachfolgend sehen