clamavでウイルススキャン

Security
この記事は約10分で読めます。

clamav(Clam Anti Virus)はオープンソースのアンチウイルスソフトです。

そしてLinux上でも使用出来ます。

ウイルスのほとんどはWindowsに感染するものであり、Linuxに感染するウイルスは珍しいですが、ゼロというわけではありません。

インストール

下記のコマンドでインストール出来ます。

install clamav

ウイルス定義ファイルの更新

ウイルススキャンの前に、ウイルス定義ファイルを更新しなければなりません。

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

freshclam error

そこでこのエラーを回避する必要があります。

2つのデーモン

*デ−モン:バックグラウンドで動くプログラム

clamavにはウイルススキャンを行うデーモンと、それ以外にもう一つ、定期的にウイルス定義ファイルを更新するデーモンがあります。

前者が ” clamd ” 、後者が ” clamav-freshclam ” です。

そして後者がウイルス定義ファイルの手動更新作業を結果的に妨害しています。

定義ファイルを定期的に自動更新するサービス ” clamav-freshclam ” がインストール直後から稼働していて、そこへ手動の ” freshclam ” コマンドで定義ファイルを更新しようとすると、「定期のスケジュールが決まっているのに勝手に手動で更新するな」とのエラーが出るようです。(多分)

定義ファイルの定期更新デーモン ” clamav-freshclam ” サービスの状態

ちなみに下記コマンドで、 ” clamav-freshclam ” の状態が確認出来ます。

clamav-freshclam

4行目の ” disabled ” は次回システム起動時(つまりリブート時)に、このデーモンを起動させる設定になってるかどうかを示しています(現状は ” disabled ” なので起動しない設定です)

5行目の ” active (running) ” は、現在このデーモンは稼働している(つまりインストール直後から稼働中)

という意味です。

定義ファイル初回更新の手順

そこで、以下の作業手順でウイルス定義ファイルを初回更新します。

早く言えば一時的に自動更新サービスを止めてその隙に手動で更新してしまいます。

コマンドラインでは以下の3行を順に実行していきます。

freshclam

これでウイルスパターン定義ファイルの初回更新がされました。

次回からの定義ファイルの定期更新

次回からの更新を自動にしたい場合は、 ” clamav-freshclam ” デーモンの次回リブート時からの起動の設定を行っておきます。

これで定期自動更新が有効となります。

enable clamav-freshclam

定義ファイルの自動更新は、デフォルトでは1時間ごとに行われます。

ウイルススキャン実行

以下のコマンドでウイルススキャンを実行します。

” -r ” オプションは再帰的処理のオプションです(最も深い階層のディレクトリまで繰り返しスキャンを行います)

下の例ではホームディレクトリ ” /home/kali ” のスキャンを行なっています。

clamscan
clamscan summary

最後にサマリが表示されます。ホームディレクトリのスキャン時間は3分53秒でした。

その他のオプション

–remove

 感染ファイルが見つかった場合、これを削除する。

–move=<隔離ディレクトリのパス>

感染ファイルが見つかったら、それを指定した隔離用ディレクトリに隔離する。

デーモンモードでのスキャン

” clamd ” を使用した高速スキャンです。

定義ファイルを予めメモリ上に展開しておきスキャンするのでスキャン速度が速いです。(逆に言うとこのモードでは普段からメモリをそこに食われているとも言えます)

デーモンの起動

デーモン ” clamav-daemon ” を、起動および次回リブート時期からの起動とします。

次回リブート時起動の “enable ” に、 ” –now ” オプションを付けることにより直ちに起動( ” start ” と同等の動作)を付け加えています。

clamav-daemon enable

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

clamav-daemon status

clamdによるスキャン実行

下記コマンドを実行してみると、下図のようにエラーが出ました。

clamdscan <スキャン対象ディレクトリのパス>

clamdscan

ファイルを開く権限の問題のようです。

色々調べた結果、このエラーは ” –fdpass ” オプションの付加で解決できました。

clamdscan --fdpass

ホームディレクトリのスキャン時間は14秒でした。

” clamscan ” の3分53秒よりも遥かに早くスキャンできました。(約16倍)

