ClamAVはLinux・*BSD・Mac OS Xなどの環境で利用できる、GPLで配布されているアンチウイルスソフトウェアです。今回はUbuntu上でClamAVを使いこなすレシピをお届けします。
ClamAVの導入
一般的なデスクトップOSであるWindowsでは、アンチウイルスソフトウェアが欠かせません。これはWindowsがきわめて広く利用されており[1] 、マルウェア[2] 作者にとって大きなメリットがあるためです。幸いにして(?)Linuxはマイナーですし、Windowsに比べるとマルウェアの対象となることは遙かに少ないのですが、それでもマルウェアへの対処を行う必要があります。たとえばWineを使う場合[3] や、Windowsと並行してデスクトップとして利用している場合などはUbuntu側にもWindows由来のファイルが保存される可能性がありますし、メールの添付ファイルとしてマルウェアが流入することもあります。
ほとんどのマルウェアはWindows向けですからUbuntu環境に感染することはできませんから、Ubuntu環境が被害を受けることはありませんが、最低限Ubuntuからマルウェアであるか否かの確認を行いたいケースが考えられます。
[1] Windowsの『悲惨な』状態を説明するのに「Windowsの出来が悪い」「 Microsoftのプログラム能力が低い」といった理論を見かけることがありますが、少なくとも現在のWindowsはLinuxと同程度にはセキュアに実装されたOSです。もしLinuxのシェアやユーザ層がWindowsと同じだとしたら、Linuxも同じように『悲惨な』状態になっていると考えられます。
インストールとGUI
UbuntuでClamAVを利用する場合は、次の操作を行うか、Synapticから該当するパッケージをインストールしてください。
$ sudo apt-get install clamav clamtk clamav-daemon arj unzoo lha
ClamAVは本来コマンドラインから利用するツールですが、clamtkというGUIフロントエンドを用いて操作するのが一般的です。[ アプリケーション] →[ システムツール] →[ Virus Scanner]とたどって起動してください。一般的には、[ File] →[ Quick Home Scan]を用いて自分のホームディレクトリのスキャンを行ったり、[ Scan a File]で疑わしいファイルを確認したり、といった操作を行うことになります。
図1 clamtkの動作画面
ですが、これだけではあまり使い勝手が良くないので、日常的に利用したい場合、KDE向けパッケージであるKlamAVを用いるのが良いでしょう。次のようにインストールするか、Synapticからパッケージを導入してください。
$ sudo apt-get install klamav
KlamAVはKDE環境向けのため、周辺ライブラリがインストールされる必要があるので、十分なディスク容量がない場合は別のソフトウェアを利用するべきです(apt-getやSynapticからインストールした場合は、必要なパッケージが自動的に導入されています) 。
図2 KlamAV
ただし、残念ながらUbuntu(GNOME)環境ではメニューに表示されません。ターミナルや、[ Alt]+[F2]で起動する「アプリケーションの実行」からklamavと入力して起動してください。恒常的に利用することを決めたのならランチャを追加し、そこから起動するのが良いでしょう。
また、KlamAVには「スケジュールされた」スキャンを設定する機能がついています。この機能は指定した時刻にKlamAVを自動実行し、マルウェア検査を行うためのものです。
ただし、ユーザのcrontabへ追加する動作の関係で、初回はスケジュールを追加しても、GUI上は何も変化しません(裏側ではきちんと設定が追加されていますので、何度もボタンをクリックするとその回数だけスケジュールが登録されてしまうので注意してください) 。この問題は二度目以降のスケジュール設定では問題ありませんので、一度スケジュールを追加したらKlamAVを終了し、再起動して確認してみてください。
なお、日本語環境ではスケジュールのコメントが文字化けしてしまいますので、スクリーンショットでは英語表示にしていますが、文字化けしたままでも動作には問題ありません。
図3 スケジュールスキャン
他にもClamAVのGUIフロントエンドは存在していますが、それらに比べるとKlamAVの完成度は群を抜いています。特にこだわりがなければKlamAV経由で利用するのが便利です(もちろん、KDEを日常的に使っていない場合は、スケジュールスキャンを「KDEにログインしたとき」に設定してはいけません) 。
リアルタイムスキャン
Windows向けのアンチウイルスソフトウェアには、「 リアルタイムでファイルアクセスを監視し、マルウェアの構成ファイルを開かせない・実行させない」といった、リアルタイムスキャン機能が搭載されています。しかしLinuxでは、こうしたことを実現するための周辺環境が整っていません[4] 。
代替として、fuseを用いて「自動的にチェックされるディレクトリ」を作成するclamfsを用いることで、擬似的なリアルタイムスキャン機能を実現することができます。ただしこれは、Windows環境で実現されているリアルタイムスキャンとは、幾つかの点で異なります。
最大の違いは、「 すべてのファイルアクセスを制限できるわけではなく、『 安全なディレクトリ』を作ることができるだけである」ということです。
[4] Windows環境でアンチウイルスソフトウェアを用いる場合、ファイルシステムフィルタドライバ を用い、ファイルへの入出力を「途中で奪って」リアルタイムでウイルス検査を行っています。これはOSのドライバ構造が、もともと複数のドライバを連携させて動作することを意識しているためです(Windows Driver Model) 。Linuxでは古典的にはこうした仕組みはありませんでしたが、現在ではLSMやdazuko などのインターフェースとしてファイルシステムフィルタドライバが実装されようとしています。しかし、LSMを用いたファイルシステムフィルタドライバの実装はほとんどありませんし、dazukoは現状ではまだLinux Kernelのメインラインに取り込まれておらず、利用時には自分でコンパイル・セットアップを行う必要があり、気軽に使える状態ではありません。
次のように操作してインストールを行います。
$ sudo apt-get install clamfs
clamfsの利用には少々設定が必要になります。以下のように操作することで、/tmpをClamAV越しに読み込む、/clamfs/tmpを作成することができます。
基本的には設定ファイルや動作用ディレクトリの作成だけですが、今回は/etc/fuse.confを修正し、グループに書き込み権限があればfuseの動作を許すように設定変更を行っています(sudo sed -i "s/^#user_allow_other/user_allow_other/" /etc/fuse.conf) 。
$ sudo mkdir /etc/clamfs
$ sudo cp /usr/share/doc/clamfs/clamfs-sample.xml /etc/clamfs/clamfs.xml
$ sudo mkdir -p /clamfs/tmp
$ sudo chgrp admin /clamfs/tmp
$ sudo chmod g+w /clamfs/tmp
$ sudo sed -i "s/^#user_allow_other/user_allow_other/" /etc/fuse.conf
$ clamfs /etc/clamfs/clamfs.xml
正常に動作しているかテストしてみましょう。この種のアンチウイルスの動作テストのために、テストファイルを準備します(これらは無害なファイルですが、テスト専用に、「 ウイルスを見つけた場合と同じように振る舞う」と決められたファイルです) 。以下のコマンドを用いるか、Synaticからclamav-testfilesをインストールしてください。
$ sudo apt-get install clamav-testfiles
テスト用ファイルは/usr/share/clamav-testfiles/以下に配置されます。ではclamfsのテストをしてみましょう。
$ cp /usr/share/clamav-testfiles/clam.zip /clamfs/tmp
※ 書き込みは制限されないので正常に終了します。
$ unzip /clamfs/tmp/clam.zip
error: cannot open zipfile [ clam.zip ]
Operation not permitted
unzip: cannot find or open clam.zip, clam.zip.zip or clam.zip.ZIP.
※ 読み取りはclamfsによって自動チェックされ、permission deniedが返っている。
$ cat /var/log/messages| grep FOUND
Aug 3 01:27:27 antares clamfs: (unzip:17455) (hito:1000) /tmp/clam.zip: ClamAV-Test-File FOUND
※ このとき、/var/log/messagesにはclamfsからFOUNDメッセージが出力されている。
このように、clamfsで保護された領域にあるファイルは、アクセス時に自動的にClamAVによってチェックされます。こうして作成された/clamfs/tmpが『安全なディレクトリ』です。
ここではテスト用ファイルを用いていますが、当然実際のマルウェアが含まれていた場合、それらを検知します。外部へファイルを受け渡す場合、一度/tmpへコピーしてから行う、といった操作をすることで、ファイルがClamAVで検査された状態を保つことができます。
また、例では/clamfs/tmpで/tmpを扱うようにしていますが、必要に応じて異なるディレクトリをスキャン対象にすると良いでしょう。注意することは、「 保護されるのは、あくまで/clamfs/tmp以下にマウントされたディレクトリ」だけであることです。この例であれば、/tmpと/clamfs/tmpにあるファイルは同じものが見えますが、ClamAVによって保護されるのは/clamfs/tmp以下だけです。直接/tmpにアクセスしてしまうと、全く保護されません。
また、ログイン時点からclamfsを有効にするには、セッションに「clamfs /etc/clamfs/clamfs.xml」を登録します。セッションの使い方は第15回を参照してください 。