Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
Tourmaline — Tourmaline ClickFix Python RATのリバースエンジニアリングノート、難読化解除済みソース、IOC、YARAルール。そのDNSトンネルとブロックチェーンデッドドロップC2を網羅しています。 | Kitploit
ツール/GitHubGitHub/v-pun215/tourmaline
侵害指標 (IOC) 管理リバースエンジニアリングマルウェア分析デジタルフォレンジック暗号化コマンド&コントロール脅威インテリジェンス学習と教育インシデントレスポンスDNS分析
GitHubv-pun215/tourmaline

Tourmaline

4101日前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

Tourmaline ClickFix Python RATのリバースエンジニアリングノート、難読化解除済みソース、IOC、YARAルール。そのDNSトンネルとブロックチェーンデッドドロップC2を網羅しています。

リポジトリを見る

Tourmaline

最近、私は「Torumaline」と自称する巧妙に設計されたマルウェアの断片に偶然出会いました。

このREADMEは、このリポジトリの作成当時、私が試験で非常に忙しかったため、Claudeが非常に親切に書いてくれました。

このマルウェアの悪用と復号には、数学の準備から膨大な時間を割くことになりました!

ブログ記事を読んでください!

教育および研究目的のみ
すべてのサンプルはマルウェア分析および防御研究のために提供されています。サンドボックス化されたエアギャップ環境外で実行しないでください。


概要

Tourmaline (Tourmaline.exe) は、ClickFixキャンペーンを通じて配布される洗練された多段階のWindowsインフォスティーラー/バックドアです。これは、偽のCloudflare「あなたが人間であることを確認してください」ブラウザポップアップで、ユーザーを騙して悪意のあるコマンドやインストーラーを手動で実行させるものです。

このバイナリは、完全なPython 3.11ランタイムと2段階の難読化されたPythonペイロードをバンドルした、カスタムビルドの**Inno Setup 6.7.0 (リビジョン2、64ビットオフセット)**インストーラーです。以下の機能を持つ永続的なバックドアを確立します:

  • DNSトンネリング C2 over UDPポート53 (microsoft.comクエリを装う)
  • イーサリアムブロックチェーンデッドドロップによるC2 IP配布 (Sepoliaテストネット)
  • ChaCha20暗号化されたタスク実行チャネル
  • ECDSA署名されたコマンドによるシンクホール防止
  • アンチサンドボックス時間ロック (1億回のイテレーションカウントダウン、O(1)でバイパス可能)

リポジトリ構造

root@kitploit:~
tourmaline/
├── README.md                  # このファイル
├── LICENSE                    # 研究利用ライセンス
├── .gitignore
│
├── src/                       # 抽出および難読化解除されたソースコード
│   ├── stage1_loader.py       # ステージ1: 元の難読化XOR時間ロックローダー (main.py)
│   ├── stage2_backdoor.py     # ステージ2: 難読化解除されたコアバックドア (QGBdu.dxfから)
│   └── decrypt_payload.py     # ユーティリティ: O(1)ペイロードキー復元と復号
│
├── iocs/                      # 侵害指標
│   ├── indicators.json        # 構造化されたIOCデータ (IP、ハッシュ、ドメイン、レジストリ)
│   ├── indicators.csv         # SIEMインポート用のフラットCSV
│   └── rules.yar              # YARA検出ルール
│
└── samples/                   # マルウェアサンプル (パスワード保護)
    ├── README.md              # サンプルアーカイブの手順
    ├── Tourmaline_sample.zip  # パスワード: infected - Tourmaline.exeを含む
    └── QGBdu.dxf             # 生の暗号化されたステージ2ペイロードブロブ

感染経路

このマルウェアはClickFixを通じて配布されます。これは、侵害された、または攻撃者が制御するウェブサイトが偽のCloudflare CAPTCHAまたはブラウザ検証ページをオーバーレイするソーシャルエンジニアリング手法です。オーバーレイは被害者に以下を指示します:

  1. Win+Rを押す
  2. コマンドを貼り付ける (ページのJavaScriptによってクリップボードにコピーされる)
  3. Enterを押す

貼り付けられたコマンドはTourmaline.exeをダウンロードしてサイレントに実行します。インストーラーは/VERYSILENT /SUPPRESSMSGBOXES /NORESTARTで実行されます。


バイナリ形式

注: 標準のinnoextract 1.9ではこのバイナリを抽出できません — リビジョン1のみをサポートしています。リビジョン2は64ビットオフセットを使用し、カスタムパースが必要です (src/decrypt_payload.pyを参照)。


