ClamAV
Clam AntiVirus は UNIX 用のオープンソースの (GPL) アンチウイルスツールキットです。柔軟性がありマルチスレッドで動作するデーモンやコマンドラインスキャナー、データベースを自動的に更新するツールなど、さまざまなユーティリティが含まれています。ClamAV は主として Windows デスクトップのためのファイル・メールサーバーで使われることを想定しているので、基本的には Windows のウイルスやマルウェアを検知します。
目次
インストール
ClamAV は clamav パッケージでインストールできます。さらに以下のパッケージをインストールすることもできます:
- clamtk - ClamAV の GUI フロントエンド
- アドオン
- clamtk-gnomeAUR - Nautilus ファイルマネージャでファイルやフォルダを右クリックしてコンテキストメニューからスキャンできるようにする ClamTk のプラグイン。
- thunar-sendto-clamtkAUR - Thunar でファイルやフォルダを右クリックしてスキャンできるようにするシンプルなプラグイン。
データベースの更新
次のコマンドでウイルス定義を更新します:
# freshclam
データベースのファイルは以下に保存されます:
/var/lib/clamav/daily.cvd /var/lib/clamav/main.cvd /var/lib/clamav/bytecode.cvd
ウイルス定義をアップデートするサービスは clamav-freshclam.service
です。このサービスを起動・有効化することでウイルス定義が最新になります。
デーモンの起動
サービスを起動する前にデータベースを更新しないと問題が発生して ClamAV が正しく起動できなくなります。
サービスの名前は clamav-daemon.service
です。サービスを起動する方法などはデーモンを読んでください。サービスを起動する前に freshclam
を実行してください。
ソフトウェアのテスト
ClamAV とウイルス定義が正しくインストールされているかどうか確かめるには、clamscan で EICAR テストファイル (ウイルスコードは含まれていない無害な署名です) をスキャンします。
$ curl https://www.eicar.org/download/eicar.com.txt | clamscan -
以下が出力されれば検出成功です:
stdin: Eicar-Test-Signature FOUND
上記の表示が出ない場合、トラブルシューティングを読むか、あるいは Arch フォーラム に投稿してください。
データベースや署名リポジトリの追加
ClamAV は他のリポジトリやセキュリティベンダーから提供されたデータベースや署名を使うことができます。
clamav-unofficial-sigsAUR をインストールして /etc/clamav-unofficial-sigs/user.conf
で設定するだけで MalwarePatrol, SecuriteInfo, Yara, Linux Malware Detect などの署名・データベースを追加できます。データベースについては GitHub リポジトリの説明 を読んでください。
clamav-unofficial-sigs の設定
まず /etc/clamav-unofficial-sigs/user.conf
を編集して以下の行を変えてください:
# Uncomment the following line to enable the script user_configuration_complete="yes"
そして以下のコマンドを実行して非公式の署名サービスを有効化 (マニュアルページやログローテーション、cron ジョブなどが含まれています):
# clamav-unofficial-sigs.sh --install-all
ClamAV で署名アップデートを行うために clamav-daemon
サービスは動作させ続ける必要があります。
clamav-unofficial-sigs スクリプトで使われているデータベースと /etc/clamav-unofficial-sigs
の設定ファイルで設定されているデータベースから署名が更新されます。手動でデータベースから署名を更新するには、以下のコマンドを実行:
# clamav-unofficial-sigs.sh
cron ジョブの実行を止めるには /etc/cron.d/clamav-unofficial-sigs
ファイルを削除してください。
MalwarePatrol データベース
MalwarePatrol データベースを使用したい場合 https://www.malwarepatrol.net/ でアカウントを登録してください。
/etc/clamav-unofficial-sigs/user.conf
の以下の行を変えることで有効にできます:
malwarepatrol_receipt_code="YOUR-RECEIPT-NUMBER" # enter your receipt number here malwarepatrol_product_code="8" # Use 8 if you have a Free account or 15 if you are a Premium customer. malwarepatrol_list="clamav_basic" # clamav_basic or clamav_ext malwarepatrol_free="yes" # Set to yes if you have a Free account or no if you are a Premium customer.
詳しくは https://www.malwarepatrol.net/clamav-configuration-guide/ を参照。
ウイルスのスキャン
clamscan
を使って特定のファイルやホームディレクトリ、もしくはシステム全体をスキャンすることができます:
$ clamscan myfile $ clamscan --recursive --infected /home # or -r -i $ clamscan --recursive --infected --exclude-dir='^/sys|^/dev' /
感染しているファイルを clamscan
に削除して欲しい場合はコマンドに --remove
オプションを使って下さい。隔離したい場合は --move=/dir
を使います。
clamscan
で巨大なファイルをスキャンするときは、コマンドに --max-filesize=4000M
や --max-scansize=4000M
オプションを追加してください。4000M というサイズは最大値です。必要に応じて低い値に置き換えてください。
-l path/to/file
オプションを使うと clamscan
のログがテキストファイルに出力されます。
milter を使う
Milter を使ってメールにウイルスが含まれていないか sendmail サーバーでスキャンすることができます。
/etc/clamav/clamav-milter.conf.sample
を /etc/clamav/clamav-milter.conf
にコピーして必要に応じて編集してください。例:
/etc/clamav/clamav-milter.conf
MilterSocket /run/clamav/clamav-milter.sock MilterSocketMode 660 FixStaleSocket yes User clamav PidFile /run/clamav/clamav-milter.pid TemporaryDirectory /tmp ClamdSocket unix:/var/lib/clamav/clamd.sock LogSyslog yes LogInfected Basic
/etc/systemd/system/clamav-milter.service
を作成:
/etc/systemd/system/clamav-milter.service
[Unit] Description='ClamAV Milter' After=clamd-daemon.service [Service] Type=forking ExecStart=/usr/bin/clamav-milter --config-file /etc/clamav/clamav-milter.conf [Install] WantedBy=multi-user.target
サービス clamav-milter.service
を有効化して起動してください。
オンアクセススキャン
オンアクセススキャンはファイルを読み書き実行した際にスキャンを実行する機能です。
オンアクセススキャンを使うには fanotify を有効にしてコンパイルしたカーネルが必要です (カーネル 3.8 以上)。オンアクセススキャンを有効にする前に fanotify が有効になっているか確認してください:
$ zgrep FANOTIFY /proc/config.gz
/etc/clamav/clamd.conf
を編集することでオンアクセススキャンを有効にできます:
/etc/clamav/clamd.conf
# Enable son-access scan, required clamd service running ScanOnAccess true # Set the mount point where to recursively perform the scan, # this could be every path or multiple path (one line for path) OnAccessMountPath /usr OnAccessMountPath /home/ OnAccessExcludePath /var/log/ # flag fanotify to block any events on monitored files to perform the scan OnAccessPrevention false # perform scans on newly created, moved, or renamed files OnAccessExtraScanning true # check the UID from the event of fanotify OnAccessExcludeUID 0 # action to perform when clamav detects a malicious file # it is possibile to specify ad inline command too VirusEvent /etc/clamav/detected.zsh # WARNING: clamd should run as root User root
以下のファイルを作成してください:
/etc/clamav/detected.sh
#!/bin/bash PATH=/usr/bin alert="Signature detected: $CLAM_VIRUSEVENT_VIRUSNAME in $CLAM_VIRUSEVENT_FILENAME" # Send the alert to systemd logger if exist, othewise to /var/log if [[ -z $(command -v systemd-cat) ]]; then echo "$(date) - $alert" >> /var/log/clamav/infected.log else # as "emerg", this could cause your DE to show a visual alert. Happen in Plasma. but the next visual alert is much nicer echo "$alert" | /usr/bin/systemd-cat -t clamav -p emerg fi #send an alrt to all graphical user XUSERS=($(who|awk '{print $1$NF}'|sort -u)) for XUSER in $XUSERS; do NAME=(${XUSER/(/ }) DISPLAY=${NAME[1]/)/} DBUS_ADDRESS=unix:path=/run/user/$(id -u ${NAME[0]})/bus echo "run $NAME - $DISPLAY - $DBUS_ADDRESS -" >> /tmp/testlog /usr/bin/sudo -u ${NAME[0]} DISPLAY=${DISPLAY} \ DBUS_SESSION_BUS_ADDRESS=${DBUS_ADDRESS} \ PATH=${PATH} \ /usr/bin/notify-send -i dialog-warning "clamAV" "$alert" done
AppArmor を使用している場合、clamd を root で実行できるように設定してください:
# aa-complain clamd
設定後 clamv-daemon.service
を再起動してください。
詳しくは http://blog.clamav.net/2016/03/configuring-on-access-scanning-in-clamav.html を参照。
トラブルシューティング
Error: Clamd was NOT notified
freshclam を実行した後に以下のメッセージが表示される場合:
WARNING: Clamd was NOT notified: Cannot connect to clamd through /var/lib/clamav/clamd.sock connect(): No such file or directory
ClamAV の sock ファイルを追加してください:
# touch /var/lib/clamav/clamd.sock # chown clamav:clamav /var/lib/clamav/clamd.sock
それから、/etc/clamav/clamd.conf
を編集して次の行をアンコメントしてください:
LocalSocket /var/lib/clamav/clamd.sock
ファイルを保存してデーモンを再起動してください。
Error: No supported database files found
デーモンを起動した時に次のエラーが表示される場合:
LibClamAV Error: cli_loaddb(): No supported database files found in /var/lib/clamav ERROR: Not supported data format
この問題は /etc/freshclam.conf
の DatabaseDirectory
の設定と /etc/clamd.conf
の DatabaseDirectory
の設定が一致していないことが原因です。/etc/freshclam.conf
が /var/lib/clamav
を指定しているのに、/etc/clamd.conf
(デフォルトディレクトリ) は /usr/share/clamav
など別のディレクトリを指定してしまっています。/etc/clamd.conf
を編集して DatabaseDirectory が /etc/freshclam.conf
と同じになるようにしてください。設定後 clamav は問題なく起動するはずです。
Error: Can't create temporary directory
次のエラーが UID と GID の番号を含む 'HINT' と一緒に表示される場合:
# can't create temporary directory
パーミッションを直して下さい:
# chown UID:GID /var/lib/clamav & chmod 755 /var/lib/clamav