2006年04月29日 (土)

ClamAV と ClamXav: 第一回 ClamXav の環境設定

Clam AntiVirus (ClamAV) と Mac OS X 用の GUI ClamXav は別なブログのエントリ「clamav 凄いよ」に書いたようになかなか優秀です。そこでこの二つ、特に ClamAV を Mac OS X でうまく使いこなすための色々な試みを「ClamAV と ClamXav」というシリーズでシェアしていこうと思っています。

インストールについては「clamav 凄いよ」に書いたので、今回は ClamXav の環境設定についてです。


おことわり

このシリーズではマニュアルを作るのが目的ではありません。ですから網羅的には説明しません。ClamXav や ClamAV を Mac OS X で使用するにあたって私が工夫したことを中心に、ある程度 Mac OS X を使いこなしている人でも解説があった方がよいと思われることを交えて書いていきます。基本的な使い方については他を探してください。ClamAV そのものは UNIX のアプリケーションなので少しは丁寧に書くつもりでいます。

また、対象とするのは ClamAV 0.88.1、ClamXav 1.0.1、Mac OS X 10.4.6 です。これ以外のバージョンでは当てはまらないことがあるかもしれません。

[一般]タブの[名前に以下を含むファイルは除外する]

ClamXav が利用する ClamAV は大きなファイルに対するスキャンにかなりのコストを消費してしまいます。時間がかかるだけでなくメモリの消費も激しいので大きなファイルをスキャン対象から外さないと実用的でない場合があります。また ClamAV のソースアーカイブにはテスト用のウィルスもどきが入っています。このため ClamAV のソースアーカイブをスキャンすると無害であるにもかかわらず感染ファイルとして処理されてしまいます。これらをスキャン対象から外す設定について議論します。

スキャン対象から外すファイル

ここでは次のようなファイルをスキャン対象から外すことを考えます。

ClamAV のソースアーカイブ

最新の ClamAV のソースアーカイブは clamav-0.88.1.tar.gz です。バージョンがあがるとこの 0.88.1 の部分が変わってきます。将来の(あるいは以前の)バージョンも含めて ClamAV のソースアーカイブ一般を対象外とします。

Virtual PC の仮想ディスクファイル

Virtual PC の仮想ディスクファイルは vhd という拡張子です。この拡張子を持っているファイルを対象外とします。

ディスクイメージファイル

Mac のディスクイメージファイルと一般の ISO フォーマットのファイルを対象外とします。それぞれ拡張子は dmg、iso です。

隔離フォルダのファイル

ClamXav で感染ファイルの隔離先を指定した場合そこに感染したファイルが溜まっていきます。私は感染ファイルを捨てずにウィルス対策ソフトの評価用に保存しているので隔離フォルダの中身は消しません。このような場合、スキャンによって毎回警告されてしまうので隔離フォルダ内のファイルは対象外とします。隔離フィルダは仮に /Users/.virus というフォルダだとします。

設定内容

これらを全て対象外とするには次のように設定します。

^(.*/clamav-[0-9]+(\.[0-9]+)*\.tar\.gz|.*/[^/]+\.vhd|.*/[^/]+\.dmg|.*/[^/]+\.iso|/+Users/\.virus/.*)$
コツ
正規表現であること

まずここに設定する内容は正規表現だということに注意が必要です。ファイル名をそのまま書いても正確ではありません。例えば "clamav-0.88.1.tar.gz" をそのまま書くと確かにそのファイルにもマッチしますが、clamav-0A88B1CtarDgz というわけのわからないファイルにもマッチします。ですから、".", "[", "]", "(", ")" など正規表現で特別な意味を持つ文字はバックスラッシュを前に付ける必要があります。ClamXav ではバックスラッシュは本当にバックスラッシュに見えていなければバックスラッシュではありません。円マークは本当に円マークです。ターミナルやエディタなどでバックスラッシュを書いてそれをコピーするといいでしょう。

設定のテンプレート

複数の指定を同時にするためには "|" を用います。これは正規表現で「または」を表す記号です。A または B は "A|B" と書きますが、「または」の範囲を明確にするため(そして他にも理由がありますが) "(A|B)" と書くのがよいです。

