Clam AntiVirus
Link utili:
-
- Sito web ufficiale di ClamAV <http://www.clamav.net>
- Documentazione locale <file:///usr/share/doc/clamav-0.xx>
ClamAV è un antivirus open source per sistemi Linux.
Lo scopo di questa guida è quello di installare un antivirus per Linux che protegga il sistema con scansioni periodiche e che effettui un controllo in tempo reale sui files bloccando l’accesso quando venga rilevata una minaccia.
I pacchetti di cui si compone sono:
clamav
contiene i tools da riga di comando
clamav-lib
contiene le librerie
clamav-data
contiene il database dei virus
clamav-update
contiene l’utility freshclam per l’aggiornamento automatico del database dei virus e il corrispondente cron-job
Installazione di ClamAV su CentOS 7 con on-access scanning
ClamAV non è disponibile nel repository ufficiale di CentOS , per procedere con l’installazione è necessario aggiungere il repository epel-release:
sudo yum -y install epel-release
sudo yum clean all
procedere con l’installazione:
sudo yum -y install clamav clamd clamav-update
il sistema installerà il pacchetto di clamav e le dipendenze necessarie:
Dependencies Resolved
================================================================
Package Arch Version Repository Size
================================================================
Installing:
clamav x86_64 0.103.0-3.el7 epel 416 k
Installing for dependencies:
clamav-filesystem noarch 0.103.0-3.el7 epel 40 k
clamav-lib x86_64 0.103.0-3.el7 epel 826 k
clamav-update x86_64 0.103.0-3.el7 epel 120 k
libprelude x86_64 5.2.0-2.el7 epel 312 k
Transaction Summary
================================================================
Install 1 Package (+4 Dependent packages)
Configurare SELinux
Se abbiamo abilitato SELinux è necessario apportare alcune modifiche aggiuntive per far si che ClamAV abbia i necessari diritti e abilitazioni per funzionare.
Verifichiamo se è attivo:
sestatus
Se attivo configurare SELinux:
sudo setsebool -P antivirus_can_scan_system 1
sudo setsebool -P clamd_use_jit 1
Verifichiamo che le modifiche siano andate a buon fine:
sudo getsebool -a | grep antivirus
Dovremmo ottenere:
antivirus_can_scan_system --> on
antivirus_use_jit --> on
Configurazione di ClamAV
Configuriamo ClamAV con le opzioni minimali.
Commentare le stringe “example” dal file di configurazione:
sudo sed -i -e "s/^Example/#Example/" /etc/clamd.d/scan.conf
Per poter utilizzare la funzione On-Access è necessario avere:
Kernel >= 3.8
Curl <= 7.45
Per verificare la versione del Kernel e di Curl:
uname -r
3.10.0-1062.1.1.el7.x86_64
curl -V
La distribuzione Centos 7 non fornisce un pacchetto di curl sufficientemente aggiornato, per poter utilizza la funzione di On-access scan dobbiamo quindi utilizzare la connessione via TCPSocket a localhost al posto del Local Socket.
Indichiamo nel file di configurazione il tipo Socket che utilizziamo
sudo vi /etc/clamd.d/scan.conf
Togliamo il commento (#) per abilitare il logging ed il logrotate:
LogFile /var/log/clamd.scan
.
.
LogFileMaxSize 2M
Troviamo la seguente riga e rimuoviamo il commento (#):
#TCPSocket 3310
Troviamo la seguente riga e rimuoviamo il commento (#):
#TCPAddr 127.0.0.1
Togliamo il commento e sostituiamo lo User:
#User clamscan
User root
Usciamo salvando il file.
Commentare la stringa “example” dal file freshclam:
sudo sed -i -e "s/^Example/#Example/" /etc/freshclam.conf
eseguire l’aggiornamento del database delle definizioni dei virus:
sudo freshclam
ClamAV update process started at Thu Mar 4 13:45:16 2021
daily database available for download (remote version: 26098)
Time: 2.1s, ETA: 0.0s [========================>] 100.11MiB/100.11MiB
Testing database: '/var/lib/clamav/tmp.f230b0d02d/clamav-61bc2a6d45bf81c14d6446bd34c69fd5.tmp-daily.cvd' ...
Database test passed.
daily.cvd updated (version: 26097, sigs: 3957308, f-level: 63, builder: raynman)
main database available for download (remote version: 59)
Time: 1.7s, ETA: 0.0s [========================>] 112.40MiB/112.40MiB
Testing database: '/var/lib/clamav/tmp.f230b0d02d/clamav-b67546d56692d4e689d19b12f7cc5521.tmp-main.cvd' ...
Database test passed.
main.cvd updated (version: 59, sigs: 4564902, f-level: 60, builder: sigmgr)
bytecode database available for download (remote version: 332)
Time: 0.1s, ETA: 0.0s [========================>] 288.08KiB/288.08KiB
Testing database: '/var/lib/clamav/tmp.f230b0d02d/clamav-eef4888f31b94abb4fa936a8fa212934.tmp-bytecode.cvd' ...
Database test passed.
bytecode.cvd updated (version: 332, sigs: 93, f-level: 63, builder: awillia2)
abilita il servizio
sudo systemctl enable clamd@scan.service
avvia il servizio
sudo systemctl start clamd@scan.service
verifica lo stato del servizio
sudo systemctl status clamd@scan.service
● clamd@scan.service - clamd scanner (scan) daemon
Loaded: loaded (/usr/lib/systemd/system/clamd@.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2021-03-04 14:44:50 CET; 5s ago
Docs: man:clamd(8)
man:clamd.conf(5)
https://www.clamav.net/documents/
Process: 23172 ExecStart=/usr/sbin/clamd -c /etc/clamd.d/%i.conf (code=exited, status=0/SUCCESS)
Main PID: 23175 (clamd)
CGroup: /system.slice/system-clamd.slice/clamd@scan.service
└─23175 /usr/sbin/clamd -c /etc/clamd.d/scan.conf
Mar 04 14:44:50 owncloud.pg.infn.it clamd[23175]: Portable Executable support enabled.
Mar 04 14:44:50 owncloud.pg.infn.it clamd[23175]: ELF support enabled.
Mar 04 14:44:50 owncloud.pg.infn.it clamd[23175]: Mail files support enabled.
Mar 04 14:44:50 owncloud.pg.infn.it clamd[23175]: OLE2 support enabled.
Mar 04 14:44:50 owncloud.pg.infn.it clamd[23175]: PDF support enabled.
Mar 04 14:44:50 owncloud.pg.infn.it clamd[23175]: SWF support enabled.
Mar 04 14:44:50 owncloud.pg.infn.it clamd[23175]: HTML support enabled.
Mar 04 14:44:50 owncloud.pg.infn.it clamd[23175]: XMLDOCS support enabled.
Mar 04 14:44:50 owncloud.pg.infn.it clamd[23175]: HWP3 support enabled.
Mar 04 14:44:50 owncloud.pg.infn.it clamd[23175]: Self checking every 600 seconds.
abilita e avvia il servizio di aggiornamento del database dei virus
sudo systemctl enable clamav-freshclam.service
sudo systemctl start clamav-freshclam.service
Verifica che il servizio sia in ascolto sulla porta 3310 di localhost:
sudo netstat -anp | grep -E "(Active|State|clam)"
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:3310 0.0.0.0:* LISTEN 26216/clamd
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node PID/Program name Path
unix 2 [ ] STREAM CONNECTED 1874739 26246/freshclam
unix 3 [ ] STREAM CONNECTED 1874701 26246/freshclam
unix 3 [ ] STREAM CONNECTED 1878619 26886/clamonacc
unix 2 [ ] STREAM CONNECTED 1874358 26216/clamd
L’installazione è terminata, il database dei virus viene tenuto aggiornato tramite crontab definito per default.
Scansione di un percorso specifico con ClamAV
È possibile utilizzare clamscan con l’opzione -r per effettuare la scansione di una cartella e delle sottocartelle presenti in essa
clamscan -r /home/USER
attenzione ad utilizzare l’opzione –remove in quanto cancella i files ritenuti infetti
clamscan -r --remove /home/USER
in alternativa è possibile spostare i sospetti virus in una cartella apposita
clamscan -r --move=/home/USER/VIRUS /home/USER
Per attivare la scansione automatica giornaliera delle directory che vogliamo controllare possiamo creare un cron:
vim clamscan-daily.sh
copiare nel file questo contenuto
#!/bin/bash
LOGFILE="/var/log/clamav-daily-scan$(date +'%Y-%m-%d').log";
EMAIL_MSG="ClamAV scan report: see the log file attached.";
EMAIL_FROM="clamav-daily@pg.infn.it";
EMAIL_TO="nome.cognomee@pg.infn.it";
DIRTOSCAN="/var/www /home";
for S in ${DIRTOSCAN}; do
DIRSIZE=$(du -sh "$S" 2>/dev/null | cut -f1);
echo "Starting a daily scan of "$S" directory.
Amount of data to be scanned is "$DIRSIZE".";
clamscan -ri "$S" >> "$LOGFILE";
# get the value of "Infected lines"
MALWARE=$(tail "$LOGFILE"|grep Infected|cut -d" " -f3);
# if the value is not equal to zero, send an email with the log file attached
if [ "$MALWARE" -ne "0" ];then
# send email
echo "$EMAIL_MSG"|mail -a "$LOGFILE" -s "Malware Found" -r "$EMAIL_FROM" "$EMAIL_TO";
fi
done
exit 0
cambiare i permessi del file:
chmod 0755 clamscan-daily.sh
attivarne l’esecuzione spostandolo nella directory del cron:
sudo mv clamscan-daily.sh /etc/cron.daily/
Di seguito le più comuni opzioni per effettuare scansioni:
--log=FILE
– invia il report della scansione nel FILE--max-filesize=#n
– dimensione massima dei file da scansionare, i file con dimensioni maggiori saranno saltati e ritenuti puliti--max-scansize=#n
– quantità massima di dati da scansionare--leave-temps[=yes/no(*)]
– non rimuovere i file temporanei--cross-fs[=yes(*)/no]
– scansiona file e directory di altri filesystem--move=DIRECTORY
– sposta I file infetti in una DIRECTORY predefinita--copy=DIRECTORY
– copia I file infetti in una DIRECTORY predefinita--heuristic-alerts[=yes(*)/no]
– toggles heuristic alerts--alert-encrypted[=yes/no(*)]
– alert on encrypted archives and documents
On-access scanning
Il servizio che si occupa dello scan on access è clamonacc.
Le due applicazioni, clamd e clamonacc, devono girare in parallelo.
Per una configurazione semplificata di clamonacc seguire queste istruzioni:
Editare `/etc/clamd.d/scan.conf` e impostare i seguenti parametri:
`OnAccessIncludePath /home` (Specificare il percorso che si vuole controllare)
`OnAccessPrevention` a `yes`
`OnAccessExtraScanning yes`
`OnAccessRetryAttempts 3`
`Bytecode yes`
togliere il commento da
`OnAccessExcludeRootUID`
Salvare e chiudere `scan.conf`
Riavviare il servizio:
sudo systemctl restart clamd@scan.service
Quindi lanciare clamonacc con privilegi elevati per verificarne il corretto funzionamento
sudo clamonacc
A questo punto bisogna creare il servizio
sudo vi /etc/systemd/system/multi-user.target.wants/clamonacc.service
inserire questo contenuto:
# clamonacc systemd service file
[Unit]
Description=ClamAV On-Access Scanner
Documentation=man:clamonacc(8) man:clamd.conf(5) https://www.clamav.net/documents
After=clamd@scan.service syslog.target network.target
[Service]
Type=simple
User=root
ExecStart=/usr/sbin/clamonacc -F --config-file=/etc/clamd.d/scan.conf --log=/var/log/clamd.scan --move=/root/quarantine
Restart=on-failure
RestartSec=10s
[Install]
WantedBy=multi-user.target
Avviare e verificare lo stato del servizio:
sudo systemctl start clamonacc.service
sudo systemctl status clamonacc.service
● clamav-clamonacc.service - ClamAV On-Access Scanner
Loaded: loaded (/usr/lib/systemd/system/clamav-clamonacc.service; enabled; vendor preset: disabled)
Active: active (running) since Fri 2021-03-19 09:57:51 CET; 1h 6min ago
Docs: man:clamonacc(8)
man:clamd.conf(5)
https://www.clamav.net/documents
Main PID: 26886 (clamonacc)
Tasks: 8
CGroup: /system.slice/clamav-clamonacc.service
└─26886 /usr/sbin/clamonacc -F --config-file=/etc/clamd.d/scan.conf --log=/var/log/clamd.scan --move=/root/quarantine
Mar 19 09:57:51 centos-7 systemd[1]: Stopped ClamAV On-Access Scanner.
Mar 19 09:57:51 centos-7 clamonacc[26280]: ClamInotif: stopped
Mar 19 09:57:51 centos-7 clamonacc[26280]: Clamonacc: stopped
Mar 19 09:57:51 centos-7 systemd[1]: Started ClamAV On-Access Scanner.
Mar 19 09:57:51 centos-7 clamonacc[26886]: --------------------------------------
Mar 19 09:57:51 centos-7 clamonacc[26886]: ClamInotif: watching '/home' (and all sub-directories)
Mar 19 09:57:51 centos-7 clamonacc[26886]: ClamInotif: extra scanning on inotify events enabled
Mar 19 09:57:55 centos-7 clamonacc[26886]: /home/fabrizio/eicar.com: Win.Test.EICAR_HDB-1 FOUND
Mar 19 09:57:55 centos-7 clamonacc[26886]: /home/fabrizio/eicar.com: moved to '/root/quarantine/eicar.com'
Warning: clamav-clamonacc.service changed on disk. Run 'systemctl daemon-reload' to reload units.
Abilitare il servizio
sudo systemctl enable clamonacc.service
Se tutto è andato bene On-Access scanner starà girando in background proteggendo attivamente la directory specificata dal parametro OnAccessIncludePath. Per testarne il buon funzionamento si può copiare un eicar file nella directory specificata e tentarne la lettura. Il sistema dovrebbe rispondere con un messaggio “Operation not permitted”.
wget https://secure.eicar.org/eicar.com
cat eicar.com
cat: eicar.com: Operation not permitted
Il file è stato spostato nella directory definita dall’opzione “–move” all’interno del file di definizione del servizio.
Ultima modifica 03/05/2021 FG