0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

YARAを理解して使う ― 仕組み・ルールの書き方・VMでの安全な分析

Posted at

YARA入門まとめ

― 原理・書き方・安全性・実践・分析環境まで ―

前置き

今回下記のROOMでYARAを知りました。
YARA Rules - YARA mean one!

とても便利で楽しそうだと感じたため、
ROOMの攻略だけでなく、調べた内容を覚書としてまとめてみました。
ほとんど自分用のメモの様なものになっていますのでご了承ください。


はじめに

YARA は、マルウェア解析や Blue Team の文脈では定番のツールですが、
初めて触れると次のような疑問を持ちやすい分野でもあります。

  • YARA は何ができるのか
  • どんなファイルに使えるのか
  • ファイルを「開かずに」分析するとはどういうことか
  • VM(例 Kali Linuxなどの上)で使う理由はあるのか

本記事では、TryHackMe の
「YARA Rules – YARA mean one!(Advent of Cyber 2025 Day 13)」
での学習内容を軸に、YARA を

基礎 → 原理 → 書き方 → 実践 → 分析環境の考え方

までまとめて整理します。


1. YARAとは何か

YARA とは、

ファイルやメモリの中身をバイト列として走査し、
人間が定義したパターンに一致するかを判定する検出エンジン

です。

重要なのは、YARA は以下を一切行わない点です。

  • 実行しない
  • 表示しない
  • 解釈しない
  • 変更しない

YARA はあくまで 「読むだけ」 のツールであり、
安全に中身を確認するための仕組みとして設計されています。


2. YARAの原理と思想

2.1 拡張子や形式を信用しない

YARA はファイルを次のように区別しません。

  • jpg / png
  • pdf / docx
  • exe / dll
  • txt / log

すべて 同じ「バイト列の集合」 として扱います。

これはセキュリティの基本思想である
「見た目ではなく中身を見る」 を、そのままツールに落としたものです。


2.2 「開かずに分析する」とはどういう意味か

YARA がしていることは非常に単純です。

  • OS の読み取りモードでファイルを開く
  • 先頭から末尾までをスキャン
  • 一致したパターンを報告

これは grepstrings と同じ発想であり、
ファイルを安全に扱うための前提動作 でもあります。


3. YARAルールの基本構造(書き方)

YARA ファイルは、1つ以上の rule の集合です。

rule Sample {
    meta:
        description = "example rule"

    strings:
        $a = "test"

    condition:
        $a
}

各セクションの役割

  • rule
    ルール名。意味が分かる名前を付ける。

  • meta(任意)
    人間向けの情報。実務ではほぼ必須。

  • strings
    探したい文字列・バイト列・正規表現。

  • condition
    どの条件で一致とみなすか。


3.1 strings の例

固定文字列

$a = "password" nocase

正規表現

$msg = /TBFC:[A-Za-z0-9]+/

Hex(バイト列)

$hex = { 4D 5A }

3.2 condition の例

condition:
    $msg
condition:
    any of them
condition:
    $a and filesize < 1MB

condition は 誤検知を制御するための設計部分 です。


4. TryHackMeルームでの実践例

4.1 課題概要

  • 対象ディレクトリ
    /home/ubuntu/Downloads/easter
  • 画像ファイル群の中に隠された文字列
  • フォーマット
    TBFC:<英数字>

4.2 正規表現設計

要件を満たす正規表現は次の通りです。

TBFC:[A-Za-z0-9]+

4.2.1 正規表現の意味と、YARAで検出されるまでの流れ

ここで使用した正規表現は次のものでした。

TBFC:[A-Za-z0-9]+

この正規表現を分解すると、以下の意味になります。

  • TBFC:
    固定文字列。この文字列から始まることを意味する

  • [A-Za-z0-9]
    英大文字・英小文字・数字のいずれか1文字

  • +
    直前の文字クラスが「1文字以上」続くことを意味する

つまりこの正規表現は、

「TBFC: で始まり、その後に1文字以上の英数字が続く文字列」

をすべて検出対象としています。


YARAでの検出の流れ

今回のルールでは、この正規表現を strings セクションで定義しました。

strings:
    $msg = /TBFC:[A-Za-z0-9]+/

YARA は対象ディレクトリ内のファイルを1つずつバイト列として読み込み、

  1. ファイル全体を先頭から末尾までスキャン
  2. 上記の正規表現に一致する文字列を探索
  3. 一致した場合、そのファイルを「ルールに一致」と判定

という流れで処理を行います。

その結果、

TBFC:Find
TBFC:me
TBFC:in
TBFC:HopSec
TBFC:Island

といった文字列が検出され、
TBFC: 以降の単語を並べることでメッセージを復元できました。


4.3 使用したYARAルール

rule TBFC_Message {
    meta:
        description = "Detect hidden TBFC messages"

    strings:
        $msg = /TBFC:[A-Za-z0-9]+/

    condition:
        $msg
}

4.4 実行コマンド

yara -r -s rule.yar /home/ubuntu/Downloads/easter

4.5 抽出されたメッセージ

検出結果から TBFC: 以降のみを抜き出すと、

Find
me
in
HopSec
Island

これを文として並べると、

Find me in HopSec Island

となり、課題クリアとなりました。


5. YARAはどんなファイルに使えるのか

結論として、

ファイルであれば、基本的に何にでも使える

と言えます。

  • 自分のソースコード
  • ダウンロードファイル
  • ログ
  • バイナリ

いずれも 開かず・実行せず・壊さず に検査できます。


6. 自分のファイルで試してよいのか

YARA は読み取り専用のため、

  • 自分の PC
  • 学習用 VM
  • 許可された環境

では 自由に試して問題ありません

むしろ、
自分の環境で試行錯誤することが前提のツール と言えます。


7. 分析環境について(VM)

怪しそうなファイルの分析は、
Kali Linux などのOS環境が色々な意味で望ましい 環境ではあります。

ただし、より重要なのは次の点です。

本質は「Kaliであること」よりも
「VM上で作業すること」

という点です。

VM 上であれば、

  • 環境が壊れても戻せる
  • 最悪、VMごと捨てられる
  • ネットワークを隔離できる

という前提で作業できます。

筆者の環境では、Kali Linux に YARA は最初から入っていなかったため、
以下のように手動でインストールしました。

sudo apt update
sudo apt install -y yara

まとめ

YARAとは
「怪しさを、人間の判断から
機械が扱えるルールに落とすための言語」

  • どんなファイルにも使える
  • 開かずに中身を見られる
  • 自分のファイルで安全に試せる
  • 分析は VM 上で行うのが合理的

とても便利だと感じたため、今回こうして記事としてまとめてみました。
できれば、実際に今後場数を踏んで、使い慣れていきたいなと思っています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?