Linux

Ubuntu Linux 安裝、使用 ClamAV 防毒軟體 clamscan 掃毒指令教學與範例

介紹如何在 Ubuntu Linux 中安裝並使用 ClamAV 防毒軟體的 clamscan 指令工具,對檔案進行掃毒。

ClamAV 是一套免費且開放原始碼的防毒軟體,軟體與病毒碼的更新皆由社群免費發布,常用於 Linux 等 UNIX-like 系統的郵件伺服器掃毒,但亦可用於 Windows 或 macOS 系統,詳細的介紹與應用可以參考維基百科的 ClamAV 文件

安裝 ClamAV

若要在 Ubuntu Linux 系統上安裝 ClamAV 防毒軟體,可以使用 apt 來安裝:

# 安裝 clamav 套件
sudo apt install clamav

若要對 RAR 壓縮檔進行掃毒,可以加裝 libclamunrar9 套件:

# 安裝 libclamunrar9 套件
sudo apt install libclamunrar9

freshclam 更新病毒碼

ClamAV 的病毒碼更新是由 freshclam 這個程式在負責的,更新的方式可透過預設的系統服務自動更新,或是強制手動更新。

自動更新病毒碼

在安裝好 clamav 套件之後,系統上會建立 clamav-freshclam 這個新的 daemon 服務,負責自動更新病毒碼:

# 查看 clamav-freshclam 服務狀態
systemctl status clamav-freshclam
● clamav-freshclam.service - ClamAV virus database updater
   Loaded: loaded (/lib/systemd/system/clamav-freshclam.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2021-06-17 18:25:48 CST; 45min ago
     Docs: man:freshclam(1)
           man:freshclam.conf(5)
           https://www.clamav.net/documents
 Main PID: 8110 (freshclam)
    Tasks: 1 (limit: 4915)
   CGroup: /system.slice/clamav-freshclam.service
           └─8110 /usr/bin/freshclam -d --foreground=true
[略]

手動更新病毒碼

正常來說,clamav-freshclam 這個服務 daemon 會自動處理病毒碼更新,管理者並不需要去管它,而如果在一些特殊情況下需要手動立即更新病毒碼的話,可以在 clamav-freshclam 停止的狀況下,執行 freshclam 手動更新病毒碼:

# 手動更新病毒碼
sudo freshclam

病毒碼更新設定

freshclam 病毒碼更新相關的設定都寫在 /etc/clamav/freshclam.conf,其中比較常用的設定有:

# 產生詳細記錄
LogVerbose disabled

# 每日更新病毒碼次數
Chcekcs 24

# 壓縮本機資料庫(可節省空間,但執行效率較低)
CompressLocalDatabase no

# 病毒碼資料庫鏡像站
DatabaseMirror db.local.clamav.net
DatabaseMirror database.clamav.net

關於 /etc/clamav/freshclam.conf 設定檔的詳細說明,可以參考 freshclam.conf 的線上手冊:

# 查閱 freshclam.conf 線上手冊
man freshclam.conf

病毒碼更新記錄檔

freshclam 病毒碼更新的記錄檔則位於 /var/log/clamav/freshclam.log,這個記錄檔非常重要,管理者必須定期檢視此檔,確認病毒碼都有即時更新。

clamscan 掃描病毒

檢查病毒碼版本

進行掃毒之前,檢查 ClamAV 與病毒碼版本:

# 檢查 ClamAV 版本
clamscan --version
ClamAV 0.103.2/26203/Wed Jun 16 19:07:58 2021

在這段輸出中,26203 是病毒碼(signatures)的版本,而最後的日期則是病毒碼的日期。

個別檔案掃毒

若要針對個別檔案進行病毒掃描,可以使用 clamscan 指令,並指定要進行掃毒的檔案即可:

# 對 archive.zip 進行掃毒
clamscan archive.zip

clamscan 在掃毒完成後,會輸出類似這樣的掃描結果:

/home/ubuntu/tmp/archive.zip: OK

----------- SCAN SUMMARY -----------
Known viruses: 8539526
Engine version: 0.103.2
Scanned directories: 0
Scanned files: 1
Infected files: 0
Data scanned: 1.21 MB
Data read: 0.15 MB (ratio 7.97:1)
Time: 15.972 sec (0 m 15 s)
Start Date: 2021:06:17 19:55:22
End Date:   2021:06:17 19:55:38

目錄掃毒

若要對整個目錄進行掃毒,可以在執行 clamscan 時加上 -r 參數,即可遞迴掃描整個目錄與子目錄下的所有檔案。例如掃描 /home/ubuntu 目錄:

# 對 /home/ubuntu 目錄進行掃毒
clamscan -r /home/ubuntu
/home/ubuntu/tmp/zip/ar.zip: OK
/home/ubuntu/tmp/zip/date2.txt: OK
/home/ubuntu/tmp/zip/Health-02.zip: OK
/home/ubuntu/tmp/zip/Health-01.zip: OK
/home/ubuntu/tmp/zip/date.txt: OK

----------- SCAN SUMMARY -----------
Known viruses: 8540340
Engine version: 0.103.2
Scanned directories: 1
Scanned files: 5
Infected files: 0
Data scanned: 1.48 MB
Data read: 85.50 MB (ratio 0.02:1)
Time: 16.097 sec (0 m 16 s)
Start Date: 2021:06:18 21:21:38
End Date:   2021:06:18 21:21:54

--max-dir-recursion 參數可用來設定遞迴層數上限值:

# 設定遞迴層數上限為 6
clamscan -r --max-dir-recursion=6 /home/ubuntu

只顯示中毒檔案

clamscan 在掃描檔案時,預設會顯示每一個檔案的檢查結果,若檔案正常就會顯示 OK。若不想輸出大量 OK 的檔案資訊,可以加上 -o 參數:

# 對 /home/ubuntu 目錄進行掃毒,不顯示 OK 的檔案
clamscan -o -r /home/ubuntu

如果希望只顯示中毒的檔案,可以加上 -i 參數:

# 對 /home/ubuntu 目錄進行掃毒,只顯示中毒檔案
clamscan -i -r /home/ubuntu

資料串流掃毒

clamscan 也可以對資料串流進行掃毒:

# 掃描資料串流
cat myfile | clamscan -
stdin: OK

----------- SCAN SUMMARY -----------
Known viruses: 8540340
Engine version: 0.103.2
Scanned directories: 0
Scanned files: 1
Infected files: 0
Data scanned: 0.13 MB
Data read: 0.12 MB (ratio 1.03:1)
Time: 14.812 sec (0 m 14 s)
Start Date: 2021:06:19 05:50:41
End Date:   2021:06:19 05:50:56

檔案清單掃毒

若要對指定的檔案清單進行掃毒,可以使用 -f 參數來指定檔案清單。

先準備好檔案清單 filelist.txt,格式為一行一個檔案,例如:

/home/ubuntu/file1.zip
/home/officeguide/file2.docx
/home/officeguide/file3.pptx

接著執行以下指令,對檔案清單內的檔案進行掃毒:

# 對檔案清單進行掃毒
clamscan -f filelist.txt

移除、搬移、複製中毒檔案

clamscan 偵測到中毒的檔案時,預設只會顯示訊息,不會刪除檔案,若要自動刪除感染病毒的檔案,可以加上 --remove 參數:

# 自動刪除中毒的檔案
clamscan -r --remove /home/ubuntu

使用 --remove 參數會有誤判的風險,如果怕誤刪檔案,可以改用 --move 參數將中毒的檔案搬移到指定的隔離目錄:

# 將中毒檔案搬移至 /home/clamav/virus 目錄
clamscan -r --move=/home/clamav/virus /home/ubuntu

另一種更保守的做法是只將中毒的檔案複製一份到指定的目錄,而不更動原始的檔案:

# 將中毒檔案複製一份至 /home/clamav/virus 目錄
clamscan -r --copy=/home/clamav/virus /home/ubuntu

輸出訊息

若希望 clamscan 輸出較詳細的資訊,可以加上 -v 參數:

# 輸出詳細資訊
clamscan -v archive.zip

若希望 clamscan 不要輸出任何訊息,可以使用 --quiet 參數:

# 不要輸出任何訊息
clamscan --quiet archive.zip

若不要輸出最後的掃描結果報表,可以加上 --no-summary 參數:

# 不要輸出掃描結果報表
clamscan --no-summary archive.zip

掃描時間上限

clamscan--max-scantime 參數可設定掃描單一檔案時間上限(單位為毫秒),預設值為 120000(120 秒):

# 設定掃描時間上限為 60 秒
clamscan --max-scantime=60000 archive.zip

設定掃描時間上限是為了要預防 Zip 炸彈(zip bomb)攻擊。

壓縮檔案大小、數量上限

clamscan--max-filesize 參數可以設定掃描壓縮檔的檔案大小上限,若壓縮檔超過這個上限值,就會跳過,可用的單位為 KM

# 設定掃描壓縮檔的檔案大小上限為 25 MB
clamscan --max-filesize=25M archive.zip

# 設定掃描壓縮檔的檔案大小上限為 512 KB
clamscan --max-filesize=512K archive.zip

--max-scansize 參數則可設定壓縮檔本身的大小,再加上壓縮檔案內所有檔案的大小總和的上限值,可用的單位為 KM

# 設定掃描壓縮檔與內部所有檔案大小總和上限為 100 MB
clamscan --max-filesize=100M archive.zip

--max-files 參數可以設定一個壓縮檔內最多解開多少個檔案進行掃描:

# 設定一個壓縮檔內最多解開 10000 個檔案進行掃描
clamscan --max-files=10000 archive.zip

--max-recursion 參數可以設定壓縮檔內的遞迴層數上限值:

# 設定壓縮檔內的遞迴層數上限值為 16
clamscan --max-files=16 archive.zip

clamscan 傳回值

clamscan 指令在掃描完成後,會依據掃描結果傳回不同的值:

傳回值 說明
0 未發現病毒。
1 發現有檔案感染病毒。
2 掃描過程出現錯誤。

若在 bash shell 指令稿中,可以透過傳回值來判斷是否掃出病毒:

#!/bin/bash
# 進行掃毒
clamscan archive.zip

# 取得 clamscan 傳回值
val=$?

# 判斷掃描結果
if [ "$val" = "0" ]; then
  echo "未發現病毒。"
elif [ "$val" = "1" ]; then
  echo "發現有檔案感染病毒。"
else
  echo "掃描過程出現錯誤。"
fi

CVD 病毒碼檔案

ClamAV 的病毒碼預設放在 /var/lib/clamav/daily.cvd,我們可以使用 sigtool 檢視這個 cvd 檔案:

# 檢視 CVD 病毒碼檔案資訊
sigtool --info /var/lib/clamav/daily.cvd
File: /var/lib/clamav/daily.cvd
Build time: 16 Jun 2021 07:07 -0400
Version: 26203
Signatures: 3989972
Functionality level: 63
Builder: raynman
MD5: ad64e4b560ce5d89822e385f8054a084
Digital signature: VLGnREZF0DFxo2peO5hzFYRkraLYFaRsxrCdiyS4CFzfcM/PQlgDNQo0Yi0YyEZhaxQciNUYGLeiM2uc9hJHeP3987LTx6ZizZwih1MFKbCa1amOXUKRXAxLxnC/Q83pKRRnENAx5ZPj7H/Gla/v/h+xd8RtUwk8ylh7UqtASXe
Verification OK.

EICAR 測試病毒檔

如果想要測試 ClamAV 的掃毒功能,可以下載 EICAR 的測試病毒檔,或是自己建立一個包含以下字串的文字檔:

X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*

這一串長度為 68 位元組的文字是 EICAR 所定義的測試病毒碼,當然它實際上並不是真正的病毒,是專門用於防毒軟體測試使用的檔案,任何檔案只要以這 68 個字元開頭,就會被支援 EICAR 測試病毒的防毒軟體視為病毒。

我們可以用以下指令快速測試 ClamAV 的掃毒功能:

# 建立 EICAR 測試病毒檔
cat > eicar.virus <<'EOF'
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
EOF

# 測試 ClamAV 掃毒功能是否正常
clamscan eicar.virus
/home/ubuntu/eicar.virus: Eicar-Signature FOUND

----------- SCAN SUMMARY -----------
Known viruses: 8540340
Engine version: 0.103.2
Scanned directories: 0
Scanned files: 1
Infected files: 1
Data scanned: 0.00 MB
Data read: 0.00 MB (ratio 0.00:1)
Time: 15.196 sec (0 m 15 s)
Start Date: 2021:06:19 15:17:21
End Date:   2021:06:19 15:17:36

ClamAV 測試病毒檔

除了 EICAR 的測試病毒檔之外,也可以使用 Ubuntu Linux 的 clamav-testfiles 套件所整理的測試檔案來測試掃毒功能:

# 安裝 clamav-testfiles 套件
sudo apt install clamav-testfiles

安裝好 clamav-testfiles 套件之後,就可以在 /usr/share/clamav-testfiles 目錄下看到各種類型的測試檔案了。

# 測試 ClamAV 掃毒功能是否正常
clamscan /usr/share/clamav-testfiles/clam.ppt
/usr/share/clamav-testfiles/clam.ppt: Clamav.Test.File-6 FOUND

----------- SCAN SUMMARY -----------
Known viruses: 8540743
Engine version: 0.103.2
Scanned directories: 0
Scanned files: 1
Infected files: 1
Data scanned: 0.00 MB
Data read: 0.03 MB (ratio 0.00:1)
Time: 15.451 sec (0 m 15 s)
Start Date: 2021:06:19 20:52:05
End Date:   2021:06:19 20:52:21

參考資料

Share
Published by
Office Guide
Tags: 資訊安全

Recent Posts

Python 使用 PyAutoGUI 自動操作滑鼠與鍵盤

本篇介紹如何在 Python ...

1 年 ago

Ubuntu Linux 以 WireGuard 架設 VPN 伺服器教學與範例

本篇介紹如何在 Ubuntu ...

1 年 ago

Linux 網路設定 ip 指令用法教學與範例

本篇介紹如何在 Linux 系...

1 年 ago

Linux 以 Cryptsetup、LUKS 加密 USB 隨身碟教學與範例

介紹如何在 Linux 系統中...

1 年 ago