2006年04月16日 (日)

clamav 凄いよ

エントリ「ウィルス対策ソフトは最新版を使うべし」のコメントで ken_taka さんから教えてもらった clamav というフリー(GPL)のウィルス対策ソフトが凄いのであります。

前置き

こういうセキュリティの話を書くときにですね、Symantec とか McAfee とか Intego とかそういうセキュリティ関連のソフトの会社の宣伝をしているような感じがして、いつも気まずかったのですよ。継続的にお金もかかるし。でも clamav という GNU GENERAL PUBLIC LICENSE で無料で使用できるウィルス対策ソフトを試してみて驚きました。こういうのはある程度効果はあっても本業でやっているところには敵わないかもと心の隅で思っていたのですが、そんな懸念は微塵もないのでした。

どんな風に凄いか

エントリ「ウィルス対策ソフトは最新版を使うべし」でやったことと全く同じことを clamav についてやってみたのです。そうしたらですねえ…

  • McAfee の製品で既に感染しているとわかっているものは全て検出して隔離した。
  • その他にも 6 つも検出して隔離した。

凄いですねえ。更に発見された 6 つのものは次のとおりです。

clamav が更に発見したもの
名称
HTML.Phishing.Auction-43 1
HTML.Phishing.Auction-75 1
Worm.Gibe.F 4

ただしですね。Worm.Gibe.F については既に問題となる添付ファイルが駆除された状態でしてね。恐らく以前使っていた Norton AntiVirus でうっかり駆除してしまったのかもしれません。僕が知らない技法が使われていないとも限りませんが多分駆除されています。McAfee の製品が検出しなくても McAfee があんぽんたんというわけではないと思います。

あ! 「僕が知らない技法」と言っても僕はウィルス技法を研究しているわけではありません。流行っているウィルス(の類い)が突く Windows の脆弱性の概要を聞けばどんなことをやるか大体想像がつくというだけです。

HTML.Phishing.Auction-43 や HTML.Phishing.Auction-75 については当りです。clamav 偉い! そしてそれを教えてくれた ken_taka さん偉い!

目についた特徴

この clamav で目についた特徴や試してみようかなと思った人が気になりそうな特徴は次のとおりです。clamav の特徴というよりもその GUI である ClamXav の特徴という感じもしますが。

  • Mac OS X 用の GUI が用意されている。しかも日本語リソース付き。
  • GUI のインストールはコピーするだけだが clamav そのものはターミナルでインストール。
  • ウィルス定義ファイルの、スケジューリングされた自動アップデート。

    最も頻繁なスケージュールは一日に一回です。

  • 監視対象のフォルダを指定して危険なファイルを常時監視。

    監視しているフォルダに直接置かれたファイルや直接置かれたフォルダの内容が自動的にスキャンされます。監視していないフォルダや監視しているフォルダのサブフォルダに置かれたものについてはスキャンしません。これは ClamXav の仕様であって clamav の仕様というわけではありません。

  • 監視対象のフォルダホームディレクトリに対するスケジューリングされたスキャン

    監視による自動スキャンは上述のとおり「抜け」がありますが、定期的にスキャンさせることでそれを補うことができます。最も頻繁なスケージュールは一日に一回です。

  • 設定により USB メモリなどの外部ストレージを自動スキャンできる。
  • clamav 自体はコマンドラインツールなのでメールサーバのウィルスフィルタなどに応用が効く。

というわけで常時監視されるフォルダの抜けが少し気になりますが、インターネットや USB メモリなどの外からファイルを置く可能性のあるところ(デスクトップやブラウザのキャッシュディレクトリなど)、変なものが置かれては絶対に困るところ(ホームなど)を入れておくとよいでしょう。

インストールメモ

ここまで読んで試してみたくなった人のために Mac OS X 10.4.6 (Tiger) でのインストールのメモを書いておきます。

メモの状況

このメモを取ったときの状況は次のとおりです。

OS
Mac OS X 10.4.6 (Tiger)
インストール対象
clamav-0.88.1 と ClamXav 1.01
必要なもの
Mac OS X の開発環境である Developper's Tools
手順

