Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
Tourmaline — Reverse-Engineering-Notizen, deobfuskierter Quellcode, IOCs und YARA-Regeln für den Tourmaline ClickFix Python RAT, einschließlich seines DNS-Tunnels und Blockchain-Dead-Drop-C2. | Kitploit
Tools/GitHubGitHub/v-pun215/tourmaline
Management von Indicators of Compromise (IOC)Reverse EngineeringMalware-AnalyseDigitale ForensikKryptographieCommand and ControlBedrohungsanalyseLernen & BildungIncident ResponseDNS-Analyse
GitHubv-pun215/tourmaline

Tourmaline

410vor 1 TagNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →

Reverse-Engineering-Notizen, deobfuskierter Quellcode, IOCs und YARA-Regeln für den Tourmaline ClickFix Python RAT, einschließlich seines DNS-Tunnels und Blockchain-Dead-Drop-C2.

Repository anzeigen
Teilen

Tourmaline

Ich bin kürzlich auf ein Stück clever gestalteter Malware gestoßen, die sich selbst "Torumaline" nennt.

Diese README wurde freundlicherweise von Claude verfasst, da ich zum Zeitpunkt der Entstehung dieses Repositorys sehr mit Prüfungen beschäftigt war.

Die Ausnutzung und Entschlüsselung dieser Malware hat einen großen Teil meiner Zeit für die Mathevorbereitung beansprucht!

Lies den Blogpost!

NUR FÜR BILDUNGS- UND FORSCHUNGSZWECKE
Alle Samples werden für Malware-Analyse und defensive Forschung bereitgestellt. Nicht außerhalb einer sandboxed, air-gapped Umgebung ausführen.


Überblick

Tourmaline (Tourmaline.exe) ist ein hochentwickelter, mehrstufiger Windows-Infostealer/Backdoor, der über eine ClickFix-Kampagne verbreitet wird – ein gefälschtes Cloudflare-„Verify you are human"-Browser-Popup, das Benutzer dazu verleitet, manuell einen schädlichen Befehl oder Installer auszuführen.

Die Binärdatei ist ein maßgeschneiderter Inno Setup 6.7.0 (Revision 2, 64-Bit-Offsets) Installer, der eine vollständige Python 3.11-Laufzeitumgebung und zwei Stufen obfuskierten Python-Payloads bündelt. Er etabliert eine persistente Backdoor mit:

  • DNS-Tunneling C2 über UDP-Port 53 (getarnt als microsoft.com-Abfragen)
  • Ethereum-Blockchain-Dead-Drop für C2-IP-Verteilung (Sepolia-Testnetz)
  • ChaCha20-verschlüsselter Task-Ausführungskanal
  • ECDSA-signierte Befehle zur Verhinderung von Sinkholing
  • Anti-Sandbox-Zeitsperre (100M Iterations-Countdown, in O(1) umgehbar)

Repository-Struktur

root@kitploit:~
tourmaline/
├── README.md                  # This file
├── LICENSE                    # Research use license
├── .gitignore
│
├── src/                       # Extracted & deobfuscated source code
│   ├── stage1_loader.py       # Stage 1: Original obfuscated XOR time-lock loader (main.py)
│   ├── stage2_backdoor.py     # Stage 2: Deobfuscated core backdoor (from QGBdu.dxf)
│   └── decrypt_payload.py     # Utility: O(1) payload key recovery & decryption
│
├── iocs/                      # Indicators of Compromise
│   ├── indicators.json        # Structured IOC data (IPs, hashes, domains, registry)
│   ├── indicators.csv         # Flat CSV for SIEM import
│   └── rules.yar              # YARA detection rules
│
└── samples/                   # Malware samples (password-protected)
    ├── README.md              # Sample archive instructions
    ├── Tourmaline_sample.zip  # Password: infected - contains Tourmaline.exe
    └── QGBdu.dxf             # Raw encrypted Stage 2 payload blob

Infektionsvektor

Die Malware wird über ClickFix verbreitet – eine Social-Engineering-Technik, bei der eine kompromittierte oder angreiferkontrollierte Website ein gefälschtes Cloudflare-CAPTCHA oder eine Browser-Verifizierungsseite überlagert. Das Overlay weist das Opfer an:

  1. Win+R zu drücken
  2. Einen Befehl einzufügen (vom JavaScript der Seite in die Zwischenablage kopiert)
  3. Enter zu drücken

Der eingefügte Befehl lädt Tourmaline.exe herunter und führt sie still aus. Der Installer läuft mit /VERYSILENT /SUPPRESSMSGBOXES /NORESTART.


Binärformat

Hinweis: Das Standard-innoextract 1.9 kann diese Binärdatei nicht extrahieren – es unterstützt nur Revision 1. Revision 2 verwendet 64-Bit-Offsets und erfordert benutzerdefiniertes Parsing (siehe src/decrypt_payload.py).


Ausführungsablauf

