Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Einreichen
ToolsExploitsBlog
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.

FeedsKontaktDatenschutz© 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
11116vor 1 MonatNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →

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.

Repository anzeigen
Teilen

Tourmaline

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

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

Das Ausnutzen und Entschlüsseln dieser Malware hat einen großen Teil meiner Zeit von der Mathevorbereitung beansprucht!

Lies den Blogbeitrag!

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 ausgeklügelter, mehrstufiger Windows-Infostealer/Backdoor, der über eine ClickFix-Kampagne verbreitet wird – ein gefälschtes Cloudflare-„Verify you are human“-Browser-Popup, das Nutzer 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-Laufzeit 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 zur Verteilung der C2-IP (Sepolia-Testnet)
  • ChaCha20-verschlüsselter Kanal zur Aufgabenausführung
  • ECDSA-signierten Befehlen zur Verhinderung von Sinkholing
  • Anti-Sandbox-Zeitsperre (100M-Iterationen-Countdown, in O(1) umgehbar)

Repository-Struktur

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 vom Angreifer kontrollierte Website eine gefälschte Cloudflare-CAPTCHA- oder Browser-Verifizierungsseite überlagert. Das Overlay weist das Opfer an:

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

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


Binärformat

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 RuntimePython 3.11 (vollständiges Embed)
Payload-Dateien36 Dateien in einem soliden LZMA2-Stream

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 eine benutzerdefinierte Verarbeitung (siehe src/decrypt_payload.py).


Ausführungsablauf

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

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

Der Loader (main.py) verwendet einen Countdown von 99,999,999, um den XOR-Entschlüsselungsschlüssel zu finden. Auf einer echten Maschine ist dies in Sekunden abgeschlossen (da _n hoch beginnt und der wahre Wert nahe bei 14,511,188 liegt). In einer Sandbox mit kurzem Zeitlimit wird die Schleife nie abgeschlossen.

Schlüsselstruktur:

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 durch einen Known-Plaintext-XOR-Angriff wiederherstellen:

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

Verwenden Sie src/decrypt_payload.py, um dies zu reproduzieren.


Stufe 2 — Kern-Backdoor-Architektur

Konfiguration (fest einprogrammiert)

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>

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 — eine herkömmliche Störung des C2 über IP-Blocklisten ist wirkungslos.

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 codierten ChaCha20-Schlüssel entschlüsselt, um die aktive C2-Adresse zu ermitteln. Zum Zeitpunkt der Analyse ergab sich daraus 158.94.211.185 (verifiziert über einen Live-RPC-Aufruf).

DNS-Tunnel (C2-Kommunikation)

Tool herunterladen