Fermer

mars 13, 2024

Scanner antivirus ClamAV pour les téléchargements de fichiers pour les applications Python

Scanner antivirus ClamAV pour les téléchargements de fichiers pour les applications Python


Introduction

ClamAV est un moteur antivirus open source conçu pour détecter les chevaux de Troie, virus, logiciels malveillants et autres menaces malveillantes sur les systèmes Unix. Initialement développé pour l’analyse des e-mails sur les systèmes Unix comme Linux, il est devenu une solution antivirus complète pour diverses plates-formes, notamment Windows et macOS. Connu pour sa fiabilité, sa facilité d’utilisation et ses mises à jour fréquentes, ClamAV est devenu un choix populaire auprès des utilisateurs individuels et des organisations recherchant une protection efficace contre les cybermenaces.

Clamd est un module Python portable qui utilise le moteur antivirus ClamAV sur Windows, Linux, MacOSX et d’autres plates-formes. Cela nécessite une instance en cours d’exécution du démon clamd. Les étapes ci-dessous fourniront des détails sur la façon d’installer ClamAV et comment il peut être utilisé avec les applications Python.

Mise en œuvre technique

Étape 1. Ouvrez le terminal et installez ClamAV en local en utilisant cmd pour macOS brasser installer ClamAV

Étape 2: Accédez au chemin dans macOS cd /opt/homebrew/etc/clamav/ qui contiendra deux exemples de fichiers

  1. clamd.conf.sample
  2. freshclam.conf.sample

Étape 3: Exécutez cmd. « cp freshclam.conf.sample freshclam.conf » pour copier et ouvrir le fichier qui vient d’être créé et commenter Exemple -> #Exemple.

Étape 4: Ouvrez le terminal et mettez à jour la base de données ClamAV en utilisant «palourde fraîche -v”.

Étape 5 : Exécutez cmd. « cp clamd.conf.sample clamd.conf » pour copier et ouvrir le fichier qui vient d’être créé et appliquer les modifications ci-dessous

  1. Commenter Exemple -> #Exemple
  2. Décommenter TCPSocket
  3. Décommenter TCPAddr

Étape 6 : Maintenant que nous avons installé et configuré ClamAV et exécuté ClamAV en local palourde –premier plancela exécutera le service ClamAV sur

  • HÔTE = hôte local
  • PORT = 3310

Étape 7 : Maintenant, dans votre application, installez le package python ClamAV à l’aide de la commande ci-dessous.

pip install clamd==1.0.2

Étape 8 : Une fois installé, importez le package dans votre application comme ci-dessous pour analyser les fichiers dans un chemin spécifique.

import clamd

def scan_file_using_file_path():
    cd = clamd.ClamdNetworkSocket()
    cd.__init__(host="127.0.0.1", port=3310, timeout=100)
    cwd = os.getcwd()
    for file in os.listdir("files"):
        directory = os.path.join(cwd, f"files/{file}")
        res = cd.scan(file=directory)
        print(res)

scan_file_using_file_path()

Results:
{'/Users/PycharmProjects/ClamAVAntivirus/files/test_xls.xlsx': ('OK', None)}
{'/Users//PycharmProjects/ClamAVAntivirus/files/users.txt': ('OK', None)}
{'/Users/PycharmProjects/ClamAVAntivirus/files/testfile.txt': ('FOUND', 'Win.Test.EICAR_HDB-1')}
{'/Users/PycharmProjects/ClamAVAntivirus/files/test_pdf.pdf': ('OK', None)}
{'/Users/PycharmProjects/ClamAVAntivirus/files/image.jpg': ('OK', None)}

Process finished with exit code 0

Après avoir analysé les fichiers, il signalera si un élément malveillant est trouvé. Vous trouverez ci-dessous un exemple pour analyser un fichier si l’entrée se présente sous la forme d’un flux.

from io import BytesIO

