Security

【現代版トロイの木馬マルウェアを完全解析する】挙動・実装・フォレンジック・YARA・CTF訓練まで

目次

はじめに

トロイの木馬型マルウェア(Trojan Horse Malware)は、表面上は無害な正規ツールを装いながら、背後で機密情報の窃取・システム改変・遠隔操作などを行う悪質なマルウェアの一種です。近年のトロイの木馬は、以下のような巧妙な特徴を備えています

  • サンドボックス・仮想環境・デバッガー検出によるセキュリティ回避
  • マルチレイヤーな永続化(レジストリ、スタートアップ、スケジューラ、WMI)
  • セキュリティソフトの無効化(プロセス強制終了+Firewall操作)
  • C&C(Command and Control)通信による指令の受信と動的挙動
  • ブラウザデータ・スクリーンショット・キー入力・ファイル情報の送信
  • 自己アップデート・自己削除による持続性と痕跡隠蔽

本記事では、実際に私が解析・拡張したNode.jsベースのトロイの木馬のサンプルマルウェアを題材に、以下の項目を解説します

  • 感染経路とマルウェアの全体構成
  • 解析済みのマルウェア本体コードと補完関数
  • 機能ごとのC2ペイロード実装と実行挙動
  • 各機能に対するEDR対策、Sysmonルール、SIEM連携手法
  • フォレンジック報告テンプレート(英語/日本語)
  • RedTeam vs BlueTeam演習用CTF問題と解説
  • YARAルール作成・自動生成ツールの構築例

本記事の内容を悪用することは、決して行わないでください
ただ、コードを改変し悪用することは絶対にやめて下さい

用語と技術の前提知識(初心者向け)

本記事では以下の用語・技術が頻繁に登場します。あらかじめ理解しておくことで、本文をスムーズに読み進められます。

用語意味
C2サーバー(Command & Control)攻撃者が遠隔操作するために使用する指令・情報収集の中継サーバー
EDR(Endpoint Detection & Response)エンドポイント上での不審な挙動を監視・記録し、インシデント対応を支援するセキュリティ製品
YARAファイルやプロセスを特定のパターンに基づいて識別するための検知ルール記述言語
SysmonMicrosoftが提供する高機能なWindows用システムモニタリングツール。イベントIDでプロセス、ネットワーク、レジストリ操作などを記録可能
WMI(Windows Management Instrumentation)Windows内のシステム・構成・アプリケーションをスクリプトやプログラムから操作する仕組み。永続化にも悪用されやすい
ファイルレスマルウェアディスクにファイルを残さず、メモリ上だけで動作する攻撃コード
フォレンジックデジタル証拠を収集・分析する技術(証拠保全、タイムライン解析、痕跡分析など)

第1章:感染経路とマルウェアのライフサイクル全体像

1.1 感染経路の詳細

本マルウェアは一般的なトロイの木馬型と同様に、以下のような手法で対象システムに感染します

感染手法内容
メール添付.exe.js 拡張子を持つ偽装ユーティリティや、.docm のようなマクロ付きWordファイルに見せかけたマルウェアが、添付ファイルとして送信される。ユーザーがダブルクリックすることで実行される。
USB感染USBドライブに autorun.inf + payload.exe を仕込む。USBを挿入した際に自動実行される設定があるPCでは、自動的に感染が開始する。
ドライブバイダウンロード改ざんされた正規Webサイトや不正広告(Malvertising)にアクセスしただけで、脆弱性を突かれてファイルがダウンロードされ、自動的に実行される。
他マルウェアからの連携Emotet、SmokeLoader、IcedIDなどのローダー型マルウェアが、感染後の第2ステージとしてこのトロイの木馬を投下・実行するケースも存在する。

1.2 感染後の全体構成(ライフサイクル)

以下のように、感染後は段階的に処理が行われ、最終的にC2通信とペイロード受信、情報窃取などが行われます。

このような構造により、感染してもすぐには被害が顕在化せず、ユーザーに気づかせないまま情報窃取などを静かに行うのが特徴です。

次章からは、いよいよこのマルウェアの全コード実装と関数解析に入っていきます。

第2章:トロイの木馬マルウェアの完全コードと構造解析

この章では、解析対象のNode.jsベースで構築されたマルウェアの全体構造・処理の流れ・コード全文とその意図について、段階的に詳細に解説します。

本コードは教育目的で改変されたものであり、実際のマルウェアの挙動に極めて近い構成を模倣しています。

2.1 コア構成の全体像

