YARAルール完全入門|マルウェアを“指紋”で見つけ出す(マルウェア検知・脅威ハンティング)

🔬 実務者向け・マルウェア検知入門

YARAルール完全入門|マルウェアを“指紋”で見つけ出す

「このファイル、あの攻撃で見た検体と同じ仲間では?」——その勘を、誰でも再現できる“照合ルール”に変えるのがYARAです。ルールの構造(meta/strings/condition)から、16進パターン、メモリスキャン、フリート横断ハント、誤検知を抑える運用まで、防御者の視点で日本語でやさしく解説します。

🔬 YARA 🧬 マルウェア検知 🔍 シグネチャ 🦖 フリートハント 🎯 脅威インテリジェンス

攻撃を受けたとき、私たちはよく同じ壁にぶつかります。「この怪しいファイルは、本当に悪いものなのか?」「同じ検体が、ほかの端末にも潜んでいないか?」。一つひとつ目視で確かめるのは限界がありますが、もし“悪いものの特徴”を一度ルールとして書いておければ、何千ものファイルやメモリの中から、それを自動でつかまえられます。それを実現するのが YARA(ヤラ)——マルウェア研究者たちの“万能ナイフ”と呼ばれるパターンマッチングツールです。検知ルールの汎用フォーマットSigmaが“ログ”を見張る言葉なら、YARAは“ファイルやメモリ”を見張る言葉。日本語でまとまった解説がまだ少ないこの分野を、DFIR完全ロードマップの一歩進んだ実践編として、基礎からていねいに解き明かします。

⚠ 大切な前提(この記事の立ち位置)

本記事は、守る側(青チーム)が、自分の管理する端末やファイルから不審なものを見つけるための「検知」を学ぶ教育目的の解説です。YARAルールは、あなた自身が調査権限を持つファイル・メモリに対して使ってください。他者の端末を無断でスキャンする行為は、不正アクセス禁止法やプライバシーに関わる問題になり得ます。また本物のマルウェア検体は“劇物”です。学習は、ネットから隔離した検証環境(自宅ラボ)や、公開されている安全なサンプル・テスト文字列で進めましょう(検体の安全な扱いは⑤章で詳しく述べます)。

01

🔬 YARAとは? マルウェア界の“指紋照合”

「ファイルの中の特徴的なパターン」で悪性を見抜く——その発想と価値を理解しましょう。

🔬

YARA=ファイルやメモリを“特徴パターン”で照合・分類する道具

YARAは、ファイルやプロセス・メモリの中から特徴的なパターン(文字列やバイト列)を探し出し、マルウェアを「見つける(検知)」「仲間分けする(分類)」ためのオープンソースのツールです(VirusTotalのVictor Alvarez氏が開発)。公式が“マルウェア研究者のためのパターンマッチング・スイスアーミーナイフ”と称するとおり、用途は幅広く、世界中のセキュリティ製品・脅威ハンティング・インシデント対応の現場で、共通の“検知の言葉”として使われています。

イメージしやすいたとえは「指紋照合」です。犯罪捜査で指紋データベースと照合して人物を特定するように、YARAは「このマルウェア家系には、こんな特徴がある」というルールを作り、調べたいファイルと突き合わせます。たとえば、ある攻撃グループのツールだけが内部に持つ独特の文字列、特定のパッカーが残すバイト列の癖、設定ファイルの目印——そうした“手癖”をルールに書いておけば、ファイル名や見た目を変えられても、中身の指紋から正体を言い当てられるのです。

これはMITRE ATT&CKの総論で触れた「IOCより振る舞い・特徴で戦うと、攻撃者は痛い」という考え方とも響き合います。ハッシュ値は1バイト変えるだけで別物になりますが、マルウェアの“中身の作り”はそう簡単には変えられない。YARAは、その変えにくい部分を狙ってルール化することで、亜種や少し化粧直しした検体まで、まとめてつかまえにいきます。

🔁 YARAの照合モデル——「ルール」と「対象」を突き合わせる

