現在位置: ホーム / セキュリティ ブログ / 「YARAルール」とClamAV

「YARAルール」とClamAV

ClamAVがバージョン0.99で「YARAルール」をサポートしました。 今回は「YARAルール」についての簡単な説明と、ClamAVとの連携について簡単に解説します。

こんにちは。SIOS OSSエバンジェリスト/セキュリティ担当の面です。

今回は、ClamAVが対応したということを踏まえて、AntiVirusの「YARAルール」について簡単に触れてみます。


YARAとは

YARAとは、マルウェアの研究者たちのために作られた、マルウェアを検知・解析・分類するための、オープンソースのプログラム(Pythonベース)です。

Windows/Linux/Mac OS Xと、幅広く対応しているマルチプラットフォームのツールで、『YARAルール』という文字列と条件/条件演算子/正規表現などを用いて、マルウェアのファミリーの記述を作成し、"yara"コマンドで

# yara [OPTION]... [RULEFILE]... FILE | PID

とすることで、ルールに沿ってFILE or PIDからマルウェアを検出します。

YARA ルールの構造は、以下のようになっています。

    rule dummy
    {
        condition:
           false
    }

例えば、stingを用いて検知する場合には、以下のようになります。

    rule ExampleRule
    {
        strings:
            $my_text_string = "text here"
            $my_hex_string = { E2 34 A1 C8 23 FB }

        condition:
            $my_text_string or $my_hex_string
    }

HEX文字列では、WildCardのようにJump(4-6byteのスキップ)を指定することも出来ます。例えば

    rule JumpExample
        {
            strings:
               $hex_string = { F4 23 [4-6] 62 B4 }

            condition:
               $hex_string
        }

この場合には、下記のようなパターンが対照となります。

    F4 23 01 02 03 04 62 B4
    F4 23 00 00 00 00 00 62 B4
    F4 23 15 82 A3 04 45 22 62 B4

YARAルールのSample

代表的なYARAルールは、http://yararules.com/からダウンロードできます。

以下では、テキストでマッチする簡単なYARA Ruleを作ってテストしてみます。。

sampe_text.yar)

rule YARA_Rule_Sample {
        strings:
            $my_text_string = "Test"

        condition:
            $my_text_string
    }

下記のようなサンプルのtextファイルを用意します。

sample_malware.txt)

This is a Test file

"Test Test Test"

yaraを用いてスキャンすると、該当するRule節が表示されます。

$ yara sample_text.yar sample_malware.txt 
Example_Rule sample_malware.txt

YARA情報とセキュリティベンダ

例えば、ESETでは、2014年3月に起きた、「Windigo(OpenSSHの脆弱性をついて認証情報を盗み、そのサーバを汚染して大量のスパムを送信したり、攻撃サイトへリダイレクトしたりする攻撃)」を検知するために、snort(IDS)およびYARAのルールファイルを公開しています。

また、RSAのセキュリティモニタリング/SIEMソリューションである『Security Analytics』製品でも、YARAをベースにしたビルトインの組み込み型IOC(セキュリティ侵害インジケータ)を用いており、RSA Liveで公開しています。

このように、最近では代表的なセキュリティベンダが、攻撃検知や解析のためにYARAを用いる/サポートする事が増えてきています。

ClamAVとYARA

ClamAVでは0.99からYARAをサポートするようになっており、clamscanなどでYARA Ruleファイルをシグネチャとしてスキャンすることが可能となっています。

ClamAVでYARAを使用するときには、以下のように2つの方法があります。

  • 1. YARA Ruleを".yar"または".yara"という拡張子で、clamavのDBがあるディレクトリ(例えば、Debianの場合には/var/lib/clamav)に配置します。
user@localhost:/var/lib/clamav$ ls
bytecode.cvd  daily.cvd  main.cvd  mirrors.dat  sample_text.yar
user@localhost:/var/lib/clamav$ clamscan /tmp/sample_malware.txt 
/tmp/sample_malware.txt: YARA.Example_Rule.UNOFFICIAL FOUND

----------- SCAN SUMMARY -----------
Known viruses: 4137933
Engine version: 0.99
Scanned directories: 0
Scanned files: 1
Infected files: 1
Data scanned: 0.00 MB
Data read: 0.00 MB (ratio 0.00:1)
Time: 7.264 sec (0 m 7 s)

YARAルールに該当していないファイルの場合には以下のようになります。

