kusanagi antivirus でマルウェア・ウイルス対策を行う

片倉洋一

KUSANAGI Security Edition には KUSANAGI 9 にはないコマンドがいくつかあります。
その中の1つである、「kusanagi antivirus」コマンドを今回は紹介いたします。

kusanagi antivirus on を実行して定期スキャンを有効化する

kusanagi antivirus on を実行することで定期的なマルウェア・ウイルスのスキャンが有効化されます。

# kusanagi antivirus on
antivirus completed.
#

有効化することで、1日1回定期的にマルウェア・ウイルスが実行されるようになります。
デフォルトの実行時間は深夜0時7分です。
この実行時間は、 --daily オプションにより変更することが可能です。

# kusanagi antivirus on --daily 15:15
antivirus completed.
#

例では日中の15時15分に設定しています。
時刻の HH:MM の24時間形式で指定します( 00:00 ~ 23:59 の範囲で指定)。

定期スキャンによるマルウェア・ウイルスのスキャン対象ディレクトリは以下になります。

  • /tmp
  • /var/tmp
  • /dev/shm
  • 各プロファイルのWordPressのwp-content/uploads ※

※:各プロファイルのWordPressのwp-content/uploads は kusanagi antivirus config コマンド(後述)で変更できます。

KUSANAGI Security Edition の起動時には定期スキャンの実行は無効化されていますので、有効化することをお勧めします。

kusanagi antivirus off を実行して定期スキャンを無効化する

kusanagi antivirus off を実行することで定期的なマルウェア・ウイルスのスキャンが無効化されます。

# kusanagi antivirus off
antivirus completed.
#

kusanagi antivirus status を実行して定期スキャンの状態を確認する

kusanagi antivirus status を実行することで定期スキャンの状態を確認できます。

# kusanagi antivirus status
antivirus scan is scheduled at 00:07 every day.
antivirus scan is on.
antivirus completed.
#

表示される内容は、定期スキャンが有効/無効、有効な場合は定期スキャンの実行時間が表示されます。

例として先ほどの kusanagi antivirus on で時間指定を行ってから実行してみます。

# kusanagi antivirus on --daily 15:15
antivirus completed.
# kusanagi antivirus status
antivirus scan is scheduled at 15:15 every day.
antivirus scan is on.
antivirus completed.
#

このように、指定した時間が表示されることが確認できます。

kusanagi antivirus config で定期スキャン対象のディレクトリを変更する

kusanagi antivirus config を実行することで定期スキャン実行時のスキャン対象となるディレクトリを変更できます。

# kusanagi antivirus config --template wp-content kusanagi_html
antivirus completed.
#

前述しましたように kusanagi antivirus on で定期スキャンが実行されるディレクトリは固定ですが、一部ディレクトリはコマンドから変更可能です。

  • 変更可能ディレクトリ: 各プロファイルのWordPressのwp-content/uploads

変更先は --template オプションで指定します。
変更先は以下の通りで、それぞれのテンプレートの内容については後ほど説明します。

  • documentroot : /home/kusanagi/{profile}/DocumentRoot/
  • drupal : /home/kusanagi/{profile}/DocumentRoot/sites/
  • wp-content : /home/kusanagi/{profile}/DocumentRoot/{wp}/wp-content/
  • wp-uploads : /home/kusanagi/{profile}/DocumentRoot/{wp}/wp-content/uploads/

{profile} には、コマンド実行時に指定した KUSANAGI プロファイル名が設定されます。
{wp} には、指定した KUSANAGI プロファイル名の配下にある WordPress のサブディレクトリが設定されます。
そのため、1つの KUSANAGI プロファイル内に複数の WordPress が存在する場合は、その全ての WordPress がスキャン対象となります。

例として、 KUSANAGI プロファイル名が「kusanagi_html」で、その KUSANAGI プロファイル配下に以下のように複数の WordPress が存在するとします。

  • /home/kusanagi/kusanagi_html/
    • DocumentRoot/ <- WordPress が存在
      • assets/ <- WordPress は存在しない
      • blog/ <- WordPress が存在
      • column/ <- WordPress が存在

このサイト構成に対して以下のコマンドを実行した場合、定期スキャン対象となるディレクトリは以下の通りです。

# kusanagi antivirus config --template wp-uploads kusanagi_html
antivirus completed.
#
  • /home/kusanagi/kusanagi_html/DocumentRoot/wp-content/uploads/
  • /home/kusanagi/kusanagi_html/DocumentRoot/blog/wp-content/uploads/
  • /home/kusanagi/kusanagi_html/DocumentRoot/column/wp-content/uploads/

このように、 {profile} は指定した KUSANAGI プロファイルに置き換えられ、 {wp} は指定した KUSANAGI プロファイル配下の WordPress が展開されるので、その全ての WordPress がスキャン対象となります。