YARAルール集 (.yar に検体の特徴を記述) 📄 ファイル群 🧠 メモリ・プロセス 🗂 ディスクイメージ YARAエンジン パターンを高速照合 ✓ 一致=検知どのルール名に当たったか 🏷 分類検体を家系・種別に仕分け 同じ1本のルールで、ファイル・メモリ・ディスクの“中身”を横断的に照合できる

YARAが守りの現場で重宝されるのは、使える“場所”が広いからです。1つの怪しいファイルの素性調べ(トリアージ)はもちろん、感染が疑われる端末のメモリを走査して潜伏中のコードをあぶり出したり、何百台もの端末を横断スキャンして「同じ検体がほかにいないか」を一気に確認したり。メールやファイルの受け渡し口(ゲートウェイ)に組み込んで、入ってくる前にはじくこともできます。1つのルールが、いろいろな場面で使い回せる——ここがYARAの大きな魅力です。

💡

ひとことで言うと

YARAは「“悪いものの特徴”を書き留めて、何にでも当てられる照合ルール」です。Sigmaが「ログに残った“出来事”」を見張るのに対し、YARAは「ファイルやメモリの“中身”」を見張ります。両方そろえると、「何が起きたか」と「何が潜んでいるか」の両面から、守りの網を張れます。

02

🧱 YARAルールの構造(rule/meta/strings/condition)

怖がらなくて大丈夫。YARAルールは“3つの部屋”を持つ、素直な設計図です。

YARAルールは、見た目こそプログラムに似ていますが、中身はたった3つの部屋(セクション)でできています。「何という名前のルールか(rule)」を宣言し、「探したいパターン(strings)」を並べ、「どう組み合わさったら“当たり”とするか(condition)」を決める。これだけです。加えて、ルールの素性を書くメモ欄(meta)を添えます。まずは代表的な要素を押さえましょう。

要素役割
rule 名前ルールの宣言と名前。検知時に「どのルールに当たったか」として表示される識別子。
meta:ルールのメモ欄。作者・説明・日付・参照URL・検体ハッシュなど。検知ロジックには影響しないが、運用の生命線。
strings:探したいパターンの定義$a $b …と変数名を付け、テキスト/16進/正規表現で書く。
condition:検知の最終ロジック(必須)。「どのパターンが、いくつ、どこに現れたら当たりか」を真偽式で表す。
import "pe"モジュール読み込み。pe(実行ファイル構造)や math(エントロピー)などの“拡張機能”を呼べる。

必須なのは rulecondition の2つだけ。strings は“探すパターン”がある場合に書きます(ファイルサイズやファイル形式だけで判定するなら、stringsなしのルールもあり得ます)。実際の1本を見てみましょう。下は「情報窃取型マルウェアによく見られる特徴の組み合わせ」を検知する、教育用の例です。

// 情報窃取マルウェアに特徴的な文字列の組み合わせを検知する教育用ルール rule SUSP_InfoStealer_Generic_Strings { meta: description = “情報窃取によく伴う文字列+API+PEヘッダの同時出現を検知” author = “yasai (やさしいサイバーセキュリティ)” date = “2026-06-07” reference = “https://yasashii-cybersecurity.com/yara-rules-malware-detection/” hash = “<調査した検体のSHA-256>” mitre = “T1555, T1003” strings: $s1 = “Passwords.txt” ascii wide $s2 = “\\Local\\Microsoft\\Credentials” ascii wide nocase $s3 = “/gate.php” ascii $api = “CryptUnprotectData” ascii // DPAPIで保護情報を復号 condition: // PEファイルで、特徴文字列が2つ以上、かつ復号APIを含む uint16(0) == 0x5A4D and 2 of ($s*) and $api }

▲ 読み方:metaに素性(作者・日付・参照・ハッシュ・ATT&CK手口)を記録し、stringsで特徴パターンを定義、conditionで「PEヘッダ+2つ以上の特徴+復号API」という“当たりの条件”を組み立てています。※文字列は説明用の例で、そのまま実在検体を表すものではありません。

