clamav(Clam Anti Virus)はオープンソースのアンチウイルスソフトです。
そしてLinux上でも使用出来ます。
ウイルスのほとんどはWindowsに感染するものであり、Linuxに感染するウイルスは珍しいですが、ゼロというわけではありません。
インストール
下記のコマンドでインストール出来ます。
sudo apt install clamav clamav-daemon

ウイルス定義ファイルの更新
ウイルススキャンの前に、ウイルス定義ファイルを更新しなければなりません。
ウイルス定義ファイルの手動での更新コマンドは、 ” sudo freshclam ” ですが、普通にそのままコマンドを入力すると下記のようにエラーが出ます。

そこでこのエラーを回避する必要があります。
2つのデーモン
*デ−モン:バックグラウンドで動くプログラム
clamavにはウイルススキャンを行うデーモンと、それ以外にもう一つ、定期的にウイルス定義ファイルを更新するデーモンがあります。
前者が ” clamd ” 、後者が ” clamav-freshclam ” です。
そして後者がウイルス定義ファイルの手動更新作業を結果的に妨害しています。
定義ファイルを定期的に自動更新するサービス ” clamav-freshclam ” がインストール直後から稼働していて、そこへ手動の ” freshclam ” コマンドで定義ファイルを更新しようとすると、「定期のスケジュールが決まっているのに勝手に手動で更新するな」とのエラーが出るようです。(多分)
定義ファイルの定期更新デーモン ” clamav-freshclam ” サービスの状態
ちなみに下記コマンドで、 ” clamav-freshclam ” の状態が確認出来ます。
systemctl status clamav-freshclam

4行目の ” disabled ” は次回システム起動時(つまりリブート時)に、このデーモンを起動させる設定になってるかどうかを示しています(現状は ” disabled ” なので起動しない設定です)
5行目の ” active (running) ” は、現在このデーモンは稼働している(つまりインストール直後から稼働中)
という意味です。
定義ファイル初回更新の手順
そこで、以下の作業手順でウイルス定義ファイルを初回更新します。
- 一旦自動更新サービスを止める
- ウイルス定義ファイルを手動で初回更新
- 自動更新サービスを再スタート
早く言えば一時的に自動更新サービスを止めてその隙に手動で更新してしまいます。
コマンドラインでは以下の3行を順に実行していきます。
sudo systemctl stop clamav-freshclam
sudo freshclam
sudo systemctl start clamav-freshclam

これでウイルスパターン定義ファイルの初回更新がされました。
次回からの定義ファイルの定期更新
次回からの更新を自動にしたい場合は、 ” clamav-freshclam ” デーモンの次回リブート時からの起動の設定を行っておきます。
sudo systemctrl enable clamav-freshclam
これで定期自動更新が有効となります。

定義ファイルの自動更新は、デフォルトでは1時間ごとに行われます。
ウイルススキャン実行
以下のコマンドでウイルススキャンを実行します。
clamscan -r <スキャン対象ディレクトリ>
” -r ” オプションは再帰的処理のオプションです(最も深い階層のディレクトリまで繰り返しスキャンを行います)
下の例ではホームディレクトリ ” /home/kali ” のスキャンを行なっています。


最後にサマリが表示されます。ホームディレクトリのスキャン時間は3分53秒でした。
その他のオプション
–remove
感染ファイルが見つかった場合、これを削除する。
–move=<隔離ディレクトリのパス>
感染ファイルが見つかったら、それを指定した隔離用ディレクトリに隔離する。
デーモンモードでのスキャン
” clamd ” を使用した高速スキャンです。
定義ファイルを予めメモリ上に展開しておきスキャンするのでスキャン速度が速いです。(逆に言うとこのモードでは普段からメモリをそこに食われているとも言えます)
デーモンの起動
デーモン ” clamav-daemon ” を、起動および次回リブート時期からの起動とします。
sudo systemctl enable –now clamav-daemon
次回リブート時起動の “enable ” に、 ” –now ” オプションを付けることにより直ちに起動( ” start ” と同等の動作)を付け加えています。

下記コマンドで状態を確認すると、デーモンの状態は ” enable ” , ” active ( running ) ” となっています。
systemctl status clamav-daemon

clamdによるスキャン実行
下記コマンドを実行してみると、下図のようにエラーが出ました。
clamdscan <スキャン対象ディレクトリのパス>

ファイルを開く権限の問題のようです。
色々調べた結果、このエラーは ” –fdpass ” オプションの付加で解決できました。
clamdscan –fdpass <スキャン対象ディレクトリのパス>

ホームディレクトリのスキャン時間は14秒でした。
” clamscan ” の3分53秒よりも遥かに早くスキャンできました。(約16倍)
rootが所有するファイルのスキャンは、最初に ” sudo ” を付ける必要があります。
” –fdpass ” オプションとは
下図は ” clamdscan ” のヘルプです。
下から2行目が ” –fdpass ” オプションの説明です。
” clamd ” にはスキャン対象のファイルを開く権限がありません。
その為にエラーが起こるので、その権限を予め付与しておくオプションです。

