Sodinokibi Ransomware: Eine detaillierte Studie

Über die Sodinokibi-Ransomware wurde kürzlich in den Nachrichten gesprochen, aber nur wenige befassen sich mit den Details dieser Malware. Heute werden wir versuchen, Sodinokibi näher kennenzulernen und die Prinzipien der Ransomware zu berücksichtigen, um Prioritätsvektoren zum Schutz von Informationssystemen vor einer neuen Bedrohung zu identifizieren.



Textautoren: Ravikant Tiwari und Alexander Koshelev

Was wissen wir über Sodinokibi?


Sodinokibi wird höchstwahrscheinlich von denselben Angreifern verbreitet, die für Angriffe von Ransomware aus der GandCrab-Familie bekannt waren, die sich nach Berichten in Untergrundforen nicht mehr entwickeln werden.

Sodinokibi verwendet die Oracle WebLogic-Sicherheitsanfälligkeit (CVE-2019-2725), um Zugriff auf den Computer des Opfers zu erhalten. Im System versucht die Malware, sich selbst mit erweiterten Rechten auszuführen, um uneingeschränkt auf alle Dateien und Ressourcen des PCs zugreifen zu können ...
Sodinokibi versucht, Computer im Iran, in Russland und anderen Ländern der ehemaligen UdSSR nicht zu infizieren.

Das Ransomware-Programm verwendet AES- und Salsa20-Algorithmen zum Verschlüsseln von Benutzerdateien. AES wird zum Verschlüsseln von Sitzungsschlüsseln sowie von Daten verwendet, die an den Verwaltungsserver gesendet werden.

Benutzerdateien werden mit Salsa20 verschlüsselt.

Zum Generieren und Verteilen von Schlüsseln verwendet Sodinokibi den Diffie-Hellman-Algorithmus für elliptische Kurven.

Auf dem Computer löscht der Virus sofort alle Dateien aus dem Sicherungsordner.

Derzeit fordert Ransomware 0,32806964 BTC (2.500 US-Dollar) an, um den Zugriff auf verschlüsselte Dateien wiederherzustellen. Wenn das Lösegeld nicht innerhalb von 4 Tagen gezahlt wird, versprechen die Erpresser außerdem, den Betrag zu verdoppeln ...

Wie funktioniert Sodinokibi?


Wir haben eine Instanz von Sodinokibi in unserem Labor untersucht. Die Ransomware wurde von einem benutzerdefinierten Packer gepackt. Darüber hinaus gab es auch nach erfolgreichem Auspacken keine lesbaren Zeilen im Code. Darüber hinaus importiert die Software keine Systembibliotheken oder APIs. Daher ist es für statische Antivirenprogramme, die Signaturen verwenden, die auf lesbaren Zeichenfolgen und Tabellen importierter APIs basieren, sehr schwierig, diese zu erkennen.

API-Namen und andere Parameter wurden entschlüsselt, während die Software mit dem RC4-Algorithmus ausgeführt wurde. Um die Erkennung von Virenschutzprogrammen noch schwieriger zu machen, führt diese Ransomware Operationen an Strings mit einem DJB-Hash anstelle der Strings selbst aus ...

Initialisierung


Sodinokibi erstellt zunächst eine dynamische Importtabelle. Zunächst ist das Programm davon überzeugt, dass es die einzige Kopie im System ist, die Mutexe überprüft. Nach der Überprüfung wird die JSON-Konfiguration mit RC4 entschlüsselt, das in der Programmdatei gespeichert ist, und der boolesche Wert des Schlüssels "exp" überprüft. Wenn sein Wert "true" ist, versucht Sodinokibi einen Exploit zu starten. In unserem Beispiel wurde die Funktion zum Ausnutzen von Sicherheitslücken ausgeführt




Entschlüsselte JSON-Konfiguration

Der Code, der den Exploit ausführt, überprüft, ob das Update vom 11. September 2018 (KB4457138) auf dem Computer installiert wurde. Dieser Patch behebt viele der folgenden Sicherheitslücken. Wenn es sich nicht auf dem Computer befindet, startet Ransomware je nach Plattform, auf der die Malware ausgeführt wird, den 32- oder 64-Bit-Shellcode. Wir glauben, dass die Ransomware versucht, die Berechtigungen eines Administrators mithilfe von CVE-2018-8440 zu erhöhen.


Snippet 1

Die Liste der Schwachstellen, die durch das Patchen von KB4457138 behoben wurden:

