![見出し画像](https://assets.st-note.com/production/uploads/images/85167123/rectangle_large_type_2_f09e742bb6ba060b3a1d6b5fa0ca744d.jpeg?width=1200)
#39 YARA
お盆、仕事が休みで、懐かしい人に会うことができました。みなさんはいかがお過ごしでしたか。
セキュリティ関係の勉強をしていて、気になっていたYARAを触ってみました。
目標
YARAを動かす。
YARAは、ファイルの抽出を行うツールです。マルウェアの特定などでよく使われます。
作業
インストール
YARAの詳細については、公式ドキュメントを参照してください。
Macでは、homebrewを使ってインストールできます。Linux、Windowsでのインストール方法も公式ドキュメントにて解説されています。
$ brew install yara
YARAルール
YARAは、パターンマッチングによってファイルを抽出します。ファイルの特徴を、C言語のような記法でYARAルールとして記述し、再利用・共有できます。ウイルス対策ソフトでマルウェアの特定に使用されたり、マルウェアの分類に使われる場合が多いようです。
よく使われるYARAルールの一覧がGithubで公開されています。少し覗いてみましょう。
$ git clone https://github.com/Yara-Rules/rules
昨今話題になっているEmotetのYARAルールがありました。
rules/malware/MALW_Emotet.yar
rule Emotets{
meta:
author = "pekeinfo"
date = "2017-10-18"
description = "Emotets"
strings:
$mz = { 4d 5a }
$cmovnz={ 0f 45 fb 0f 45 de }
$mov_esp_0={ C7 04 24 00 00 00 00 89 44 24 0? }
$_eax={ 89 E? 8D ?? 24 ?? 89 ?? FF D0 83 EC 04 }
condition:
($mz at 0 and $_eax in( 0x2854..0x4000)) and ($cmovnz or $mov_esp_0)
}
$mzは、Windowsの実行ファイル(exe)のマジックナンバーです。それ以下はよくわかりませんが、変数名からみるに、ある特定の処理を含んでいるかをチェックしているようです。
では、実際に書いてみます。
//myrule.yar
//"Hello World"という文字を含むか判定する
rule myrule {
strings:
$hello = "Hello World"
condition:
$hello
}
以前、C++の勉強で作った"hello"実行ファイルを抽出できるか試してみましょう。
$ yara myrule.yar hello
myrule hello
うまく抽出できました。マニュアルを確認したところ、ファイルだけでなく、ディレクトリやプロセスに対しても判定ができるようです。YARAを使えば、自前でウイルススキャンができそうですね。
まとめ
YARAは、セキュリティアナリストやマルウェアの研究者に愛用されているらしいですが、より汎用的な使い方もできそうです。grepやfindでは手が届かない、絶妙に便利なツールではないでしょうか。活用方法を考えてみたいと思います。