ClamAV の sigtool で独自シグネチャを作成する
Clm AntiVIrus (ClamAV) はオープンソースのアンチウィルスソフトです。利点としては無償で利用できることが好まれていると思いますが、独自のシグネチャを作成することができるのも利点の一つです。最近は ClamAV のチェックをすり抜けて届くマルウェアも多いですので、独自のシグネチャを追加する方法を試してみました。
ClamAV のシグネチャの生成には sigtool コマンドを使います。シグネチャの形式には数種類あります。MD5 チェックサム、バイナリのパターンマッチング、圧縮ファイル内のメタデータによる照合などです。それぞれ sigtool のオプションを使い分けます。
以下は ClamAV の 0.95.3 で試しています。これより古い・新しいバージョンでは仕様や挙動が異なる可能性がありますのでご注意ください。
MD5 チェックサムを用いる場合
これが一番簡単な方法で、ファイルの MD5 チェックサムが一致するかどうかで判断されます。ここでは ClamAV で検出されず、Notron で AntiVirus2008 と診断された exe ファイルを使用しました。ZIP ファイルなどの場合は、中身のマルウェア本体を取り出してから MD5 チェックサムを取得するようにします。
# sigtool --md5 antivirus2008.exe > /usr/lib64/clamav/test.hdb # cat /usr/lib64/clamav/test.hdb 19daf4ef68dd4d830d4159e3d0dc7eb0:13824:antivirus2008.exe
拡張子は .hdb として、clamav の定義ファイルのあるディレクトリに保存して下さい。1つの .hdb ファイルに複数のシグネチャを格納できます。clamscan コマンドで検査してみます。
# clamscan antivirus2008.exe antivirus2008.exe: antivirus2008.exe.UNOFFICIAL FOUND
このように、自前で作成したシグネチャで検出された場合は、UNOFFICIAL FOUND と表示されます。
実行可能ファイルの PE セクションを用いる場合
これは実行可能ファイル (.exe など) に限る方法です。実行可能ファイルには PE ヘッダとセクションというものがあり、この部分を切り出したもの(おそらく pedump などを使う)の MD5 を利用します。この方法は試していませんが、拡張子 .mdb ファイルに保存するようです。
# sigtool --mdb antivirus2008_pesection > /usr/lib64/clamav/test.mdb
Hexダンプによるシグネチャを利用する
マルウェアのファイルから他のファイルとは一致しない特徴的な部分を切り出して、その Hex ダンプを利用してシグネチャを作成します。
# vi -b antivirus2008.exe
vi エディタ上で :%!xxd として16進バイナリエディタとして表示させ、特徴的な部分を選びます。
0000600: 3287 6d0f a240 7db7 0a23 7eb7 a240 7db7 2.m..@}..#~..@}. 0000610: a26d 7ab7 a224 68b7 a2a5 87b5 13e8 5425 .mz..$h.......T% 0000620: c7f9 5118 9b44 f451 2f96 f412 8233 3d2c ..Q..D.Q/....3=, 0000630: 5548 f471 ae3b 358a accb 0251 75fd af2c UH.q.;5....Qu.., 0000640: ef2b 3308 d232 7b75 3349 2e0f 7345 4ad7 .+3..2{u3I..sEJ. 0000650: 23b9 1101 eb75 0c15 0ef8 2c2e 6624 6196 #....u....,.f$a. 0000660: e902 75b7 55cb 1034 e6e4 9c9b 2b56 4db7 ..u.U..4....+VM. 0000670: a240 f464 aecb aab3 2b53 f281 07cc 8ac7 .@.d....+S...... 0000680: 394e 7db7 a266 d24c 884b 3d8b a4e2 063e 9N}..f.L.K=....> 0000690: ad40 7db7 2d76 1832 7de7 d0c2 6172 77c3 .@}.-v.2}...arw.
前後を削除して :%!xxd -r として、ヌル文字を削除して別名で保存します。このファイルの一部分を sigtool に読み込ませまて 16進ダンプを出力します。その結果を *.db ファイルに、マルウェア名=HexSignature の形で格納します。
# echo -n 'Trojan.AntiVirus2008=' > /usr/lib64/clamav/test.db # cat antivirus2008_sig | sigtool --hex-dump >> /usr/lib64/clamav/test.db # cat /usr/lib64/clamav/test.db Trojan.AntiVirus2008=237eb7a2407db7a26d7ab7a22468b7a2a587b513e85 425c7f951189b44f4512f96f41282333d2c5548f471ae3b358aaccb025175fdaf2 cef2b3308d2327b7533492e0f73454ad723b91101eb750c150ef82c2e6624619 6e90275b755cb1034e6e49c9b2b564db7a240f464aecbaab32b53f28107cc8ac 7394e7db7a266d24c884b3d8ba4e2063ead407db72d7618327de7d0c2617277c3
clamscan コマンドで確認します。-d オプションはそのデータベースだけを使用するというコマンドです。他のデータベースを読み込まないので clamscan コマンドの起動が早くなります。
# clamscan -d /usr/lib64/clamav/test.db antivirus2008.exe antivirus2008.exe: Trojan.AntiVirus2008.UNOFFICIAL FOUND
拡張シグネチャフォーマット
上記に加え、ファイルの種類などを指定できる拡張フォーマットが用意されています。以下の様式で記述されます。
マルウェア名:TargetType:Offset:HexSignature[:MinEngineFunctionalityLevel:[Max]]
TargetType には以下の値が利用できます。
- 0 = すべてのファイル
- 1 = Portable Executable (PE)
- 2 = OLE2 コンポーネント (VBA スクリプトなど)
- 3 = HTML ファイル(normalised)
- 4 = メールファイル
- 5 = 画像データ
- 6 = ELF
- 7 = ASCII テキストファイル(normalised)
Offset には、* または数値を指定します。数値をした場合は、ファイルの先頭からのオフセットを指定します。EOF-n のように指定した場合は、ファイルのの末尾からのバイト数を n に指定します。
さらに TargetType が PE または ELF の場合は、エントリポイントからのバイト数などの指定をすることもできますが省略します。これらの拡張された書式のシグネチャは *.ndb ファイルに格納します。
アーカイブファイルのメタデータを利用する場合
パスワードで暗号化された ZIP ファイルまたは RAR ファイルの中にマルウェアが格納されている場合は、パターンマッチングによる検査ができません。その場合は圧縮ファイルから取得できる内容ファイルのメタデータを利用する方法が使えます。
マルウェア名:encrypted:ファイル名:通常のファイルサイズ:圧縮後のサイズ:crc32:圧縮方式:ファイルの位置:最大ネスト数
encrypted は暗号化されている場合は 1、されていない場合は 0 を指定します。
ファイル名には正規表現が使えるようです。 * を指定した場合はファイル名は無視されます。
通常の(圧縮していない状態の)ファイルサイズと、圧縮後のファイルサイズは、それぞれ * を指定した場合は無視されます。
CRC32、圧縮方式、ファイルの位置、最大ネスト数もそれぞれ * を指定した場合は無視されます。
試していませんが、この方法による定義は ZIP ファイルの場合は .zmd という拡張子のファイルに、RAR の場合は .rmd という拡張子のファイルに保存するようです。
ホワイトリストの使用
main.cld や daily.cld などで検出されてしまう(False Positive の)ファイルをホワイトリストにより除外することもできます。
MD5 を利用する場合は、.fp という拡張子のファイルに保存します。
# sigtool --md5 test.exe > /usr/lib64/clamav/whitelist.fp
シグネチャの命名規則
ClamAV では、シグネチャの接頭辞に命名規則があります。Worm はワーム、Trojan はバックドアプログラム、Adware はアドウェア、などです。マルウェア名にはアルファベットと数字、ピリオド、ハイフン、アンダースコアのみが使われます。空白やアポストロフィ、コーテーションは使ってはなりません。
もっと知りたい方へ
sigtool についてもっと知りたい方は、詳細が 公式サイトの PDF ファイル(英語) に書かれています。それほど難しくありませんので、シグネチャを自作されたい方は一読をお薦めします。
きのう、生成とかチェックー!
コメント by BlogPetのusausa — 2009-11-4 14:49