clamav

Clamav est un antivirus qui permet de scanner des fichiers. Dans notre cas, nous allons l’utiliser pour vérifier le contenu des fichiers au moment de leur upload et empêcher leur téléchargement s’ils sont suspects.

Installation de clamav

Dans un premier temps nous allons installer Clamav

franck@INFRA01:~/Documents$ sudo apt install clamav clamav-daemon build-essential

Le service se lance automatiquement, nous le coupons afin de pouvoir le relancer avec les bonnes configurations

franck@INFRA01:~/Documents$ sudo systemctl stop clamav-freshclam.service
franck@INFRA01:~/Documents$ sudo freshclam
Sun Jul 17 11:01:31 2022 -> ClamAV update process started at Sun Jul 17 11:01:31 2022
Sun Jul 17 11:01:31 2022 -> daily.cvd database is up-to-date (version: 26604, sigs: 1990352, f-level: 90, builder: raynman)
Sun Jul 17 11:01:31 2022 -> main.cvd database is up-to-date (version: 62, sigs: 6647427, f-level: 90, builder: sigmgr)
Sun Jul 17 11:01:31 2022 -> bytecode.cvd database is up-to-date (version: 333, sigs: 92, f-level: 63, builder: awillia2)
franck@INFRA01:~/Documents$ sudo systemctl start clamav-freshclam.service

Vérifier que les configurations sont bonnes:

franck@INFRA01:~/Documents$ curl https://secure.eicar.org/eicar.com.txt | clamscan
-
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    68  100    68    0     0    123      0 --:--:-- --:--:-- --:--:--   124
stdin: Win.Test.EICAR_HDB-1 FOUND

----------- SCAN SUMMARY -----------
Known viruses: 8622412
Engine version: 0.103.6
Scanned directories: 0
Scanned files: 1
Infected files: 1
Data scanned: 0.00 MB
Data read: 0.00 MB (ratio 0.00:1)
Time: 18.471 sec (0 m 18 s)
Start Date: 2022:07:17 11:02:23
End Date:   2022:07:17 11:02:42

Vous devez obtenir dans stdin :

stdin: Win.Test.EICAR_HDB-1 FOUND

Utilisation de Clamav

Pour scanner nos fichiers actuellement uploadés, nous faisons :

franck@INFRA01:/var/www/html$ clamscan fichier_drop/
/var/www/html/fichier_drop/file_16580159835640.html: Empty file
/var/www/html/fichier_drop/file_16580196038945.html: OK
/var/www/html/fichier_drop/file_16580144228625.html: Empty file
/var/www/html/fichier_drop/file_16580144377250.html: Empty file
/var/www/html/fichier_drop/composer_16580228211477.json: OK
/var/www/html/fichier_drop/python_16580172358636.py: OK
/var/www/html/fichier_drop/file_16580148914759.html: Empty file
/var/www/html/fichier_drop/file_16580196295046.html: OK
/var/www/html/fichier_drop/file_16580161041315.html: OK
/var/www/html/fichier_drop/test_16580199663182.pdf: OK
/var/www/html/fichier_drop/ls_16580170519271: OK
/var/www/html/fichier_drop/file_16580195762619.html: OK
/var/www/html/fichier_drop/test_16580170688963.c: OK
/var/www/html/fichier_drop/ _16580170620541: Empty file
/var/www/html/fichier_drop/test_16580171158318.jpeg: OK
/var/www/html/fichier_drop/test_16580171426550.py: OK
/var/www/html/fichier_drop/agent_bis.php: OK
/var/www/html/fichier_drop/test_16580171798950.php: OK
/var/www/html/fichier_drop/linux.svg_16580458217612.png: OK
/var/www/html/fichier_drop/file_16580160694417.html: Empty file
/var/www/html/fichier_drop/ls_16580227458982: OK
/var/www/html/fichier_drop/file_1658014381073.9.html: Empty file
/var/www/html/fichier_drop/file_16580148863807.html: Empty file
/var/www/html/fichier_drop/file_16580144114170.html: Empty file
/var/www/html/fichier_drop/file_16580146979588.html: Empty file
/var/www/html/fichier_drop/test_16580175115380.pdf: OK

----------- SCAN SUMMARY -----------
Known viruses: 8622412
Engine version: 0.103.6
Scanned directories: 1
Scanned files: 16
Infected files: 0
Data scanned: 0.15 MB
Data read: 0.28 MB (ratio 0.54:1)
Time: 16.942 sec (0 m 16 s)
Start Date: 2022:07:17 11:05:03
End Date:   2022:07:17 11:05:20

Nous pouvons voir que actuellement aucun fichier ne contient de potentiel virus contenu dans la base de donnée de clamav.

Modification test.php

Afin que chaque fichier soit testé au moment de l’upload, nous allons ajouter une partie au fichier test.php, juste au dessus de la section d’upload :

franck@INFRA01:/var/www/html$ sudo nano php_legit/test.php
[...]

#########################################################################################
# Verification avec clamav du contenu
######################################################################################
$safe_path = escapeshellarg($_FILES['userfile']['tmp_name']);
$command = 'clamscan ' . $safe_path;
$out = '';
$int = -1;
exec($command, $out, $int);
if ($int != 0)
{
        upload_failure();
}
#########################################################################################
# On upload le fichier
######################################################################################

[...]

Le fichier complet est disponible ici : test.php

Rapidité : clamd

Le défaut de cette solution est que notre site est ralenti. Pour aller plus vite nous pourrions utiliser la daemon de clamav : clamd.

Cela nécessite néamoins de modifier les droits sur le dossier fichier_drop, ce qui peut amener d’autres failles et de laisser un processus tourner en fond constamment (qui pourrait aussi être une nouvelle faille).