Der Patch KB4457138 behebt die Sicherheitslücken:

  • CVE-2018-8457, CVE-2018-8335, CVE-2018-8424, CVE-2018-8455, CVE-2018-8468, CVE-2018-8447, CVE-2018-8475, CVE-2018-8271, CVE- 2018-8440, CVE-2018-8464, CVE-2018-8469, CVE-2018-8421, CVE-2018-8442, CVE-2018-8367, CVE-2018-8443, CVE-2018-8465, CVE-2018- 8419, CVE-2018-8466, CVE-2018-8410, CVE-2018-8467, CVE-2018-8462, CVE-2018-8452, CVE-2018-8446, CVE-2018-8449, CVE-2018-8420, CVE-2018-8433, CVE-2018-8438, CVE-2018-8435, CVE-2018-8456, CVE-2018-8354, CVE-2018-8434, CVE-2018-8470, CVE-2018-8332, CVE- 2018-0965, CVE-2018-8315, CVE-2018-8439, CVE-2018-8392, CVE-2018-8425, CVE-2018-8393.


Wenn im System keine Sicherheitsanfälligkeit erkannt wird und der Prozess weiterhin als normaler Benutzer ausgeführt wird, wird der Befehl RUNAS verwendet, um eine andere Instanz zu starten, jedoch mit Administratorrechten, und die aktuelle Instanz, die mit eingeschränkten Berechtigungen arbeitet, wird abgeschlossen. Der vollständige Pseudocode ist im folgenden Screenshot dargestellt.



Nachdem Sodinokibi erfolgreich im Administratormodus gestartet wurde, führt die Software eine zusätzliche vorläufige Überprüfung durch, klärt den Wert des "bro" -Schlüssels in der JSON-Konfiguration und ermittelt das Standortland. Es wird nicht versucht, Computer aus den folgenden Ländern zu infizieren, wenn solche Standortparameter in den Computereinstellungen festgelegt wurden.


Sprach-IDs verfeinern

Liste der Ausnahmeländer

  • Rumänien, Russland, Ukraine, Weißrussland, Estland, Lettland, Litauen, Tadschikistan, Iran, Armenien, Aserbaidschan, Georgien, Kasachstan, Kirgisistan, Turkmenistan, Usbekistan, Tatarstan

* Anmerkung des Herausgebers: Aus einem unbekannten Grund heben die Autoren speziell das tatarische Gebietsschema in Russland hervor

Nach dem Bestehen des Tests beendet die Malware den Prozess mysql.exe (falls er gestartet wurde), um Zugriff auf die MySQL-Dateien zu erhalten und diese zu verschlüsseln. Danach entfernt die Ransomware Schattenkopien von Windows mit vssadmin und deaktiviert das Windows-Wiederherstellungssystem mit bcdedit:

vssadmin.exe Delete Shadows /All /Quiet & bcedit /set {default}
recoveryenabled No & bcedit /set {default} bootstatuspolice ignorealfailures


Vor dem Verschlüsseln von Benutzerdateien durchsucht Sodinokibi alle Dateisysteme, einschließlich Netzwerkordner, nach Verzeichnissen mit dem Namen "Backup" und löscht diese dauerhaft. Es ist interessant, dass die Malware vor dem Löschen des Verzeichnisses selbst den Inhalt aller dieser Ordner durch einen zufälligen Satz von Bytes ersetzt, um eine Wiederherstellung im Prinzip unmöglich zu machen. Glücklicherweise können Acronis Backup-Dateien nicht so einfach gelöscht werden, da sie auf Kernelebene geschützt sind, insbesondere um zu verhindern, dass Ransomware solche Aktionen ausführt.

Schlüsselgenerierung


Sodinokibi verwendet das Diffie-Hellman-Protokoll zur Erzeugung und zum Austausch elliptischer Kurven (ECDH). Die generierten Sitzungsschlüssel werden in symmetrischen Verschlüsselungsalgorithmen verwendet, und verschiedene Datentypen werden mit verschiedenen Methoden verschlüsselt - AES und Salsa20.

AES wird verwendet, um einen privaten Schlüssel aus einem Paar privater und öffentlicher Schlüssel zu verschlüsseln, die lokal auf dem Benutzercomputer generiert werden. Es verschlüsselt auch Daten während der Übertragung über das Netzwerk. Salsa20 wird zum Verschlüsseln von Benutzerdateien verwendet.

