Antivirus per Linux Centos 7

ClamavNet
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