マルウェアは以下のように構成されています:

  • legitimateApplication():正規アプリを装い、ユーザーを欺くUI処理
  • initialize():実行環境の確認後、バックグラウンドで悪性処理開始
  • detectSandbox(), detectVM(), detectDebugger():解析回避の検出群
  • disableSecuritySoftware():セキュリティソフトのプロセス終了とFirewall変更
  • establishPersistence():Runキー追加、スタートアップ、スケジュール、WMI
  • connectToC2Server():HTTPS通信+システム情報送信+指令受信
  • executeCommands():受信したペイロード命令の切り替え実行

2.2 実行フロー図解(擬似)

起動
 ├── ユーザー向けUI表示(正規風)
 ├── 実行環境の検出(VM/Debug/Sandbox)
 │   └─ 該当 → 偽装のみ実行
 ├── セキュリティソフト無効化
 ├── 永続化構築(Runキー等)
 ├── C2サーバーへ情報送信
 └── 指令に応じた動的ペイロード実行(keylog, screenshotなど)

2.3 次節:コード全文と各関数の役割

1. 初期化フェーズ

  • legitimateApplication(): ユーザーに表示される偽装された正規機能を提供
  • initialize(): マルウェアの初期化を行い、解析環境の検出と機能実行のタイミングを制御

2. 解析回避システム

  • detectSandbox(): Cuckoo SandboxやSandboxieなどの解析環境を検出
  • detectVM(): VMware、VirtualBoxなどの仮想環境を検出
  • detectDebugger(): デバッガーの存在を検出するための時間計測と分析

3. 永続化システム

  • establishPersistence(): 以下の複数の方法でシステム再起動後も生存できるよう永続化
    • レジストリキー追加
    • スタートアップフォルダへのコピー
    • スケジュールタスク作成
    • WMI永続化(高度な手法)

4. 防御無効化システム

  • disableSecuritySoftware(): セキュリティソフトを無効化
  • elevatePrivileges(): 管理者権限の取得を試行
  • killProcesses(): セキュリティ関連プロセスの終了

5. C&C通信システム

  • connectToC2Server(): 複数のフォールバックサーバーへの接続を試行
  • encryptData(): 送信データの暗号化
  • decryptData(): 受信データの復号

6. コマンド実行システム

  • executeCommands(): C&Cサーバーから受信したコマンドの解釈と実行

7. ペイロード実行システム

  • 情報収集モジュール:
    • collectBrowserData(): ブラウザからの認証情報収集
    • collectSensitiveFiles(): 機密ファイルの収集
  • 監視モジュール:
    • startKeylogger(): キー入力の記録
    • captureScreen(): スクリーンショットの取得
  • 拡張・制御モジュール:
    • downloadModule()/executeModule(): 追加機能のダウンロードと実行
    • updateSelf(): 自己アップデート機能

8. 自己削除機能

  • removeTracks(): 活動痕跡の消去
  • selfDestruct(): マルウェア自身の削除

この構造は一般的なトロイの木馬の設計パターンを示しており、侵入→防御回避→永続化→情報収集→外部通信という典型的なサイバー攻撃のライフサイクルを表します。

次節では、この構成を実現しているコード本体(JavaScript/Node.js)を機能ごとに構造と実行意図を徹底解説していきます。

第2.4節:マルウェア本体コード全文掲載(ユーザー解析・補完含む)

以下に、解析したマルウェアコードを教育目的で簡単にしたものを掲載します。

このコードは無害化する様に変更してあり、マルウェアとしては機能しません
ただ、コードを改変し悪用することは絶対にやめて下さい

コードは非常に長大なため、次章で各関数ごとに動作解説・EDR対策・検知点・YARAマーカーなども順次解説します。

// 無害化トロイの木馬コード
// 実際の機能は単純な模擬実装に置き換えています

// 正規のアプリケーション機能
function legitimateApplication() {
  console.log("システムスキャンユーティリティを起動しています...");
  displayProgressBar();
  return "スキャン完了:システムは正常です";
}

// 初期化関数
(function initialize() {
  // 環境検出
  if (detectSandbox() || detectVM() || detectDebugger()) {
    legitimateApplication();
    return;
  }
  
  // 正規機能を実行
  const result = legitimateApplication();
  console.log(result);
  
  // 本来の悪意のある部分を無害化
  setTimeout(() => {
    try {
      // すべての関数を無害な実装に置き換え
      simulateSecurityCheck();
      simulateConfigBackup();
      const serverResponse = simulateUpdateCheck();
      processUpdateCommands(serverResponse);
    } catch (error) {
      console.log("エラーが発生しました:", error);
    }
  }, 5000);
})();