Sodinokibi enthält zwei verschiedene öffentliche Schlüssel, von denen einer Teil der JSON-Konfiguration ist und der zweite in die Binärdatei eingebettet ist. Diese öffentlichen Schlüssel werden verwendet, um den auf dem Computer erstellten privaten Schlüssel zu verschlüsseln. Die spezifischen Schritte der Schlüsselgenerierung und -verschlüsselung sind wie folgt:

Schritt 1. Generieren eines Sitzungspaars aus einem privaten (geheimen, zufälligen) und öffentlichen Schlüssel auf dem lokalen Computer.


Lokale Generierung von privaten und öffentlichen Schlüsseln

Die Verschlüsselung des privaten Schlüssels aus Schritt 1 erfolgt mit dem öffentlichen Schlüssel aus der JSON-Konfiguration

Schritt 2. Generieren Sie ein weiteres Paar privater und öffentlicher Schlüssel.

Schritt 3. Unter Verwendung des privaten Schlüssels aus Schritt 2 und des öffentlichen Schlüssels (pk-Schlüsselwert) wird ein öffentlicher Schlüssel aus JSON generiert, und nach dem Hashing wird ein symmetrischer Schlüssel erhalten.


Generieren Sie einen symmetrischen Schlüssel mit einem gemeinsam genutzten Schlüssel

Schritt 4. Erzeugung einer 16-Bit-IV (Initialisierungsvektor).

Schritt 5. Verschlüsseln Sie den in Schritt 1 generierten privaten Schlüssel mit AES mit dem Schlüssel und IV, die in den Schritten 3 und 4 erhalten wurden.

Schritt 6. Berechnung von CRC32 für den verschlüsselten privaten Schlüssel, wie in Schritt 5 festgestellt.

Schritt 7. Hinzufügen von IV und CRC32 am Ende des Puffers mit dem verschlüsselten privaten Schlüssel aus Schritt 5.

Schritt 8. Speichern Sie den Puffer in der zugehörigen Datei mit dem Offset (markiert mit „sk_key“).


Verschlüsseln Sie den privaten Schlüssel aus Schritt 1 mit den öffentlichen Schlüsseln des Angreifers

Verschlüsseln Sie den privaten Schlüssel aus Schritt 1 mit dem in der Binärdatei enthaltenen öffentlichen Schlüssel.

Schritt 9. Wiederholen Sie die Schritte 2 bis 7 mit einem anderen öffentlichen Schlüssel, der in Schritt 3 in die Binärdatei eingebettet wurde.

Schritt 10. Speichern des Puffers in einer zugeordneten Datei mit einem Offset im Speicher (Markierung „0_key“)
sk_key, 0_key und pk_key werden abhängig von den vom Programm empfangenen Zugriffsrechten entsprechend in die Registrierung geschrieben ...

HKLM \ SOFTWARE \ recfg \ sk_key oder HKCU \ SOFTWARE \ recfg \ sk_key
HKLM \ SOFTWARE \ recfg \ 0_key oder HKCU \ SOFTWARE \ recfg \ 0_key
HKLM \ SOFTWARE \ recfg \ pk_key oder HKCU \ SOFTWARE \ recfg \ pk_key

Verschlüsselter geheimer Schlüssel in der Registrierung
Schlüsselgenerierung für einzelne Dateien mit Salsa20

Schritt 11. Generieren Sie ein neues Paar aus dem öffentlichen und dem privaten Schlüssel.

Schritt 12. Generieren Sie einen gemeinsam genutzten Schlüssel mit dem in Schritt 2 erstellten öffentlichen Sitzungsschlüssel und dem Hash, um den nächsten symmetrischen Schlüssel zu erhalten, der zum Generieren der Schlüssel in Salsa20 erforderlich ist.

Schritt 13. Installieren eines 256-Bit-Schlüssels (32 Byte) in Salsa20

Schritt 14. Generieren Sie eine 8-Bit-IV für Salsa20-Schlüssel

Schritt 15. Salsa20-Schlüsselgenerierung

Schritt 16. Verwenden von Salsa20 key_state zum Verschlüsseln von Benutzerdateien mit Salsa20.


Salsa20-Schlüsselgenerierung für jede Datei
Wiederholen Sie die Schritte 11 bis 16 für jede verschlüsselte Datei.

Illustration der Ver- und Entschlüsselung


Um besser zu verstehen, wie die Schlüssel zwischen den Computern des Angreifers und des Opfers generiert und übertragen werden, müssen Sie verstehen, wie der Diffie Hellman-Algorithmus funktioniert - dies ist leicht zu veranschaulichen.

