動作する環境の限られたClamukoによるリアルタイムスキャン
このページではClam AntiVirusの一機能であるClamukoでリアルタイムスキャンをする方法を解説します。
かなり癖のある機能で、動作させるには一般の環境構築とは異なる、特殊な操作が必要になります。
Clamukoによるリアルタイムスキャンの前提条件
1.「Clam AntiVirus」がインストールされ適切に設定されている
インストール方法は「無料で使えるLinuxのアンチウイルスソフト「Clam AntiVirus」の導入と設定の解説」を参照してください。
2.「Capability Module」がモジュール化され読み込まれていること
モジュール化の方法は「CentOSでカーネルの再構築を行いカーネルモジュールを有効にする方法」を参照してください。
Clamukoを導入する際の注意 さらに注意点として、これから解説する方法は「32bitのCentOS5.8でカーネルが2.6.17、Clam AntiVirus 9.7」という環境で動作テストしています。 「64bitのCentOS 5.9でカーネルは2.6.18」という環境で再現しようとしたところ、様々なエラーが出て結局導入は断念しました。断念の顛末は「こちら」。 Clam AntiVirusのバージョン0.98からはDazukoを利用したリアルタイムスキャンは廃止されました。他方Linuxでは、Capability Moduleのファイルアクセス通知機能を廃止し、Fanotifyに移行しています。 ウイルススキャンという更新頻度が重要な分野ですが、基幹部の開発が終了しているため、上記のバグが解消される見込みは皆無です。 そのため、記事を投稿しておいて恐縮ですが、古い環境にリアルタイムスキャンを導入したいという特殊な環境以外はおすすめしません。 これからウイルス対策ソフトでリアルタイムスキャンを利用したいという方は、将来性も考えてFanotifyがサポートされるカーネル2.6.37以降を導入することをお勧めします。
Dazukoとは
前置きが長くなって失礼しました。
それではDazukoについて概要を把握しておきます。
日経BPさんの解説が端的で解りやすいので引用させていただきます。
アプリケーションのファイルアクセスを監視する仮想的なデバイスドライバーである。独H+BEDV Datentechnik GmbH社(現在の社名はAvira GmbH社)が同社のウイルス対策ソフト「AntiVir」向けに開発した。現在はオープンソースプロジェクトのコミュニティによって開発が進められている。名前の由来は、ドイツ語で「ファイルアクセスコントロール」を意味する「Dateizugriffskontrolle」からきている。バージョン番号が2.xまでを「Dazuko」、同 3.x以降を「DazukoFS」と呼ぶ。
「Dazukoとは」より
補足するならDazukoFSモジュールもFanotifyの登場により開発は停止しています。
Dazukoの導入
導入方法は公式のInstallation_HOWTO_(Dazuko_2.x)で解説されています。
この解説に沿って導入作業を進めていきます。
Dazukoのダウンロード
まず「本家のダウンロードページ」ヘアクセスします。
今回使うのは下のDazuko 2.3.9です。リンクをコピーしてwgetでダウンロードします。
# su - ←rootユーザーでログイン、ホームディレクトリに移動 # wget http://dazuko.dnsalias.org/files/dazuko-2.3.9.tar.gz # tar -xvf dazuko-2.3.9.tar.gz ←解凍
コンパイル
# cd dazuko-2.3.9 ←作業ディレクトリに移動 # ./configure ←makeファイルの作成 (省略) ======================= Configuration summary ======================= module events = ON_OPEN ON_EXEC devfs support = no rsbac support = no stacking support = yes path resolution = registered daemon context module debug = no library 1.x compatibility = yes # make ←コンパイル
インストールのテスト
インストールのテストを行います。
# make test
/sbin/modprobe commoncap
/sbin/insmod ./dazuko.ko
/sbin/rmmod dazuko
--> test successful :)
「test successful」と出力されれば正しくmakeファイルが作成されています。
モジュールの読み込みテスト
続いてdazukoの動作テストのため一旦モジュールを読み込みます。
(解説には/sbin/insmod dazuko.koとありましたが、以下の方法で動作しました。)
# /sbin/insmod ./dazuko.ko # cat /proc/modules ←正しく読み込めたか調べる commoncap 7296 1 dazuko, Live 0xe081c000
以上のように「dazuko」と表示されれば正しく読み込めています。他にもコマンドで「cat /proc/devices」としても表示できます。
モジュールの動作テスト
正しく読み込めることが分かったら、今度は動作テストです。
# cd example_c # make # ./example /home /usr/home
すると「/home」ディレクトリの監視を開始します。
そこで別の端末(Tera Termなど)を起動して「/home」ディレクトリ内のファイルを開いたり編集してみます。
# vi /home/test ←別端末で作成
すると監視している端末では以下のように表示されます。
OPEN uid:0 pid:3796 mode:33152 flags:1 file_uid:0 file_gid:0 file_mode:33152 file_device:0 file_size:0 file:/home/.test.swp OPEN uid:0 pid:3796 mode:33152 flags:1 file_uid:0 file_gid:0 file_mode:33152 file_device:0 file_size:0 file:/home/.test.swpx OPEN uid:0 pid:3796 mode:33152 flags:1 file_uid:0 file_gid:0 file_mode:33152 file_device:0 file_size:0 file:/home/.test.swp OPEN uid:0 pid:3796 mode:33206 flags:1 file_uid:0 file_gid:0 file_mode:33206 file_device:0 file_size:0 file:/home/test
これらの表示がされれば正しくファイルの動作を監視できています。
Dazukoインストール
無事に動作テストが成功したので、このままインストールを行います。
後でアンインストールやらファイル管理が楽なようにpacoを使ってインストールします。
# cd /root/dazuko-2.3.9 # paco -D make install
pacoの使い方はまた別の機会に紹介します。インストールしないで実行する場合はディレクトリを移動して「make install」とするだけでインストールできます。
せっかくpacoでインストールしたので、どんなファイルがインストールされたのかチェックしてみます。
# paco -f dazuko-2.3.9
dazuko-2.3.9:
/lib/modules/2.6.17/extra/dazuko.ko
/lib/modules/2.6.17/modules.alias
/lib/modules/2.6.17/modules.ccwmap
/lib/modules/2.6.17/modules.dep
/lib/modules/2.6.17/modules.ieee1394map
/lib/modules/2.6.17/modules.inputmap
/lib/modules/2.6.17/modules.isapnpmap
/lib/modules/2.6.17/modules.ofmap
/lib/modules/2.6.17/modules.pcimap
/lib/modules/2.6.17/modules.seriomap
/lib/modules/2.6.17/modules.symbols
/lib/modules/2.6.17/modules.usbmap
以上でDazukoのインストールは完了です。
Clamukoを有効にする
環境が整ったのでClam AntiVirusの設定ファイルを編集してClamukoを有効にします。
# vi /etc/clamd.conf
500行目あたりにある以下のセクションあたりから編集します。
## ## Clamuko settings ##
clamukoによるリアルタイムスキャンを有効にする
#ClamukoScanOnAccess yes ↓ ClamukoScanOnAccess yes
スキャンのタイミングを指定
上から、開くとき、閉じるとき、実行中という指定。
#ClamukoScanOnOpen yes #ClamukoScanOnClose yes #ClamukoScanOnExec yes ↓ ClamukoScanOnOpen yes ClamukoScanOnClose yes ClamukoScanOnExec yes
スキャンするディレクトリの指定
ひとまず「/home」だけ有効にしておく。全てのファイル操作を監視する関係上「/proc」などを指定すると重くなるので注意。
#ClamukoIncludePath /home ↓ ClamukoIncludePath /home
再起動して設定を有効に。
# /etc/rc.d/init.d/clamd restart
モジュールの読み込み順序の変更
Clamukoを正しく動作させるにはdazukoモジュールを読み込んでから、clamdを起動する必要があります。
clamdを自動起動の状態にしておくと、OSが立ち上がった時には起動しているため、一旦clamdを停止してからdazukoモジュールを読み込み、再度起動する必要があるため、2度手間になります。
そこで独自設定用スクリプトである「/etc/rc.local」に順序良く起動するように指定をします。
clamdの自動起動を解除
# chkconfig clamd off
続いて「rc.local」の編集
最終行に追記します。
# vi /etc/rc.local
# dazukoの自動ロード
modprobe dazuko
# clamdの自動ロード
/etc/rc.d/init.d/clamd start
これでサーバの再起動を行えば自動でClamukoが有効になります。
正しく動作していればウイルス発見時にログファイル「/var/log/messages」に以下のように出力されます。
「/home」ディレクトリにテストウイルスであるeicar.comをダウンロードしてファイルを開こうとした際のエラー
Feb 12 21:15:10 linux clamd[2745]: Clamuko: /home/eicar.com: Eicar-Test-Signature FOUND
またClamukoが有効な状態でウイルスファイルを開こうとするとroot権限であっても「permission denied」と表示されアクセスを拒否されます。
Dazukoを利用したClamukoのリアルタイムスキャンは、セキュリティモジュールがまだ黎明期だった頃に開発されました。しかもファイルアクセスや権限の操作は非常にデリケートな分野のため、とにかく競合やバグが多く、利用できる環境も限られています。
動作しなかったら深追いをせず、別の方法を探すことをお勧めします。