ファイル名やその一部である拡張子の指定はファイルのパス名の最後の部分の指定です。一方であるディレクトリ以下を対象外とする指定はファイルのパス名の先頭からの部分の指定です。両方を混在させるためにはファイルのパス名の全体のパターンを指定する必要があります。このため全体の最初と最後はそれぞれ "^", "$" になります。それぞれ正規表現で最初と最後を表す記号です。

以上を踏まえると、ここに書く内容のテンプレートは次のようになります。

^(指定|指定|…)$

この個々の指定に対象外とするものの指定を入れていきます。

可変の数字

ファイル名に付く可変の数字は "[0-9]" を使います。これは 0 から 9 までの文字を表します。それが一つ以上続く場合は "[0-9]+" とします。"[0-9]*" とすると数字部分がなくてもマッチしてしまいます。

繰り返し
繰り返しは "+" または "*" で表現します。"+" は一つ以上の繰り返し、"*" は 0 個以上の繰り返しです。繰り返されるものの直後に付けます。例えば clamav-0.88.1.tar.gz のバージョン番号 0.88.1 の枝番部分はないかもしれないし、一つかもしれないし、二つかもしれません。この場合枝番部分の表現 "\.[0-9]+" (ピリオッドに続いて数字が一つ以上)全体が 0 個以上繰り返されます。単純に "\.[0-9]+*" とすると間違いです。"*" の直前もやはり繰り返し記号だからです。こういうときは繰り返される部分を ( ) でくくります。その結果、"(\.[0-9]+)*" となります。
拡張子

拡張子はピリオッドに続いて用いられますが、ファイル名にピリオッド以前がないときはピリオッドより後ろは拡張子ではありません。例えば ".dmg" というファイル名だとするとそれは拡張子なしの隠しファイルです。ですから dmg という拡張子を持つファイルを指定するときには "\.dmg" と書いただけでは不十分です。その前にファイル名としての文字があることも指定しなければなりません。

ですから dmg を拡張子に持つファイルを指定するには "/[^/]+\.dmg" としなければなりません。ディレクトリの区切りを表す "/" の後ろにスラッシュ以外の文字("[^/]")が一つ以上(+)来て、ピリオッド(\.)の後に "dmg" が来るという指定です。そして、上述したように除外ディレクトリの指定と合わせるためにここにはパス名全体を指定するのですから結局 ".*/[^/]+\.dmg" という指定になります。拡張子による除外ファイルの指定はこの中の dmg の部分を変えて色々な拡張子に対応します。

ディレクトリの指定

ClamXav によるスキャンには必ず対象ディレクトリが指定されます。ディスク全体を指定するときにも "/" を指定しなければなりません。そうすると /Users/.virus というディレクトリを検査するとき ClamAV は "//Users/.virus" というパスの検査をしていると思っています。単純にスキャン対処に指定した最初のパス名に繋げてしまうのです。

このため "^/Users/\.virus/.*" という設定をしても必ずしも /Users/.virus は対象外にしてくれません。最初のスラッシュが複数あるケースがあるからです。ですから最初のスラッシュは一つ以上という指定にしなければなりません。上のテンプレートに入れる形では "/+Users/\.virus/.*" とします。

スケジュールは使わない

環境設定の [スケジュール] タブで定期的なウィルス定義ファイルの更新やスキャンを設定できますが、私は ClamXav のこの機能は使わない方がよいと考えています。その代わりに Mac OS X が元々持っているシステムレベルで定期的に処理を実行する仕組みを使います。これには幾つかの理由があります。

スキャン対象がホームディレクトリに限定される

スケジュールスキャンで設定される内容はホームディレクトリに限定されています。確かに日々新しいファイルが入ってくるのはホームディレクトリが圧倒的です。しかし影響が大きいのはシステムの領域です。例えば /Applications です。ここに悪意があるアプリケーションが紛れ込んだらなんの気なしに実行してしまう可能性がとても高いでしょう。更に /bin, /usr/bin, /sbin, /usr/sbin, /usr/local/bin などにあるコマンドが入れ替えられたらどうでしょうか。こういうところに罠を仕込むのは攻撃者の基本的な手段です。