user@localhost:/var/lib/clamav$ clamscan /tmp/test123.txt 
/tmp/test123.txt: OK

----------- SCAN SUMMARY -----------
Known viruses: 4137933
Engine version: 0.99
Scanned directories: 0
Scanned files: 1
Infected files: 0
Data scanned: 0.00 MB
Data read: 0.00 MB (ratio 0.00:1)
Time: 7.178 sec (0 m 7 s)
  • 2. YARA Ruleのファイル(".yar")をclamscanなどで直接"--database="で指定します。

以下のように指定してスキャンします。

user@localhost:/tmp$ clamscan --database=sample_text.yar ./sample_malware.txt 
./sample_malware.txt: YARA.Example_Rule.UNOFFICIAL FOUND

----------- SCAN SUMMARY -----------
Known viruses: 1
Engine version: 0.99
Scanned directories: 0
Scanned files: 1
Infected files: 1
Data scanned: 0.00 MB
Data read: 0.00 MB (ratio 0.00:1)
Time: 0.003 sec (0 m 0 s)

まとめ

YARAはセキュリティベンダーやOSS製品が、検知や解析のために使用するものとして取り込まれてきています。YARAルールは簡単ですので、一度テストしてみたほうが良いかと思われます。


[参考]

http://blog.clamav.net/2015/06/clamav-099b-meets-yara.html

https://bruteforce.gr/yara-a-beginners-guide.html


[セミナー告知]

6/15に「OSSセキュリティナイター vol.1」と題して、セキュリティのセミナーを行います。この回では「急増するランサムウェア その脅威とOSSの対策」として、ランサムウェアのリスクとOSSでの対策方法などをお話します。

また、LinuxFoundationでのセキュリティに対する取り組みや、Rapid7(株)による脆弱性リスク管理も併せてご紹介します。

mkt-i.actonservice.com/acton/fs/blocks/showLandingPage/a/15078/p/p-0035/t/page/fm/0がプログラム内容と申し込みの詳細になりますので、是非お申し込み下さい。

OSSよろず相談室

サイオスOSSよろず相談室(2)

問い合わせボタン