注目してほしいのは、condition がこのルールの“頭脳”だということ。strings をいくら並べても、それだけでは検知になりません。「PEファイルであること(uint16(0) == 0x5A4D=先頭が“MZ”)」という土俵を確認したうえで、「特徴文字列が2つ以上」「かつ復号APIを含む」と条件を重ねることで、ただ単語が1個出ただけの無関係なファイル(=誤検知)を上手に振るい落としています。この“組み立て”の妙が、③④章の主役です。

🧩 YARAルールの解剖図——3つの部屋とメモ欄

rule SUSP_InfoStealer_Generic_Strings { meta:(メモ欄) description / author date / reference hash / mitre ※検知には不使用/運用の要 strings:(探す材料) $s1 = “Passwords.txt” $s2 = “…Credentials” $api = “CryptUnprotect…” テキスト/16進/正規表現 condition:(頭脳) uint16(0)==0x5A4D and 2 of ($s*) and $api “当たり”の真偽式(必須) }
🗒️

meta は“検知に使われない”けれど、いちばん大事にしたい欄

meta: はYARAの判定ロジックには一切影響しません。でも実務では、「誰が・いつ・なぜ・どの検体を根拠に」書いたルールかが分からないと、後で誤検知が出たときに直せず、共有もできません。参照URL・検体ハッシュ・ATT&CK手口を必ず残す——これが“育てられるルール”の第一歩です。

03

🧬 stringsの3つの型:テキスト・16進・正規表現

YARAの“探す材料”は3種類。それぞれの得意分野と、表現力を上げる修飾子を学びます。

strings: に書けるパターンは、大きく3つの型に分かれます。検体のどこに注目するかで、使い分けます。

TYPE 1

テキスト文字列

いちばん基本。$a = "mimikatz" のように、検体内に現れる“読める文字”を指定します。設定文字列・URL・エラーメッセージ・作者の癖など、人が残した痕跡を狙うのに最適。

TYPE 2

16進バイト列(hex)

{ 4D 5A 90 00 } のように、生のバイト列を指定。文字にならない機械語コードの断片やヘッダを狙えます。ワイルドカードや可変長ジャンプで“少しの違い”を吸収できるのが強み。

TYPE 3

正規表現

$re = /[a-z0-9]{32}\.onion/ のように、揺れのあるパターンを柔軟に表現。ただし重くなりやすいので、テキスト・16進で足りるなら、そちらを優先します。

さらに、文字列の後ろに「修飾子(モディファイア)」を付けると、一致のしかたを細かく制御できます。これがYARAの表現力の源です。とくに widenocase は実戦で多用します。

修飾子意味なぜ効くか
nocase大文字小文字を区別しないPasswordspasswords も拾う。
wide2バイト文字(UTF-16LE)として探すWindowsは文字列をUTF-16で持つことが多い。これを忘れると検知漏れの定番
ascii1バイト文字として探す(既定)ascii wide と併記すると両方を同時に狙える。
fullword単語として独立しているときだけ一致netinternet に誤爆するのを防ぐ。
xor1バイトXORで難読化された状態でも探す設定文字列を xor で隠す検体に有効。
base64Base64エンコードされた姿で探す埋め込みデータやスクリプトの隠蔽に対応。

16進文字列の真価は「ワイルドカード」と「ジャンプ」にあります。攻撃者がコンパイルし直すたびに、機械語のごく一部(レジスタやアドレス)は変わります。そこを ??(任意の1バイト)や [4-6](4〜6バイトを読み飛ばす)で“穴”にしておくと、細部は違っても骨格が同じ亜種を、まとめて捕まえられます。下を見てください。

// 16進パターン:ワイルドカード・ジャンプ・候補で「亜種の揺れ」を吸収する strings: $mz = { 4D 5A } // “MZ”(PEヘッダの先頭・固定) $code = { E8 ?? ?? ?? ?? 5? 8B } // call+任意4バイト+pop/mov(?は半バイトも可) $stub = { 6A 40 68 ?? ?? ?? ?? [4-6] FF 15 } // 間に4〜6バイトの可変領域を許容 $alt = { (66 81 | 67 81) C4 } // (A|B)=複数候補のいずれか condition: $mz at 0 and any of ($code, $stub, $alt)

