Ubuntu Weekly Recipe

第30回 アンチウイルスソフトウェアClamAVの活用(1):ClamAV/clamtk, klamav/clamfs

この記事を読むのに必要な時間:およそ 3 分

リアルタイムスキャン

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回を参照してください

著者プロフィール

吉田史(よしだふみひと)

Ubuntu Japanese Team Member株式会社創夢所属。システム管理を中心にWindows/PC Unixを併用している。Ubuntu Japanese Teamではパッケージサーバの管理や翻訳などの作業を担当。