🕸️

Linux向けウィルス対策ソフトClamAVの使い方

2022/10/31に公開

今回はLinux向けウィルスチェックソフトの定番、ClamAVを紹介します

いきなりタイトルを否定しますが、ClamAVは別にLinux向けというわけではありません。macOSでもWindowsでも動作します。それぞれのOSのインストール方法に関しては公式ページをご確認ください。

ClamAVにLinuxのイメージが強いのは、単にWindowsにはWindows Defenderやその他商用のウィルス対策ソフトが溢れている一方で、シェアの少ないLinuxに対応しているウィルス対策ソフトそのものが少ないためと思われます。それどころか、ウィルスの絶対数自体もWindowsよりも圧倒的に少ないです。ウィルス開発もソフトウェア開発には変わりないので、わざわざシェアの少ないOS向けに開発するコストを支払いたくないというのがウィルス開発者の本音ではないかと想像します(まあ、知りませんけど)。しかし、最近ではPythonやJavaScriptなどで動作するクロスプラットホームなウィルスも増えてきています。Linuxと言えどウィルスと無縁ではいられなくなっているのが現状です。

ここではclamscanclamdscanというClamAVの基本的なスキャンコマンドの使い方やclamd.confの設定方法を説明します。

ClamAVのインストール

まずは以下のコマンドを実行してClamAVをインストールしてください。

sudo apt install -y clamav clamav-daemon libclamunrar9

インストールできたら、以下のコマンドでdaemonが起動しているか確認してください

sudo systemctl status clamav-daemon.service

起動できていれば以下のような結果が返ってきます。

● clamav-daemon.service - Clam AntiVirus userspace daemon
     Loaded: loaded (/lib/systemd/system/clamav-daemon.service; enabled; vendor preset: enabled)
    Drop-In: /etc/systemd/system/clamav-daemon.service.d
             └─extend.conf
     Active: active (running) since Fri 2022-10-28 07:00:00 JST; 7h ago
       Docs: man:clamd(8)
             man:clamd.conf(5)
             https://docs.clamav.net/
   Main PID: 1000 (clamd)
      Tasks: 2 (limit: 10000)
     Memory: 572.0M
     CGroup: /system.slice/clamav-daemon.service
             └─1068 /usr/sbin/clamd --foreground=true

テストファイルのダウンロード

実行したコマンドが正常に動作しているか確認するためにウィルスを検出できる環境を作りたいと思いますが、まさか本物のウィルスをダウンロードするわけにはいきません。

Eicarではウィルスチェックのためのテストファイルを配布しています。こちらにアクセスして、eicar.com.txteicar_com.zipなどのファイルをダウンロードしてください。

https://www.eicar.org/download-anti-malware-testfile/

以下のようにどこか適当なディレクトリを作ってまとめておくのがオススメです。

mkdir -p ~/workspace/clamav-test/tests/
mv ~/Downloads/eicar.* ~/workspace/clamav-test/tests

ClamAVでのスキャン方法

スキャンを実行するコマンドにはclamscanclamdscanがあります。名前が似ていることもあり、両者の違いに対する説明がStack Overflowなどに溢れています。簡単にまとめると以下のようになります。

比較項目 clamscan clamdscan
実行スレッド シングルスレッド マルチスレッド
ウィルスデータベースのロードタイミング 実行時 clamdコマンド実行時
スキャンオプションの設定方法 コマンドラインオプション clamd.confファイル

手元のファイルをちょっとスキャンしたいならclamscan、定期実行したり、大量のディレクトリをスキャンしたいならclamdscanが便利です。

clamscanの使い方

以下のコマンドでスキャンを実行できます。

sudo clamscan <options> <path to scan directory or file>

よく使うコマンドラインオプションは以下の通りです。

  • -r: ディレクトリを再帰的に走査します
  • -i: ウィルスに感染したファイルのみを出力します
  • -l <log file>: 結果を<log file>に出力します
  • --max-filesize=<number>: ここに指定したファイルサイズ以上のファイルをスキップします。デフォルトは25MBに設定されています。--max-filesize=100Mのように指定します
  • --max-scansize=<number>: ここに指定したファイルサイズ以上の圧縮ファイルをスキップします。--max-scansize=300Mのように指定します
  • --bell: ウィルス発見時にベルを鳴らします

ちょっとしたファイルのスキャンなら、下のように指定するのがオススメです。

sudo clamscan -r --bell -i --max-filesize=100M -l scan.log <path to directory>

clamdscanの使い方

clamdscanは実行前にclamdが実行されている必要があります。実行前にsudo systemctl status clamav-daemon.serviceを実行してdaemonが実行されていることを確認してください。

clamdscanは以下のように使用します。

sudo clamscan <options> <path to scan directory or file>