??=任意の1バイト、5?=上位だけ固定、[4-6]=可変長ジャンプ、(… | …)=候補。正規表現の考え方が効いてくる場面で、正規表現でログ解析の基礎が土台になります。

どの型を選ぶにせよ、ルールの“強さ”を決めるのは「どの文字列・バイト列を狙うか」という目利きです。ありふれたライブラリの定型文を選ぶと誤検知だらけになり、逆に検体1個だけの偶然のゴミを選ぶと、亜種が出た瞬間に役立たずになります。“その家系だけが持つ、変えにくい特徴”を見抜く——この勘所は⑥章でじっくり扱います。まずは「3つの型と、wide/nocase/fullwordという必須の修飾子がある」ことを押さえれば十分です。

🔎

狙う文字列は、どうやって見つける?

検体から候補となる文字列を洗い出すには、strings コマンドや、逆アセンブラGhidraでの解析が役立ちます。コードを読み解いて「この関数だけが使う独特の文字列」を見つけられれば、誤検知に強い“効くルール”が書けます。検体そのものの安全な扱い方は、次の⑤章で必ず確認してください。

04

🧠 conditionの書き方:本物だけを光らせる

YARAの心臓部。“探す材料”を真偽式で組み立て、ノイズを削って“本物”だけを通します。

condition: は、strings で定義したパターンを論理式(真偽の組み立て)でまとめ、「最終的に“当たり”とみなす条件」を決める部分です。必須であり、ルールの賢さがここに集約されます。基本の語彙はとてもシンプルです。

書き方意味
$a and $b / $a or $b論理積・論理和。「両方」「どちらか」を表す基本。
any of them定義した文字列のどれか1つでも一致。all of themなら全部。
2 of ($s*)$sで始まる文字列のうち2つ以上が一致。“しきい値”検知の主役。
#a > 3文字列 $a出現回数が3より多い(#はカウント)。
$a at 0 / $a in (0..100)特定の位置・範囲に現れるか(ヘッダ位置の固定などに)。
filesize < 2MBファイルサイズで足切り。巨大ファイルの誤爆と無駄なスキャンを防ぐ。
uint16(0) == 0x5A4D先頭2バイトが“MZ”=PE実行ファイルか、をファイル形式で確認。

誤検知を減らす“王道”は、「土俵を固めてから、しきい値で判断する」こと。まず uint16(0)filesize「そもそも対象の種類か」を絞り(PEでない画像ファイルを延々調べない)、そのうえで N of ($s*)「特徴がいくつ重なったか」を見ます。1個の文字列一致では弱くても、3個重なれば偶然はまず起きませんpe モジュールを使えば、さらに踏み込んだ判定もできます。

// pe モジュールで「実行ファイルの中身の構造」まで踏み込んで判定する import “pe” rule SUSP_Packed_With_Marker { strings: $marker = “Stub/Loader v” ascii wide condition: uint16(0) == 0x5A4D // PEである and filesize < 5MB // 小ぶりなファイルに限定 and $marker // 目印の文字列を含む and pe.number_of_sections < 4 // セクションが極端に少ない=パッカーの兆候 and pe.imports(“kernel32.dll”, “VirtualAlloc”) // 実行時展開に使う典型API }

▲ “文字列+ファイル形式+構造+インポートAPI”を重ねるほど、誤検知に強く“本物”を射抜く検知になります。peのほか、エントロピーを測るmathモジュールも難読化・暗号化の検出に便利です。

🎯 conditionの絞り込み——「土俵→しきい値→確証」でノイズを削る

全ファイル 何千・何万件 ① 土俵を固める uint16(0) / filesize ② しきい値 N of ($s*) ③ 検知 =本物の疑いだけ 広く受けて、段階的に絞る。“1個一致で即アラート”を避けるほど、検知は静かで正確になる

もう一つ覚えておきたいのが「除外」の発想です。正規のソフトに偶然マッチしてしまうなら、その正規ソフトだけが持つ署名や文字列を not で引き算します(例:… and not pe.signatures[0].issuer contains "Microsoft")。Sigmafilter と同じ“正常を引く”考え方で、これがアラートの質を大きく左右します。