それでは、それぞれのテンプレートについて説明します。

WordPress の wp-uploads 配下をスキャンする (デフォルト)

  • テンプレート指定: --template wp-uploads
  • スキャン対象パス: /home/kusanagi/{profile}/DocumentRoot/{wp}/wp-content/uploads/

こちらは WordPress 用のテンプレートで、アップロードファイルを保存するディレクトリをスキャン対象とするための指定です。
定期スキャンの対象ディレクトリのデフォルト値はこの設定です。

スキャン対象のディレクトリの範囲が狭いため、スキャンにかかる負荷は小さくなります。

WordPress の wp-content 配下をスキャンする

  • テンプレート指定: --template wp-content
  • スキャン対象パス: /home/kusanagi/{profile}/DocumentRoot/{wp}/wp-content/

こちらは WordPress 用のテンプレートで、wp-content 配下のディレクトリをスキャン対象とするための指定です。
アップロードファイルだけでなく、インストールしたプラグインやテーマもスキャン対象となります。

スキャン対象のディレクトリの範囲は wp-uploads よりも広いため、スキャンにかかる負荷は wp-uploads よりも大きくなります。

Drupal の sites 配下をスキャンする

  • テンプレート指定: --template drupal
  • スキャン対象パス: /home/kusanagi/{profile}/DocumentRoot/sites/

こちらは Drupal 用のテンプレートで、sites 配下のディレクトリをスキャン対象とするための指定です。
マルチサイトも含めて、アップロードファイルを保存するディレクトリがスキャン対象となります。

sites 配下にモジュールやテーマを置かなければ、スキャンにかかる負荷は小さくなります。

DocumentRoot 配下を全てスキャンする

  • テンプレート指定: --template documentroot
  • スキャン対象パス: /home/kusanagi/{profile}/DocumentRoot/

こちらは汎用のテンプレートで、DocumentRoot 配下のディレクトリをスキャン対象とするための指定です。
WordPress や Drupal 以外の CMS や、カスタムサイトを対象とする場合の指定です。

DocumentRoot 配下の全てがスキャン対象となるので、スキャンにかかる負荷は最も大きくなります。

kusanagi-standalone antivirus manual-scan を実行して指定のディレクトリ/ファイルをスキャンする

※ : このコマンドは kusanagi-standalone で実行する必要があります。

kusanagi-standalone antivirus manual-scan を実行することで、指定のディレクトリ/ファイルに対してマルウェア・ウイルスのスキャンが実行できます。

# kusanagi-standalone antivirus manual-scan --log /tmp/manual-scan.log /home/kusanagi/
Wed Apr 23 18:06:32 2025 -> ClamAV update process started at Wed Apr 23 18:06:32 2025
Wed Apr 23 18:06:32 2025 -> daily.cld database is up-to-date (version: 27616, sigs: 2074663, f-level: 90, builder: raynman)
Wed Apr 23 18:06:32 2025 -> main.cvd database is up-to-date (version: 62, sigs: 6647427, f-level: 90, builder: sigmgr)
Wed Apr 23 18:06:32 2025 -> bytecode.cvd database is up-to-date (version: 336, sigs: 83, f-level: 90, builder: nrandolp)
/home/kusanagi/eicar.com.txt: Win.Test.EICAR_HDB-1 FOUND
/home/kusanagi/eicar.com.txt: Win.Test.EICAR_HSB-1 FOUND
/home/kusanagi/eicar.com.txt: Eicar-Signature FOUND
/home/kusanagi/encrypted_archive.zip: Heuristics.Encrypted.Zip FOUND

----------- SCAN SUMMARY -----------
Known viruses: 8706433
Engine version: 1.0.8
Scanned directories: 382
Scanned files: 3541
Infected files: 2
Data scanned: 168.62 MB
Data read: 77.48 MB (ratio 2.18:1)
Time: 68.394 sec (1 m 8 s)
Start Date: 2025:04:23 18:06:32
End Date:   2025:04:23 18:07:40
Virus detected.
Check Log file: /tmp/manual-scan.log
antivirus completed.
#

ここで出力された結果は、ログファイルにも出力されます。
ログファイルは --log オプションを指定すれば特定のログファイルに出力することができ、 --log オプションを指定しなかった場合は以下のパスに出力されます。

  • /var/opt/kusanagi/log/clamav/kusanagi-manual-scan-YYYYmmdd-HHMMSS(実行日時).log

例えば、 2025年4月23日の18時6分32秒に実行した場合のデフォルトのログファイルのパスは、

  • /var/opt/kusanagi/log/clamav/kusanagi-manual-scan-20250423-180632.log

となります。

※:余談ですが、定期スキャンの実行結果も同じディレクトリに出力されます。その際のファイル名は kusanagi-scan-YYYYmmdd-HHMMSS(実行日時).log となります。

