Ubuntu 18.04 LTS DesktopでClamAVを使用してウィルスチェックを実行します。Ubuntu等のLinux環境では、現状ではウィルスチェックは不要との見解が多いですが、Windowsとの混在環境で、ウィルスをWindowsに中継することを防止するために使用されることが多いようです。
記事の目次
使用した環境
- Ubuntu 18.04 LTS Desktop (18.04.1)
テスト用ウィルスのダウンロード
ウィルスチェックのテストのためにテスト用のウィルスを「Anti Malware Testfile」からダウンロードします。例えば、~/Downloads/eicarなどのフォルダに保管しておきます。
- eicar.com : テスト用ウィルスファイル
- eicar.com.txt : eicar.comの拡張子を変えた別名ファイル
- eicar_com.zip : eicar.comをzip化したファイル
- eicarcom2.zip : eicar_com.zipをさらにzip化したファイル
ClamAVをaptコマンドでインストール
ClamAVをaptコマンドでインストールします。
$ sudo apt install clamav clamav-daemon
マシンを再起動後にサービスが自動起動することを確認します。
$ systemctl list-unit-files | grep clamav clamav-daemon.service enabled clamav-freshclam.service enabled
設定ファイルの内容を修正します。以下、実行ユーザをrootに変更、リアルタイムスキャンを有効、スキャン対象のファイルサイズの制限を無限大に設定しています。
$ vi /etc/clamav/clamd.conf #Automatically Generated by clamav-daemon postinst #To reconfigure clamd run #dpkg-reconfigure clamav-daemon #Please read /usr/share/doc/clamav-daemon/README.Debian.gz for details LocalSocket /var/run/clamav/clamd.ctl FixStaleSocket true #LocalSocketGroup clamav LocalSocketGroup root LocalSocketMode 666 # TemporaryDirectory is not set to its default /tmp here to make overriding # the default with environment variables TMPDIR/TMP/TEMP possible #User clamav User root ScanMail true ScanArchive true ArchiveBlockEncrypted false MaxDirectoryRecursion 15 FollowDirectorySymlinks false FollowFileSymlinks false ReadTimeout 180 MaxThreads 12 MaxConnectionQueueLength 15 LogSyslog false LogRotate true LogFacility LOG_LOCAL6 LogClean false LogVerbose false PreludeEnable no PreludeAnalyzerName ClamAV DatabaseDirectory /var/lib/clamav OfficialDatabaseOnly false SelfCheck 3600 Foreground false Debug false ScanPE true MaxEmbeddedPE 10M ScanOLE2 true ScanPDF true ScanHTML true MaxHTMLNormalize 10M MaxHTMLNoTags 2M MaxScriptNormalize 5M MaxZipTypeRcg 1M ScanSWF true DetectBrokenExecutables false ExitOnOOM false LeaveTemporaryFiles false AlgorithmicDetection true ScanELF true IdleTimeout 30 CrossFilesystems true PhishingSignatures true PhishingScanURLs true PhishingAlwaysBlockSSLMismatch false PhishingAlwaysBlockCloak false PartitionIntersection false DetectPUA false ScanPartialMessages false HeuristicScanPrecedence false StructuredDataDetection false CommandReadTimeout 5 SendBufTimeout 200 MaxQueue 100 ExtendedDetectionInfo true OLE2BlockMacros false #ScanOnAccess false ScanOnAccess true OnAccessMountPath / OnAccessPrevention false OnAccessExtraScanning true OnAccessExcludeUID 0 VirusEvent /home/admin001/bin/notify_viruscheck.sh AllowAllMatchScan true ForceToDisk false DisableCertCheck false DisableCache false #MaxScanSize 100M MaxScanSize 0 #MaxFileSize 25M MaxFileSize 0 MaxRecursion 16 MaxFiles 10000 MaxPartitions 50 MaxIconsPE 100 PCREMatchLimit 10000 PCRERecMatchLimit 5000 PCREMaxFileSize 25M ScanXMLDOCS true ScanHWP3 true MaxRecHWP3 16 StreamMaxLength 25M LogFile /var/log/clamav/clamav.log LogTime true LogFileUnlock false LogFileMaxSize 0 Bytecode true BytecodeSecurity TrustSigned BytecodeTimeout 60000
VirusEventに指定したデスクトップへの通知用のシェルは、以下のようにしてみました。以下、「1000」については、通知するユーザのIDを指定します。
$ cat /home/admin001/bin/notify_viruscheck.sh #!/bin/bash DATESTR=`date` sudo -u admin001 DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus /usr/bin/notify-send "$DATESTR Virus Found $CLAM_VIRUSEVENT_VIRUSNAME"
ウィルス定義の最新化
ウィルス定義を更新し最新化を行いますが、その前に更新のための定義の内容を確認しておきます。定義ファイルの確認が1日24回行われることがわかります。
$ more /etc/clamav/freshclam.conf # Automatically created by the clamav-freshclam postinst # Comments will get lost when you reconfigure the clamav-freshclam package DatabaseOwner clamav UpdateLogFile /var/log/clamav/freshclam.log LogVerbose false LogSyslog false LogFacility LOG_LOCAL6 LogFileMaxSize 0 LogRotate true LogTime true Foreground false Debug false MaxAttempts 5 DatabaseDirectory /var/lib/clamav DNSDatabaseInfo current.cvd.clamav.net ConnectTimeout 30 ReceiveTimeout 30 TestDatabases yes ScriptedUpdates yes CompressLocalDatabase no SafeBrowsing false Bytecode true NotifyClamd /etc/clamav/clamd.conf # Check for new database 24 times a day Checks 24 DatabaseMirror db.local.clamav.net DatabaseMirror database.clamav.net
1時間を過ぎたら、ログファイルで自動更新が動作しているか確認します。
$ cat /var/log/clamav/freshclam.log
AppArmorによる制限を解除します。
$ sudo apt install apparmor-utils ... $ sudo aa-complain clamd Setting /usr/sbin/clamd to complain mode.
ClamAVのdaemonを起動します。
$ sudo systemctl start clamav-daemon $ sudo systemctl status clamav-daemon
定義ファイルを小苦心する常駐プロセスの起動状態を確認し、起動している場合は停止します。
$ sudo systemctl status clamav-freshclam $ sudo systemctl stop clamav-freshclam
手動で更新を行います。
$ sudo freshclam
定義ファイル更新の常駐プロセスを起動し直します。
$ sudo systemctl stop clamav-freshclam $ sudo systemctl status clamav-freshclam
ウィルスチェックの実行
ウィルスチェックを実行します。
ウィルスチェックの実行(clamscan)
clamscanコマンドを使用してウィルスチェックを実行した場合の例です。サブディレクトリも検索(-r)し、ウィルス検知したファイルのみ表示(-i)するオプションを指定しました。検疫対象ディレクトリは、eicarをダウンロードしたフォルダを指定してみました。
$ sudo clamscan -r -i ~/Downloads/eicar /home/admin001/Downloads/eicar/eicar.com.txt: Eicar-Test-Signature FOUND /home/admin001/Downloads/eicar/eicar.com: Eicar-Test-Signature FOUND /home/admin001/Downloads/eicar/eicar_com.zip: Eicar-Test-Signature FOUND /home/admin001/Downloads/eicar/eicarcom2.zip: Eicar-Test-Signature FOUND ----------- SCAN SUMMARY ----------- Known viruses: 6638863 Engine version: 0.100.1 Scanned directories: 1 Scanned files: 4 Infected files: 4 Data scanned: 0.00 MB Data read: 0.00 MB (ratio 0.00:1) Time: 20.483 sec (0 m 20 s)
ウィルスチェックの実行(clamdscan)
clamsdcanコマンドを使用してウィルスチェックを実行した場合の例です。こちらは、clamav-deamonを使用していますが、clamscanと比較して圧倒的に速いです。というよりは、clamscanが遅すぎです。
$ clamdscan ~/Downloads/eicar/ /home/admin001/Downloads/eicar/eicar.com: Eicar-Test-Signature FOUND /home/admin001/Downloads/eicar/eicar.com.txt: Eicar-Test-Signature FOUND /home/admin001/Downloads/eicar/eicar_com.zip: Eicar-Test-Signature FOUND /home/admin001/Downloads/eicar/eicarcom2.zip: Eicar-Test-Signature FOUND ----------- SCAN SUMMARY ----------- Infected files: 4 Time: 0.012 sec (0 m 0 s)
詳細なログは、以下に出力されます。
$ cat /var/log/clamav/clamav.log ... Sat Sep 8 21:20:06 2018 -> /home/admin001/Downloads/eicar/eicar.com: Eicar-Test-Signature(44d88612fea8a8f36de82e1278abb02f:68) FOUND Sat Sep 8 21:20:06 2018 -> /home/admin001/Downloads/eicar/eicar.com.txt: Eicar-Test-Signature(44d88612fea8a8f36de82e1278abb02f:68) FOUND Sat Sep 8 21:20:06 2018 -> /home/admin001/Downloads/eicar/eicar_com.zip: Eicar-Test-Signature(44d88612fea8a8f36de82e1278abb02f:68) FOUND Sat Sep 8 21:20:06 2018 -> /home/admin001/Downloads/eicar/eicarcom2.zip: Eicar-Test-Signature(44d88612fea8a8f36de82e1278abb02f:68) FOUND
デスクトップにも「Virus Found」のメッセージが通知されるはずなので、確認しましょう。
オンスキャンの確認
オンスキャン(リアルタイムスキャン)が有効であるか確認します。以下のように表示されればOKです!
$ cat ~/Downloads/eicar/eicar.com $ tail /var/log/clamav/clamav.log ... Sat Sep 8 22:45:03 2018 -> ScanOnAccess: /home/admin001/Downloads/eicar/eicar.com: Eicar-Test-Signature(44d88612fea8a8f36de82e1278abb02f:68) FOUND
しかし、何故かVirusEventで指定したシェルが起動せず、以下で代替しました。(毎分10秒検知した回数がデスクトップに通知されます。)
<シェル>
$ cat /home/admin001/bin/notify_viruscheck_cron.sh #!/bin/bash CNT=`grep ScanOnAccess /var/log/clamav/clamav.log | grep FOUND | wc -l` if [ $CNT != 0 ]; then DATESTR=`date` sudo -u admin001 DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus /usr/bin/notify-send -t 10000 "$DATESTR Virus Found $CNT" fi
<cronの設定>
$ crontab -l * * * * * DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus /home/admin001/bin/notify_viruscheck_cron.sh
GUIでウィルスチェックを実行
GUIでウィルスチェックを行うインターフェースもあります。こちらは、clamscanのフロントエンドのようで実行には時間がかかります。
clamtkをaptコマンドでインストール
clamtkをaptコマンドでインストールします。
$ sudo apt install clamtk
clamtkを使用してウィルスチェックを実行
clamtkを起動します。
「Settingsのアイコン」をダブルクリックして、以下のように設定します。「Potentially Unwanted Application (PUA)」のチェックは行わない例です。
元の画面で「Scan a directory」のアイコンをダブルクリックし、ディレクトリを指定してスキャンを行うと、以下のようにウィルスを検知します。
おわりに
Ubuntu 18.04 LTS DesktopにClamAVをインストールして、ウィルスチェックを行いました。cramscan、cramtkによるウィルスチェックは遅すぎるので、cramdscanの設定は必須と思います。Windowsのパソコンと同じようにリアルタイムスキャンも問題なく行うことができます。
参考情報(ClamAV)
参考情報(Ubuntu)
関連記事
関連書籍(Amazon)