Verschlüsselungsprozess



Diffie-Hellman Elliptic Curve Key Exchange (ECDH)


Eine detaillierte Beschreibung des Verschlüsselungsprozesses in Sodinokibi

Zum Entschlüsseln der Daten werden die privaten Schlüssel des Angreifers benötigt. Sie werden jedoch nirgendwo veröffentlicht, und daher ist es unmöglich, Dateien wiederherzustellen.

Bild
Entschlüsselungsprozess (das Geheimnis des Angreifers ist sein privater Schlüssel)

Bild
Der vereinfachte Prozess zum Entschlüsseln von Benutzerdateien ist unten dargestellt.

Dateiverschlüsselung auf lokalen Festplatten und Netzwerkordnern


Zum Verschlüsseln von Benutzerdateien verwendet Sodinokibi E / A-Abschlussports und startet mehrere Verschlüsselungsströme, jedoch nicht mehr als die doppelte Anzahl von Prozessorkernen auf dem Computer, wobei diese Streams einem speziell erstellten E / A-Port zugeordnet werden. Diese Threads verwenden die GetQueuedCompletionStatus Win-API-Funktion, um auf das Eintreffen eines Pakets am E / A-Port zu warten, bevor die Dateiverschlüsselung gestartet wird.

Sobald Streams erstellt werden und auf das Eintreffen von E / A-Paketen warten, beginnt Sodinokibi, Benutzerdateien auf allen lokalen Laufwerken und in allen Netzwerkordnern mit Ausnahme von CD-ROM und RAMDISK zu sortieren und sie den entsprechenden E / A-Abschlussports zuzuweisen. Für alle Dateien, die nicht unter die Liste der Ausnahmen in den Namen von Ordnern, Dateien und Erweiterungen fallen, wird die Funktion AddFileToIoCompletionPort aufgerufen und anschließend PostQueuedCompletionStatus. Dadurch wird die Ausführung an den Verschlüsselungsdatenstrom übergeben, der auf Informationen über den E / A-Abschlussport wartet, um die Dateiverschlüsselung zu starten.

Die AddFileToIoCompletionPort-Funktion generiert außerdem einen eindeutigen Salsa20-Schlüssel für jede zu verschlüsselnde Datei und übergibt den Salsa20-Schlüssel zusammen mit anderen Metadaten, die nach der Verschlüsselung mit dem Parameter lpOverlapped der PostQueuedCompletionStatus Win-API-Funktion aufgezeichnet werden müssen, an den Verschlüsselungsdatenstrom.

Nach der Verarbeitung der Dateien in jedem Verzeichnis wird mit Ausnahme der Ausnahme eine Datei mit einer Lösegeldforderung erstellt. Wenn die zu verschlüsselnden Dateien leer sind, gehen die Threads in eine Schleife und warten, bis die Gesamtzahl der verschlüsselten und umbenannten Dateien die Gesamtzahl der an den E / A-Abschlussport übertragenen Dateien erreicht.

Schließlich setzt das System ein Flag, das angibt, dass keine weiteren Dateien zu verschlüsseln sind, und sendet mehrere E / A-Pakete, die den Abschluss des Prozesses signalisieren. Dadurch wird die Einstellung zusätzlicher Verschlüsselungsströme erreicht, die auf Daten gewartet haben.

Bild

Liste der Ausnahmeordner

  • "$ windows. ~ bt"
  • "Intel"
  • "Programmdateien (x86)"
  • "Programmdateien"
  • "Msocache"
  • "$ recycle.bin"
  • "$ windows. ~ ws"
  • "Tor Browser"
  • "Boot"
  • "Systemvolumeninformationen"
  • "Perflogs"
  • Google
  • "Anwendungsdaten"
  • "Windows"
  • "Programmdaten"
  • "Windows.old"
  • "Appdata"
  • "Mozilla"
  • Dateiausnahmen
  • "Bootfont.bin"
  • "Boot.ini"
  • "Ntuser.dat"
  • "Desktop.ini"
  • "Iconcache.db"
  • Ntldr
  • "Ntuser.dat.log"
  • "Thumbs.db"
  • "Bootsect.bak"
  • "Ntuser.ini"
  • "Autorun.inf"
  • Erweiterungsausnahmen
  • "Themepack"
  • Ldf
  • Scr
  • Icl
  • 386
  • "Cmd"
  • "Ani"
  • "Adv"
  • "Thema"
  • "Msi"
  • "Rtp"
  • "Diagcfg"
  • "Msstyles"
  • "Bin"
  • Hlp
  • Shs
  • Drv
  • "Wpx"
  • "Deskthemepack"
  • "Fledermaus"
  • "Rom"
  • "Msc"
  • "Lnk"
  • Kabine
  • "Spl"
  • "Ps1"
  • "Msu"
  • Ics
  • "Schlüssel"
  • "Msp"
  • "Com"
  • Sys
  • "Diagpkg"
  • "Nls"
  • "Diagcab"
  • Ico
  • "Lock"
  • "Ocx"
  • "Mpa"
  • "Cur"
  • Cpl
  • "Mod"
  • Hta
  • "Exe"
  • "Icns"
  • "Prf"
  • "Dll"
  • "Nomedia"
  • Idx