05

⚙️ YARAを“動かす”:実行・スケール・メモリ

書いたルールは、走らせて初めて“検知”になります。1ファイルから、何百台・メモリまで。

YARAの基本はコマンド1つ。ルールファイル(.yar)と、調べたいファイルやフォルダを渡すだけです。-r を付ければ、フォルダを再帰的に掘って一気にスキャンします。

# フォルダを再帰スキャン(-r)。マッチしたルール名とファイルパスが出力される yara -r ./rules/ /var/samples/ # 1ファイルを複数ルールで照合。-s は一致した文字列も表示(調査向き) yara -s malware_rules.yar suspicious.bin

▲ 出力は「ルール名 ファイルパス」の形。どのルールに当たったかが一目で分かります。-s を付けると“どの文字列がどこで一致したか”まで見え、ルールのデバッグに重宝します。

プログラムに組み込むなら yara-python。ルールをコンパイルして、何度でも高速にマッチできます。自動トリアージや、独自ツールへの組み込みの土台になります。

# yara-python:ルールをコンパイルしてファイルに照合する import yara rules = yara.compile(filepath=“malware_rules.yar”) matches = rules.match(“suspicious.bin”) for m in matches: print(m.rule, [s.identifier for s in m.strings])

そして、YARAが防御の現場で輝くのは“規模”と“場所”を広げたときです。同じルールが、いろいろな器の上で動きます。

トリアージ

怪しい1ファイルの素性調べ

届いた検体や検出ファイルに手元のルールを当て、「既知の家系か/未知か」を即判定。マルウェア感染の確認の初動を速くします。

フリート横断

Velociraptorで全端末ハント

1本のYARAルールを何百台にも配り、「同じ検体が他にいないか」を一斉確認。“1台の発見”を“組織全体の封じ込め”へ広げる主役です。

メモリ解析

メモリ・プロセスを走査

ディスク上は暗号化でも、動けばメモリ上で正体を現します。Volatility(メモリフォレンジック)等でメモリにYARAを当て、潜伏コードをあぶり出します。

脅威インテリ

共有ルールで“集合知”に乗る

LOKI/THOR、ClamAV、VirusTotalのRetrohunt等がYARAを採用。世界の研究者が公開したルールを取り込み、脅威インテリジェンスとして活用できます。

とくにメモリスキャンは、YARAならではの強みです。最近のマルウェアは、ディスク上では暗号化・難読化して姿を隠し、実行されたときだけメモリ上で本来のコードに“戻り”ます。だから動いている最中のメモリにルールを当てると、ディスクスキャンでは見えなかった文字列やコードが浮かび上がる。Volatilityのようなメモリ解析基盤と組み合わせると、ファイルレス攻撃の調査でも力を発揮します。

🚨 本物のマルウェア検体は“劇物”——扱いを間違えない

YARAの練習では検体を触りたくなりますが、実在マルウェアは取り扱いを誤ると、自分や周囲を感染させます。鉄則は4つ。①ネットから隔離した専用VM(スナップショット必須)で扱う②絶対にダブルクリックで実行しない(YARAは“実行せずに中身を照らす”道具。スキャンに実行は不要)/③受け渡しは必ずパスワード付きZIP+ハッシュ(SHA-256)で、誤って開かない工夫を/④共有環境・本番端末・個人PCで開かない。安全なサンドボックス構築はINetSimを使ったマルウェア動的解析環境が参考になります。最初はEICARテスト文字列など、無害な題材でルールの“効き”を確かめるのが安全です。

06

🎛 良いルールの書き方と運用(誤検知を避ける)

ルールは「書いて終わり」ではありません。“強く・もろくなく・育てられる”ものを目指します。

YARAは書くこと自体は簡単ですが、“効くルール”を書くのは奥が深い世界です。陥りがちな失敗は両極端にあります。一方は「過剰適合(オーバーフィット)」——目の前の1検体に合わせすぎて、ほんの少し変わった亜種で空振りする。もう一方は「広すぎ」——ありふれた文字列を狙って、正規ソフトにまで誤爆する。良いルールは、そのちょうど中間、「その家系“だけ”が持つ、“変えにくい”特徴」を射抜きます。