よく使うコマンドラインオプションは以下の通りです。

  • -m: マルチスレッドで実行します
  • --fdpass: ファイルへのアクセス権をclam daemonへ委譲します。clamavuserがアクセスできないファイルに対してスキャンを行いたい場合に指定します
  • -l <log file>: 結果を<log file>に出力します
  • --verbose: より詳しいログを出力します
  • --stdout: 標準出力にもログを出力します
  • --config-file=<config path>: 指定したパスの設定ファイルを読み込みます

なお、--config-fileを指定して設定ファイルを読み込ませる場合は事前にその設定ファイルを読み込ませたclamdを実行しておく必要があります。

sudo clamd -c <config path> -F

実行すると500MB近くメモリを使用しつつ、シグネチャをロードします。-Fオプションはコマンドをフォアグラウンドで実行するためのオプションです。Ctrl+Cで気軽に落とせるようになるので、設定ファイルの編集をしている時は付けておくことをオススメします。

clamd.confの書き方

clamdの設定ファイルについて、詳しくはこちらを参照してください。ここでは設定ファイルを読み込ませる上で最低限必要な設定とよく使う設定について解説します。

まず以下のコマンドでサンプルのコンフィグを生成します。

clamconf -g clamd.conf > clamd.conf

適当なエディタでclamd.confを開いたら、まずExampleを以下のようにコメントアウトします。

# Comment out or remove the line below.
# Example

さらに、LocalSocketLocalSocketModeのオプションをアンコメントします。

# path to a local socket file the daemon will listen on.
# Default: disabled
LocalSocket /tmp/clamd.socket

# Sets the permissions on the unix socket to the specified mode.
# Default: disabled
LocalSocketMode 660

これで必要最低限の設定は完了です。以下のコマンドを実行してconfigを読み込ませられるかテストします。

sudo clamd -c ./clamd.conf -F

問題が無ければ別の端末でclamdscanを実行します

sudo clamdscan --config-file=./clamd.conf -m --fdpass -l ./log/test_basic.log ./tests/

以下のような結果が得られれば成功です

--------------------------------------
/home/username/workspace/clamav-test/tests/eicar.com.txt: Win.Test.EICAR_HDB-1 FOUND
/home/username/workspace/clamav-test/tests/eicar_com.zip: Win.Test.EICAR_HDB-1 FOUND
/home/username/workspace/clamav-test/tests/eicarcom2.zip: Win.Test.EICAR_HDB-1 FOUND

----------- SCAN SUMMARY -----------
Infected files: 3
Time: 0.011 sec (0 m 0 s)
Start Date: 2022:10:31 15:53:10
End Date:   2022:10:31 15:53:10

clamd.confでよく使うオプションは以下の通りです。

  • LogFile <path to log file>: ログファイルのパスです。なおこのログは-lオプションで指定するログファイルとは独立して存在します。
  • LogFileMaxSize <number>: ログファイルの最大サイズを指定します。10M100kのようにしてサイズ指定します。0で制限を無くします。
  • LogTime <yes/no>: yesにすると、ログに時間表記が付きます
  • LogClean <yes/no>: yesにすると、ウィルスに感染していない正常なファイルのスキャン結果もログに表示します。デバッグ時に便利です。
  • LogVerbose <yes/no>: yesにすると、より詳しいログを出力します。
  • ExtendedDetectionInfo <yes/no>: yesにすると、ウィルスのサイズやハッシュなど、より詳しい情報をログに出力します。
  • MaxScanSize <number>: clamscanで言う所の--max-scansizeです。ここに指定したファイルサイズ以上の圧縮ファイルをスキップします。300Mのように指定します
  • MaxFileSize <number>: clamscanで言う所の--max-filesizeです。ここに指定したファイルサイズ以上のファイルをスキップします。100Mのように指定します
  • MaxRecursion <number>: 圧縮ファイルの中の圧縮ファイルを最大何回まで展開するかの指定です。デフォルトは17です。
  • MaxFiles <number>: 圧縮ファイルをスキャンする際のファイルの最大数です。デフォルトは10000です。
  • MaxDirectoryRecursion <number>: 再帰的にディレクトリを操作する際の最大数です。デフォルトは15です。
  • MaxThreads <number>: マルチスレッドオプションが指定された際の最大のスレッド数です。デフォルトは10です。

特にMaxThreadsはRaspberry Piや薄さと軽さに振り切ったノートパソコンなど、CPUの冷却に難があるハードウェアでスキャンを実行する際に指定することをオススメします。最大コア数の半分くらいのスレッド数を指定すると比較的安定します。

以上が基本的なClamAVの使い方です。評判が良ければウィルスが検出された際の挙動を設定するVirusEventや定期実行の設定方法などを追記していきます。

最後にこの記事を書くに当たって参考にしたサイトを載せます。

https://docs.clamav.net/

https://github.com/Cisco-Talos/clamav

https://clamav-jp.osdn.jp/jdoc/clamav.html

https://www.eicar.org/download-anti-malware-testfile/

https://ftsh.hateblo.jp/entry/20151125/1448415242

https://flageo.hatenadiary.org/entry/20120301/p1

Discussion