// 環境検出機能 - 無害実装
function detectSandbox() {
  console.log("仮想環境検出チェック(サンドボックス)");
  return false; // 常に検出なしを返す
}

function detectVM() {
  console.log("仮想環境検出チェック(仮想マシン)");
  return false; // 常に検出なしを返す
}

function detectDebugger() {
  console.log("デバッガー検出チェック");
  return false; // 常に検出なしを返す
}

// セキュリティ関連処理 - 無害実装
function simulateSecurityCheck() {
  console.log("セキュリティ設定の確認...");
  
  // 無害な実装
  const securityStatus = {
    firewall: "有効",
    antivirus: "最新",
    updates: "インストール済み"
  };
  
  console.log("セキュリティ設定: ", securityStatus);
  return securityStatus;
}

// 設定バックアップ機能 - 無害実装
function simulateConfigBackup() {
  console.log("システム設定のバックアップを作成...");
  
  // 無害な実装 - 実際には何も行わない
  const configData = {
    timestamp: new Date().toISOString(),
    settings: "システム設定バックアップ(シミュレーション)"
  };
  
  console.log("バックアップ完了:", configData.timestamp);
  return true;
}

// 更新チェック機能 - 無害実装
function simulateUpdateCheck() {
  console.log("アップデートの確認中...");
  
  // 無害な実装
  const mockResponse = {
    command: 'check_system',
    params: { 
      type: 'performance',
      action: 'analyze'
    }
  };
  
  console.log("更新ステータス: 最新バージョンです");
  return mockResponse;
}

// コマンド処理 - 無害実装
function processUpdateCommands(response) {
  console.log("システムコマンドを処理中...");
  
  const { command, params } = response;
  console.log(`受信コマンド: ${command}, パラメータ:`, params);
  
  switch (command) {
    case 'check_system':
      console.log("システムチェックを実行中...");
      if (params.type === 'performance') {
        console.log("パフォーマンス分析を実行中...");
      }
      break;
      
    case 'optimize':
      console.log("最適化処理を実行中...");
      break;
      
    default:
      console.log("不明なコマンド、無視します");
  }
  
  console.log("コマンド処理完了");
}

// 表示関連のユーティリティ
function displayProgressBar() {
  console.log('[                    ] 0%');
  setTimeout(() => console.log('[=====               ] 25%'), 500);
  setTimeout(() => console.log('[==========          ] 50%'), 1000);
  setTimeout(() => console.log('[===============     ] 75%'), 1500);
  setTimeout(() => console.log('[====================] 100%'), 2000);
}

// 元コードの存在した関数を無害なスタブに置き換え
function checkForProcesses() { 
  console.log("プロセスチェック(シミュレーション)");
  return false; 
}

function checkForHardwareIds() { 
  console.log("ハードウェアIDチェック(シミュレーション)");
  return false; 
}

function checkForDebugger() { 
  console.log("デバッガーチェック(シミュレーション)");
  return false; 
}

function elevatePrivileges() { 
  console.log("権限チェック(シミュレーション)");
  return true; 
}

function exploitVulnerability() { 
  console.log("セキュリティチェック(シミュレーション)");
}

function killProcesses() { 
  console.log("プロセス管理(シミュレーション)");
}

function modifyFirewallRules() { 
  console.log("ファイアウォール設定確認(シミュレーション)");
}

function addToRegistry() { 
  console.log("設定保存(シミュレーション)");
}

function getStartupFolder() { 
  console.log("スタートアップフォルダ確認(シミュレーション)");
  return "./startup"; 
}

function copyFile() { 
  console.log("ファイルバックアップ(シミュレーション)");
}

function createScheduledTask() { 
  console.log("タスクスケジュール確認(シミュレーション)");
}

function createWMIPersistence() { 
  console.log("設定永続化(シミュレーション)");
}

function getHostname() { 
  return "localhost"; 
}

function getUsername() { 
  return "demo_user"; 
}

function getOSVersion() { 
  return "Demo OS 1.0"; 
}

function getInstalledSecuritySoftware() { 
  return ["Demo Security"]; 
}

function generateMachineId() { 
  return "DEMO-ID-123456"; 
}

function sendHttpRequest() { 
  console.log("アップデートチェック(シミュレーション)");
  return { status: 200, data: "dGVzdA==" }; // Base64でエンコードされた "test"
}

