13. Clam AntiVirus

思わず前回から三ヶ月以上たって,もう七月も半ばになってしまいました。 その間,社会的事件としてたとえば,さる 4 月 23 日にウィルス対策ソフトが原因で CPU 使用率が 100 % になる大規模障害が全国で発生したわけですが *1, さしあたりそれとは独立な事象として,前回の予告どおり, Cygwin に移植されたウィルス検出ソフト Clam AntiVirus を取り上げましょう。

13.1 clamav パッケージ

昨年9月,Cygwin の標準パッケージに GPL 下のウィルス検出ソフト Clam AntiVirus (http://clamav.net/) が加わりました。 当時のアナウンス記事は http://cygwin.com/ml/cygwin-announce/2004-09/msg00027.html にみることができます。 インストールはいつもどおり Cygwin の setup.exe からできます。 パッケージ名は clamav です。*2

これはもともと Unix 類のために作られたものですが, 検出対象には Windows のウィルスも含まれます,といいますかそれがほとんどです。 現実には Unix 類に感染するウィルスはほとんどなく,

ことが主目的になりますから,Windows のウィルスを検出する必要があるわけです。 また,その主な活動はサーバ・プログラムの外界との入出力の検査になります。 入出力に伴ってではないファイル・スキャンは, 共有フォルダなど特定の場所を対象とするのが普通です。

Cygwin 上に移植された clamav パッケージにも, サーバとリンクするためのライブラリや, サーバからプロセス間通信で利用できるデーモンが用意されています。 手動スキャンするコマンド, ウィルス・データベースを更新するコマンドもあります。 もしも Cygwin が本物の Unix だったならば,これで十分だったかもしれません。 しかし,

という事情がありますから,ほかでもない自らの発病を防ぐために利用できる一方, ウィルス対策として clamav だけでは完全でないきらいがあります。 それでも,ウィルス・データベースの更新が頻繁で, しばしば他のウィルス対策ソフトが検出しない新ウィルスにいちはやく 対応することから,外来のファイルを陽に検査する手段としては有効です。 *3

本稿では以下,手動スキャンのための clamscan コマンドと, ウィルス・データベース更新のための freshclam コマンドを紹介します。 デーモン clamd とライブラリは, それを利用するサーバ等がなければ無意味ですから,別の機会に取り上げます。

13.2 clamscan コマンド

01:~$ clamscan
/home/suzuki/.bashrc: OK
/home/suzuki/.bashrc~: OK
/home/suzuki/.bash_history: OK
/home/suzuki/.bash_profile: OK
/home/suzuki/.bash_profile~: OK
/home/suzuki/.inputrc: OK
/home/suzuki/.viminfo: OK
/home/suzuki/.vimrc: OK
/home/suzuki/.Xdefaults: OK
/home/suzuki/.zshrc: OK
/home/suzuki/.zsh_history: OK

----------- SCAN SUMMARY -----------
Known viruses: 36429
Engine version: 0.86.1
Scanned directories: 1
Scanned files: 11
Infected files: 0
Data scanned: 0.09 MB
Time: 1.150 sec (0 m 1 s)
01:~$

引数なしの clamscan はカレントディレクトリの直下にあるファイルをスキャンします。 上記の結果は,infected files (感染ファイル) が 0, つまりここにウィルスは見つからなかったことを示しています。 他の代表的な使用例を下表に示します。

$ clamscan -i 感染ファイルとサマリーだけ表示します。
$ clamscan -r カレントディレクリ以下を再帰的にスキャンします。
$ clamscan /tmp ディレクトリ /tmp をスキャンします。
$ clamscan -ir /home ディレクトリ /home 以下を再帰的にスキャンし, 感染ファイルとサマリーだけ表示します。

13.3 freshclam コマンド

ウィルス・データベース (いわゆるパターン・ファイルに相当) は freshclam コマンドで更新できます。 このコマンドは HTTP でファイルをダウンロードします。

01:~$ freshclam
ClamAV update process started at Sun Jul 10 05:21:37 2005
Downloading main.cvd [*]
main.cvd updated (version: 33, sigs: 36102, f-level: 5, builder: tkojm)
Downloading daily.cvd [*]
daily.cvd updated (version: 974, sigs: 321, f-level: 5, builder: ccordes)
Database updated (36423 signatures) from db.de.clamav.net (IP: 62.26.160.3)
01:~$

デフォルトの設定ファイルは /etc/freshclam.conf です。 上記の出力は clamav パッケージでインストールしたままの設定を用いた例です。

注意: 実はこれは模範例ではありません。 http://clamav.net/faq.html にあるとおり,日本ならば設定ファイル /etc/freshclam.conf に 2 行ある DatabaseMirror のうち 1 行を db.de.clamav.net から db.jp.clamav.net に置き換えます (もう1行は database.clamav.net のままにします)。

組織内から HTTP プロキシ経由でダウンロードするには,設定ファイル の中の HTTPProxyServer の行と HTTPProxyPort の行のコメントアウトを外して書き換えます。

デフォルトでは, ダウンロードしたデータベース・ファイルは /usr/share/clamav/ に格納されます。 データベースで認識されるウィルスの種類は

01:~$ sigtool --list-sigs

で一覧できます。

13.4 注意点

ドキュメント

現行のバージョンでは /usr/share/doc/clamav-0.86.1/ に PDF ファイルと HTML ファイルを含む英語のドキュメント一式がインストールされます。

clamscan の失敗

残念ながら今の clamscan はどんなファイルでもチェックできるわけではありません。 経験上, 添付ファイル付き電子メールを収めた mbox 形式のファイルでよく失敗します。

01:~/Mail/Local Folders$ clamscan Misc
LibClamAV Error: Can't create temporary file /tmp/clamav-0e8e0b1671b077a2/B%l%S%e!_Ds_P
MQB.lzhBpOcrd: No such file or directory

この例では, どうも添付ファイルを展開するときファイル名として使用できない文字を使おうとして 失敗しているようです。 *4

失敗した場合,/tmp ディレクトリに残骸が残ることがあります。 ディレクトリ名が clamav- で始まりますから,見ればそれと分かります。 忘れずに消すようにします。

古い設定ファイル

Cygwin の多くの設定ファイルと同じく,clamav の設定ファイルも, パッケージの更新時に setup.exe が勝手に置き換えることはしません。

古い設定ファイルが存在する場合,clamav の新しい設定ファイルは -dist 付きの名前で /etc/ に置かれます (正確にいえば,-dist 付きの名前で置かれたあと, 既存の設定ファイルがなければ -dist 無しの名前に改名されます)。

ですから,パッケージの更新があったときは,多少面倒ですが

01:~/etc$ diff freshclam.conf freshclam.conf-dist 

などとして新しい設定ファイルとの差分を確認するとよいでしょう。

とりわけ昨年十月下旬の更新時の設定ファイルをそのまま使っている場合, freshclam で次のようなエラーが出ているはずです。

01:~$ freshclam
ClamAV update process started at Fri Jul  8 01:31:14 2005
Downloading main.cvd [*]
main.cvd updated (version: 33, sigs: 36102, f-level: 5, builder: tkojm)
Downloading daily.cvd [*]
daily.cvd updated (version: 971, sigs: 290, f-level: 5, builder: diego)
Database updated (36392 signatures) from database.clamav.net (IP: 140.128.9.18)
ERROR: Clamd was NOT notified: Can't connect to clamd through /var/run/clamd.sock
connect(): No such file or directory
01:~$ 

ウィルス・データベースの更新を, デフォルトでは起動していないデーモン clamd に通知しようとして, 失敗しています。 現在の clamav-0.86.1 パッケージの設定ファイルでは, NotifyClamd がコメントアウトされていますから,このエラーは出ません。

次回予告

次回は OpenGL によるちょっとした三次元フライトシミュレータの移植その他の小ネタ集 を予定しています。


脚注

*1 さいわいにも, くだんの社会的事件の発生は週末だったので筆者は被害を受けませんでした。 全国の,といいますかむしろ全世界の当該ウィルス対策ソフトのユーザかつ Cygwin の利用者である人々にとっては, むしろその3ヶ月前の誤認識事件が深刻だったかもしれません。 Cygwin に含まれる cygcrypt-0.dll が BKDR_HACDEF.M ウィルスの一部と誤認識 されたのです。広く報告された第一報はおそらく http://cygwin.com/ml/cygwin/2005-01/index.html#00506 でしょう (Date: Mon, 10 Jan 2005 16:43:31 +0100)。
筆者が被害を受けたのは日本時間で1月11日昼でした。 tar ボールにかためてハードディスク上に保存していた初期のころの Cygwin パッケージ一式も誤認識され,当該ウィルス対策ソフトに破壊されてしまいました (バックアップ媒体として CD-R, DVD+/-R は重要ですね...)。

*2 最初「クラマブ」と読んでしまいました。 発音としてより良い近似は「クラム・エーブイ」でしょう。

*3 執筆時現在の http://clamav.net/ の筆頭記事は,ClamAV を含む広範なアンチウィルスソフトの 最近のウィルスへの対応の早さに関する第三者統計へのリンクです。 リンク先の複数の情報による限り,ClamAV は上位グループに属し, 良い実績を示しています。

*4 忙しくて問題点を整理していません。 どなたか有志のかたが対処してくださるとうれしいのですが。

目次へ戻る

Copyright (c) 2005 Oki Software Co., Ltd.