1

検体を安全に観察し、特徴を洗い出す

隔離環境で stringsGhidraを使い、「この検体“らしさ”が出ている文字列・コード」を集める。可能なら複数検体を見比べ、共通する芯を探す。

2

“変えにくく・珍しい”材料を選ぶ

コンパイラやライブラリが誰の検体にも入れる定型文は避け、攻撃者の手癖・独自の設定・固有のミューテックス名などを狙う。短すぎる文字列・どこにでもある語は選ばない。

3

conditionで土俵としきい値を組む

uint16(0)filesizeで対象を絞り、N of ($s*)で“複数重なり”を要求。1個一致で鳴らさない。meta に hash・reference・ATT&CK を残す。

4

2方向でテストする

検知側=狙った検体(と亜種)でちゃんと光るか。誤検知側=正規ソフトを集めた“クリーンな山(goodware)”で鳴らないか。両方を確かめて初めて“使える”。

5

運用し、チューニングし続ける

誤検知が出たら除外条件を足し、新しい亜種が出たら材料を見直す。検知は一度きりでなく、育て続けるもの。性能が重いルールは見直し対象に。

性能(パフォーマンス)も忘れてはいけない観点です。YARAは内部で「アトム」と呼ばれる短いバイト列を手がかりに高速化しています。そのため、極端に短い文字列(1〜2バイト)や、先頭が曖昧な正規表現は、エンジンが“あたり”を付けられず、スキャンが遅くなりがちです。「?? ばかりの16進」「/.*foo/ のような重い正規表現」は避け、4バイト以上の“固い”手がかりを1つは含める——これが速いルールのコツです。何百台・何TBを相手にするとき、この差は効いてきます。

⛰️

YARAは“ペインピラミッド”の上のほうで戦える

MITRE ATT&CK総論で触れた「ペイン(痛み)のピラミッド」では、ハッシュやIPでの検知は攻撃者にとって“痛くない”(すぐ変えられる)。対してYARAが狙うツールや手口の“作りの特徴”は、攻撃者が変えるのに手間がかかる=上位の痛点です。だから良いYARAルール1本は、ハッシュ100個より長持ちし、亜種にも効きます。

最後に、新しい潮流にも触れておきます。YARAには近年、Rustで書き直された後継「YARA-X」が登場しました。より高速・安全で、既存のルール資産もおおむねそのまま使えます。これから本格的に学ぶなら、従来のYARAで考え方を身につけつつ、YARA-Xの動向も追っておくとよいでしょう。基本の文法(meta/strings/condition)は変わらないので、ここで学んだことはそのまま生きます。

✅ YARA学習・はじめの一歩

ネットから隔離した検証環境を用意した(本番・個人PCで検体を扱わない)/□ まずはEICARテスト文字列など無害な題材で yara コマンドの動きを確かめた/□ 公式ドキュメントでmeta/strings/conditionの基本を読んだ/□ ②の例を真似て、自分で1本ルールを書いてみた/□ uint16(0)N of ($s*) を使い、誤検知を抑える条件を組んでみた/□ 正規ソフトの山(goodware)に当てて誤検知テストをした。まずは「無害な題材で書く→当てる→絞る」。1本書ければ、ファイルの見え方が変わります。

07

📚 用語集・FAQ・次に読む

つまずきやすい用語と、よくある疑問をまとめました。

ここまでに登場した言葉の“答え合わせ”として、用語集とFAQをまとめました。YARAは奥が深い分野ですが、入口はこの記事の範囲で十分です。あとは安全な環境で手を動かしながら、少しずつ守備範囲を広げていきましょう。最初の1本を書き上げたとき、“怪しいファイルの山”が、急に怖くなくなります。

📖 用語集

