目次

はじめに

YARAとは
本書の目的
本書の対象者
前提とする知識
本書の構成
表記関係について
問い合わせ先

第1章 環境構築

1.1 Docker 環境の準備
1.2 補足:本書で使用するDockerイメージについて

第2章 YARAの基本

2.1 YARAスキャンを実行する
2.2 YARAルールの基本
2.3 YARAルールの拡張
2.4 コマンドラインでYARAを実行する
2.5 YARAのコマンドラインオプション
2.6 2章のまとめ

第3章 stringsセクション

3.1 stringsセクションで定義できる文字列
3.2 stringsセクションの記法
3.3 テキスト文字列
3.4 正規表現
3.5 3章のまとめ

第4章 conditionセクション

4.1 conditionセクションについて
4.2 conditionセクションで利用可能な演算子
4.3 conditionセクションの記法
4.4 4章のまとめ

第5章 YARAのモジュールを利用する

5.1 独自のモジュールを作成する
5.2 モジュールファイルを作成する
5.3 5章のまとめ

第6章 PEモジュール

6.1 PEモジュールについて
6.2 PEモジュール関数のリスト
6.3 PEモジュール関数の詳細(一部抜粋)
6.4 モジュール情報のサンプル

第7章 ELFモジュール

7.1 ELFモジュールについて
7.2 ELFモジュール関数のリスト
7.3 ELFモジュール関数の詳細(一部抜粋)
7.4 モジュール情報のサンプル

第8章 yara-python

8.1 基本的な使い方
8.2 yara.compile 関数
8.3 yara.load 関数
8.4 yara.set_config 関数
8.5 yara.Rules クラス
8.6 yara.Match クラス
8.7 8章のまとめ

付録A:YARAのデザインについて

YARAコマンドからYARAの仕組みを知る

あとがき

はじめに

 本書を手に取っていただき、ありがとうございます。


 本書は、技術書典11で頒布していた「やわらかYARA入門 今日から始めるYARAのきほん」に大幅に加筆・修正を加えたものです。

 本書籍は、YARAに興味がありこれから勉強を始めようと思っている方を対象として、YARAルールの基本的な書き方とYARAの使い方をわかりやすく紹介することを目的としています。


 この本の執筆を志した背景として、YARAルールの文法に関する日本語の情報が極端に少ない現状があります。

 私が初めてYARAを使った時には、入門のために有効な情報ソースが英語の公式ドキュメントしか見つからない上に、公式ドキュメントにはサンプルルールなどの用例も非常に少ない状況でした。

 そのため、YARAの機能や各ルールについて、「とりあえず一通り使ってみた」というレベルに到達するまでに非常に苦労したことを記憶しています。

 このような背景から、本書では自分が初めてYARAを学んだ時に欲しかった1冊をテーマに、日本語で、かつ可能な限りサンプルルールを用いた構成としています。

 この本が、これから初めてYARAルールを書く方の最初の一歩の助けになることを願っています。

 なお、本書で使用しているサンプルルールはすべて以下のリポジトリからダウンロードすることが可能です。

 ・サンプルルール:https://github.com/kash1064/yawaraka-yara-book

YARAとは

 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コマンドの挙動について触れています

表記関係について

 本書に記載されている会社名、製品名などは、一般に各社の登録商標または商標、商品名です。会社名、製品名については、本文中では©、®、™マークなどは表示していません。

問い合わせ先

 本書に関する質問やお問い合わせは、以下の書籍ページまでお願いします。正誤表とサンプルコードもここにアップロードしてあります。

 ・書籍ページ:https://github.com/kash1064/yawaraka-yara-book

第1章 環境構築

 本書のハンズオンの実行環境として、以下のDockerイメージを提供しています。

 コンテナイメージの作成時には、約2.3GBの大きなサイズのデータのダウンロードを伴います。

 ・Dockerhub:https://hub.docker.com/r/kashiwabayuki/yawaraka-yara


 この章では、本書で利用するハンズオン環境の構築方法について解説していきます。

 WindowsとLinux(Ubuntu)のそれぞれにおける環境構築手順について解説します。

1.1 Docker 環境の準備

1.1.1 Windows環境における環境構築手順

 このセクションでは、WindowsにDocker環境を構築する手順を紹介します。

 本書で使用している環境は、Windows10 Home 20H2ですが、他のバージョンのWindows10環境であっても同様の手順で環境構築を行うことができます。

 ただし、もし使用しているOSがWindows10 Homeの場合は、Docker Desktopの利用のために20H1以降のバージョンにバージョンアップされている必要がある点に留意してください。


 まずは、コントロールパネルの「プログラムと機能」から「Windowsの機能の有効化または無効化」を開き、以下の3つの機能を有効化します。

 ・Linux用 Windowsサブシステム

 ・Windowsハイパーバイザープラットフォーム

 ・仮想マシンプラットフォーム

 ※ 設定を有効化した後にOSの再起動が必要です。

図1.1: Windowsの機能の有効化または無効化


 次に、以下のページから「Linux カーネル更新プログラム」をダウンロードしてWindowsに適用します。

 ・Linux カーネル更新プログラム:https://docs.microsoft.com/ja-jp/windows/wsl/install-win10

図1.2: Linux カーネル更新プログラムのダウンロードページ


 上記のページからダウンロードした更新プログラムを実行し、更新が完了すると、次のようなウィンドウが表示されます。

図1.3: Linux カーネル更新完了

 更新を反映させるため、ここでもOSの再起動を実行します。


 更新が完了したら、以下のページからDocker DesktopのWindows向けインストーラをダウンロードします。

 ・Docker Desktop:https://www.docker.com/products/docker-desktop

 ダウンロードしたインストーラを実行します。

 ここのチェックはデフォルトのままで問題ありません。

図1.4: Docker Desktopのインストール画面


 インストールを完了させるためにOSを再び再起動した後、Docker Desktopを起動し、以下の規約に同意します。

図1.5: Docker Desktopの起動

 以下のような画面が立ち上がればインストールは成功です。

図1.6: Docker Desktop


 これでWindows環境にDockerのインストールが完了したので、ハンズオン用のコンテナイメージをPullします。

 DockerをインストールしたWindows環境でPowerShellを起動し、次のコマンドを入力します。

$ docker pull kashiwabayuki/yawaraka-yara:1.0


 以下のようにコンテナイメージのPullが完了し、Docker DesktopのGUI上にイメージが追加されていれば成功です。

図1.7: コンテナイメージのPull


 コンテナイメージの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

 サンプルプログラムのコンパイルが完了すると、以下の画像のようにコンパイルされたファイルが作成されたことが確認できます。

図1.8: コンテナログイン

1.1.2 Linux環境における環境構築手順

 このセクションでは、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キーを追加します。

試し読みはここまでです。
この続きは、製品版でお楽しみください。