Entmystifizierung von Ransomware-Techniken mithilfe von.NET-Assemblys: 5 Haupttechniken
Ransomware-Angriffe leben davon, sich der Erkennung zu entziehen und dann Daten auf einem System zu verschlüsseln. In der Analyse nach einem Ransomware-Angriff, wir lesen oft, dass bei dem Angriff eine Kombination verschiedener Dateitypen zusammen mit einer Vielzahl von Techniken verwendet wurde.
Also, was bedeutet das alles eigentlich? In dieser Serie werden wir alles aufschlüsseln mit dem .Net Software-Framework, das zeigt, wie diese Funktionen von Ransomware ermöglicht werden.
In meiner vorherigen dreiteiligen Serie über Malware-Payloads und Beacons lag der Schwerpunkt auf Metasploit Framework für Penetrationstests. Wir haben es gebrauchsfertig verwendet Meterpreter Malware-Payload, um verschiedene Angriffstechniken zu zeigen. Die erster Artikel untersuchte, wie bösartige Kommunikation beginnt, die Infrastruktur des Angreifers und die forensische Analyse eines Angriffs. Der zweiter Artikel untersuchte Kategorien und Typen von Nutzlasten zusammen mit einigen In-Memory-Manipulationstechniken. Das letzter Teil Der Schwerpunkt dieser Serie lag auf Umgehungs- und Schadensbegrenzungstechniken.
In dieser Serie werden wir unsere eigenen individuellen Nutzdatendateien (auch Assemblys genannt) erstellen, indem wir die .Net Software-Framework, jedoch mit Schwerpunkt auf Ransomware. Wir beginnen damit, die Fähigkeiten von Ransomware und Schadsoftware in einzelne Beispieltechniken zu unterteilen, um zu verstehen, wie sie eigenständig funktionieren. Einige dieser einzelnen Techniken sind letztlich das, was zu einer einzigen bösartigen Ransomware-Nutzlast kombiniert wird, was oft verheerende Auswirkungen hat.
Technik 1: Downloader, Dropper und Loader
Zunächst untersuchen wir, wie Ransomware oder Malware aus einem infizierten Netzwerk eine Verbindung herstellen können. Dabei handelt es sich um die Fähigkeit, eine Verbindung zu einem Remote-System herzustellen, zusätzliche Payloads herunterzuladen, sie auf dem infizierten System abzulegen und es auszuführen (d. h. in den Speicher laden zu lassen).
Unten finden Sie ein Beispiel für eine .Net Befehlszeilenanwendung (Konsole), die:
- Fungiert als Downloader, indem es eine andere ausführbare Remoteanwendung herunterlädt (putty.exe) aus dem Internet
- Legt die heruntergeladene Anwendung in ein Zeitarbeiter Ordner auf der Festplatte auf dem Computer
- Benennt die Anwendung um in putty_new.exe
- Führt die heruntergeladene Anwendung automatisch auf dem Computer aus, sodass sie in den Speicher geladen wird
Wenn Payload-Staging verwendet wird, was bedeutet, dass mehrere bösartige Dateien unterschiedliche Dinge tun, kann der Stager (anfänglich kleine Nutzlast) sowohl Downloader und auch, grob gesagt, die Tropfer für die Bühne (größere Hauptnutzlast). Es könnte auch der Lader der Stufe sein. Welche Techniken zum Einsatz kommen, hängt davon ab, wie der Bedrohungsakteur das Entdeckungsrisiko einschätzt — auch bekannt als Überlegungen zur Betriebssicherheit.
EIN Downloader ist dafür verantwortlich, eine Nutzlast von einer Remote-Quelle wie einem Webserver oder FTP-Server herunterzuladen. Dies erfolgt normalerweise über das Internet. Ein Downloader benötigt daher den Versuch, eine Netzwerkverbindung herzustellen, um die entfernte Quelle zu erreichen.
EIN Tropfer, ist andererseits in erster Linie dafür verantwortlich, eine Nutzlast auf ein Opfersystem zu übertragen oder abzulegen. Daher kann ein Downloader auch ein Dropper sein, aber ein Dropper muss nicht unbedingt ein Downloader sein, da in einem Dropper möglicherweise bereits die bösartige Nutzlast als tragbare ausführbare Dateien (PE) oder DLLs eingebettet ist. Diese Dateitypen werden später besprochen. Dropper werden häufig bei Angriffen eingesetzt; beliebte Beispiele sind die Lieferkettenangriffe von Solarwinds und Kaseya. Bei beiden ging es um den Einsatz kompromittierter Lieferantensoftware, die als Dropper für bösartige Nutzlasten verwendet wurde. Letzteres wird von der verwendet ReViL Ransomware Gruppe.
EIN Lader ist dafür verantwortlich, das Opfersystem so einzurichten, dass es eine weitere bösartige Nutzlast ausführt, insbesondere bei Payloads, die nur Speicher enthalten. Einrichten bedeutet hier, die erforderliche Speicherplatzzuweisung sicherzustellen, indem häufig eine DLL in den Speicherplatz eines anderen Prozesses injiziert und dann die richtigen Speicherberechtigungen eingerichtet werden. Der Loader startet dann die Payload oder führt die erforderlichen Threads aus.
Technik 2: EXE lädt eine DLL-Datei
Ransomware-Payloads können in Form einer EXE-Datei oder einer DLL-Datei vorliegen. Als Nächstes schauen wir uns an, wie eine ausführbare Windows-Datei, auch bekannt als EXE-Datei, eine sogenannte DLL-Datei (Dynamic Link Library) laden kann, um den darin enthaltenen Code zu nutzen.
EXE und eine DLL sind zwei Arten von .Net Baugruppen, die Computerprogrammcodeanweisungen und zugehörige Informationen (Metadaten) enthalten. Diese Anweisungen und Metadaten werden zu einer einzigen resultierenden Datei — EXE oder DLL — zusammengefügt .Net Montage. Mit diesen beiden Dateitypen kann Computerprogrammcode auf einem Windows-System ausgeführt (EXE) oder als Bibliotheksdatei (DLL) gespeichert werden, die dann „ausgeliehen“ und von anderen Dateien gelesen werden kann. Im Fall einer DLL ähnelt dieser Vorgang der Art, wie mehrere Personen dasselbe Buch zu unterschiedlichen Zeiten aus einer Bibliothek ausleihen können, um den Inhalt zu lesen. Im zweiten Teil dieser Serie werden wir diese beiden Baugruppen im Zusammenhang mit den .Net. Software-Framework.
Im Moment ist hier ein sehr einfaches Beispiel, um die Verwendung dieser beiden Arten von zu demonstrieren .Net Assemblys — eine ausführbare Datei (EXE), die ihren eigenen Code ausführt und dann externen Code aus einer DLL-Datei lädt und liest. Die ausführbare Datei übergibt dann einige Eingaben in den geladenen DLL-Code. Schließlich verwendet die DLL die von der EXE-Datei empfangenen Eingaben, um dem Benutzer, der die Anwendung ausführt, eine Meldung zurückzugeben. Unten ist der Code in Aktion:
Diese einfache Anwendung demonstriert auch die Beziehung zwischen EXE und einer DLL .Net Versammlungen. Diese Art von Beziehung wird legitim von vielen Anwendungen und Betriebssystemen (gemeinsam genutzte Bibliotheken) verwendet, einschließlich des Windows-Betriebssystems selbst. Windows verpackt einen Großteil seines eigenen Codes als DLLs, sodass er von verschiedenen Anwendungen gemeinsam genutzt werden kann.
Das Bild unten zeigt den Programmiercode sowohl für die EXE als auch für die DLL im vorherigen Beispiel. Der Code wurde mit der Programmiersprache C# geschrieben, einer der Sprachen, die von unterstützt werden .Net. In der Abbildung sind die DLL-Codereferenzen zur Hervorhebung hervorgehoben:
DLLs sind ein effektives Mittel, um einen Code einmal auf eine Weise zu schreiben, die dann von verschiedenen ausführbaren Dateien als gemeinsam genutzte oder dynamische Bibliothek mehrfach verwendet werden kann. Aus diesem Grund wird es auch von vielen Malware- und Ransomware-Familien häufig verwendet. Techniken wie DLL-Side-Loading und DLL-Hijacking sind gängige bösartige Techniken, die sich die Beziehung zwischen diesen Techniken zunutze machen .Net Versammlungen.
Technik 3: Auskundung und Start des Lebens von den Landbinärdateien
Wir fahren mit einer Kombination wichtiger Techniken fort: der Fähigkeit, nützliche Informationen über ein Zielsystem zu sammeln (Discovery) und gleichzeitig andere Binärdateien oder ausführbare Dateien auf diesem System zu starten (Spawning). In der Abbildung hier startet unsere erste benutzerdefinierte ausführbare Datei eine native ausführbare Datei oder Binärdatei auf dem Windows-Zielsystem, was auf einen LotL-Angriff (Living Off the Land) hindeutet.
Das Beispiel zeigt, wie unsere erste C#-Anwendung ausgeführt wird und dann einige nützliche Informationen über das Zielsystem sammelt, was durch den grünen Text in der Ausgabe dargestellt wird. Beachten Sie die gesammelten Laufwerksinformationen. Diese Informationen können von Ransomware ausgenutzt werden, um Dateien auf diesen Laufwerken ins Visier zu nehmen und dann vor der Verschlüsselung gegen eine normalerweise hohe Lösegeldforderung zu exfiltrieren.
Die Anwendung fährt fort, indem sie eine externe Systemdatei startet — die Windows-Eingabeaufforderung (cmd.exe) ausführbar. Die benutzerdefinierte Anwendung übergibt dann einige Windows-Befehle an Windows cmd.exe anzuzeigender Prozess (in rotem Text dargestellt), in diesem Fall Versionsinformationen des Windows-Systems. Wie in diesem Artikel beschrieben, zeigt die benutzerdefinierte C#-Anwendung die Ausgabe der von ihr ausgeführten Aktionen sowie Informationen über den gestarteten Prozess an. Diese Fähigkeit, andere externe Anwendungen zu starten, ist auch nützlich, um Opferprozesse zu starten, in die eventuell bösartiger Code eingeschleust werden kann.
Technik 4: Datenkodierung
Eine weitere nützliche Technik ist die Datenkodierung. Dies ist der Prozess, bei dem ein Algorithmus verwendet wird, um Daten in einer anderen Form darzustellen. Beispielsweise wird ein Codierungstyp, Base64, legitim in einigen Webanfragen verwendet, um Daten hin- und herzuleiten, z. B. bei der HTTP-Autorisierung und der Standardauthentifizierung bei API-Aufrufen. Das gleiche Beispiel für die Base64-Codierung kann jedoch auch dazu beitragen, bestimmte Texte und Befehle zu verbergen, die von einem bösartigen Programm oder einer Nutzlast verwendet werden. Es kann verwendet werden, um Teile des Codes wie Callback-URLs oder eine Datei zu verschleiern. Eine solche Technik wird unten in unserem eigenständigen C#-Programm gezeigt.
In diesem speziellen App-Beispiel enthält der Code Text, in diesem Fall die URL.“https://listener.malware.bad“, konvertiert es in ein Array von Computer-Bytes und führt dann den Base64-Kodierungsalgorithmus für die Bytes aus, um es in den alphanumerischen ASCII-Text von“ zu konvertierenAHR0CHM6LY9SAXN0ZW5LCI5TYWX3YXJLLMJHZA==“ wird oben im Encoder-Bereich der Anwendungsanzeige angezeigt. Dieser Vorgang kann programmgesteuert rückgängig gemacht werden, um den Originaltext wiederherzustellen, wie im Decoder-Abschnitt gezeigt. Dabei ist die URL unsichtbar und es kann nicht sofort festgestellt werden, um welche URL es sich handelt — um eine bösartige URL.
Technik 5: Verschlüsselung
Schließlich schauen wir uns die Verschlüsselung an. Das Verschlüsseln von Dateien auf einem kompromittierten System ist das, wofür Ransomware zum Synonym geworden ist. Dies ist wiederum eine legitime Funktion zum Schutz ruhender Daten, die, wie die meisten anderen Techniken, inzwischen bei Ransomware für böswillige Zwecke eingesetzt wird.
Im folgenden Beispiel haben wir eine C#-Verschlüsselungsanwendung. Es erstellt zuerst eine Kopie der Datei, die für die Verschlüsselung vorgesehen ist, und verschlüsselt dann die Kopie, wobei das Original intakt bleibt.
Hier der ursprüngliche Inhalt der Originaldatei, Data1.txt, werden in eine andere Datei kopiert, Data1-Encrypted.txt, und dann ist diese neue Datei verschlüsselt.
Verschlüsselung ist eine der wichtigsten Techniken, die von Ransomware verwendet werden, und bildet die Grundlage dafür, kompromittierte Systeme als Lösegeld zu erpressen. Sie kann auch nützlich sein, um Malware-Payloads oder Loader während der Übertragung oder im Ruhezustand zu verstecken, um einer Entdeckung zu entgehen.
Lesen Sie Teil 2 der Serie am 22. Mai
Der nächste Artikel befasst sich mit Microsofts .Net Software-Framework und zugehörige C#-Programmiersprache als Referenz für einige der hier gezeigten Taktiken und Techniken und wie sie letztendlich erleichtert werden.
Erfahre mehr darüber, wie Illumio Zero Trust Segmentation Ihnen helfen kann, Ransomware-Verstöße einzudämmen.