Der Verschlüsselungsdatenstrom setzt voraus, dass der Inhalt der Datei gelesen, verschlüsselt, in dieselbe Datei zurückgeschrieben und Metadaten, einschließlich des privaten Schlüssels der verschlüsselten Sitzung, mit dem öffentlichen Teil von ECDH für jede Datei und dem zum Verschlüsseln der Datei verwendeten Salsa20-Initialisierungsvektor hinzugefügt werden.

Danach benennt der Stream die Datei um und fügt dem Namen einen zufällig generierten Namen hinzu. Dateien werden mit dem Salsa20-Algorithmus mithilfe der EncryptAndWrite-Funktion verschlüsselt.

Das folgende Beispiel zeigt den Aufruf der Funktion EncryptingThreadRoutine.

Bild
Dateistruktur nach der Verschlüsselung

Bild
Verschlüsselte Dateistruktur

Netzwerkaktivität


Nach Abschluss des Verschlüsselungsprozesses bereitet die Ransomware die Daten für das Senden an den Verwaltungsserver vor. Die Daten enthalten verschiedene Felder aus der JSON-Konfiguration, Systeminformationen und Verschlüsselungsschlüssel. Vorbereitete Daten werden auch unter dem Schlüssel "[HKLM | HKCU] \ SOFTWARE \ recfg \ stat" in die Registrierung geschrieben, bevor sie von AES verschlüsselt und an den Server des Angreifers gesendet werden ...

Bild

Netzwerkdaten



Der Domainname besteht aus: sochi-okna23 [.] Ru + Teil von Adresse 1

  • "Wp-Inhalt"
  • "Statisch"
  • "Inhalt"
  • "Einschließen"
  • "Uploads"
  • "Nachrichten"
  • "Daten"
  • "Admin"

und Teil der Adresse 2

  • "Bilder"
  • "Bilder"
  • "Bild"
  • "Temp"
  • "Tmp"
  • "Grafik"
  • "Vermögenswerte"
  • Bilder
  • "Spiel"

Bild
URL-Generierung

Lösegeldforderung


Sodinokibi verfügt über eine Vorlage zum Erstellen einer Rückkaufanfrage, die Platz für Benutzerdaten lässt. Sie ersetzen automatisch den Namen, die Benutzer-ID (UID - Beschreibung oben) und den Schlüssel. Die Lösegeldanforderung wird in jedem Verzeichnis abgelegt, ohne Ausnahmen.

Bild

Entschlüsselung


Bild

Es gibt keine kostenlose Möglichkeit, die Daten für diese Ransomware zu entschlüsseln. Die einzige Möglichkeit, die Daten wiederherzustellen, besteht darin, den vom Angreifer bereitgestellten Entschlüsselungsdienst zu verwenden. Folgen Sie den Anweisungen in der Lösegeldanforderung ...

Bild

Fazit


Wir empfehlen Ihnen, einen erweiterten Anti-Ransomware-Schutz zu verwenden und Ihre Antivirensysteme auf dem neuesten Stand zu halten. Alle Acronis-Produkte enthalten einen verbesserten Ransomware-Schutz und können Sie vor einem solchen Angriff schützen, wodurch das Risiko eines Datenverlusts minimiert wird.

Der Cyber-Schutz ist in der persönlichen Lösung von Acronis True Image 2019 sowie in den Geschäftssystemen von Acronis Backup enthalten, die von einem auf künstlicher Intelligenz basierenden Anti-Malware-Modul namens Acronis Active Protection begleitet werden. Dank dessen können beide Systeme Benutzer vor Sodinokibi schützen.

Source: https://habr.com/ru/post/de462567/


All Articles