除外対象の設定などは効かない

定期スキャンで設定されるスキャンでは ClamXav の環境設定で設定したあらゆる設定は反映されません。決まったスキャンの仕方しかしないのです。ですから隔離フォルダの中を除外するとか、Virtual PC の仮想ディスクは除外するとか、その中でもこのファイルはスキャンするなどの設定は定期スキャンに反映されないのです。

複数のユーザが使用するときは無駄が多い

その Mac を複数のユーザで利用しているのならこれは使用しない方がよいです。なぜならばそれぞれのユーザが別々にスケジュールを設定すると同時に定期スキャンが行われたり、更新の確認をしたばかりなのにまた更新の確認をしたりして無駄だからです。

次回「ClamAV と ClamXav」はこれを解決する定期スキャンとウィルス定義ファイルの更新について解説する予定です。

[フォルダ監視]タブ

この設定を使ってフォルダ監視機能を使用するのは必ずやりましょう。ClamXav の最大の利点はこの機能にあります。それ以外はなくても全然構いと言ってもよいです。

ここで問題になるのはどのフォルダを監視対象とするかです。基本は外部からのファイルを最初に置く場所です。そして変なファイルが置かれるととても困るところです。そこで次のフォルダを監視対象にすることをお薦めします。

  • デスクトップ

    ブラウザやメーラー、iChat などで受信したファイルが置かれるのは大抵の場合デスクトップです。デフォルトでそのようになっている場合が多いです。更に、USB メモリなどからファイルやディレクトリを最初にコピーする先もデスクトップが多いのではないでしょうか。

  • ホーム

    ホームディレクトリには隠しファイルで様々な設定が置かれます。例えば .profile はターミナルの画面が開かれる度にその内容が実行されます。ここが勝手に書き換えられたり悪意があるものに置き換えられたりするとかなり危険です。

  • Public, Sites

    他の人とファイルやディレクトリを共有するためのフォルダも重要です。書き込み可能にしているときは他から悪意があるファイルが置かれるかもしれませんし、自分が気付かずに迷惑なファイルを置いてしまうかもしれません。

  • ブラウザのキャッシュ置き場

    ブラウザのキャッシュ置き場も外部からのファイルが置かれる場所です。しかも悪意があるファイルが自動的に内部に取り込まれる可能性があるとても危険な場所です。

    残念なことに Safari のキャッシュ置き場は 16×16 の 256 ものディレクトリから構成されています。実際にやってみましたが 256 個のディレクトリを監視フォルダにすることはできませんでした。また ClamXav の監視機能はそこに新しいフォルダが作られた場合を除いてサブフォルダにまでは及びません。ですから Safari を使用しているときはキャッシュ置き場を対処にするのは無理です。

  • 一時ファイル置き場

    これは具体的には /private/tmp を指しています。様々なプログラムはここに一時的にファイルを作成してそして消します。ここを監視しておくと効果的な場合があります。

    例えば Thunderbird というメーラは設定により、新たに受け取ったメールを一時ファイル置き場に置いてから内部に取り込むようになります。どこにもその一時ファイル置き場がどこなのかという説明は見付けられなかったのですが、mozilla のソースファイル nsPop3Sink.cpp をざっと眺めると /private/tmp のような印象がありました。

    しかしここは監視対象にしない方がよいかもしれません。というのは ClamAV 自身が一時ファイルをここに置くからです。特殊なケースですが無限ループに陥る可能性があります。

  • /Applications, /bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bin

    /Applications は Mac OS X のアプリケーションが置かれるフォルダです。ここにあるアプリケーションが悪意があるものに置き換えられてしまったりしたら大変です。同様の理由で UNIX 系のコマンドが置かれている /bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bin も監視対象にすべきです。ただし /usr/local/bin はデフォルトでは存在しません。


Posted: 01:02    | Comment | Trackback


以下、類似エントリです。