function encryptData(data) {
  console.log("データ暗号化(シミュレーション):", data);
  return btoa(data); // 単純なBase64エンコード
}

function decryptData(data) {
  console.log("データ復号(シミュレーション)");
  try {
    // 単純なBase64デコード
    return JSON.parse(atob(data));
  } catch (e) {
    return { command: 'check_system', params: { type: 'default' } };
  }
}

function sendToC2Server() { 
  console.log("更新サーバーに接続(シミュレーション)");
}

function collectBrowserData() { 
  console.log("ブラウザ互換性チェック(シミュレーション)");
  return { compatible: true }; 
}

function collectSensitiveFiles() { 
  console.log("重要ファイルバックアップチェック(シミュレーション)");
  return { backupNeeded: false }; 
}

function downloadModule() { 
  console.log("モジュールダウンロードチェック(シミュレーション)");
  return "./module.js"; 
}

function executeModule() { 
  console.log("モジュール実行(シミュレーション)");
}

function startKeylogger() { 
  console.log("入力モニタリング(シミュレーション)");
}

function captureScreen() { 
  console.log("スクリーンキャプチャ(シミュレーション)");
  return "スクリーンショットデータ(シミュレーション)"; 
}

function updateSelf() { 
  console.log("自己アップデート(シミュレーション)");
}

function removeTracks() { 
  console.log("一時ファイル削除(シミュレーション)");
}

function selfDestruct() { 
  console.log("プログラム終了(シミュレーション)");
}

※ この後のセクションでは、checkForProcesses() などの補完ユーティリティ関数群を含む全体構造をさらに展開・解説していきます。

第2.5節:補完ユーティリティ関数群の構造と設計概念

本節では、実際のコードの掲載は省略し、安全性と倫理的配慮の観点から概念的な設計方針と機能構成に焦点を当てて解説します。

このマルウェアは多数の補助的関数によって支えられており、それぞれが次のカテゴリに分類されます

🔍 1. 環境検出・解析回避系

  • プロセス検出:仮想環境やサンドボックスのプロセス(例:VBoxService、vmtoolsdなど)を列挙して検出。
  • ハードウェアIDチェック:仮想化プラットフォーム特有のハードウェア情報(例:VBOX、QEMU)を確認。
  • デバッガー判定:実行速度差やプロセスフラグ、Node.jsの引数などから簡易的なデバッガー有無を判定。

🛡️ 2. 永続化系

  • レジストリ登録:Runキーに自身のパスを登録。
  • スタートアップ配置:Startupフォルダへ実行ファイルをコピー。
  • スケジュールタスク:ログオン時実行のタスクを作成。
  • WMI利用:スクリプトベースで非同期トリガを作成。

🧪 3. セキュリティ回避・妨害系

  • プロセス強制終了:特定のセキュリティ製品(例:Windows Defender、Kaspersky)を対象にプロセスをkill。
  • Firewallルール変更:自身の通信を許可するためのファイアウォール例外ルールを追加。

📡 4. 情報収集・C2通信系

  • システム情報取得:ホスト名・ユーザー名・OSバージョン・セキュリティ製品の情報を収集。
  • 暗号化送信:収集情報を簡易的なXORとBase64で暗号化し、C2へPOST通信。
  • 応答処理:C2から返却されたコマンド(例:keylog、download、screenshot)を分岐実行。

🧠 5. キーロガー/スクリーンショット系

  • キーフック登録:キー入力を非表示でフック。
  • ウィンドウタイトル取得:ユーザーが使用中のアプリ名を記録。
  • ロギングとバッファ監視:一定サイズ以上になると送信トリガ。

📦 6. 自己更新・痕跡削除系

  • モジュール取得/実行:遠隔モジュールを取得してメモリ上またはファイル経由で実行。
  • 自己削除/アップデート:新バージョンをダウンロードして置換、または痕跡削除を行い自己終了。

これらの関数群が連携し、マルウェアの持続性、柔軟性、ステルス性を高めています。 次節ではこれらの設計に対するEDR・SIEM視点での検知ロジックとマッピング表を提示します。

第3章:C2ペイロードの構造と挙動解析

本章では、マルウェアがC2(Command and Control)サーバーから受け取るペイロード命令の構造と、それらの実行時に見られる典型的な挙動を解析します。

3.1 C2応答の構造

このマルウェアはC2から以下のようなJSON形式のレスポンスを受信し、命令を解析・分岐実行します:

{
  "command": "keylog",
  "params": {}
}

3.2 ペイロード種別一覧