def scan_file_using_byte_stream():
    with open("files/testfile.txt", "rb") as fh:
        buf = BytesIO(fh.read())
        try:
            res = antivirus_scanner.scan_stream(stream=buf)
        except (AntivirusScannerException, MaliciousContentException) as e:
            print(e)
        else:
            if res == "OK":
                print("File scanned successfully, no potential malware found")
            else:
                print("Something went wrong!!!")


scan_file_using_byte_stream()

Results:

***** Contenu malveillant détecté lors de l’analyse des fichiers, motif : Win.Test.EICAR_HDB-1 *****

Processus terminé avec le code de sortie 0

Classe pour se connecter au service ClamAV

from io import BytesIO
from typing import Optional, Tuple
import clamd


class AntivirusScannerException(Exception):
    pass


class MaliciousContentException(AntivirusScannerException):
    def __init__(self, reason: str):
        super().__init__(f"Malicious content found in file scanning, reason: {reason}")


class InvalidScanResultStatus(AntivirusScannerException):
    def __init__(self, status: str):
        super().__init__(f"Undefined status returned from antivirus scanner: {status}")


class ClamAvScanner:
    _CONNECTION_TIMEOUT = 60
    _DEFAULT_PORT = 3310
    _MALICIOUS_STATUSES = frozenset(("ERROR", "FOUND"))

    def __init__(self, hostname: str, port: Optional[int]):
        self._hostname = hostname
        self._port = port or self._DEFAULT_PORT

    def scan_stream(self, stream: BytesIO):
        connection = self._init_connection()
        try:
            output = connection.instream(stream)
        except (clamd.BufferTooLongError, clamd.ConnectionError) as exc:
            raise AntivirusScannerException(
                "Unable to scan stream due to internal issues"
            ) from exc

        return self._output(output["stream"])

    def _init_connection(self) -> clamd.ClamdNetworkSocket:
        return clamd.ClamdNetworkSocket(
            host=self._hostname,
            port=self._port,
            timeout=self._CONNECTION_TIMEOUT,
        )

    def _output(self, output: Tuple[str, str]):
        status, reason = output
        if status in self._MALICIOUS_STATUSES:
            raise MaliciousContentException(reason)
        if status != "OK":
            raise InvalidScanResultStatus(status)
        if status == "OK":
            return "OK"


antivirus_scanner = ClamAvScanner(hostname="127.0.0.1", port=3310)

Pour déterminer quel virus est associé à un fichier détecté par ClamAV, vous pouvez généralement consulter le rapport d’analyse généré par ClamAV une fois l’analyse terminée. Le rapport doit indiquer le nom ou l’identifiant du virus ou du logiciel malveillant détecté ainsi que des informations sur le fichier affecté. De plus, vous pouvez rechercher le nom ou l’identifiant spécifique du virus en ligne pour trouver plus d’informations sur ses caractéristiques et son impact potentiel.

Liens:

  • https://pypi.org/project/clamd/

Quelques bonnes pratiques :

  • Filtrage ou autorisation uniquement des formats de fichiers requis lors du téléchargement. (ex : .pdf, .jpeg, .xlsx)
  • Analyse des fichiers à la recherche de logiciels malveillants potentiels avant de les stocker.
  • Limitation de la taille maximale du fichier.

Conclusion

En conclusion, ClamAV reste une solution antivirus fiable, offrant une protection essentielle contre un large éventail de menaces malveillantes sur plusieurs plates-formes. Grâce à sa nature open source, ses mises à jour fréquentes et ses capacités de détection robustes, ClamAV reste un outil précieux dans la lutte contre les logiciels malveillants. Que vous soyez un utilisateur individuel ou une grande organisation, l’intégration de ClamAV dans votre stratégie de cybersécurité peut vous aider à protéger vos systèmes et vos données contre le paysage en constante évolution des cybermenaces.

VOUS TROUVEZ CECI UTILE ? PARTAGEZ-LE






Source link