こんにちは、スマートなセキュリティアナリストの皆さん!🕵️♂️💻
前回、私たちはマルウェア解析の華である「ユニークシグネチャ(Unique Signature)」を選別しました。ハッカーが誤って残したタイプミス、プロジェクトパス、そして決して変わらないコアな機械語コード(Hex)まで… 素晴らしい材料が集まりましたね?🥩🥦🥕
さて、これらの材料を使ってYARAルール(YARA Rule)という「料理」を完成させる番です。しかし、YARAの文法(rule, meta, strings, $a = …)をいちいち手入力していると、タイプミスをしたり、括弧のペアが合わずにエラーになったりすることがあります。
そこで今日は、AI(ChatGPT, Claudeなど)に私たちが見つけた特徴だけをポンと渡し、完璧な文法のYARAルールコードを作成してもらうプロンプトエンジニアリングの実践を行います。
たった1分でプロレベルのルールファイルを作成しましょう!⏱️🚀

1. 📋 準備物:前回の成果物
前回の実習でまとめた「自分だけの指紋リスト」をご準備ください。(例示データは以下の通りです。)
- マルウェア名:Ransomware_DarkV1
- テキスト文字列 1:“C:ProjectDarkbot.pdb” (PDBパス)
- テキスト文字列 2:“Don’t kill my process!” (特異なメッセージ)
- ヘキサ文字列:{ E8 ?? ?? ?? ?? 85 C0 74 0F } (コア関数呼び出しと分岐)
2. 🗣️ [実践ステップ 1] AIに「あなたはYARAの専門家だ」と催眠をかける
AIが適当なルールを作成するのを防ぐため、「シニアアナリスト」のペルソナを与え、「厳格な文法遵守」を要求する必要があります。
🏗️ YARA生成マスタープロンプト
以下の内容をコピーしてAIに入力してください。(括弧内の内容はあなたのデータで埋めてください!)
[役割付与] あなたは15年の経験を持つマルウェアアナリストであり、YARAルール作成の専門家です。
>
[作業依頼] 私が提供する「選別された特徴(Features)」に基づいて、該当するマルウェアを検出できる有効なYARAルールコードを作成してください。
>
[入力データ]
>
1. ルール名:Win32_Ransomware_DarkV1
2. テキスト文字列:
>
“C:ProjectDarkbot.pdb” (タイプ: ascii, nocase)
>
1. – “Don’t kill my process!” (タイプ: wide, ascii)
2. ヘキサ文字列:
– { E8 ?? ?? ?? ?? 85 C0 74 0F } (説明: キー検証ロジック)
>
[作成ガイドライン – 重要!]
>
1. Metaセクション:作成者(Me)、日付(Today)、説明(Description)、脅威レベル(High)を含めてください。
2. Stringsセクション:変数名は$s_pdb, $s_msg, $h_logicのように直感的に付けてください。
3. Conditionセクション:
– まず、ファイルヘッダーがMZ (uint16(0) == 0x5A4D) であることを確認してください。(最適化)
– そして(AND)、ヘキサ文字列は必ず含め、テキスト文字列は少なくとも1つ以上発見された場合に検出するよう論理を構成してください。
4. コメント:各セクションと文字列に簡単なコメント(//)を付けてください。
3. 📤 [実践ステップ 2] AIが作成したコードの確認と検証
上記のプロンプトを入力すると、AIは以下のようにきれいにフォーマットされたコードを出力します。
🤖 AI生成結果 (例)
rule Win32_Ransomware_DarkV1 {
meta:
author = "Me"
date = "2025-12-16"
description = "Detects DarkV1 Ransomware based on PDB path and unique strings"
severity = "High"
version = "1.0"
strings:
// バイナリ内で見つかったPDBパス (ユニークな識別子)
$s_pdb = "C:\Project\Dark\bot.pdb" ascii nocase
// ユーザーに表示される疑わしいメッセージ
$s_msg = "Don't kill my process!" wide ascii
// キー検証ロジック (関数呼び出し + テスト + JZ)
// 変数アドレスに使用されるワイルドカード (??)
$h_logic = { E8 ?? ?? ?? ?? 85 C0 74 0F }
condition:
// 1. 有効なWindows PEヘッダーの確認 (マジックナンバーMZ)
uint16(0) == 0x5A4D and
// 2. 誤検知を減らすためのファイルサイズチェック (任意だが推奨)
filesize < 5MB and
// 3. 主な検出ロジック:
// ヘキサシグネチャは必須 AND 少なくとも1つのテキスト文字列
$h_logic and ($s_pdb or $s_msg)
}
🔍 検証ポイント (Human Verification) AIがうまく作成したか、アナリストの目で確認する必要があります。
- エスケープ文字:パスにバックスラッシュ()が二重(\)に正しく入っていますか?(YARAではを特殊文字として認識するため、\と記述する必要があります。AIはこれを完璧に処理します!👍)
- 変数名:$s_pdb, $h_logicのように、私たちが要求した通りにきれいに命名されていますか?
- 条件(Condition)ロジック:
- uint16(0) == 0x5A4D (ヘッダー検査)が一番最初にありますか?(速度最適化に必須)
- $h_logic and ($s_pdb or $s_msg) の括弧処理は論理的に正しいですか?
4. 💡 裏技:条件(Condition)をよりスマートに!
もし誤検知(False Positive)が心配な場合は、AIに「条件をもう少し厳しく修正して」と依頼することができます。
[追加リクエストプロンプト] 「Conditionセクションを修正して。ヘキサ文字列は必須で、テキスト文字列は2つすべて(ALL)が見つかった場合にのみ検出するように変更して。そして、ファイルサイズが2MB未満の場合にのみ検査するように追加して。」
このようにすると、AIはand ($s_pdb and $s_msg)に変更し、filesize < 2MBの条件を追加してくれるでしょう。
5. ⚠️ 注意点:AIの「ハルシネーション」チェック
AIがYARAに存在しない文法を創造することがあります。(特に正規表現の部分で)
- ヒント:生成されたコードをVS Code (YARA拡張機能インストール済み)のようなエディタに貼り付けてみてください。文法エラーがあれば赤い下線が表示されます。🖍️
🎉 終わりに:これで「コピペ」するだけで完了!
おめでとうございます!👏 これで皆さんは、複雑なYARAマニュアルを読み漁ることなく、「特徴発見 → AIに依頼 → コード生成」の3ステップで、瞬時に検出ルールを作成できるようになりました。
この方法は、特に緊急性の高いセキュリティオペレーションセンター(SOC)やインシデント対応チーム(CERT)の現場で威力を発揮します。アナリストは「特徴」の発見に集中し、「コーディング」はAIに任せるという効率的な分業です。
次回は、このように作成されたYARAルールファイルを使って「実際のマルウェアサンプルをスキャンし、適切に検出できるかテストする」実習を行います。自分が作ったワクチンが機能する、あのスリリングな瞬間を楽しみにしていてください!🛡️✨
コメントを残す