コマンド内容
collectブラウザや指定フォルダからの機密データ収集
keylogキー入力の記録と一定バッファ蓄積後のC2送信
screenshotスクリーンショットを撮影しBase64化して送信
download指定URLからのモジュールダウンロードと動的実行
update自己更新処理(ファイル置換またはリスタート含む)
uninstall永続化削除、自己削除の実行(履歴ファイル・レジストリ除去含む)

3.3 フォレンジック・EDR観点での挙動例

ペイロード観察対象ログ/挙動例
keylogファイル生成 + 通信.logファイルの増加、一定周期でC2にPOST
screenshot一時画像 + HTTP送信%TEMP%に画像生成、Base64エンコードのPOST通信
download外部接続 + 新プロセス生成通信先URL、%APPDATA%%TEMP%に実行ファイル、EID 1確認可
update自己ファイルの変更ファイル属性変化、リネーム、リスタートログ
uninstallファイル/キー削除 + プロセス終了Runキー削除、ファイル消失、Sysmon EID 23などで観測可

3.4 シナリオ例:典型的な侵害プロセス(簡略版)

1. 感染直後、ユーザーを欺く偽UI表示
2. VMやサンドボックス環境でないことを確認
3. 永続化設定を追加、セキュリティ無効化
4. C2へ初回通信、基本情報を送信
5. C2から {command: 'keylog'} を受信
6. ユーザー操作を記録、ログを送信
7. C2から {command: 'screenshot'} を受信
8. アクティブウィンドウをキャプチャし送信

第4章:YARAルールと振る舞いベース検知の実装戦略

この章では、前章までに解析した構造・機能・C2通信のパターンをもとに、振る舞いベースでのYARA検出ルールをどのように構築するかを説明します。

4.1 YARAルールの基本構造

YARAは以下のような構文で定義されます

rule ExampleRule {
  meta:
    description = "検出目的の説明"
  strings:
    $a = "VBoxService.exe"
    $b = "reg add \"HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run\""
    $c = /https:\/\/[^\s]+\/api\/update\.php/
  condition:
    any of ($a,$b,$c)
}

4.2 振る舞い別の代表的な検出キーワード

振る舞いカテゴリ特徴的なキーワードやコード断片
VM回避VBoxService, QEMU, VirtualBox など
永続化CurrentVersion\Run, reg add
C2通信/api/update.php, application/x-www-form-urlencoded
キーロガーinstallKeyboardHook, appendToKeylogFile
スクリーンショット取得captureScreen, Base64.encode
自己削除selfDestruct, deleteFile, cmd /c del

4.3 ペイロード別YARAルール例(擬似)

collect型:

rule Trojan_CollectData {
  strings:
    $a = "Login Data"
    $b = "cookies.sqlite"
    $c = "logins.json"
  condition:
    2 of ($a,$b,$c)
}

keylog型:

rule Trojan_Keylogger {
  strings:
    $hook = "installKeyboardHook"
    $append = "appendToKeylogFile"
  condition:
    all of them
}

4.4 運用上の注意とチューニング

  • 特定API名だけで検出せず、複数条件の組み合わせで構築
  • ログやSysmon、ファイル名、ネットワーク通信との相関を加味
  • メモリスキャン用とファイルスキャン用でルールを分ける
  • 定期的な改訂とチューニングで誤検知・過検知を防ぐ

第5章:YARAルール生成Webツールの設計と攻防演習シナリオ

5.1 ツールの目的と利用シーン

  • 複雑なYARA構文をGUIで自動生成
  • SOCチーム/教育用途での迅速なルール構築支援
  • Red Team・Blue Team演習やCTF用途にも応用可能

5.2 Webツール設計概要(概念図)

[ユーザー入力]
 ├─ 検出対象関数名、C2ドメイン、レジストリ文字列など
 └─ 選択形式(AND / OR 条件, メタ情報)

[ルールプレビュー]
 └─ 生成されたYARAコードを即時表示

[出力]
 ├─ ルールコピー
 └─ .yarファイルとしてダウンロード

5.3 UI要素一覧(HTML要素)

  • input:キーワード(関数名、ドメイン等)
  • select:条件の構成(all of them / any of them)
  • textarea:ルールのライブ表示欄
  • button:生成/コピー/ダウンロードトリガ

5.4 Red Team vs Blue Team 演習シナリオ例

Case 1:Red Teamの攻撃(シナリオ)

  • USB経由で感染
  • レジストリRunキーに永続化
  • スクリーンショット → C2へ送信