インストール手順は次のようになります。

  1. clamav-0.88.1 をダウンロードして展開する。
  2. 設定ファイルを修正する。

    展開したディレクトリ内の etc/freshclam.conf というファイルをテキストエディタで開いて次の修正を行う。

    • "#MaxAttempts 5" と書いてある行を "MaxAttempts 3" と書き換える。
    • "#Checks 24" と書いてある行を "Checkes 12" と書き換える。

    ClamXav のインストール解説のページには DatabaseMirror database.clamav.net にコメントが付いていたら外すようにという主旨のことが書いてありますが、もともと外れているので clamav-0.88.1 では気にする必要がありません。また、上記書き換えの二つもデフォルト値にするだけなので必要ないような気がします。

  3. clamav-0.88.1 をビルドする。

    ターミナルで展開したディレクトリに移動してから次を行う。

    ./configure --prefix=/usr/local/clamXav
    make
    sudo make install
  4. インストールしたものの権限などを変更する。

    まずターミナルで

    sudo bash

    とやって root 権限で操作するモードに移行します。root 権限というのは OS そのものの破壊も可能ななんでもできる権限です。とても危険なので十二分に注意してやってください。そして次を全部その順序で行います。

    chown -R root /usr/local/clamXav
    chgrp -R admin /usr/local/clamXav
    chmod -R 664 /usr/local/clamXav/etc/freshclam.conf
    chown clamav /usr/local/clamXav/bin/freshclam
    chmod u+s /usr/local/clamXav/bin/freshclam
    touch /usr/local/clamXav/share/clamav/freshclam.log
    chmod 664 /usr/local/clamXav/share/clamav/freshclam.log
    chown -R clamav /usr/local/clamXav/share/clamav
    chgrp -R clamav /usr/local/clamXav/share/clamav
    chmod -R g+w /usr/local/clamXav/share/clamav
    chmod -R u+w /usr/local/clamXav/share/clamav

    ターミナルにコピペするとよいでしょう。最後にちゃんと改行を付けることを忘れないでください。終わったらターミナルを必ず終了させましょう。root 権限の操作が可能な状態ですからそのまま変なことをするととても危険です。

    ここの操作は一部オリジナルから変えてあります。別ブログのエントリ「ClamXav における freshclam に suid パーミッションのセキュリティ問題」に書いた問題を回避するためです。

  5. clamav ユーザの情報を修正する。

    /Applications/Utilities/ にある NetInfo マネージャを使って /users/clamav の中の shell という属性の値を /sbin/nologin に変更します。Tiger オリジナルの値は /bin/tcsh ですが、ログインしないユーザに使える shell を設定しておくのは危険なので変えてしまいましょう。

    この部分は ClamXav のインストールの説明には root 権限で大量の niutil コマンドを使ってやるように書かれていますが、実際に変更する部分は一つだけなので NetInfo マネージャを使って GUI で安心してやるのがよいと考えました。

  6. ClamXav をダウンロードして、dmg ファイルをマウントし ClamXav を /Applications/ にコピーする。
  7. ClamXav の環境設定を行う。

    [環境設定] ボタンでやっても構いませんし、ClamXav メニューコマンド [ClamXav]-[環境設定...] でやっても構いません。僕は以下を設定しました。

    [一般] タブ

    次のやりました。

    • [スキャンの結果を記録する] にチェックを入れる。
    • [更新の結果を記録する] にチェックを入れる。
    • [感染ファイルの隔離先] にチェックを入れ、隔離先のフォルダを選択する。
    • [ウィルス発見時に警告音を鳴らす] にチェックを入れる。
    [インターネット] タブ

    次のやりました。

    • [ClamXav のアップデートを確認する] にチェックを入れる。
    • [ClamAV エンジンのアップデートを確認する] にチェックを入れる。
    • [ウィルス定義を更新する] にチェックを入れる。
    [スケジュール] タブ

    スキャンも更新も毎日にし、スキャンは更新の 15 分後に設定する。そして [スケジュールを保存する] ボタンを押す。

    [フォルダ監視] タブ

    ホームとデスクトップは必ず入れましょう。あと、使用しているブラウザのキャッシュファイルが置かれる場所も入れておくのがお薦めです。ブラウザで「名前を付けて保存」をすることがある人は保存先にするディレクトリも入れておくべきです。iChat のダウンロードフォルダなどもです。とにかく外からのファイルやフォルダを置く場所皆です。

    そして [ログイン時に ClamXav Sentry を起動する] にチェックを入れ [設定を保存し ClamXav Sentry を起動] ボタンを押します。

    この環境設定をする前は [ウィルス定義を更新] ボタンを押してもエラーが発生していましたが、環境設定をしたら出なくなりました。

