“Das ist alles nur geklaut“ – Analyse von Nitrogen Ransomware

Wir danken unserem Security Research Praktikanten Leon für das Malware Reverse Engineering und die Zusammenarbeit an diesem Artikel.

Key Findings:

  • Die Ransomware Varianten “Nitrogen” und „LukaLocker“ wurden von demselben Threat Actor erstellt und eingesetzt.
  • Beide Implementationen basieren größtenteils auf dem im März 2022 geleakten CONTI Ransomware Source Code.
  • Die Funktionalität von Nitrogen Ransomware hat sich kaum weiterentwickelt, was geringe Kompetenzen in der Implementierung von Ransomware nahelegt.

Einleitung

In diesem Abschnitt werden einige grundlegende Sachverhalte zum CONTI Ransomware Source Code Leak und den Ransomware Varianten Nitrogen und LukaLocker erläutert.

Hintergrund: CONTI Quellcode Leak

Am 20. März 2022 wurde der Quellcode für die CONTI Ransomware Variante durch einen ukrainisch-stämmigen Entwickler der Gruppierung über Twitter veröffentlicht, nachdem die Betreiber des CONTI Ransomware-as-a-Service (RaaS) über ihren Leak-Blog bekannt gaben, die Russische Invasion der Ukraine zu unterstützen (siehe Abbildung 1).

Abbildung 1: CONTI Bekanntmachung zur Russischen Invasion der Ukraine (Quelle: BleepingComputer)

Nach der Veröffentlichung dieses Quellcodes adaptierten mehrere bestehende und neue Ransomware Gangs die CONTI-Implementation für eigene Schadsoftware Varianten. Beispiele hierfür sind unter anderem LockBit Green, Monti, Royal, Akira und BlackSuit.

Nitrogen and LukaLocker

Vorhergegangene Veröffentlichungen

Die erste Veröffentlichung zu LukaLocker Ransomware wurde im Juli 2024 von Halcyon publiziert. Der Ransomware Operator bzw. Threat Actor hinter LukaLocker wurde dort mit dem Codenamen „Volcano Demon“ referenziert. Dort wurde außerdem berichtet, dass der Threat Actor neben hinterlassenen Ransomnotes auf den Computern der betroffenen Unternehmen auch Drohanrufe über das Telefon tätigt. Diese Taktik wurde in der Vergangenheit nur selten von Ransomware Gangs genutzt, da meistens Call-Center Agenten dafür angeheuert werden müssen. Es existieren beispielsweise Aufzeichnungen zu Anrufen von Suncrypt oder CONTI.

LukaLocker wurde zuvor von Jonny Johnson und Alden Schmidt (Huntress) in dem Vortrag „Unraveling LukaLocker Ransomware“ untersucht.

Nitrogen Ransomware sollte nicht mit der Schadsoftware „Nitrogen Loader“ in Verwechslung gebracht werden. Diese Malware Varianten ähneln sich zwar in ihrer Benennung, jedoch konnten wir keinen Zusammenhang zwischen ihnen feststellen. Eine Beschreibung von Nitrogen Loader wurde von eSentire veröffentlicht.

Gefundene Malware Samples und Viktimologie

Zum Verfassungszeitpunkt dieses Artikels waren die Ziele der Threat Actor hinter Nitrogen und LukaLocker Ransomware vor allem in Nordamerika (USA und Kanada) lokalisiert und primär in der Industrie bzw. dem Baugewerbe tätig. Vereinzelt wurden auch Unternehmen aus anderen Branchen angegriffen, was eine opportunistische Auswahl potenzieller Ziele nahelegt. Eine zeitliche Korrelation zwischen den aufgefundenen Ransomware Samples und der Erpressung von betroffenen Unternehmen ist nur in vereinzelten Fällen möglich, da neue Data Breaches mit großem Zeitversatz auf dem Blog gelistet werden. Abbildung 2 zeigt einen Zeitstrahl, auf dem sowohl die analysierten Malware Samples, als auch veröffentlichte Erpressungsziele aufgetragen sind. Da die Veröffentlichungen auf dem Leak Blog nicht mit einem Datum versehen werden, ist es teilweise nicht möglich den genauen Zeitpunkt des Postings zu ermitteln. Hierfür wurden die Beiträge des Threat Actors auf X (ehemals Twitter) unter dem Nutzernamen @nitrogenSupp hinzugezogen.

Abbildung 2: Beobachtete Samples, geordnet nach dem Datum, an dem sie erstmals an VirusTotal übermittelt wurden, sowie angegeriffene Unternehmen, die auf dem X-/Twitter-Konto des TA angekündigt wurden

