はじめに
第1章 環境構築
第2章 YARAの基本
第3章 stringsセクション
第4章 conditionセクション
第5章 YARAのモジュールを利用する
第6章 PEモジュール
第7章 ELFモジュール
第8章 yara-python
付録A:YARAのデザインについて
あとがき
本書を手に取っていただき、ありがとうございます。
本書は、技術書典11で頒布していた「やわらかYARA入門 今日から始めるYARAのきほん」に大幅に加筆・修正を加えたものです。
本書籍は、YARAに興味がありこれから勉強を始めようと思っている方を対象として、YARAルールの基本的な書き方とYARAの使い方をわかりやすく紹介することを目的としています。
この本の執筆を志した背景として、YARAルールの文法に関する日本語の情報が極端に少ない現状があります。
私が初めてYARAを使った時には、入門のために有効な情報ソースが英語の公式ドキュメントしか見つからない上に、公式ドキュメントにはサンプルルールなどの用例も非常に少ない状況でした。
そのため、YARAの機能や各ルールについて、「とりあえず一通り使ってみた」というレベルに到達するまでに非常に苦労したことを記憶しています。
このような背景から、本書では自分が初めてYARAを学んだ時に欲しかった1冊をテーマに、日本語で、かつ可能な限りサンプルルールを用いた構成としています。
この本が、これから初めてYARAルールを書く方の最初の一歩の助けになることを願っています。
なお、本書で使用しているサンプルルールはすべて以下のリポジトリからダウンロードすることが可能です。
・サンプルルール:https://github.com/kash1064/yawaraka-yara-book
YARAとは、VirusTotalによって開発された、オープンソースのマルウェアの検知・解析ツールです。
YARAルールと呼ばれる検索条件によってマルウェアのサンプルや実行プロセス内に含まれる特徴的な文字列やバイナリパターンを定義し、YARAを使って高速にスキャンを実施することができます。
YARAはマルチプラットフォームで動作するように設計されており、Windows/Linux/MacOSなど複数の環境で利用することが可能です。また、「yara-python」という公式のライブラリを用いることで、Pythonスクリプトを利用してYARAスキャンを実行することも可能です。
各OSのプラットフォームにおいて、コマンドラインからYARAスキャンを実施する方法については2章、PythonスクリプトからYARAスキャンを実行する方法については8章で紹介しています。
なお、本書で使用するYARAのバージョンは、本書執筆開始時点で最新版であるv4.1.0です。
・YARA 公式ドキュメント:https://yara.readthedocs.io/en/stable/
本書の目的は、これから初めてYARAを使う方に向けて、YARAルールの基本的な書き方とYARAの使い方をわかりやすく紹介することです。
本書では次のような人を対象としています。
・YARAに興味があり、これから初めてYARAルールを書く方
・英語のドキュメントでの学習に不安のある方
・サンプルルールとハンズオンを通して、手を動かしながら理解を深めたい方
なお、公式ドキュメントの内容や実用的なYARAルールの記法についてすでに習熟されている上級者の方は対象としていません。
本書では、以下の内容についての知識を持っていることを前提としています。
・Dockerを用いたコンテナの作成、利用が可能なこと※ハンズオン環境にDockerコンテナを利用しますが、必須ではありません
・正規表現に関する基礎知識
・PE、ELFバイナリに関する基礎知識
上記の内容については、詳細な解説は行いません。ただし、上記の知識がなくても本書の内容を理解するにあたって問題はありません。
本書の構成は、以下の通りです。
・1章では、本書で使用するハンズオン環境の構築手順を解説します
・2章では、YARAルールの記法とコマンドラインからYARAを呼び出す方法について解説します
・3章では、YARAルールのstringsセクションについて、サンプルルールを用いて解説します
・4章では、YARAルールのconditionセクションについて、サンプルルールを用いて解説します
・5章では、自作モジュールの作成方法の概要について解説します
・6章では、PE moduleについて解説します
・7章では、ELF moduleについて解説します
・8章では、YARA Pythonの利用方法について解説します
・付録Aでは、YARAコマンドの挙動について触れています
本書に記載されている会社名、製品名などは、一般に各社の登録商標または商標、商品名です。会社名、製品名については、本文中では©、®、™マークなどは表示していません。
本書に関する質問やお問い合わせは、以下の書籍ページまでお願いします。正誤表とサンプルコードもここにアップロードしてあります。
本書のハンズオンの実行環境として、以下のDockerイメージを提供しています。
コンテナイメージの作成時には、約2.3GBの大きなサイズのデータのダウンロードを伴います。
・Dockerhub:https://hub.docker.com/r/kashiwabayuki/yawaraka-yara
この章では、本書で利用するハンズオン環境の構築方法について解説していきます。
WindowsとLinux(Ubuntu)のそれぞれにおける環境構築手順について解説します。
このセクションでは、WindowsにDocker環境を構築する手順を紹介します。
本書で使用している環境は、Windows10 Home 20H2ですが、他のバージョンのWindows10環境であっても同様の手順で環境構築を行うことができます。
ただし、もし使用しているOSがWindows10 Homeの場合は、Docker Desktopの利用のために20H1以降のバージョンにバージョンアップされている必要がある点に留意してください。
まずは、コントロールパネルの「プログラムと機能」から「Windowsの機能の有効化または無効化」を開き、以下の3つの機能を有効化します。
・Linux用 Windowsサブシステム
・Windowsハイパーバイザープラットフォーム
・仮想マシンプラットフォーム
※ 設定を有効化した後にOSの再起動が必要です。
次に、以下のページから「Linux カーネル更新プログラム」をダウンロードしてWindowsに適用します。
・Linux カーネル更新プログラム:https://docs.microsoft.com/ja-jp/windows/wsl/install-win10
上記のページからダウンロードした更新プログラムを実行し、更新が完了すると、次のようなウィンドウが表示されます。
更新を反映させるため、ここでもOSの再起動を実行します。
更新が完了したら、以下のページからDocker DesktopのWindows向けインストーラをダウンロードします。
・Docker Desktop:https://www.docker.com/products/docker-desktop
ダウンロードしたインストーラを実行します。
ここのチェックはデフォルトのままで問題ありません。
インストールを完了させるためにOSを再び再起動した後、Docker Desktopを起動し、以下の規約に同意します。
以下のような画面が立ち上がればインストールは成功です。
これでWindows環境にDockerのインストールが完了したので、ハンズオン用のコンテナイメージをPullします。
DockerをインストールしたWindows環境でPowerShellを起動し、次のコマンドを入力します。
$ docker pull kashiwabayuki/yawaraka-yara:1.0
以下のようにコンテナイメージのPullが完了し、Docker DesktopのGUI上にイメージが追加されていれば成功です。
コンテナイメージのPullが完了したら、次のコマンドでサンプルルールを含むファイルをダウンロードします。
$ git clone https://github.com/kash1064/yawaraka-yara-book
もしGitがインストールされていない環境の場合は、以下の書籍ページからZIPファイルをダウンロードしたものを解凍して、任意のフォルダに配置してください。
・書籍リポジトリ:https://github.com/kash1064/yawaraka-yara-book
最後に、ダウンロードしたフォルダに移動し、以下のコマンドを実行してコンテナにログインします。
$ cd yawaraka-yara-book
$ docker run --rm -it -v $pwd/yaramaster:/yaramaster kashiwabayuki/yawaraka-yara:1.0 bash -login
コンテナにログインした後、以下のコマンドを実行してサンプルプログラムをコンパイルすればハンズオン環境の構築は完了です。
$ make all-compile
サンプルプログラムのコンパイルが完了すると、以下の画像のようにコンパイルされたファイルが作成されたことが確認できます。
このセクションでは、Linux(Ubuntu)環境ににDocker環境を構築する手順を紹介します。
本書で使用している環境は、Ubuntu 20.04 64bitです。
また、CPUはIntel製のCPUを使用しています。もし、ARMアーキテクチャを採用しているCPUの場合は、インストールに使用するコマンドが一部異なります。
お使いの端末がIntel製のCPU以外のCPUが搭載されている場合は、必ずDockerの公式ドキュメントをご確認ください。
・Install Docker Engine on Ubuntu:https://docs.docker.com/engine/install/ubuntu/
Linux(Ubuntu)環境ににDocker環境を構築するために、まずは以下のコマンドを順に実行します。
ここでは、古いバージョンのDockerがインストールされている場合はそれをアンインストールした後、最新のパッケージをインストールするために必要なパッケージをインストールします。
$ sudo apt-get remove docker docker-engine docker.io containerd runc
$ sudo apt-get update
$ sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
次に、以下のコマンドでDockerの公式GPGキーを追加します。