De nos jours, nous sommes de plus en plus exposé aux virus. Il faut être vigilant pour éviter de se faire pirater et se faire voler un bon nombre de données (carte bancaire, mots de passe critiques, …). C’est pour cela que j’ai créé un scanner d’usb.
La plus grosse faille de sécurité dans un réseau se trouve entre la chaise et l’écran. Il est très imporant de limiter cette faille au maximum. On nous le répète souvent mais il faut faire attention aux liens non-officiels, attention aux spams, et aussi attention aux clés usb qui viennent de l’extérieur. Le scanner d’usb va servir à scanner toutes les clés de nos clients, nos fournisseurs, … pour être certain qu’aucun virus ne se cache dedans…
C’est parti nous allons le construire ! Vous allez voir ce n’est pas très compliqué.
Commencons par lister tous les composants nécessaires :
Les composants
Raspberry pi 4 | https://amzn.to/3i8N3AK |
Bouton | https://amzn.to/2R1oZEf |
PLA | https://amzn.to/3h7IQfs |
LEDs 5mm | https://amzn.to/2FbhTtZ |
Connecteurs | https://amzn.to/3h7qw6b |
Résistances | https://amzn.to/2R1pM8b |
Plus votre raspberry aura de la mémoire, plus le scanne ira vite. Pour un raspberry de 8go de ram, le scan prend 1 minute pour des très petits fichiers. Pour un raspberry pi 3, le scan prend 4 minutes. Vous voyez donc la grande différence.
L’installation
Prérequis : le raspberry doit être installé (raspbian est monté sur la carte sd) et connecté au réseau local.
Commençons par faire les mises à jour du raspberry :
sudo apt-get update
sudo apt-get upgrade
Ensuite nous allons installer notre anti-virus ClamAv
sudo apt-get install clamav clamav-daemon
Pour éviter qu’il soit OOM (out of memory), nous allons modifier une valeur du fichier swap en ajoutant cette commande :
sudo nano /etc/dphys-swapfile
et en modifiant la valeur comme ceci :
CONF_SWAPSIZE=2048
Pour appliquer les modifications, faire :
sudo /etc/init.d/dphys-swapfile stop
puis
sudo /etc/init.d/dphys-swapfile start
Tout est maintenant en place ! Normalement le raspberry sait lire les NTFS, mais pour être sure on peut essayer d’installer l’outil :
sudo apt-get install ntfs-3g
Il ne reste plus qu’a entrer le script sur le raspberry et à tester si tout fonctionne bien. Pour ce faire nous allons créer le dossier “rapport” dans lequel tout va se trouver. Pour cela :
sudo mkdir /home/pi/rapport
Il faut aussi créer le fichier “usb” dans lequel la clé va être montée :
sudo mkdir /home/pi/rapport/usb
Ensuite, créer et editer le script « rapport.py » en faisant :
sudo nano /home/pi/rapport/rapport.py
Voilà le script à coller dans l’éditeur de texte nano :
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#Derniere version 17/07/2020 15h56
#IZIFAC
import os # module du systéme linux
import RPi.GPIO as GPIO
import time
def rapport():
fichierlog = open("/home/pi/rapport/virus.log", "r") # ouvre le fichier en lecture
contenulog = fichierlog.readlines() # appelle la fonction readlines pour lire toutes les lignes du fichier et les mettre dans la variable contenu
fichierlog.close()
contenulog.reverse()
tempolog = open("/home/pi/rapport/tmp.txt", "w")
for line in contenulog: # pour chaque ligne de la variable contenu
tempolog.write(line) # écrire les lignes dans tempolog, càd le fichier tmp.texte
tempolog.close()
tempolog = open("/home/pi/rapport/tmp.txt", "r")
nbr_erreur = 0
for i in range(7):
ligne = tempolog.readline()
liste_mots = ligne.split()
if liste_mots[0] == "Infected":
nbr = liste_mots[2]
if liste_mots[1] == "errors":
nbr_erreur = liste_mots[2]
tempolog.close() # fermer le fichier txt
return nbr, nbr_erreur
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False) # Evite l'affage des messages d'erreur inutile
#Une broche pour la sortie : la LED
GPIO.setup(21, GPIO.OUT)
GPIO.setup(20, GPIO.OUT)
GPIO.setup(16, GPIO.OUT)
GPIO.setup(12, GPIO.IN)
# Une broche pour l'entree : Le poussoir
GPIO.output(21, GPIO.LOW)
GPIO.output(20, GPIO.LOW)
GPIO.output(16, GPIO.LOW)
while True:
if GPIO.input(12) == 0:
GPIO.output(21, GPIO.HIGH)
GPIO.output(20, GPIO.HIGH)
GPIO.output(16, GPIO.HIGH)
os.system("sudo apt-get update -y")
os.system("sudo apt-get upgrade -y")
os.system("sudo sh -c'echo 1 > /proc/sys/vm/drop_caches'")
os.system("sudo kill $(pidof freshclam)")
print("freshclam killed")
os.system("sudo freshclam")
print("BDD virus up to date")
os.system("sudo umount -t ntfd-3g /dev/sda1")
os.system("sudo umount /dev/sda1")
os.system("sudo mount -t ntfs-3g /dev/sda1 /home/pi/rapport/usb")
os.system("sudo mount /dev/sda1 /home/pi/rapport/usb")
time.sleep(1)
if len(os.listdir('/home/pi/rapport/usb')) != 0:
print("cle USB detectee")
GPIO.output(16, GPIO.LOW)
GPIO.output(20, GPIO.LOW)
GPIO.output(21, GPIO.HIGH) #Allume led bleu 21 SCANNING
os.system("sudo clamscan -r --remove --log=/home/pi/rapport/virus.log /home/pi/rapport/usb")
os.system("sudo umount /dev/sda1")
GPIO.output(21, GPIO.LOW) #Eteind led bleu 21 SCANNING DONE
retour = rapport()
print(retour)
if retour[0] == "0" and retour[1] == 0:
GPIO.output(20, GPIO.HIGH) #Allume led verte20
elif retour[1] > 0:
GPIO.output(16, GPIO.HIGH)
GPIO.output(20, GPIO.HiGH)
else:
GPIO.output(16, GPIO.HIGH) #Allume led rouge 16
while True:
if GPIO.input(12) == 0:
print(GPIO.input(12))
GPIO.output(20, GPIO.LOW)
GPIO.output(16, GPIO.LOW)
os.system("sudo shutdown now")
exit()
elif len(os.listdir('/home/pi/rapport/usb')) == 0:
print("Aucune cle USB trouvee")
GPIO.output(16, GPIO.HIGH)
GPIO.output(21, GPIO.HIGH)
GPIO.output(20, GPIO.LOW)
Copier dedans le script : Ctrl + X, y, puis enter ⏎ pour sauver et quitter.
Testons maintenant le script :
sudo python /home/pi/rapport/rapport.py
Si vous obtenez une erreur avec lsof, c’est que vous devez installer les modules.
Par contre si tout se passe bien, nous pouvons configurer le raspberry pour qu’il exécute le script à chaque démarrage
pour cela, exécuter :
sudo nano /etc/rc.local
Ajoutez ensuite une ligne avant le exit 0 :
sudo python /home/pi/rapport/rapport.py
Ca y est tout est en place, maintenant il vous suffit de relier correctement les led et le bouton, et ensuite de tout mettre dans un petit boitier et votre scanner d’usb sera prêt !
Fonctionnement
Vous devez d’abord brancher le raspberry. Une fois fait, vous pouvez insérer la clé usb. Après 2 petites secondes, vous pouvez appuyez sur le bouton et le programme va démarrer.
- Toutes les leds s’allument pour signaler que le raspberry fait ses mises à jour système et base de données virus.
- Les led s’éteignent, il ne reste que la led bleu d’allumée, ce qui signifie que le scan est en pregression.
- Une fois la scan terminé, la led verte ou la led rouge s’allume en fonction du résultat.
- Appuyer sur le bouton pour que le raspberry s’éteigne.
- Si la led bleu et la rouge sont allumées en même temps, cela signifie que la clé n’est pas détectée. Il faut vérifier que la clé est bien mise et réappuyer sur le bouton.
- Si la led verte et la led rouge sont allumées en même temps, cela siginie qu’il y a eu une erreur pendant le scan sur un ou plusieurs fichier(s).
Le câblage et le boitier
Voilà le shéma de cablage, et en dessous vous trouverez un bouton pour télécharger les fichiers STL du caisson que j’ai créé. J’ai utilisé des connecteurs comme ça il est très facile de brancher et débrancher le système sans se tromper.