Insgesamt wurden fünf aktuelle Samples der Nitrogen Ransomware Variante durch Threat Hunting mit YARA identifiziert. Vier dieser Samples werden Nitrogen direkt zugeordnet. Ein weiteres Sample wird der Ransomware Variante LukaLocker zugeordnet. Wie im zweiten Abschnitt dieses Artikels gezeigt wird, sind die Implementationen von Nitrogen und LukaLocker Ransomware nahezu identisch. Weitere Zusammenhänge, welche nahelegen, dass der Threat Actor, der hinter Nitrogen Ransomware steht auch unter dem Namen LukaLocker agiert, lassen sich aus der Betrachtung der veröffentlichten Ransomware Data Breaches ziehen. Wie in Abbildung 3 zu erkennen konnte in zwei Instanzen das eingesetzte Ransomware Sample mit den jeweils betroffenen Unternehmen in Verbindung gebracht werden. Das mit der LukaLocker Variante angegriffene Unternehmen wurde ebenfalls auf dem Nitrogen Ransomware Leak Blog gelistet. Kurz darauf wurde dieses Posting jedoch wieder von der Leak-Seite und dem X (Twitter) Profil entfernt. Es konnte nicht nachvollzogen werden, inwiefern dies mit einer erfolgreichen/gescheiterten Erpressung zusammenhängt oder ob eine Verbindung zwischen Nitrogen und LukaLocker nachträglich verschleiert werden sollte.

Abbildung 3: Opferidentitäten, die aus Sample-Informationen abgeleitet werden können; das LukaLocker-Opfer wurde im Nitrogen-Blog aufgeführt

Infrastruktur

Nitrogen betreibt, übereinstimmend mit gängigen „Double Extortion“ Taktiken, einen Leak-Blog als TOR Hidden Service. Die Seite folgt einem statischen Aufbau, mit wenigen dynamischen Elementen und bietet daher wenig Angriffsfläche für eine potenzielle Deanonymisierung.

Daten Veröffentlichungen

Auf dem oben beschriebenen Leak-Blog veröffentlicht Nitrogen Ransomware eine Liste an kompromittierten Unternehmen. Die durch die Angreifer entwendeten Daten werden nicht gänzlich veröffentlicht, sondern nur mit vagen Beweisen hinterlegt. Die Betreiber von Nitrogen versuchen, die Daten an andere Cyberkriminelle weiterzuverkaufen.

Abbildung 4: Screenshot des Nitrogen Ransomware Leak-Blogs „NitroBlog“

Kontaktaufnahme

Wie zuvor erwähnt betreibt Nitrogen Ransomware unter dem Nutzernamen @NitrogenSupp einen X / Twitter Account. Zusätzlich verwendet der Threat Actor den Tox Instant Messenger, welcher unter Cyberkriminellen generell sehr beliebt ist. In jedem Erpresserschreiben, dass Nitrogen Ransomware bei einem kompromittierten Unternehmen hinterlässt, ist eine einzigartiger Tox Benutzername vermerkt, um zwischen den Opfern unterscheiden zu können.

Da der Nitrogen Ransomware Leak-Blog seit Dezember 2024 nicht mehr aktualisiert wurde, haben wir testweise die auf dem Leak-Blog gelistete Tox-ID kontaktiert und wenig später eine Antwort erhalten. Der Threat Actor scheint den Kommunikationskanal also nach wie vor zu nutzen, ggf. um die Datensätze aus den vorhergegangenen Data Breaches zu verkaufen.

Analyse

Die Zielsetzung unserer Analyse war, einen Einblick in die Funktionalitäten von Nitrogen Ransomware zu erhalten. Außerdem sollte bestätigt werden, inwiefern ein Zusammenhang zwischen LukaLocker und Nitrogen besteht, welcher zuvor im Rahmen der Threat Intelligence Analyse vorgestellt wurde.

Gemeinsamkeiten mit CONTI

Unsere Analyse zeigte deutliche Gemeinsamkeiten zwischen dem Quellcode von CONTI Ransomware und den dekompilierten Nitrogen Ransomware Binärdateien. Auf einige der eindeutigsten Indizien gehen wir in diesem Unterkapitel ein.

Parameter

Die Schadsoftware unterstützt folgende Parameter, die der Nutzer auf der Kommandozeile spezifizieren kann:

Abbildung 5: Optionale Kommandozeilen-Parameter von Nitrogen Ransomware

-p Zu verschlüsselnder Dateipfad
-l Pfad zur Logdatei
-nm Keine Erstellung einer Mutex
-s Terminierung der Services und Prozesse in der Service- und Prozess Liste
-b Safeboot ausschalten und Neustart erzwingen
-v Erhöhter Detailgrad der Log-Informationen

Mutex