実行フロー

root@kitploit:~
Tourmaline.exe
│
├─ Inno Setupインストーラーがサイレント実行
│   ├─ Python 3.11ランタイムを%APPDATA%\Tourmaline\に抽出
│   ├─ main.py (ステージ1ローダー)を抽出
│   ├─ QGBdu.dxf (暗号化されたステージ2ブロブ)を抽出
│   ├─ 既存のpythonw.exeインスタンスを強制終了
│   └─ 永続性を登録 (タスクスケジューラ / レジストリ)
│       └─ 名前: "TourmalineUpdate" / "Hardware monitoring service"
│
├─ ステージ1: main.py (XOR時間ロックローダー)
│   ├─ _nを99,999,999 → 0までカウント (遅いVMでは数時間のアンチサンドボックス遅延)
│   ├─ 各_nで33バイトのXORキーを構築: struct.pack('>I', _n) + hardcoded_suffix
│   ├─ QGBdu.dxfの既知の平文ヘッダーに対してキーをテスト
│   └─ 一致時: QGBdu.dxfを完全に復号し、結果をexec()
│       └─ O(1)バイパス: 最初の4バイトに対する既知平文攻撃 (下記参照)
│
└─ ステージ2: QGBdu.dxf → Pythonバックドア
    ├─ HKLM\SOFTWARE\Microsoft\CryptographyからMachineGuidを読み取り
    ├─ ミューテックスGlobal\Tourmaline_<hash>を導出
    ├─ イーサリアムデッドドロップ (Sepoliaテストネット)経由でC2 IPを解決
    ├─ C2へのDNSトンネルを確立
    └─ ポーリング実行ループ: タスクを取得し、Pythonをexec()し、出力を返す

ステージ1 — アンチサンドボックス時間ロック (O(1)バイパス)

ローダー (main.py) は、XOR復号キーを見つけるために99,999,999からのカウントダウンを使用します。実際のマシンでは、これは数秒で完了します (_nは高い値から始まり、真の値は14,511,188付近であるため)。短い時間制限のあるサンドボックスでは、ループは決して完了しません。

キー構造:

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

平文の最初の16バイト (g1 = lambda l6, ) がわかっているため、既知平文XOR攻撃により_nを即座に復元できます:

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

これを再現するにはsrc/decrypt_payload.pyを使用してください。


ステージ2 — コアバックドアアーキテクチャ

設定 (ハードコード)

ブロックチェーンデッドドロップ (C2耐性)

このマルウェアは、Sepoliaテストネット上のイーサリアムスマートコントラクトを呼び出して、アクティブなC2 IPアドレスを取得します。これは、攻撃者がコントラクトを更新することでいつでもC2 IPを変更できることを意味します — 従来のIPブロックリストベースのC2妨害は効果がありません。

root@kitploit:~
Contract : 0x2d7a04cca0c34005f58393f30ac725e25f19e5f5
Selector : 0xeb9fd6fe
Network  : Ethereum Sepolia (chainId 11155111)
RPC      : https://ethereum-sepolia-rpc.publicnode.com
Result   : 現在のC2 IPを含むChaCha20暗号化ブロブ

返されたデータは、ハードコードされたChaCha20キーで復号され、ライブC2アドレスが明らかになります。分析時点では、これは**158.94.211.185**に解決されました (ライブRPC呼び出しで検証済み)。

DNSトンネル (C2通信)

すべてのC2トラフィックは、生のUDP DNSクエリとしてC2 IPのポート53に直接送信されます。クエリは<encoded_data>.microsoft.comとして構造化され、DNSベースのフィルタリングをバイパスし、正当なWindowsテレメトリとして表示されます。

  • カスタム実装: Pythonのsocket.getaddrinfoやDNSライブラリを使用していません
  • オペコード難読化: 各パケットには、DNSオペコードフィールドに適用されるランダムなXORバイトがあります
  • エンコーディング: タスクデータはDNSラベル形式にbaseエンコードされます

タスク実行エンジン

バックドアは任意のPython exec()エンジンを実装しています。タスクは:

  1. DNSトンネル経由でC2から取得
  2. ChaCha20で復号
  3. ECDSA署名検証 (シンクホールインジェクションを防止)
  4. 出力キャプチャ付きの永続的な名前空間でexec()
  5. 結果をC2に返す

サポートされるタスクタイプ: Python exec、ファイルアップロード/ダウンロード、シェルコマンド、自己更新。


侵害指標 (IOC)