root@kitploit:~
Tourmaline.exe
│
├─ Inno Setup installer runs silently
│   ├─ Extracts Python 3.11 runtime to %APPDATA%\Tourmaline\
│   ├─ Extracts main.py (Stage 1 loader)
│   ├─ Extracts QGBdu.dxf (encrypted Stage 2 blob)
│   ├─ Kills any existing pythonw.exe instances
│   └─ Registers persistence (Task Scheduler / registry)
│       └─ Name: "TourmalineUpdate" / "Hardware monitoring service"
│
├─ Stage 1: main.py (XOR Time-Lock Loader)
│   ├─ Counts _n from 99,999,999 → 0 (anti-sandbox delay ~hours on slow VMs)
│   ├─ At each _n, constructs 33-byte XOR key: struct.pack('>I', _n) + hardcoded_suffix
│   ├─ Tests key against known plaintext header of QGBdu.dxf
│   └─ On match: decrypts QGBdu.dxf entirely and exec()s the result
│       └─ O(1) bypass: known-plaintext attack on first 4 bytes (see below)
│
└─ Stage 2: QGBdu.dxf → Python backdoor
    ├─ Reads MachineGuid from HKLM\SOFTWARE\Microsoft\Cryptography
    ├─ Derives mutex Global\Tourmaline_<hash>
    ├─ Resolves C2 IP via Ethereum dead-drop (Sepolia testnet)
    ├─ Establishes DNS tunnel to C2
    └─ Poll-execute loop: fetches tasks, exec()s Python, returns output

Stage 1 — Anti-Sandbox-Zeitsperre (O(1)-Umgehung)

Der Loader (main.py) verwendet einen Countdown von 99.999.999 bis zum Auffinden des XOR-Entschlüsselungsschlüssels. Auf einer echten Maschine wird dies in Sekunden abgeschlossen (da _n hoch startet und der wahre Wert nahe 14.511.188 liegt). In einer Sandbox mit kurzem Zeitlimit wird die Schleife nie abgeschlossen.

Schlüsselstruktur:

root@kitploit:~
full_key = struct.pack('>I', _n) + bytes.fromhex('2b0cffe07b06ac25793b3f00cfaa2dd5881c2d6378165247539dbbdaeb')

Da wir die ersten 16 Bytes des Klartexts kennen (g1 = lambda l6, ), können wir _n sofort über einen Known-Plaintext-XOR-Angriff wiederherstellen:

root@kitploit:~
key_prefix = bytes(ciphertext[i] ^ known_plaintext[i] for i in range(4))
# Result: key_prefix = 00dd6c54 → _n = 14,511,188

Verwende src/decrypt_payload.py, um dies zu reproduzieren.


Stage 2 — Kern-Backdoor-Architektur

Konfiguration (Fest einprogrammiert)

Blockchain-Dead-Drop (C2-Resilienz)

Die Malware ruft einen Ethereum-Smart-Contract im Sepolia-Testnetz auf, um die aktive C2-IP-Adresse abzurufen. Das bedeutet, dass der Angreifer die C2-IP jederzeit durch Aktualisierung des Vertrags ändern kann – traditionelle C2-Störung durch IP-Blocklisten ist wirkungslos.

root@kitploit:~
Contract : 0x2d7a04cca0c34005f58393f30ac725e25f19e5f5
Selector : 0xeb9fd6fe
Network  : Ethereum Sepolia (chainId 11155111)
RPC      : https://ethereum-sepolia-rpc.publicnode.com
Result   : ChaCha20-encrypted blob containing current C2 IP

Die zurückgegebenen Daten werden mit dem fest einprogrammierten ChaCha20-Schlüssel entschlüsselt, um die aktive C2-Adresse preiszugeben. Zum Zeitpunkt der Analyse ergab dies 158.94.211.185 (verifiziert über Live-RPC-Aufruf).

DNS-Tunnel (C2-Kommunikation)

Der gesamte C2-Datenverkehr wird als rohe UDP-DNS-Abfragen direkt an die C2-IP auf Port 53 gesendet. Abfragen sind als <encoded_data>.microsoft.com strukturiert, umgehen DNS-basierte Filterung und erscheinen als legitime Windows-Telemetrie.

  • Benutzerdefinierte Implementierung: Verwendet nicht Pythons socket.getaddrinfo oder eine DNS-Bibliothek
  • Opcode-Obfuskation: Jedes Paket hat ein zufälliges XOR-Byte, das auf das DNS-Opcode-Feld angewendet wird
  • Kodierung: Task-Daten werden base-kodiert in das DNS-Label-Format gebracht

Task-Ausführungs-Engine

Die Backdoor implementiert eine beliebige Python-exec()-Engine. Tasks werden:

  1. Vom C2 über den DNS-Tunnel abgerufen
  2. ChaCha20-entschlüsselt
  3. ECDSA-Signatur-verifiziert (verhindert Sinkhole-Injektion)
  4. In einem persistenten Namespace mit Output-Capture exec()'d
  5. Ergebnisse an C2 zurückgegeben

Unterstützte Task-Typen: Python exec, Datei-Upload/Download, Shell-Befehl, Selbst-Update.