用語意味
YARAファイル・メモリを特徴パターンで照合し、マルウェアを検知・分類するルール&ツール。
rule / conditionルールの宣言と、検知の最終ロジック(必須)。conditionが“当たり”の真偽を決める。
strings探したいパターン(テキスト/16進/正規表現)の定義。$名前で参照する。
metaルールのメモ欄(作者・説明・ハッシュ・参照)。検知に不使用だが運用の要。
修飾子(modifier)nocase/wide/fullword/xorなど、一致のしかたを指定する記法。
ワイルドカード/ジャンプ16進の ??(任意バイト)や [4-6](可変長読み飛ばし)。亜種の揺れを吸収する。
pe / math モジュール実行ファイル構造やエントロピーを条件に使える拡張。importで呼ぶ。
過剰適合(オーバーフィット)1検体に合わせすぎて亜種に効かなくなること。広すぎると誤検知。中間を狙う。
誤検知(FP)正規ファイルを誤って“悪”と判定すること。goodwareでのテストで抑える。
YARA-XRust製の後継実装。高速・安全で、既存ルールもおおむね流用可。

❓ よくある質問(FAQ)

プログラミング経験がなくても書けますか?

はい。YARAルールはプログラムというより「探したいものを箇条書きし、当たりの条件を式で書く」感覚に近いです。まずは公開されている既存ルールを読むところから。構造(meta/strings/condition)に慣れたら、お手本を真似て少しずつ書き換えれば、自然と身につきます。

YARAとSigma、Snortは何が違うの?

対象が違います。YARAはファイル/メモリ(=中身)、Sigmaはログ(=出来事)、Snort/Suricataはネットワークパケット(=通信)を見張ります。「ファイルはYARA、ログはSigma、通信はSnort」と覚えると整理しやすいでしょう。“シグネチャで悪を表現する”という発想は共通で、組み合わせると守りが立体的になります。

ルールはどこで手に入りますか?

研究者やベンダーが公開する多数のルール集(例:YARA-Rulesプロジェクト、各社の脅威レポート付属ルール、Florian Roth氏のsignature-baseなど)があります。まずは読んで学ぶ教材として最適です。ただし、出所と誤検知の実績を確かめ、自分の環境で必ずテストしてから運用に乗せましょう。脅威インテリジェンスの一部として配布されることも多いです。

誤検知が出ました。どうすれば?

まず、誤爆した正規ファイルが「なぜ当たったか」yara -s で確認します。原因の文字列がありふれたものなら、より珍しい材料に差し替えるか、N of のしきい値を上げる、filesizeuint16(0) で土俵を絞る、正規ソフト固有の署名を not で除外する——といった手で調整します。誤検知テスト(goodware)を習慣化すると、こうした事故を未然に防げます。

メモリの中も調べられるって本当?

本当です。むしろそこがYARAの強みの一つ。ディスク上では暗号化・難読化していても、実行中はメモリ上で本来の姿に戻るため、メモリにルールを当てると正体が見えることがあります。VolatilityなどのメモリフォレンジックVelociraptorと組み合わせると、ファイルレス攻撃の調査でも活躍します。

まず何から始めればいいですか?

隔離した検証環境+無害な題材(EICARテスト文字列など)から始めるのが安全でおすすめです。yara コマンドで「ルールがファイルにどう当たるか」を体感し、次に②③のお手本を真似て1本書く。本物の検体を扱うのは、⑤章の安全ルールを守れるようになってからにしましょう。DFIR完全ロードマップで全体像を押さえると、YARAの“居場所”も見えてきます。

🧭 次に読む

📚 参考・出典(一次情報)

  • YARA 公式ドキュメント(yara.readthedocs.io)/VirtualTotal「VirusTotal/yara」リポジトリ(GitHub)
  • YARA-X 公式ドキュメント(virustotal.github.io/yara-x)/VirusTotal Blog
  • yara-python(GitHub: VirusTotal/yara-python)
  • Volatility Foundation(メモリフォレンジックでのyarascan)/Velociraptor 公式ドキュメント(YARA artifacts)
  • Florian Roth「signature-base」「LOKI / THOR」/YARA-Rules プロジェクト(コミュニティ・ルール集)
  • MITRE ATT&CK(meta の手口タグが参照)/David Bianco「Pyramid of Pain」

コメント