Nitrogen verwendet eine Mutex, um eine mehrfache Ausführung der Schadsoftware zu vermeiden. Bei dem analysierten Sample, erstellte die Schadsoftware eine Mutex mit dem Namen „nvxkjcv7yxctvgsdfjhv6esdvsx“. Diese Logik wurde aus dem CONTI Quellcode übernommen, einzig der Mutex Name wurde verändert.

Abbildung 6: Vergleich der Mutex Implementation zwischen Nitrogen und CONTI

Multithreading

Die Schadsoftware verwendet die gleiche Multithreading Logik wie CONTI. Mit dem Aufruf der Funktion GetNativeSystemInfo ermittelt Nitrogen Ransomware die Anzahl der verfügbaren CPU Kerne des Systems. Für jeden logischen Prozessor werden danach zwei Threads für den Thread-Pool erzeugt, um die Verschlüsselung zu parallelisieren.

Abbildung 7: Routine zur Erstellung von Ausführungs-Threads (Nitrogen vs. CONTI)

Abweichungen von der CONTI Implementation

Software-Entwicklungsumgebung

Der ursprüngliche CONTI Source Code Leak nutzte Visual Studio 2015 als Build Environment. Es wird vermutet, dass die untersuchten Nitrogen Samples MinGW GCC in Version 13.3.0 verwendeten. Zudem wurde die Schadsoftware mithilfe von SIMD Instruktionen optimiert.

Abbildung 8: Detect it Easy – Informationen zur Entwicklungsumgebung von Nitrogen Ransomware

Datei Verschlüsselung

Nitrogen Ransomware generiert für jede Datei einen ChaCha8 Context mit einer zufälligen Nonce und einem zufälligem Schlüssel und schützt diesen Schlüssel mit der Curve25519 ECC. Hierbei hat der Entwickler RSA, welches von Conti verwendet wird, mit ECC ersetzt, ECC wird immer häufiger in Ransomware eingesetzt, da sie im Gegensatz zu RSA kleinere Schlüsselgrößen verwendet, und wenig Rechenleistung  im Vergleich zu RSA verbraucht.

Abbildung 9: Vergleich der Schlüsselgeneration zwischen Nitrogen und CONTI Ransomware

Partielle Verschlüsselungsmodi:

  • VM Dateien (bspw. Vmdk, vmx, vmem) werden zu 20% verschlüsselt.
  • Datenbanken werden zu komplett verschlüsselt.
  • Dateien unter oder gleich 1 MiB werden komplett verschlüsselt.
  • Dateien unter oder gleich 1 GiB werden zu 50% verschlüsselt.
  • Größere Dateien werden nur zu 10% verschlüsselt.
Abbildung 10: Unterscheidung der partiellen Verschlüsselung von Nitrogen Ransomware

Service- und Prozess Terminierung

Falls der -s (bzw. –service-stop) Parameter bei der Ausführung der Ransomware gesetzt wurde, terminiert Nitrogen Prozesse, die denen aus einer Liste mit 827 Einträgen entsprechen.

Abbildung 11: Liste der Prozesse, die Nitrogen Ransomware versucht, abzuschalten

Zudem wird anhand einer gesonderten Liste nach aktiven Services von Anti-Virus und Endpoint Detection and Response Lösungen gesucht. Bei Treffern werden diese ebenfalls abgeschalten.

Abbildung 12: Screenshot von den Services, die Nitrogen abzuschalten versucht

Die Implementation zur Beendigung von Prozessen und Services ist in Abbildung 13 abgebildet. Nitrogen Ransomware durchläuft beide Listen und terminiert alle gefundenen Instanzen.

Abbildung 13: Routine zur Terminierung von Prozessen und Services

Volumenschattenkopien

Der Mechanismus zum Löschen der Volumenschattenkopien, welcher von CONTI implementiert wurde, wird von den Nitrogen Entwicklern vollständig ausgelassen. Insofern dies nicht als manueller Schritt nach der Ausführung der Ransomware geschieht, ist eine teilweise Datenwiederherstellung ggf. möglich.

Abbildung 14: CONTI Implementation zur Löschung von Volumenschattenkopien

Verschlüsselungsarten von Nitrogen

Nitrogen unterstützt drei verschiedene Verschlüsselungsmodi. Dabei wurden die Verschlüsselungsarten ALL_ENCRYPT, LOCAL_ENCRYPT und PATH_ENCRYPT vom Conti Source kopiert und der NETWORK_ENCRYPT von Conti wurde ausgelassen.

Abbildung 15: Vergleich der Verschlüsselungsmodi zwischen Nitrogen und CONTI Ransomware

Deaktivierung des abgesicherten Modus

Nach dem Verschlüsselungsprozess überprüft Nitrogen, ob der Shutdown Flag beim Starten der Ransomware von dem Nutzer gesetzt wurde, falls ja, wird Safeboot mithilfe der Kommandozeile mit dem Kommando „bcdedit /deletevalue {default} safeboot“ abgeschaltet und anschließend wird das System heruntergefahren.

