作成日: 2002年8月16日
作成者: 小川真樹
Clam AntivirusはTomasz Kojmによる、各種UNIX系のシステム(MacOSXも含む)で動作するアンチウィルスソフトです。WindowsでもCygwin上で動作するようです。オープンソースで、GPLライセンスに基づいて利用することができます。また、同じくフリーのOpenAntiVirus(http://www.openantivirus.org/)プロジェクトのウィルスデータベースを利用しています。
Clam Antivirusについての最新かつ正確な情報、ソースコードはhttp://clamav.elektrapro.com/にあります。
ソースコードはhttp://clamav.elektrapro.com/から入手することができます。2002年8月16日時点での最新のバージョンは0.23のようです。
Clam Antivirusをインストールする前に'clamav'というユーザとグループを作成する必要があります。(Cygwinではこの作業は必要ありません。)
LinuxやSolarisの例
# groupadd clamav
# useradd -g clamav -s /bin/false -c "Clam Antivirus" clamav
MacOSXの例(この例ではuidとgidを402で作成しています)
$ sudo niutil -create / /groups/clamav
$ sudo niutil -createprop / /groups/clamav gid 402
$ sudo niutil -createprop / /groups/clamav passwd '*'
$ sudo niutil -create / /users/clamav
$ sudo niutil -createprop / /users/clamav uid 402
$ sudo niutil -createprop / /users/clamav gid 402
$ sudo niutil -createprop / /users/clamav passwd '*'
$ sudo niutil -createprop / /users/clamav realname 'Clam Antivirus'
$ sudo niutil -createprop / /users/clamav home /dev/null
$ sudo niutil -createprop / /users/clamav shell /dev/null
※NetInfo Managerを使ってGUIで作成してもかまいません。
他の多くのソフトと同様の手順でコンパイルおよびインストールできるでしょう。GNU makeが必要になります。
$ zcat clamav-0.23.tar.gz | tar xvf -
$ cd clamav-0.23
$ ./configure
$ make
$ sudo make install
clamscanコマンドを使って、ウィルスに感染しているファイルがないか検査します。
圧縮されたファイル等、なんらかの形式で加工されたファイルを検査するためには、それらを一度元のファイルに戻す必要があります。たとえば、「clamscan /var/spool/mail」を実行しても、メールスプール内の添付ファイルを正しく検査することができません。また、MacOSXにおいて「clamscan -r ~/Library/Mail」を実行しても、同様にMail.appのメールデータを正しく検査することはできません。
ただし、一部の圧縮フォーマットについては、clamscanコマンドにそれぞれのオプションをつけることで外部コマンドを利用して解凍しながら検査することが可能です。このときに「-r」オプションを併用すると、再帰的に解凍しながら検査します。また、圧縮されたファイル自体がウィルスに感染しているかどうかも検査されます。
Clam Antivirusのウィルス定義データベースは、デフォルトでは/usr/local/share/clamav/viruses.dbにインストールされます。最新のウィルスに対応するためにはこのファイルをこまめに更新する必要があります。
また、バージョン0.23以降では、このviruses.dbと同じディレクトリにexample.dbのようなファイル名の末尾に「.db」を含むファイルがある場合は、そのファイルもウィルス定義データベースとして使用するようになっています。つまり標準のウィルス定義データベースに加えて独自作成もしくはサードパーティ製のデータベースを併用することが可能です。
AMaViS-perlとClam Antivirusを連係させて使用すると、サーバサイドでの電子メールのウィルススキャンをさせることができます。
使用するためにはClam Antivirusのソースコードに含まれているパッチ(support/amavis/clamavis.patch)を使ってAMaViS-perlをClam Antivirusに対応させる必要があります。まずはhttp://www.amavis.org/からamavis-perl-11.tar.gzを入手します。それから以下のような手順でパッチをあてます。
$ tar zxpvf amavis-perl-11.tar.gz
$ cp clam-0.23/support/amavis/clamavis.patch amavis-perl-11
$ cd amavis-perl-11
$ patch -p1 < clamavis.patch
$ find . -exec touch 01010000 {} \;
パッチをあてた後は、通常のAMaViS-perlのインストール手順と同じようにインストール・設定・使用することができます。AMaViS-perlについての詳細な情報についてはhttp://www.amavis.org/を調べて下さい。
AMaViS-ngはパッチをあてるまでもなくデフォルトでClam Antivirusに対応しています。また、AMaViS-perlに比べて若干インストールが楽です。が、MIME構造の壊れたメールなどの配送を保留してしまったりするのが少し困りものです。
AMaViS-ngはhttp://sourceforge.net/projects/amavisから入手できます。インストール後に、amavis.confの次のような行のコメントを外します。
virus-scanner = CLAM
それから、同じくamavis.confの[CLAM]セクションにclamscanのpathを設定します。
[CLAM]
clamscan = /usr/local/bin/clamscan
ClamAV-Test-SignatureはClam Antivirusに含まれているテスト用のウィルス(動作確認用のもので実際には害をもたらさない)です。ソースコードではtest/test1にあります。このファイルがどのようになっているか見てみましょう。
$ cat test/test1
$CEliacmaTrESTuScikgsn$FREE-TEST-SIGNATURE$EEEEE$
一方、このClamAV-Test-Signature用のシグネチャは次のようになっています。
$ grep ClamAV-Test-Signature /usr/local/share/clamav/viruses.db
ClamAV-Test-Signature=2443456c6961636d615472455354755363696b67736e24465245452d544553542d5349474e4154555245244545454545240a
「=」の左側がウィルスの名前、右側がウィルスのシグネチャ本体であることがわかると思います。では、このシグネチャはどのようにして作成されたのでしょうか。その前にとりあえずClamAV-Test-Signatureのファイルを16進数で出力してみましょう。これはSolarisでの実行例です。
$ od -t x1 test1
0000000 24 43 45 6c 69 61 63 6d 61 54 72 45 53 54 75 53
0000020 63 69 6b 67 73 6e 24 46 52 45 45 2d 54 45 53 54
0000040 2d 53 49 47 4e 41 54 55 52 45 24 45 45 45 45 45
0000060 24 0a
0000062
もうお分りいただけたと思います。シグネチャの正体はウィルス(の断片)をhexdumpしたものだったんですね。このClamAV-Test-Signatureの場合はファイルが小さいので全体をhexdumpしていますが、通常はファイルの一部を使います。
シグネチャを作成するにはウィルスのデータをhexdumpすればよいことがわかりました。このシグネチャと一致する箇所をもつファイルをウィルスに感染しているとみなすわけです。
ところが、ウィルスに感染したファイルをそのままhexdumpしたものをシグネチャとして配布してしまうと、ウィルスそのものを配布しているのと変わりありません。また、シグネチャそのものが肥大化してしまうので、それを読みこむアンチウィルスソフトの負担が大きくなります。また、感染したファイルごとに形を変えるようなタイプのものに対しては効果がありません。
したがって、シグネチャの作成のために抽出する箇所は次のような条件を満たす必要があります。
これらの条件をみたすようなシグネチャを作成するためには、まずウィルスに感染したファイルを入手する必要があります。また、同じウィルスに感染したファイルを、別の経路から複数入手するか、あるいは一つのウィルスを閉じられた環境で培養してみて、該当のウィルスの性質などについてより深く調べる必要があるでしょう。また、当然のことですが、たとえばWindowsに感染するウィルスのシグネチャをWindows上で作成するのは危険です。
シグネチャを作成したら、ウィルス定義データベースに登録しましょう。Clam Antivirusの標準のデータベースファイルはviruses.dbですが、このファイルに追加すると、データベースを更新するときに上書きされて失われてしまうので、たとえばlocal.dbというような名前のファイルを新規に作成し、そこに追加していくとよいでしょう。
このように、「どの部分をシグネチャに採用するか」という問題のために、自力で良質なシグネチャを作成するのはやや困難であるといえるでしょう。Clam Antivirusに含まれるsigtoolコマンドは、このシグネチャの作成を支援するものです。
sigtoolは、ウィルスに感染したファイルを細切れにして、それを他のウィルススキャナにかけ、そのウィルススキャナが細切れにされたファイルからウィルスを検出するかを調べます。そういったことをくり返して、その他のウィルススキャナが、どの部分をウィルスとして検出するかを正確につきとめます。そしてその部分をhexdumpします。
sigtoolでシグネチャを作成するためには以下の条件が必要です。
仮にこの他のウィルススキャナのコマンド名を「otherscan」とし、ウィルスに感染したファイルを「virus.exe」とします。また、このotherscanコマンドがvirus.exeからウィルスを検出したとき「infected」という文字列が標準出力に出力するメッセージに含まれるものとします。
これらの条件下でsigtoolを次のように実行します。
$ sigtool -c "otherscan" -f virus.exe -s "infected"
このコマンドを実行すると、「virus.exe.sig」というファイルにシグネチャを出力します。これだけではまだOpenAntivirusのシグネチャのフォーマットの右辺だけで不充分ですので、適切なウィルスの識別名を左辺に設定します。
OpenAntiVirusをはじめとするフリーのアンチウィルスプロジェクトは、いまだに商用のものには、足もとさえ全く及びません。何もしないよりはましかもしれませんが、現在のところ、Clam AntivirusやOpenAntiVirus等を導入したからといって、十分であるとは到底言えない状況です。2002年8月16日の時点で、検出できるウィルスの種類は1800にも届いていません。また、OpenAntiVirusのウィルス定義データベースの現在の最終更新日付は7月1日で、1ヵ月半以上更新されていません。
この文書はGNU General Public Licenseに基づいています。
この文書は小川真樹がClam Antivirusについて調べたもので、忘れないように記録したものをまとめたものです。 この文書の内容についての意見や感想、あるいは誤りの指摘についてはproc@mac.comまでご連絡下さい。
ここに書かれてあるものは完全に無保証です。ここに書かれてあることをそのまま実行してそのとおりに動作する保証は全くありません。特にシグネチャの作成の部分については、他にまとまった資料らしいものをみつけられなかった(もしそういった資料について知っている方がいたら教えてください)こともあって、間違ったことを書いている可能性が比較的高いです。