Indicators of Compromise (IOCs)

Netzwerk

Datei-Hashes

DateiSHA256
Tourmaline.exec9b390b3b7148f549df86503858d52e030b2b5e78fed0bc525ded5927f9265d6
Tourmaline.exe (MD5)b74ac808dea2de31caf024310694ef0c

Registry / Persistenz


YARA-Regeln

Siehe iocs/rules.yar für Erkennungsregeln, die abdecken:

  • Stage 1 Loader-Konstanten (XOR-Schlüssel-Suffix, Known-Plaintext-Bytes)
  • Stage 2 fest einprogrammierte Strings (C2-IP, Vertragsadresse, ChaCha20-Schlüssel)

Behebung / Bereinigung

Wenn diese Malware auf einer Maschine ausgeführt wurde:

  1. Sofort isolieren — vom Netzwerk trennen
  2. Prozesse beenden: taskkill /F /IM pythonw.exe
  3. Installationsverzeichnis entfernen: %APPDATA%\Tourmaline\ oder %COMMONAPPDATA%\Tourmaline\
  4. Persistenz entfernen:
    • Task Scheduler: TourmalineUpdate löschen
    • HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run auf Tourmaline oder SystemService prüfen
  5. An der Firewall blockieren: 158.94.211.185:53/UDP; allen unerwarteten ausgehenden UDP/53 blockieren
  6. Ethereum-RPC blockieren am Proxy: ethereum-sepolia-rpc.publicnode.com
  7. Neu aufsetzen — aufgrund der beliebigen Python-exec-Fähigkeit wird ein vollständiges Neuaufsetzen dringend empfohlen

Reproduktion der Analyse

Voraussetzungen

root@kitploit:~
pip install pyOpenSSL cryptography

Stage 2 Payload entschlüsseln

root@kitploit:~
# From the repo root:
python3 src/decrypt_payload.py samples/QGBdu.dxf decrypted_stage2.py

Malware-Sample extrahieren

root@kitploit:~
7z x -pinfected samples/Tourmaline_sample.zip

Offenlegung


Lizenz

Siehe LICENSE. Dieses Repository dient nur Bildungs- und defensiven Forschungszwecken.

Tool herunterladen
EigenschaftWert
DateinameTourmaline.exe
Größe11.341.339 Bytes (~10,8 MB)
MD5b74ac808dea2de31caf024310694ef0c
SHA256c9b390b3b7148f549df86503858d52e030b2b5e78fed0bc525ded5927f9265d6
FormatInno Setup 6.7.0 Unicode (Revision 2, 64-Bit-Offsets)
PE-Typ32-Bit PE, 11 Sektionen
Overlay-Größe10.447.387 Bytes
Inno-Magic-Offset0xD9864 (890.148 Bytes)
App-NameTourmaline
App-Version2.63.519
App-GUID{2C25872D-85FC-44C7-9B16-844E39E50A44}
Installationspfad{commonappdata}\Tourmaline
Gebündelte LaufzeitumgebungPython 3.11 (vollständiges Embed)
Payload-Dateien36 Dateien in solidem LZMA2-Stream
ParameterWert
C2-IP158.94.211.185
C2-Port53 (UDP)
ProtokollBenutzerdefinierter DNS-over-UDP-Tunnel
Gefälschte Domainmicrosoft.com
ChaCha20-Schlüssel36f555c87f71581f57d83576c88193fdc00a0173f741a3e198e2d7abdc9cda59
Blockchain-Vertrag0x2d7a04cca0c34005f58393f30ac725e25f19e5f5 (Sepolia)
ECDSA-PubkeyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEt17l3rGHHR9sYdHEvV8S+JRRCUHQQveSadlGk04xM/8WClDf/67Tyritt2+T18SY8n0xv1TKKl0AgnNFuboEEQ==
DienstnameSystemService / TourmalineUpdate
MutexGlobal\Tourmaline_<MachineGuid-hash>
TypWert
C2-IP158.94.211.185
C2-Port53/UDP
Gefälschte Domain*.microsoft.com (benutzerdefiniertes UDP, kein echtes DNS)
Ethereum-RPChttps://ethereum-sepolia-rpc.publicnode.com
Smart Contract0x2d7a04cca0c34005f58393f30ac725e25f19e5f5
SchlüsselWert
HKLM\SOFTWARE\Microsoft\Cryptography\MachineGuidGelesen für Opfer-Fingerprinting
%APPDATA%\Tourmaline\Installationsverzeichnis
Task SchedulerTourmalineUpdate
Dienst-AnzeigenameHardware monitoring service
MutexGlobal\Tourmaline_<hash>
FeldWert
EntdeckungsdatumSeptember 2026
ForscherVihaan Pundir (v-pun215)
VerbreitungsvektorClickFix gefälschtes Cloudflare-CAPTCHA
KlassifizierungBackdoor / DNS-Tunnel-C2 / Blockchain-Dead-Drop
PlattformWindows (64-Bit)