常に最新版を使う
ウィルス対策で最も重要なことの一つはウィルスデータベースと本体を常に最新版にしておくことです。ClamXav には起動時にウィルスデータベースをアップデートしたり、定期的にウィルスデータベースをアップデートする機能があります。これには三つ問題点があります。
- 起動時のアップデートは起動しないと働かない。
したがってフォルダ監視機能を担う ClamXavSentry だけを使っているとこの機能は役に立ちません。そして設定等が安定してくると ClamXav 本体を直接使う機会はほとんど無くなってくるでしょう。
- アップデートの頻度が実態に即していない。
上の問題を補うのが定期的なアップデートです。しかしこれは最も頻繁に設定しても一日一回です。ClamAV のウィルスデータベースは一日に何度も更新されています。せっかく活発な ClamAV が活かし切れていませんし、一日一回あるいはそれ以下の頻度では常に少し古いウィルスデータベースを使うことになってしまいます。
- 本体は更新されない。
ClamXav のエンジンである ClamAV もそうですが、ClamXav 自身もです。商用のウィルス対策ソフトはウィルスデータベースだけでなく本体のアップデートも行うのが普通です。それはその必要があるからです。
最初の二つの問題を解決するのが FreshClamDaemon です。これは元々このブログで公開したものにインストーラを付けたものです。(参照「ClamAV と ClamXav: 第三回 ウィルス定義ファイルの自動更新」) これは Mac OS X のみがターゲットです。
そして三つ目の問題を解決するのが clamav-update です。Fedora Core Linux に同名のパッケージがありますがそれとは無関係です。これは ClamAV の自動アップデートを主目的とした汎用のアップデータです。このため ClamAV だけではなく色々なソフトウェアのアップデートに利用できます。ClamXav 用の設定ファイルは「clamav-update :: トピックを表示 - conf ファイルサンプルギャラリー」に置いてあります。
水際で防ぐ
ClamXav の最も重要な機能はフォルダ監視機能です。ClamXav のエンジンである ClamAV には所謂リアルタイムスキャン機能はありません。Linux などではそういう仕組みが用意されていますが Mac OS X 用の該当するものはないようです。したがって ClamAV を Mac OS X で利用するには、ユーザが能動的にスキャンをするか、定期スキャンをするか、フィルターとしてメールや Web コンテンツを取得するたびにスキャンするかという使い方になります。
これを改善してリアルタイムスキャンに近い機能を与えるのがフォルダ監視機能です。それは ClamXav の中に仕込まれている ClamXavSentry というヘルパーアプリケーションによって行われます。しかしこれにも幾つか問題点があります。
- ときどき ClamXavSentry が落ちてしまう。
ClamXavSentry が落ちているとフォルダ監視機能が無効になってしまいます。普通の商用ウィルス対策ソフトで言えばリアルタイムスキャンを無効にしている状態です。これはかなりまずい状態です。
- ファイルがゆっくり書き込まれると全部をスキャンしない。
Web からダウンロードされるものなどはサーバや回線のスピードに応じてファイルが作成されてからその内容が全て書き込まれるまでに時間がかかります。ClamXavSentry はどうやらファイルが作成されたタイミングでスキャンを始めるようです。このためスキャンが始まるまでに内容の書き込みが終わるケースはよいのですが、そうでない場合は中身全体をスキャンしません。
- スキャンし始める頃には無くなっているファイルもある。
ブラウザのキャッシュ置き場を監視対象にしているときはそういうことがよく発生します。一時ファイル置き場(/private/tmp など)も同様です。そうするとそれらはスキャンされません。
- 監視対象のサブフォルダは監視対象ではない。
果たしてこれが問題かどうかは議論が分かれるところです。私はこれを期待するのなら本当のリアルタイムスキャンが実現されるのに期待するべきだという考えですが、それは容易ではありません。監視対象のフォルダ全てでサブフォルダも監視対象にしなくても、サブフォルダも対象だとユーザが設定したフォルダくらいはやってくれてもよいですね。開発元にはサブフォルダも監視する機能を検討はしているような雰囲気はあります。
これらの問題は clamav-update プロジェクトのソフトウェアはサポートしません。それは ClamXav 固有の問題点だからです。今のところ clamav-update プロジェクトでは ClamAV に関連するソフトウェアを提供する方針です。(将来変わるかもしれません)
ですがこのブログで二つほど対策を提示/示唆してあります。
定期スキャンでフォローする
ClamXav のフォルダ監視機能などで水際でチェックしていれば安心というわけではありません。
- フォルダ監視機能やリアルタイムスキャンだけでは後から感染ファイルと判定されるようになったものを発見できない。
という理由からです。ウィルスデータベースは既に発見されたウィルスに基づいて作成されます。未知のウィルスには対応できません。また、本体が改良されて新たに発見できるようになったものもあるかもしれません。ClamXav あるいは ClamAV の直接利用による定期スキャンはこれを補うものです。(参照「ClamAV と ClamXav: 第二回 ClamAV による定期スキャンと更新」) しかしこれにも問題があります。
- スキャンに時間がかかりすぎる。
私はもう久しく ClamAV を直接利用したり ClamXav を使ったフルスキャンはしていませんが、恐らくそれをすると丸々一日程度かかってしまうでしょう。
- スキャンの CPU 利用率が高い。
長時間を要するスキャンである上に CPU の使用率が高いのです。CPU を複数積んだ Mac か Intel Mac のように Core を複数積んだ Mac でなければかなり辛いことになります。
これを緩和するのが ClamAntiVirusDaemon と ClamdOmitScan です。前者は ClamAV に付属しているウィルススキャンデーモン clamd を Mac OS X で自動で起動するためのもので、後者は ClamAV のスキャンコマンド clamscan や clamdscan の代替として使用できるスキャンコマンドで、スキャンする必要がないファイルのスキャンを省略することでスキャン時間を短縮するものです。ClamdOmitScan は clamd を利用します。
clamd を利用するのには理由があります。
clamd を管理する
ClamAV のそのウィルススキャンデーモン clamd は UNIX ドメインソケット(ローカルからの接続用)か、INET ソケット(ネットワークからの接続用)によって接続して、コマンドベースで操作が可能です。しかし次の問題があります。
- UNIX ドメインソケットで接続して操作するためにプログラムが必要。
INET ソケットならば telnet コマンドやターミナルなどを使って接続できます。しかし clamd のデフォルトは UNIX ドメインソケットのみが有効になっています。また INET ソケットは不要ならば有効にしない方がよいのです。
ClamAV に付属している clamdscan コマンドは clamd でスキャンするためのコマンドですが、それ以外のことはできません。
- clamd は簡単に終了させられてしまう。
clamd に接続できたら SHUTDOWN という clamd のコマンドを実行することができます。つまり管理者が意図していないのに終了させてしまうことができます。INET ソケットによる接続を許可しているときこれは深刻な問題です。
11 のためのプログラムも用意してあります。それは clamdsh です。これにはまだ web 上のドキュメントがないので clamav-update プロジェクトのページからダウンロードしてください。マニュアルはダウンロードしたアーカイブの中にあります。
そして 12 の問題への対応は ClamdOmitScan のドキュメントで詳しく議論しています。
後記
この他にも Mail.app で利用するとかありそうですが私は LAN のメールサーバ(Linux)で ClamAV を利用していて必要がありません。Linux のメールサーバで ClamAV を利用するための優れた手引きはたくさんあるので私がわざわざ書かなくてもよいでしょう。
このエントリは現在私が ClamXav と ClamAV を利用するために実践していることのまとめでもあります。私は Mac OS X を手元のパソコンとして使用していますが、UNIX 系 OS をメインのプラットフォームとしてきたので GUI をメインに利用する人とはかなり異なったアプローチが主流になっています。そのためにバックグランドを異にする人にとってはかなり敷居の高いものになっていると思います。
それを緩和するために丁寧に一つ一つの使い方を書くことも不可能ではありませんがそうはしませんでした。それはそうするために膨大な記述をしなければならないからです。わからないことや困っていることがあったら clamav-update のフォーラムに参加して質問したり相談したりしてください。
今の参加者は少人数なのでなんとか私が対応できています。それでも私がもう使っていない Panther ではどうなのかということなど一部対応できていません。私は利用者が相互に少しずつ扶助していけたらいいなあと思っています。開発したり保守したりドキュメントを書くのでかなり精一杯だからです。そして質問する一方になることは気にしないでほしいとも思っています。誰もが参照できる場で質問して誰かが答えてくれたら、同じことに困っている人が後からそれを見て助けになるからです。質問すること自体が人の助けになるのです。そして後から出された同じような質問に答えてあげられたらかなり素敵なことだと思います。