追記

ClamAV (ClamXav のエンジン) のインストール

ClamXav の dmg ファイルの中に install_engine.command というのがありました。それによると ClamXav のリソースの中に clamav のパッケージも入っています。僕自身は上述のとおりマニュアルでインストール&セットアップしましたが、ClamXav の dmg ファイルをダブルクリックして ClamXav ディスクをマウントした状態で、そのディスクの中の Document & Extras/install_engine.command というファイルをダブルクリックすればお任せでインストールできるようです。これからインストールしてみようという方はそれでやってみてください。しかしながらこれは現時点では推奨しません。なぜならば別ブログのエントリ「ClamXav における freshclam に suid パーミッションのセキュリティ問題」に書いた問題があるからです。更にエントリ「ClamAV をソースからビルドした人は GMP をインストールしてからもう一度」に書いたように安全機能が働くようにビルドされているかどうかも未確認です。

その install_engine.command は ClamXav のリソースの中にある clamav のインストールパッケージをオープン(Finder でのダブルクリックと同じ)するコマンドです。その clamav のインストールパッケージの内容を調べてみたところ、インストール手順 4 に書いた権限の変更などが既に行われています。Mac OS X に予めセットされている clamav という名前のユーザのログインシェルを変更する手順が入っているかどうかはわかりませんが、これは行わなくても動作に影響しないと思います。

ClamXav の監視フォルダ設定

このエントリを書いた時点で気付いていたことですが、ClamXav の監視フォルダ設定には何かバグがあるようです。設定後 ClamXav を再起動したら、環境設定を開けなくなってしまいます。Mac OS X 自体を再起動しても同じです。

これは ClamXav のプリファレンスファイルがおかしなことになることが原因のようです。ホームの下の Library/Preferences/ にある uk.co.markallan.clamxav.plist というファイルを消すと再び環境設定ができるようになりますが、設定したことが全部忘れられてしまいます。その上再び同じ症状に陥ります。

解決手段としては Developper's Tools に付属している Property List Editor (/Developer/Applications/Utilities/ にある) を使って uk.co.markallan.clamxav.plist を開き、監視フォルダを使いするなどの編集をして(編集が必要かどうかはわかりません)保存すると解決します。この操作後環境設定は自由に開けます。監視フォルダを追加したりしても大丈夫です。

Intel Mac での clamav (ClamXav のエンジン) のインストール

上述の「ClamAV (ClamXav のエンジン) のインストール」の方法では Intel Mac 上では ClamAV をうまくインストールできないかもしれません。インストールパッケージには /usr/local/clamXav にコピーするファイルのイメージが入っています。これは従来の Mac OS X 上でビルドされたものだと思います。

Intel Mac 上で従来の Mac 向けのソフトを実行するのは昔の Fat Binary のように二つの実行ファイルをアプリケーションに付けているだけだと聞いています。Intel Mac の CPU アーキテクチャを考えればバイナリの実行ファイル自体に互換性はありません。ですから従来の Mac OS X 上でビルドされた ClamAV は Intel Mac 上で動作しないはずと思っています。

もし Intel Mac で「ClamAV (ClamXav のエンジン) のインストール」に書いた方法で駄目だったら元々このエントリに書いたとおり ClamAV 自体はターミナルを使ってビルドしてインストールしてください。

大きいファイルのスキャン

ClamXav の画面にも書いてありますが大きいファイルのスキャンには時間がかかります。時間がかかるだけでなくメモリーをかなり消費するので Mac OS X 自体の動作が鈍くなります。メモリーの圧迫に弱いアプリケーション(例えば Firefox)などは反応しなくなる恐れもあります。