なので最初にroot権限を持った上で実行した場合はこのオプションは不要です。
また、本来ファイルを開く権限の無いところに、結果的に権限を与えてしまっているという意味での留意は必要です。
デーモンの停止
メモリが勿体無いのでデーモンを停止したい場合。
次回リブート時から初期起動させない場合かつ、今からすぐ停止する場合。
sudo systemctl disable –now clamav-daemon
clamscanとclamdscan比較まとめ
スキャン速度 | メモリ | |
clamscan | 遅い | 普段は占有していない |
clamdscan | 速い | 普段から定義ファイル分を占有 |
定期スキャンの設定
ウイルススキャンを定時に繰り返し行う設定です。
まあこれもkaliではあまり使われないでしょうけど。(24時間稼働とか普通はしないから)
デフォルトでは定期的な自動スキャンは行われませんので、以下の手順によるcronジョブの設定が必要です。
1. スキャン用スクリプトを作成
まずシェルスクリプトファイルの作成です。
例)テキストエディタ ” mousepad ” を用いて、 ” clamav_scan.sh ” という名前のシェルスクリプトファイルを作成します。
sudo mousepad /usr/local/bin/clamav_scan.sh

そのファイルの内容は以下のように記載します
#!/bin/zsh
LOGFILE=”/var/log/clamav_scan.log”
SCAN_DIR=”/home”
clamscan -r –move=/var/quarantine “$SCAN_DIR” >> “$LOGFILE”

2. 実行権限の付与
そのファイルを実行可能な状態に変更します。
sudo chmod +x /usr/local/bin/clamav_scan.sh

試しに実際にスクリプトを走らせてみます。
sudo /usr/local/bin/clamav_scan.sh

特に結果が表示されることなく、スキャンが終了しました。
ログを確認すると3分56秒でスキャン出来ています。
cat /var/log/clamav_scan.log


但し、隔離用のディレクトリ ” /var/quarantine ” を作り忘れていたので、その警告が出ています。これを作っておきます。
sudo mkdir /var/quarantine

その後のスキャンではこの警告は出なくなりました。

3. cronジョブの設定
” crontab ” は定期的にコマンド・スクリプトを実行するツールです。
その設定を変更するには、 ” crontab ” の編集を ” -e ” オプションで行います。
crontab -e
一番最初は、何のテキストエディタで編集するのかを聞いてきます。

” easiest ” だとお勧めの ” nano ” を選択しました。(2)を選択してます。
nanoエディタが開き、編集画面となります。
全ての行がコメントアウトされており、有効な設定は未だありません。

矢印キーを使用してカーソルを、空いた行まで動かします。

ここに、定時時刻と繰り返したいジョブの情報を所定の書式(後述)で記載します。

” Ctrl + O ” で、書き込むことを確認してきます。(下から3行目の表示)

” Enter ” キーを押すと、「24行目に書き込んだ」との表示(下から3行目)

” Ctrl + X ” で終了します。
これでcronの設定は終了です。
ちなみに ” nano ” のヘルプ画面(Ctrl + G )です。

cronジョブの書式
まず最初の5文字で時刻設定を行い、次にコマンド・スクリプトをフルパスで記述します。
例として下記の列を追記してみます。(この例では毎日AM3時にスキャンを実行する設定です。)
0 3 * * * /usr/local/bin/clamav_scan.sh
最初の5文字(正確にはスペースで区切られた5つの文字列)の意味は、
文字 | 意味 | 入力する数値の範囲 | その他具体的な入力例 |
1番目 | 分 | 0〜59 | */5:5分おき |
2番目 | 時 | 0〜23 | */2:2時間おき |
3番目 | 日 | 1〜31 | 1,15:毎月1日と15日 |
4番目 | 月 | 1〜12 | |
5番目 | 曜日 | 0:日曜 〜 6:土曜 |
「 0 3 * * * 」は、毎曜日毎月毎日3時0分に、という意味になります。
まあ、午前3時にkaliが立ち上がっていることなんて、普通はあまり無いですけどね。
ジョブ登録の確認
crontab -l ” で登録してあるジョブの一覧を確認出来ます。
crontab -l

最終行にジョブが登録されています。
4. ログの確認
本当に午前3時に稼働したかをログで確認します。
ログの格納場所は、 ” /var/log/syslog ” です。
具体的な確認方法は、下記でCRON関係の動作を確認します。
grep CRON /var/log/syslog
翌日、ログを確認してみました。

3行目、AM3:00:01に ” /usr/local/bin/clam_av.sh ” が実行されていることが確認できます。
アンインストール
参考までに、下記はアンインストールの仕方です。
sudo apt remove –purge clamav clamav-daemon
sudo rm -rf /var/lib/clamav
(この操作は実際の実行はしておりません。)
まとめ
Linuxに感染するウイルスは少ないけどゼロではないということで、フリーのアンチウイルスソフト ” ClamAV ” の使い方でした。
他にも、リアルタイムスキャン(on-accsess scanning)も可能のようです。
まあでも、kaliを24時間以上連続稼働させて、「だから定期的にウイルススキャンが必要である」というような使い方になることはあまり無いと思われます。
kaliは基本は攻撃(ペンテスト)特化型のディストリビューションなので。
ただ稼働が長時間になることもゼロではない(長時間に渡るブルートフォーシング時やスキャン時など)でしょう。
コメント