rootが所有するファイルのスキャンは、最初に ” sudo ” を付ける必要があります。

” –fdpass ” オプションとは

下図は ” clamdscan ” のヘルプです。

下から2行目が ” –fdpass ” オプションの説明です。

” clamd ” にはスキャン対象のファイルを開く権限がありません。

その為にエラーが起こるので、その権限を予め付与しておくオプションです。

clamdscan --help

なので最初にroot権限を持った上で実行した場合はこのオプションは不要です。

また、本来ファイルを開く権限の無いところに、結果的に権限を与えてしまっているという意味での留意は必要です。

デーモンの停止

メモリが勿体無いのでデーモンを停止したい場合。

次回リブート時から初期起動させない場合かつ、今からすぐ停止する場合。

clamscanとclamdscan比較まとめ

スキャン速度メモリ
clamscan遅い普段は占有していない
clamdscan速い普段から定義ファイル分を占有

定期スキャンの設定

ウイルススキャンを定時に繰り返し行う設定です。

まあこれもkaliではあまり使われないでしょうけど。(24時間稼働とか普通はしないから)

デフォルトでは定期的な自動スキャンは行われませんので、以下の手順によるcronジョブの設定が必要です。

1. スキャン用スクリプトを作成

まずシェルスクリプトファイルの作成です。

例)テキストエディタ ” mousepad ” を用いて、 ” clamav_scan.sh ” という名前のシェルスクリプトファイルを作成します。

clamav_scan.sh

そのファイルの内容は以下のように記載します

#!/bin/zsh
LOGFILE=”/var/log/clamav_scan.log”
SCAN_DIR=”/home”
clamscan -r –move=/var/quarantine “$SCAN_DIR” >> “$LOGFILE”

shell script

2. 実行権限の付与

そのファイルを実行可能な状態に変更します。

chmod +x

試しに実際にスクリプトを走らせてみます。

script

特に結果が表示されることなく、スキャンが終了しました。

ログを確認すると3分56秒でスキャン出来ています。

scan log
scan summary

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

mkdir quarantine

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

scan log

3. cronジョブの設定

” crontab ” は定期的にコマンド・スクリプトを実行するツールです。

その設定を変更するには、 ” crontab ” の編集を ” -e ” オプションで行います。

一番最初は、何のテキストエディタで編集するのかを聞いてきます。

crontab -e

” easiest ” だとお勧めの ” nano ” を選択しました。(2)を選択してます。

nanoエディタが開き、編集画面となります。

全ての行がコメントアウトされており、有効な設定は未だありません。

crontab 1

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

crontab 2

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

crontab 3

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

crontab 4

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

crontab 5

” Ctrl + X ” で終了します。

これでcronの設定は終了です。

ちなみに ” nano ” のヘルプ画面(Ctrl + G )です。

nano help

cronジョブの書式

まず最初の5文字で時刻設定を行い、次にコマンド・スクリプトをフルパスで記述します。

例として下記の列を追記してみます。(この例では毎日AM3時にスキャンを実行する設定です。)

最初の5文字(正確にはスペースで区切られた5つの文字列)の意味は、

文字意味入力する数値の範囲その他具体的な入力例
1番目0〜59*/5:5分おき
2番目0〜23*/2:2時間おき
3番目1〜311,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関係の動作を確認します。

翌日、ログを確認してみました。

3行目、AM3:00:01に ” /usr/local/bin/clam_av.sh ” が実行されていることが確認できます。

アンインストール

参考までに、下記はアンインストールの仕方です。

(この操作は実際の実行はしておりません。)

まとめ

Linuxに感染するウイルスは少ないけどゼロではないということで、フリーのアンチウイルスソフト ” ClamAV ” の使い方でした。

他にも、リアルタイムスキャン(on-accsess scanning)も可能のようです。

まあでも、kaliを24時間以上連続稼働させて、「だから定期的にウイルススキャンが必要である」というような使い方になることはあまり無いと思われます。

kaliは基本は攻撃(ペンテスト)特化型のディストリビューションなので。

ただ稼働が長時間になることもゼロではない(長時間に渡るブルートフォーシング時やスキャン時など)でしょう。

コメント

タイトルとURLをコピーしました