Case 2:Blue Teamの検出対策

  • Sysmon EID 13(Runキー)と通信ログ相関
  • 上記YARAツールで「registry」「captureScreen」「C2ドメイン」指定でルール作成
  • SIEMへ投入してアラートを確認

このように、実際の攻撃検知・訓練に即したツール設計が可能になります。

第6章:フォレンジック報告テンプレートとCSIRT対応実務

この章では、実際にトロイの木馬感染が疑われた際の初動対応から報告書作成までのフローと、即使えるテンプレートを解説します。


6.1 インシデント発生時の初動対応フロー(概略)

 アラート発生(EDR/YARA/SIEM)
  ↓
 端末隔離(ネットワーク遮断、VPN無効化)
  ↓
 メモリ/ディスクの証拠保全(Redline, FTK, Velociraptor等)
  ↓
 実行ファイルと通信ログの抽出
  ↓
[5] YARAスキャン+ハッシュ確認+VirusTotal照会
  ↓
[6] タイムライン解析(MFT, Prefetch, Sysmon)
  ↓
[7] レジストリ・タスク・WMIなど永続化痕跡を調査
  ↓
[8] 報告書作成(内部+外部向け)

6.2 フォレンジック調査報告書テンプレート(日本語)

▽ 概要セクション

  • 案件番号:INC-2025-XXXX
  • 発生日:2025年XX月XX日
  • 対象端末:HOST123.local(Win10)

▽ 調査結果要約

  • 検出シグネチャ:YARA[Trojan_Screenshot]
  • 永続化:Runキー+スケジュールタスク(Sysmon EID13, EID106)
  • 通信先IP:C2.example.org(WHOIS済)
  • 実行ファイル:C:\Users\User\AppData\Roaming\SystemHelper.exe

▽ 推奨対応

  • 該当端末の初期化
  • 全社でのYARA/EDRルール更新
  • C2接続ログの全体ログからの確認
  • 外部機関(JPCERT等)への連携

6.3 CSIRT運用での共有ポイント

項目内容
チェック項目リストタスク・WMI・レジストリ・通信ログ・MFT・Prefetchなど
使用ツールRedline, Velociraptor, KAPE, Sysmon
社内報告レベル経営報告用簡易版/技術担当者用詳細版の2種類作成

第7章:まとめと応用展開(Ghidra連携、演習化、社内教育利用)

これまでにわたる解析内容をもとに、本章では以下の3つの観点から実践的な応用展開を解説します:


7.1 Ghidra・静的解析ツールとの連携

▷ Ghidraでの活用方法

  • マルウェアがダウンロードする SystemHelper.exe を Ghidra にロード
  • strings, function graph, decompiler, xref を使用して以下を抽出:
    • 永続化に関与する関数群(例:RegSetValueExW, CreateTask, WMIオブジェクト)
    • 通信先のドメインやAPI呼び出し構造(WinHTTP系)
  • .bss セクションに埋め込まれたキーなどのパターン分析

▷ 応用連携

  • Ghidra + YARA連携で .text セクション内に特定の命令列を検出
  • AutoYARAツールによる自動ルール生成支援(教育向け)

7.2 演習問題/CTF展開

▷ 例:演習問題構成

  • 問題1:「YARAルール作成」(難易度★)
  • 問題2:「Sysmonログから感染経路を復元」(難易度★★★)
  • 問題3:「WMIベースの永続化を検出」(難易度★★★★)

▷ 形式とセット内容

  • Evtxファイル、感染端末イメージ(VHD形式)
  • Flag検出スクリプト + 解説PDF
  • ロールプレイ(Red/Blue)付き研修シナリオ

7.3 社内教育・CSIRT研修での導入事例

▷ 内容展開例

セッション内容
Session 1「マルウェアの構造とJavaScriptコード解析」
Session 2「YARAとSysmonによる検出ルールの作成」
Session 3「フォレンジック調査演習と報告書作成実践」

▷ 受講効果

  • 実装・ログ・報告を横断的に理解
  • 攻撃者の視点+防御者の視点を両立
  • 現場即応力と定量的検知力の習得

🏁 総まとめ

本記事では、1つのNode.jsベーストロイの木馬コードサンプルを入口に、以下を解説しました

  • 感染から実行・通信・情報窃取・削除までの全ライフサイクル
  • 解析コードの全構成・ユーティリティ関数の設計思想
  • EDR/SIEMログの対応マッピング
  • YARA・Sysmon・フォレンジック・CTF展開への応用
  • 実際の社内教育や研修活用までの展開戦略