最新の記事
Sambaに共有以外のファイルにアクセスされる脆弱性(CVE-2017-2619) 2017年03月24日
Subscription-managerの脆弱性( CVE-2017-2663 ) 2017年03月22日
binutilsに複数の脆弱性( CVE-2017-6965, CVE-2017-6966, CVE-2017-6969, CVE-2017-7209 , CVE-2017-7210 , CVE-2017-7223, CVE-2017-7224, CVE-2017-7225, CVE-2017-7226, CVE-2017-7227 ) 2017年03月22日
linux kernelの脆弱性( CVE-2017-7187 ) 2017年03月21日
linux kernelの脆弱性( CVE-2017-6353 , CVE-2017-5986 ) 2017年03月21日
Ubuntu 16.10のkernelの脆弱性( CVE-2017-7184 ) 2017年03月20日
pcreの脆弱性( CVE-2017-7186 ) 2017年03月20日
binutilsの脆弱性( CVE-2017-6965 , CVE-2017-6966 , CVE-2017-6969 ) 2017年03月19日
MySQL(MariaDB) 5.5/5.6のmysql clientの脆弱性( Riddle : CVE-2017-3305 ) 2017年03月18日
linux kernelの脆弱性( CVE-2017-6951 ) 2017年03月17日
Apache Struts2の脆弱性 ( CVE-2017-5638 ) 2017年03月15日
linux kernelの脆弱性( CVE-2017-6874 ) 2017年03月15日
tomcatに情報漏えいの脆弱性( CVE-2016-8747 ) 2017年03月14日
QEMUの脆弱性( CVE-2016-9603 ) (Xen: XSA-211) 2017年03月14日
lxcの脆弱性(CVE-2017-5985) 2017年03月10日
wgetの脆弱性(CVE-2017-6508) 2017年03月08日
linux kernelに特権昇格の脆弱性( CVE-2017-2636 ) 2017年03月08日
( PoC ) linux kernel特権昇格脆弱性( CVE-2017-6074 ) の暫定回避策の確認 2017年03月06日
linux kernelの脆弱性( CVE-2016-9083 , CVE-2016-9084 ) 2017年03月03日
linux kernelに複数の脆弱性( CVE-2017-6345 , CVE-2017-6346 , CVE-2017-6347 , CVE-2017-6348 ) 2017年03月01日
Katello/Foremanによる運用管理 (Part4) 2017年02月28日
util-linux / coreutils の脆弱性(CVE-2017-2616) 2017年02月24日
linux kernelの脆弱性( CVE-2017-6214 ) 2017年02月24日
linux kernelに特権昇格の脆弱性( CVE-2017-6074 ) 2017年02月23日
curlの脆弱性 ( CVE-2017-2629 ) 2017年02月22日
QEMUの脆弱性( CVE-2017-2620 ) (Xen: XSA-209) 2017年02月22日
Tomcatの脆弱性 ( CVE-2017-6056 ) 2017年02月21日
Katello/Foremanによる運用管理 (Part3) 2017年02月21日
OpenSSLの脆弱性 ( CVE-2017-3733 ) 2017年02月16日
linux kernelの脆弱性( CVE-2017-6001 , (was CVE-2016-6786) ) 2017年02月16日
QEMUの脆弱性( CVE-2017-2630 ) 2017年02月15日
glibcの脆弱性(CVE-2015-8982, CVE-2015-8983, CVE-2015-8984) 2017年02月15日
vimの脆弱性 ( CVE-2017-5953 ) 2017年02月14日
Oracle Javaの脆弱性(Oracle Critical Patch Update Advisory - January 2017) 2017年02月14日
libxml2の脆弱性(CVE-2017-5969) 2017年02月13日
「linux kernel-4.9」でのLSMモジュールについて 2017年02月13日
linux kernelの脆弱性( CVE-2017-5970 ) 2017年02月13日
linux kernelの脆弱性( CVE-2016-8636 ) 2017年02月12日
bind 9 に設定依存の脆弱性 ( CVE-2017-3135 ) 2017年02月09日
bashの自動補完機能の脆弱性( CVE-2017-5932 ) 2017年02月08日
spiceの脆弱性( CVE-2016-9577 , CVE-2016-9578 ) 2017年02月08日
QEMUの脆弱性( CVE-2017-5898 ) 2017年02月08日
linux kernelの脆弱性( CVE-2017-5897 ) 2017年02月08日
linux kernelの脆弱性( CVE-2016-10208 ) 2017年02月06日
ntfs-3gの脆弱性(CVE-2017-0358) 2017年02月02日
QEMUの脆弱性( CVE-2017-2615 ) 2017年02月02日
tcpdumpに複数の脆弱性(CVE-2016-7922 等) 2017年01月30日
libgdに複数の脆弱性情報 (CVE-2016-9317, CVE-2016-6912, CVE-2016-10167, CVE-2016-10168, CVE-2016-10169) 2017年01月29日
OpenSSLに複数の脆弱性 ( CVE-2017-3730 , CVE-2017-3731 , CVE-2017-3732 ) 2017年01月27日
RunCに関しての脆弱性( CVE-2016-9962 )のPoCとSELinuxによるリスクの軽減 2017年01月26日
systemdの重要な脆弱性( CVE-2016-10156 ) 2017年01月25日
linux kernelの複数の脆弱性( CVE-2016-10153, CVE-2016-10154, CVE-2017-5547, CVE-2017-5548, CVE-2017-5549, CVE-2017-5550, CVE-2017-5551) 2017年01月25日
Katello/Foremanによる運用管理 (Part2) 2017年01月24日
linux kernel(KVMを有効にしている場合)で複数の脆弱性( CVE-2016-10150, CVE-2017-2583 ) 2017年01月21日
OpenSCAP 1.2.13のリリース情報 2017年01月16日
Oracle Javaの脆弱性(CVE-2016-5542, CVE-2016-5554, CVE-2016-5582, CVE-2016-5597, CVE-2016-5573) 2017年01月13日
bind に複数の脆弱性 ( CVE-2016-9131 , CVE-2016-9147 , CVE-2016-9444 , CVE-2016-9778 ) 2017年01月12日
Dockerに特権昇格の脆弱性 ( CVE-2016-9962 ) 2017年01月11日
GnuTLS の 脆弱性 (GNUTLS-SA-2017-1 : CVE-2017-5334 , GNUTLS-SA-2017-2 : CVE-2017-5335 , CVE-2017-5336 , CVE-2017-5337 ) 2017年01月11日
OpenSSLの脆弱性(CVE-2016-7056 ) 2017年01月11日
最新の記事 - もっと...