ネットワーク

ファイルハッシュ

ファイルSHA256
Tourmaline.exec9b390b3b7148f549df86503858d52e030b2b5e78fed0bc525ded5927f9265d6
Tourmaline.exe (MD5)b74ac808dea2de31caf024310694ef0c

レジストリ / 永続性


YARAルール

以下をカバーする検出ルールについてはiocs/rules.yarを参照してください:

  • ステージ1ローダー定数 (XORキーサフィックス、既知平文バイト)
  • ステージ2ハードコード文字列 (C2 IP、コントラクトアドレス、ChaCha20キー)

修復 / クリーンアップ

このマルウェアがマシン上で実行された場合:

  1. 直ちに隔離 — ネットワークから切断
  2. プロセスを強制終了: taskkill /F /IM pythonw.exe
  3. インストールディレクトリを削除: %APPDATA%\Tourmaline\ または %COMMONAPPDATA%\Tourmaline\
  4. 永続性を削除:
    • タスクスケジューラ: TourmalineUpdateを削除
    • HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\RunでTourmalineまたはSystemServiceを確認
  5. ファイアウォールでブロック: 158.94.211.185:53/UDP; 予期しないすべてのアウトバウンドUDP/53をブロック
  6. プロキシでイーサリアムRPCをブロック: ethereum-sepolia-rpc.publicnode.com
  7. 再イメージング — 任意のPython exec機能のため、完全な再イメージングを強く推奨

分析の再現

前提条件

root@kitploit:~
pip install pyOpenSSL cryptography

ステージ2ペイロードの復号

root@kitploit:~
# リポジトリルートから:
python3 src/decrypt_payload.py samples/QGBdu.dxf decrypted_stage2.py

マルウェアサンプルの抽出

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

開示


ライセンス

LICENSEを参照してください。このリポジトリは教育および防御研究目的のみです。

ツールをダウンロード
プロパティ値
ファイル名Tourmaline.exe
サイズ11,341,339バイト (~10.8 MB)
MD5b74ac808dea2de31caf024310694ef0c
SHA256c9b390b3b7148f549df86503858d52e030b2b5e78fed0bc525ded5927f9265d6
形式Inno Setup 6.7.0 Unicode (リビジョン2、64ビットオフセット)
PEタイプ32ビットPE、11セクション
オーバーレイサイズ10,447,387バイト
Innoマジックオフセット0xD9864 (890,148バイト)
アプリ名Tourmaline
アプリバージョン2.63.519
アプリGUID{2C25872D-85FC-44C7-9B16-844E39E50A44}
インストールパス{commonappdata}\Tourmaline
バンドルランタイムPython 3.11 (完全埋め込み)
ペイロードファイルソリッドLZMA2ストリーム内の36ファイル
パラメータ値
C2 IP158.94.211.185
C2ポート53 (UDP)
プロトコルカスタムDNS-over-UDPトンネル
偽装ドメインmicrosoft.com
ChaCha20キー36f555c87f71581f57d83576c88193fdc00a0173f741a3e198e2d7abdc9cda59
ブロックチェーンコントラクト0x2d7a04cca0c34005f58393f30ac725e25f19e5f5 (Sepolia)
ECDSA公開鍵MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEt17l3rGHHR9sYdHEvV8S+JRRCUHQQveSadlGk04xM/8WClDf/67Tyritt2+T18SY8n0xv1TKKl0AgnNFuboEEQ==
サービス名SystemService / TourmalineUpdate
ミューテックスGlobal\Tourmaline_<MachineGuid-hash>
タイプ値
C2 IP158.94.211.185
C2ポート53/UDP
偽装ドメイン*.microsoft.com (カスタムUDP、実際のDNSではない)
イーサリアムRPChttps://ethereum-sepolia-rpc.publicnode.com
スマートコントラクト0x2d7a04cca0c34005f58393f30ac725e25f19e5f5
キー値
HKLM\SOFTWARE\Microsoft\Cryptography\MachineGuid被害者フィンガープリンティングのために読み取り
%APPDATA%\Tourmaline\インストールディレクトリ
タスクスケジューラTourmalineUpdate
サービス表示名Hardware monitoring service
ミューテックスGlobal\Tourmaline_<hash>
フィールド値
発見日2026年9月
研究者Vihaan Pundir (v-pun215)
配布ベクターClickFix偽Cloudflare CAPTCHA
分類バックドア / DNSトンネルC2 / ブロックチェーンデッドドロップ
プラットフォームWindows (64ビット)