Abbildung 16: Deaktivierung des abgesicherten Modus und Erzwingung eines Neustarts

Verschlüsselung des Erpresserschreibens

In der CONTI Implementation wird das Erpresserschreiben im Klartext in der ausführbaren Datei mitgeliefert. LukaLocker hat diesen Mechanismus in dieser Form übernommen. Wie in Abbildung 10 zu sehen verwenden einige der untersuchten Nitrogen Ransomware samples einen einfachen byte-weise XOR mit wechselnden Schlüsseln (z.B. 0xFD bzw. 0xFF), um ein einfaches extrahieren des Erpresserschreibens aus der Malware zu erschweren. In neueren Varianten der Ransomware wurde ein Rolling-XOR Algorithmus mit ähnlicher Funktionsweise vorgefunden.

Abbildung 17: Routine zur Entschlüsselung des Erpresserschreibens nach der vollzogenen Datei-Verschlüsselung

Fazit

Wir stellen fest, dass LukaLocker und Nitrogen Ransomware in großen Teilen auf dem CONTI Quellcode basieren. Die vom Autor vorgenommenen Veränderungen legen nahe, dass dessen Fähigkeiten zur Malware Entwicklung stark beschränkt sind.

Eine Überlappung von Einträgen auf der Leak Seite von Nitrogen legt nahe, dass beide Varianten von diesen Akteuren verwendet werden.

Indicators of Compromise (IoC)

Datei-Hashsummen

Nitrogen

  • c94b70dff50e69639b0ef1e828621c5fddcf144fea93e27520f48264ddd33273
  • ce8788e6ed0042010dd27a4fd79b9962d11385008b88485b8368fd666e5d38ec
  • 55f3725ebe01ea19ca14ab14d747a6975f9a6064ca71345219a14c47c18c88be
  • f30198a8a62e189653bfbeaa7a2f303549b8042ddd84c980f132a4e889f9cb60

LukaLocker

  • 4e58629158a6c46ad420f729330030f5e0b0ef374e9bb24cd203c89ec3262669

Host-basierte Merkmale

Erpresserschreiben: readme.txt

Log-Protokoll: NBA_LOG.txt

Anwendbare Detektionsregeln

YARA

rule SI_MAL_RNSM_Nitrogen_Lukalocker_Feb25 {

    meta:

        version = "1.0"

        date = "2025-02-04"

        modified = "2025-03-20"

        status = "RELEASED"

        sharing = "TLP:CLEAR"

        source = "SECUINFRA Falcon Team"

        description = "Detects Nitrogen / LukaLocker Ransomware based on leaked CONTI source code."

        category = "malware"

        mitre_att = "T1486"

        hash = "8cd552392bb25546ba58e73d63c4b7c290188ca1060f96c8abf641ae9f5a8383"

        minimum_yara = "3.2.0"

        best_before = "2026-02-04"

    strings:

        $str1 = "Directories scanned: %d" ascii

        $str2 = "Files finded: %d" ascii

        $str3 = "Files crypted: %d" ascii

        $str4 = "File %s is already open by another program." wide

        $str5 = ".kexi" wide

        $str6 = "cmd /c taskkill /im krbcc32s.exe /f" ascii

    condition:

        uint16(0) == 0x5A4D

        and filesize < 3MB

        and all of them

}

SIGMA

1. Potential Conti Ransomware Activity

https://github.com/SigmaHQ/sigma/blob/master/rules-emerging-threats/2021/Malware/Conti/proc_creation_win_malware_conti_ransomware_commands.yml

2. Process terminated via Taskkill

https://github.com/SigmaHQ/sigma/blob/master/rules-threat-hunting/windows/process_creation/proc_creation_win_taskkill_execution.yml

3. Potential Ransomware or Unauthorized MBR Tampering via bcdedit.exe

https://github.com/SigmaHQ/sigma/blob/master/rules/windows/process_creation/proc_creation_win_bcdedit_susp_execution.yml

4. Suspicious Execution of Shutdown

https://github.com/SigmaHQ/sigma/blob/master/rules/windows/process_creation/proc_creation_win_shutdown_execution.yml

Beitrag teilen auf:

XING
Twitter
LinkedIn

SECUINFRA Falcon Team • Autor

Digital Forensics & Incident Response Experten

Neben den Tätigkeiten, die im Rahmen von Kundenaufträgen zu verantworten sind, kümmert sich das Falcon Team um den Betrieb, die Weiterentwicklung und die Forschung zu diversen Projekten und Themen im DF/IR Bereich.

> alle Artikel
Cookie Consent mit Real Cookie Banner