スキャン対象設定ファイルを変更して、定期スキャンの対象ディレクトリを変更する

※ : こちらは高度な設定になりますので、変更する際には十分注意してください。
  設定ファイルに不備がある場合は、定期スキャンが実行されなくなります。

kusanagi antivirus config を実行した際には、以下のファイルが編集されます。

  • /etc/opt/kusanagi/clamav/scan.yaml

このファイルが、定期スキャン実行時のスキャン内容を決定しています。
そのため、定期スキャンに対してより柔軟な設定を行いたい場合は、上記ファイルを変更することで可能です。
それでは、実際にファイルの中身を見てみます。

target:
- /tmp/
- /var/tmp/
- /dev/shm/
include: []
include-dir: []
exclude: []
exclude-dir:
- /proc/
- /sys/
- /boot/efi/
- /usr/libexec/fwupd/efi/
- /usr/lib/firmware/
- /usr/share/fwupd/
- /var/opt/kusanagi/lib/clamav
---
kusanagi_html:
  target:
  - /home/kusanagi/kusanagi_html/DocumentRoot/wp-content/uploads

YAML 形式で記載されており、設定内容は以下の通りです。

  • 最上位項目は共通設定となります
    • target : スキャン対象ディレクトリ/ファイル
    • include : スキャン対象とするファイル(正規表現を利用可能)
    • include-dir : スキャン対象とするディレクトリ(正規表現を利用可能)
    • exclude : スキャン除外対象とするファイル(正規表現を利用可能)
    • exclude-dir : スキャン除外対象とするディレクトリ(正規表現を利用可能)
  • プロファイル名はプロファイルごとの設定となります
    • target : スキャン対象ディレクトリ/ファイル

target で指定したディレクトリ全てがスキャンの対象となります。
include/include-dir および exclude/exclude-dir その対象となったディレクトリに対しての指定となります。
inculde/inculde-dir と exclude/exclude-dir の条件が衝突した場合は、 exclude/exclude-dir の方が優先されます。

例として以下のように、 include に設定を追加したとします。

target:
- /tmp/
- /var/tmp/
- /dev/shm/
include:
- \.php$
include-dir: []
exclude: []
exclude-dir:
- /proc/
- /sys/
- /boot/efi/
- /usr/libexec/fwupd/efi/
- /usr/lib/firmware/
- /usr/share/fwupd/
- /var/opt/kusanagi/lib/clamav
---
kusanagi_html:
  target:
  - /home/kusanagi/kusanagi_html/DocumentRoot/wp-content/uploads

この場合、スキャン対象となるのは

  1. target で指定されたディレクトリの中で、
    • /tmp/
    • /var/tmp/
    • /dev/shm/
    • /home/kusanagi/kusanagi_html/DocumentRoot/wp-content/uploads
  2. exclude-dir で指定されたディレクトリに当てはまらず、
    • /proc/
    • /sys/
    • /boot/efi/
    • /usr/libexec/fwupd/efi/
    • /usr/lib/firmware/
    • /usr/share/fwupd/
    • /var/opt/kusanagi/lib/clamav
  3. include で指定されたファイルパターンに合致するもの
    • \.php$(ファイル名の末尾が .php で終わる)

となります。

基本的に include で指定された値は clamscan の include オプションに渡さされます。
同様に、include-dir は include-dir オプションに、 exclude は excludeオプションに、exclude-dir は exclude-dir オプションに渡されますので、 include/include-dir と exclude/exclude-dir の挙動は clamscan の挙動に従います。

※:余談ですが、clamscan の include-dir オプションは大変に扱い辛いオプションですので、挙動を理解した上で指定することをお勧めします。

kusanagi antivirus config を実行することで書き換えられるのは、プロファイル名以下にあたる部分になりますので、プロファイル名以下の部分に追加の設定を行った場合、kusanagi antivirus config 実行時に変更した部分はクリアされます。
共通設定は書き換えられることが無いので、変更する場合は共通設定部分を変更することが望ましいです。

以上が、 KUSANAGI Security Edition で追加された kusanagi antivirus の機能となります。

日々サーバーはウィルスやマルウェアの脅威にさらされています。
KUSANAGI Security Edition ではこの機能を使って、ウィルスやマルウェアを早期発見できるように設計されておりますので、是非ご利用を検討してみてください。

<< ミドルウェアの設定ファイル・ログファイルのパス

関連記事

Webサイト運用の課題解決事例100選 プレゼント

Webサイト運用の課題を弊社プロダクトで解決したお客様にインタビュー取材を行い、100の事例を108ページに及ぶ事例集としてまとめました。

・100事例のWebサイト運用の課題と解決手法、解決後の直接、間接的効果がわかる

・情報通信、 IT、金融、メディア、官公庁、学校などの業種ごとに事例を確認できる

・特集では1社の事例を3ページに渡り背景からシステム構成まで詳解