Scarlet Tactics

悪用厳禁

GlytchC2 詳細技術解析 [概要]

github.com

ファイル構成と概要

GlytchC2-main/
├── attacker/
│   ├── attacker.py          ... Attacker側メイン(コマンド送信・ストリーム録画・デコード制御)
│   ├── crawler.py           ... Twitch配信URL取得 + ffmpegフレームキャプチャ
│   ├── decoder.py           ... グレースケールPNG → バイナリデータ復元
│   ├── twitch_chat_irc.py   ... Twitch IRC通信ライブラリ(victim側と同一)
│   └── example.env          ... Twitch認証情報テンプレート
├── victim/
│   ├── victim.py            ... Victim側メイン(コマンド受信・実行・エンコード・配信)
│   ├── encoder.py           ... バイナリデータ → グレースケールPNG変換
│   ├── twitch_chat_irc.py   ... Twitch IRC通信ライブラリ(attacker側と同一)
│   └── example.env          ... Twitch認証情報テンプレート
├── rsc/                     ... スクリーンショット・バナー画像(16ファイル)
│   ├── GlytchC2_newbanner.png
│   ├── GlytchC2_MainExecutionFlow.jpg
│   └── ... (14 PNG/JPG files)
├── README.md                ... プロジェクト説明・使用方法・動作原理
├── requirements.txt         ... Python依存パッケージ(Pillow, emoji, python-decouple)
└── LICENSE                  ... MIT License
ファイル 種別 行数/サイズ 役割概要
attacker/attacker.py Python スクリプト 179行 コマンド送信、ハンドシェイク、ストリーム録画→デコードのオーケストレーション
attacker/crawler.py Python スクリプト 71行 streamlinkでHLS URL取得、ffmpegでフレームキャプチャ
attacker/decoder.py Python スクリプト 250行 マーカー検出→ヘッダ解析→ペイロードグリッド読取→フラグメント結合→ファイル再構成
victim/victim.py Python スクリプト 164行 IRCコマンド受信→OSコマンド実行/ファイル読取→エンコード→動画化→配信
victim/encoder.py Python スクリプト 222行 データをニブル単位でグレースケールPNGにエンコード(フラグメンテーション対応)
twitch_chat_irc.py Python ライブラリ 217行 Twitch IRC通信(接続・認証・チャンネル参加・メッセージ送受信)
example.env × 2 設定テンプレート 各5行 NICK / PASS(OAuthトークン)のテンプレート
rsc/*.png, *.jpg 画像(バイナリ) 16ファイル README用スクリーンショット・バナー画像
README.md ドキュメント 268行 プロジェクト概要、PoC手順、エンコーダ/デコーダの原理説明
requirements.txt 設定 7行 Pillow, emoji, python-decouple + ffmpeg/streamlinkの注記
LICENSE ライセンス 339行 MIT License

解析の流れ: 本ドキュメントは全体概要として、GlytchC2の目的と攻撃フロー、コンポーネント間の関係、データフロー、通信プロトコル、および検知ポイントを俯瞰する。各コンポーネントの行レベル解析は以下の詳細ドキュメントを参照のこと:
- GlytchC2 詳細技術解析 [victim] - Scarlet Tactics — Victim側(victim.py + encoder.py)の詳細解析
- GlytchC2 詳細技術解析 [attacker] - Scarlet Tactics — Attacker側(attacker.py + crawler.py + decoder.py)の詳細解析
- GlytchC2 詳細技術解析 [twitch irc] - Scarlet Tactics — 共有通信基盤(twitch_chat_irc.py)の詳細解析


1. ツール全体の目的

GlytchC2 は ポストエクスプロイテーション(初期侵害後のフェーズ)向けの C2(Command and Control)ツールであり、以下の 2 つの機能を提供する:

  1. リモートコマンド実行: Victim マシン上で任意の OS コマンドを実行し、その出力を Attacker に返す
  2. ファイル窃取(Data Exfiltration): Victim マシン上の任意のファイルを Attacker に転送する

最大の特徴は、Twitch のライブ配信プラットフォームを C2 通信チャネルとして利用する点にある。従来のC2ツールが専用サーバーや一般的なWebサービス(DNS、HTTP等)を使用するのに対し、GlytchC2は以下の2つのチャネルを組み合わせる:

チャネル プロトコル 用途 データ量
IRC チャット IRC (TCP:6667) 制御信号(コマンド、"OK"、"READY") 少量テキスト
映像ストリーム RTMP → HLS データ転送(コマンド出力、ファイル) 大容量バイナリ

2. 全体の攻撃フロー

攻撃フロー図

ステップの詳細

ステップ 方向 チャネル 内容
① コマンド送信 Attacker → Victim IRC Base64エンコードされた uid:command 文字列
② 受信確認 Victim → Attacker IRC 平文 "OK"
③ 配信準備完了 Victim → Attacker IRC 平文 "READY"(エンコード・動画化完了後)
④ 配信開始許可 Attacker → Victim IRC 平文 "OK"(Attacker 録画準備完了後)
⑤ 映像ストリーム Victim → Twitch → Attacker RTMP / HLS グレースケール動画(ステガノグラフィ)
⑥ デコード Attacker ローカル PNG→ニブル→バイト→ファイル

3. コンポーネント間の関係とデータフロー

3.1 プロセス起動チェーン

[Attacker側]
attacker.py ──subprocess──→ crawler.py ──subprocess──→ streamlink
                                        ──subprocess──→ ffmpeg (録画)
            ──subprocess──→ decoder.py

[Victim側]
victim.py ──subprocess──→ encoder.py
          ──subprocess──→ ffmpeg (PNG→MP4変換)
          ──subprocess──→ ffmpeg (RTMP配信)

3.2 データ変換パイプライン

[Victim側: データ → 映像]

  コマンド出力/ファイル
        │ (バイナリデータ)
        ↓
  encoder.py: バイト → ニブル × 2 → gray値(×17) → PNG画像セル
        │ (1〜N枚のPNG)
        ↓
  ffmpeg: PNG群 → MP4動画 (H.264ロスレス, グレースケール, 1枚10秒)
        │ (output.mp4)
        ↓
  ffmpeg: MP4 → RTMP → Twitch配信サーバー


[Attacker側: 映像 → データ]

  Twitch配信サーバー → HLS (m3u8)
        │
        ↓
  streamlink: HLS URL抽出
        │
        ↓
  ffmpeg: HLS → PNG (1秒1フレーム)
        │ (uid-0001.png 〜 uid-NNNN.png)
        ↓
  SHA-256 重複フレーム除去
        │ (ユニークフレームのみ)
        ↓
  decoder.py: マーカー検出 → ヘッダ解析 → グリッド読取
        │     gray値 → ÷17 → ニブル → バイト
        │     フラグメント結合
        ↓
  復元されたファイル/コマンド出力

3.3 ステガノグラフィ画像のレイアウト


4. 外部依存と環境要件

4.1 Python パッケージ

パッケージ 用途 使用箇所
Pillow 画像生成・読取 (PIL) encoder.py, decoder.py, victim.py
emoji 絵文字のテキスト表現変換 twitch_chat_irc.py
python-decouple .env ファイルからの設定読込 twitch_chat_irc.py

4.2 外部ツール

ツール 用途 使用箇所
ffmpeg (+ libx264) PNG→MP4変換、RTMP配信、HLSフレームキャプチャ victim.py, crawler.py
streamlink Twitch配信のHLS URL抽出 crawler.py

4.3 ネットワーク要件

接続先 ポート プロトコル 必要な側
irc.chat.twitch.tv 6667 IRC (平文TCP) Attacker + Victim
live.twitch.tv 1935 RTMP Victim(配信)
Twitch CDN (可変) 443 HTTPS (HLS) Attacker(録画)

5. 通信プロトコル(ハンドシェイクシーケンス)

5.1 正常フロー

    Attacker                 IRC Chat               Victim              Twitch 配信
    ────────                ──────────              ────────            ──────────────
        │                       │                       │                    │
  (1)   │── Base64(uid:cmd) ──→│──────────────────────→│                    │
        │                       │                       │ コマンド受信       │
        │                       │                       │ Base64デコード     │
  (2)   │←──────── "OK" ───────│←──────────────────────│                    │
        │                       │                       │ コマンド実行       │
        │                       │                       │ encoder.py        │
        │                       │                       │ ffmpeg (MP4生成)  │
  (3)   │←─────── "READY" ─────│←──────────────────────│                    │
        │                       │                       │                    │
        │ crawler.py 起動       │                       │                    │
  (4)   │─────── "OK" ────────→│──────────────────────→│                    │
        │                       │                       │── RTMP配信 ──────→│
  (5)   │                       │                       │                    │
        │←── streamlink ────────│                       │                    │← HLS
        │←── ffmpeg (録画) ─────│                       │                    │
        │                       │                       │                    │
        │                       │                       │ 配信完了           │
        │ SHA-256 重複除去      │                       │ cleanup_files()   │
        │ decoder.py            │                       │                    │
  (6)   │ → ファイル復元         │                       │                    │
        │                       │                       │                    │

5.2 タイムアウトと異常系

待機ポイント タイムアウト 異常時の動作
Attacker: "OK" 待ち 30秒 タイムアウト → 処理続行(ただし READY 待ちに入らない)
Attacker: "READY" 待ち 600秒 (10分) タイムアウト → このコマンドをスキップ
Victim: "OK" (配信許可) 待ち なし(無限ループ、listen timeout=10秒) 永久待機(Attacker応答がなければ停止)
Attacker: crawler リトライ なし(無限ループ) 配信URL取得成功まで1秒間隔でリトライ

6. コード上の弱点・検知ポイント総合

6.1 ネットワーク検知

# 検知ポイント レイヤー 難易度 説明
N1 IRC 接続 (TCP:6667) ネットワーク irc.chat.twitch.tv:6667 への平文TCP接続。DPIで即検知可能
N2 RTMP 配信 (TCP:1935) ネットワーク live.twitch.tv:1935 への接続。業務環境からのライブ配信は異常
N3 Base64 チャットメッセージ アプリケーション IRCトラフィック内のBase64文字列は統計的異常として検知可能
N4 "OK"/"READY" パターン アプリケーション 制御シグナルの定期的な出現パターン
N5 OAuth トークン平文送信 ネットワーク ポート6667は非TLSのため、認証トークンが傍受可能

6.2 ホスト検知

# 検知ポイント レイヤー 難易度 説明
H1 ffmpeg + RTMP引数 プロセス ffmpeg ... rtmp://live.twitch.tv はEDRで即検知可能
H2 streamlink 実行 プロセス streamlink --stream-url は正規用途が限られる
H3 Python プロセスチェーン プロセスツリー python → python (encoder) → ffmpeg → ffmpeg の特徴的チェーン
H4 大量PNG生成→削除 ファイルシステム 短時間での大量画像生成・削除パターン
H5 shell=True コマンド実行 コマンドライン subprocess.run(command, shell=True) はコマンドライン監視で検知

6.3 設計上の弱点

# 弱点 重大度 影響 詳細解析
D1 平文IRC通信 通信傍受、トークン漏洩 GlytchC2 詳細技術解析 [twitch irc] - Scarlet Tactics §4.2
D2 制御シグナルが平文 プロトコル妨害、スプーフィング GlytchC2 詳細技術解析 [victim] - Scarlet Tactics §4.3, GlytchC2 詳細技術解析 [attacker] - Scarlet Tactics §5.2
D3 認証なし(送信者検証なし) 第三者によるコマンド注入 GlytchC2 詳細技術解析 [victim] - Scarlet Tactics §4.3
D4 Base64のみ(暗号化なし) コマンド内容の傍受・復号 GlytchC2 詳細技術解析 [victim] - Scarlet Tactics §4.3
D5 フォレンジック対策不十分 一時ファイルの復元可能性 GlytchC2 詳細技術解析 [victim] - Scarlet Tactics §4.3
D6 無限ループ(タイムアウトなし) Victim/crawler のハング GlytchC2 詳細技術解析 [victim] - Scarlet Tactics §4.3, GlytchC2 詳細技術解析 [attacker] - Scarlet Tactics §5.2
D7 ブランクフレームのソート依存 一部UIDでフレーム順序が崩れる GlytchC2 詳細技術解析 [victim] - Scarlet Tactics §4.3
D8 ミュータブルデフォルト引数 メッセージリスト蓄積バグ GlytchC2 詳細技術解析 [twitch irc] - Scarlet Tactics §4.2
D9 lstrip のパスワード破損 特定トークンで認証失敗 GlytchC2 詳細技術解析 [twitch irc] - Scarlet Tactics §4.2

6.4 検知・防御に対する評価

GlytchC2 の主な強みは、Twitch という正規のプラットフォームを通信チャネルとして利用する点にある。Twitch への接続自体は多くの環境で許可されており(ゲーム・エンターテインメント目的)、URL フィルタリングやドメインブロッキングによる遮断が困難な場合がある。

しかし、以下の理由から検知は十分に可能である:

  1. ポート 6667 の平文 IRC は現代のネットワーク監視で容易に検知・内容検査される
  2. RTMP 配信(ポート 1935)は一般的な業務端末からは発生しない通信パターン
  3. ffmpeg + streamlink の組み合わせは、EDR のプロセス監視で検知可能な特徴的なツールチェーン
  4. shell=True による任意コマンド実行は、コマンドライン監視の主要な検知対象

7. 依存関係と技術スタック

┌─────────────────────────────────────────────────────────────┐
│                     GlytchC2 技術スタック                      │
│                                                             │
│  ┌──────────────────────┐  ┌──────────────────────┐        │
│  │    Python 3.x         │  │   外部ツール          │        │
│  │                      │  │                      │        │
│  │  ┌────────────────┐  │  │  ┌────────────────┐  │        │
│  │  │ Pillow (PIL)   │  │  │  │ ffmpeg         │  │        │
│  │  │ 画像生成/読取   │  │  │  │ + libx264      │  │        │
│  │  └────────────────┘  │  │  │ 動画変換/配信   │  │        │
│  │  ┌────────────────┐  │  │  └────────────────┘  │        │
│  │  │ python-decouple│  │  │  ┌────────────────┐  │        │
│  │  │ .env読み込み    │  │  │  │ streamlink     │  │        │
│  │  └────────────────┘  │  │  │ HLS URL抽出    │  │        │
│  │  ┌────────────────┐  │  │  └────────────────┘  │        │
│  │  │ emoji          │  │  │                      │        │
│  │  │ 絵文字変換     │  │  │                      │        │
│  │  └────────────────┘  │  │                      │        │
│  └──────────────────────┘  └──────────────────────┘        │
│                                                             │
│  ┌──────────────────────────────────────────────────┐      │
│  │              プロトコル / サービス                   │      │
│  │                                                    │      │
│  │  IRC (TCP:6667) ──→ irc.chat.twitch.tv            │      │
│  │  RTMP (TCP:1935) ──→ live.twitch.tv               │      │
│  │  HLS (HTTPS:443) ←── Twitch CDN                   │      │
│  └──────────────────────────────────────────────────┘      │
└─────────────────────────────────────────────────────────────┘

8. 各コンポーネント詳細解析へのリンク

ドキュメント 対象 主要トピック
GlytchC2 詳細技術解析 [victim] - Scarlet Tactics victim.py + encoder.py コマンド受信・実行、ニブル-グレースケール変換、ヘッダ構造、フラグメンテーション、ffmpegパイプライン
GlytchC2 詳細技術解析 [attacker] - Scarlet Tactics attacker.py + crawler.py + decoder.py コマンド送信、ハンドシェイク、streamlink/ffmpegによる録画、SHA-256重複除去、マーカー検出、デコード
GlytchC2 詳細技術解析 [twitch irc] - Scarlet Tactics twitch_chat_irc.py + example.env IRCプロトコル基礎、Twitch TMI、ソケット通信、PING/PONG、OAuth認証