例えば Virtual PC のゲスト OS のディスクそのもののファイル(拡張子は vhd)は覿面です。僕が使用している Virtual PC では Windows XP SP2 Home Edition が入っているのですが、その vhd ファイルは 15GB あります。このスキャンがあんまり酷いので BaseDrive.vhd はスキャン対象から外しました。

スキャン対象から外す設定

というわけで Virtual PC のディスクファイルはスキャン対象外にしましたが、ClamAV のアーカイブファイルも対象外にしました。というのはこのアーカイブにはテスト用のファイルが含まれていて、それが ClamXav によるスキャン時に引っ掛かって、毎回アーカイブが隔離されてしまうからです。これは ClamXav の環境設定の [一般] タブの下の方にある [名前に以下を含むファイルは除外する] 欄に書くことで行います。

この欄には正規表現が使えるという記述はドキュメントにありますが、複数の例外をどうやって記述するかの説明は見付けられませんでした。そこで複数の例外を設定する方法について書いておきます。

これは "|" で繋ぐことで行います。例えば ClamAV のアーカイブファイル一般を例外にするには "clamav-[0-9]+(\.[0-9]+)*\.tar\.gz" と書きます。また vhd ファイル一般を例外にするには ".*\.vhd" と書きます。その両方を例外にするには "clamav-[0-9]+(\.[0-9]+)*\.tar\.gz|.*\.vhd" と書きます。"|" の前後にスペースを入れてはいけません。

上の例は正規表現をばっちり使ってしまいました。正規表現を覚えるのが面倒な人はファイル名をそのまま書けばよいでしょう。例えば clamav-0.88.1.tar.gz と BaseDrive.vhd を例外にするには "clamav-0.88.1.tar.gz|BaseDrive.vhd" とします(多分)。ただし、実際にはここは正規表現として解釈されると思うので BaseDrive.vhd だけでなく BaseDrive_vhd というファイルも例外にされてしまうと思います。".", "[", "]", "(", ")" など正規表現で特別な意味を持つ文字はバックスラッシュを前に付けるとよいでしょう。

そして ClamXav 上ではバックスラッシュと円マークは区別されます。バックスラッシュを書くときは JEdit などでバックスラッシュを書いてそれをコピペしてください。ClamXav 上で円マークで表示されたものは本当に円マークです。

スケージュールスキャンの内容

なんか追記の方が長くなってきたような気がしますが気のせいでしょう。

ClamXav の環境設定の [スケジュール] タブで設定する定期的なスキャンは ClamXav の環境設定で設定した内容と異なるスキャンが実行されます。わかっているもので異なる点は次のとおりです。

  • [一般] タブの [感染ファイルの取り扱い] で隔離フォルダに移動するようにしていても移動されない。
  • [一般] タブの [名前に次を含むファイルは除外] で設定した例外ファイルのパターンは反映されない。
  • スキャン対象はホームディレクトリとその配下。
  • ファイル名の最後が "sit", "sitx", "dmg" で終わるファイルは対象外。

    しかも拡張子ではなく文字列として最後が sit だったりすると対象外です。ピリオッドがないとだめですよね。

スケジュールで実行されるスキャンはターミナルで crontab -l とやるとコマンドラインを見ることができます。制御するには crontab コマンドを使って自分でコマンドラインを書き直す必要があります。これを行うと ClamXav の環境設定でスケジュールが読み取れなくなります。

ClamXavSentry が落ちることへの対策

ClamXav のフォルダ監視機能を担う ClamXavSentry がしばしば落ちてしまいます。これを監視して落ちたら再び ClamXavSentry を起動してくれる ClamXavSentryKeeper を作成して公開しました。

以後、ClamAV や ClamXav に関することは上のリンク先のブログに書いて行くのでそちらもよろしくお願いします。

ビルド前に GMP ライブラリをインストール

Mac OS X で ClamAV を完全にビルドするには GMP ライブラリという大きな整数を扱うための GNU のライブラリを予めインストールする必要があります。エントリ「ClamAV をソースからビルドした人は GMP をインストールしてからもう一度」に、その手順を書いたので必ず実施してから ClamAV をビルドしてください。

  Comment   Trackback

当ブログ内の類似エントリ
JavaScript が有効でないと表示できません。
一年前のエントリ