Automatiser la détection de logiciels malveillants pour des fichiers importés dans Cloud Storage

Last reviewed 2023-04-19 UTC

Ce tutoriel explique comment créer un pipeline basé sur des événements permettant d'automatiser la détection de code malveillant dans des fichiers.

L'analyse manuelle de nombreux fichiers importés dans Cloud Storage est trop chronophage pour la plupart des applications.

Ce pipeline est créé à l'aide de produits Google Cloud et d'un moteur antivirus Open Source appelé ClamAV. Dans ce tutoriel, ClamAV s'exécute dans un conteneur Docker hébergé dans Cloud Run. Le pipeline écrit également des entrées de journal dans Cloud Logging et enregistre les métriques dans Cloud Monitoring.

Vous pouvez exploiter ces entrées de journal Logging pour déclencher des alertes basées sur les journaux, mais leur configuration n'entre pas dans le cadre de ce tutoriel.

Dans ce tutoriel, le terme logiciel malveillant est un terme générique désignant les chevaux de Troie, les virus et autres codes malveillants.

Dans ce tutoriel, nous partons du principe que vous maîtrisez les fonctionnalités de base de Cloud Storage, de Cloud Run, de Cloud Scheduler, d'Eventarc, de Docker et de Node.js.

Architecture

Le diagramme suivant montre une vue d'ensemble de l'architecture.

Architecture du pipeline de détection des logiciels malveillants.

Deux pipelines sont gérés par cette architecture :

  • Le pipeline d'analyse des fichiers, qui vérifie si un fichier importé contient des logiciels malveillants.
  • Le pipeline de mise à jour du miroir de la base de données ClamAV de logiciels malveillants, qui tient à jour un miroir de la base de données de logiciels malveillants utilisée par ClamAV.

Pipeline d'analyse des fichiers

Le pipeline d'analyse des fichiers fonctionne comme suit :

  1. Les utilisateurs finaux importent leurs fichiers dans le bucket Cloud Storage non analysé.
  2. Le service Eventarc détecte cet événement d'importation et informe le service Cloud Run de la présence d'un nouveau fichier.
  3. Le service Cloud Run télécharge le nouveau fichier à partir du bucket Cloud Storage non analysé et le transmet au service de détection de logiciels malveillants ClamAV.
  4. En fonction du résultat de la recherche de logiciels malveillants, le service effectue l'une des actions suivantes :
    • Si ClamAV déclare que le fichier est sain, il est déplacé du bucket Cloud Storage non analysé vers le bucket Cloud Storage sain.
    • Si ClamAV déclare que le fichier contient des logiciels malveillants, il est déplacé du bucket Cloud Storage non analysé vers le bucket Cloud Storage de quarantaine.
  5. Le service transmet le résultat de ces actions à Logging et Monitoring pour permettre aux administrateurs d'intervenir.

Pipeline de mise à jour du miroir de la base de données ClamAV de logiciels malveillants

Pour que l'analyse des logiciels malveillants réalisée par ClamAV soit efficace, celui-ci doit conserver une base de données à jour des signatures de logiciels malveillants.

Le service ClamAV est exécuté à l'aide de Cloud Run, qui est un service sans état. Au démarrage d'une instance du service, ClamAV doit systématiquement télécharger la dernière base de données complète de logiciels malveillants, dont la taille atteint plusieurs centaines de mégaoctets.

La base de données publique de logiciels malveillants de ClamAV est hébergée sur un réseau de distribution de contenu (CDN), qui limite le débit de ces téléchargements. Si plusieurs instances démarrent et tentent de télécharger la base de données complète, la limitation du débit peut être déclenchée. L'adresse IP externe utilisée par Cloud Run est alors bloquée pendant 24 heures. Cela empêche le démarrage du service ClamAV ainsi que le téléchargement des mises à jour de la base de données de logiciels malveillants.

De plus, Cloud Run utilise un pool partagé d'adresses IP externes. Par conséquent, les téléchargements provenant des instances de détection de logiciels malveillants issues d'autres projets sont considérés par le CDN comme émanant d'une seule adresse et déclenchent également le blocage.

Ce pipeline conserve dans Cloud Storage un miroir local privé à jour de la base de données. Cela garantit que l'accès à la base de données publique de ClamAV n'intervient qu'une fois par mise à jour. Le téléchargement porte ainsi sur des fichiers de mises à jour différentielles plus petits, et non sur la base de données complète, ce qui évite toute limitation du débit.

Ce pipeline fonctionne comme suit :

  1. Un job Cloud Scheduler est configuré de manière à se déclencher toutes les deux heures, ce qui correspond à l'intervalle par défaut entre deux vérifications de mise à jour par le service freshclam de ClamAV. Ce job envoie une requête HTTP POST au service Cloud Run pour lui demander de mettre à jour le miroir de la base de données de logiciels malveillants.
  2. L'instance Cloud Run copie le miroir de la base de données de logiciels malveillants à partir du bucket Cloud Storage vers le système de fichiers local.
  3. L'instance exécute alors l'outil ClamAV CVDUpdate, qui télécharge les mises à jour différentielles disponibles et les applique au miroir de la base de données.
  4. Ensuite, il copie à nouveau le miroir de la base de données de logiciels malveillants mis à jour vers le bucket Cloud Storage.

Le service ClamAV freshclam exécuté dans l'instance Cloud Run télécharge la base de données de logiciels malveillants depuis Cloud Storage à son démarrage. Pendant l'exécution, il effectue aussi régulièrement une vérification et un téléchargement des mises à jour disponibles pour la base de données dans le bucket Cloud Storage.

Objectifs

  • Créer un miroir de la base de données ClamAV de définitions de logiciels malveillants dans un bucket Cloud Storage.

  • Créer un service Cloud Run avec les fonctions suivantes :

    • Détection de logiciels malveillants dans des fichiers stockés dans un bucket Cloud Storage à l'aide de ClamAV, et déplacement des fichiers analysés vers des buckets de fichiers sains ou mis en quarantaine en fonction du résultat de l'analyse.
    • Gestion d'un miroir de la base de données ClamAV de définitions de logiciels malveillants dans Cloud Storage.
  • Créer un déclencheur Eventarc pour déclencher le service de détection de logiciels malveillants lors de l'importation d'un fichier dans Cloud Storage.

  • Créer un job Cloud Scheduler pour déclencher le service de détection de logiciels malveillants afin d'actualiser le miroir de la base de données de définitions de logiciels malveillants dans Cloud Storage.

Coûts

Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :

Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût. Les nouveaux utilisateurs de Google Cloud peuvent bénéficier d'un essai gratuit.

Une fois que vous avez terminé les tâches décrites dans ce document, vous pouvez éviter de continuer à payer des frais en supprimant les ressources que vous avez créées. Pour en savoir plus, consultez la section Effectuer un nettoyage.

Avant de commencer

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Artifact Registry, Cloud Run, Eventarc, Logging, Cloud Scheduler, Pub/Sub, and Cloud Build APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the Artifact Registry, Cloud Run, Eventarc, Logging, Cloud Scheduler, Pub/Sub, and Cloud Build APIs.

    Enable the APIs

  8. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  9. Dans ce tutoriel, vous allez exécuter toutes les commandes dans Cloud Shell.

Configurer votre environnement

Dans cette section, vous créez des paramètres pour les valeurs utilisées tout au long du tutoriel, telles que la région et la zone. Dans ce tutoriel, vous utilisez us-central1 comme région pour le service Cloud Run et us comme emplacement pour le déclencheur Eventarc et les buckets Cloud Storage.

  1. Dans Cloud Shell, définissez les variables de shell courantes, y compris la région et l'emplacement :

    REGION=us-central1
    LOCATION=us
    PROJECT_ID=PROJECT_ID
    SERVICE_NAME="malware-scanner"
    SERVICE_ACCOUNT="${SERVICE_NAME}@${PROJECT_ID}.iam.gserviceaccount.com"

    Définissez PROJECT_ID sur l'ID de votre projet.

  2. Initialisez l'environnement gcloud avec votre ID de projet :

    gcloud config set project "${PROJECT_ID}"
    
  3. Créez trois buckets Cloud Storage avec des noms uniques :

    gsutil mb -l "${LOCATION}" "gs://unscanned-${PROJECT_ID}"
    gsutil mb -l "${LOCATION}" "gs://quarantined-${PROJECT_ID}"
    gsutil mb -l "${LOCATION}" "gs://clean-${PROJECT_ID}"
    

    ${PROJECT_ID} permet de garantir que les noms de bucket sont uniques.

    Ces trois buckets contiennent les fichiers importés lors des différentes étapes du pipeline d'analyse de fichiers :

    • unscanned-PROJECT_ID : contient les fichiers avant leur analyse. Vos utilisateurs importent leurs fichiers dans ce bucket.

    • quarantined-PROJECT_ID : contient les fichiers analysés par le service de détection de logiciels malveillants et considérés comme contenant des logiciels malveillants.

    • clean-PROJECT_ID : contient les fichiers analysés par le service de détection de logiciels malveillants et identifiés comme non infectés.

  4. Créez un quatrième bucket Cloud Storage :

    gsutil mb -l "${LOCATION}" "gs://cvd-mirror-${PROJECT_ID}"
    

    ${PROJECT_ID} permet de garantir que le nom du bucket est unique.

    Ce bucket cvd-mirror-PROJECT_ID sert à gérer un miroir local de la base de données de définitions de logiciels malveillants, ce qui évite le déclenchement de la limitation du débit par le CDN de ClamAV.

Créer un compte de service pour le service de détection de logiciels malveillants et accorder les autorisations requises

Dans cette section, vous allez créer un compte de service qui sera utilisé par le service de détection de logiciels malveillants et attribuer les rôles appropriés au compte de service afin qu'il soit autorisé à lire et écrire dans les buckets Cloud Storage. Cela permet de garantir que le compte dispose d'autorisations minimales et n'a accès qu'aux ressources dont il a besoin.

  1. Créez le compte de service malware-scanner :

    gcloud iam service-accounts create ${SERVICE_NAME}
    
  2. Attribuez le rôle "Administrateur des objets" pour les buckets, ce qui permet au service de lire et de supprimer des fichiers du bucket non analysé, ainsi que d'écrire des fichiers dans les buckets de fichiers sains et mis en quarantaine.

    gsutil iam ch \
        "serviceAccount:${SERVICE_ACCOUNT}:objectAdmin" \
        "gs://unscanned-${PROJECT_ID}"
    gsutil iam ch \
        "serviceAccount:${SERVICE_ACCOUNT}:objectAdmin" \
        "gs://clean-${PROJECT_ID}"
    gsutil iam ch \
        "serviceAccount:${SERVICE_ACCOUNT}:objectAdmin" \
        "gs://quarantined-${PROJECT_ID}"
    gsutil iam ch \
        "serviceAccount:${SERVICE_ACCOUNT}:objectAdmin" \
        "gs://cvd-mirror-${PROJECT_ID}"
    
  3. Attribuez le rôle "Rédacteur de métriques" permettant au service d'écrire des métriques dans Monitoring :

    gcloud projects add-iam-policy-binding \
          "${PROJECT_ID}" \
          --member="serviceAccount:${SERVICE_ACCOUNT}" \
          --role=roles/monitoring.metricWriter
    

Créer un service de détection de logiciels malveillants dans Cloud Run

Dans cette section, vous déployez le service de détection de logiciels malveillants sur Cloud Run. Le service s'exécute dans un conteneur Docker et contient les éléments suivants :

  • Un fichier Dockerfile servant à créer une image de conteneur qui héberge le service, l'environnement d'exécution Node.js, le SDK gcloud et les binaires ClamAV.
  • Les fichiers Node.js pour le service Cloud Run de détection de logiciels malveillants
  • Le fichier de configuration config.json pour spécifier les noms de vos buckets Cloud Storage.
  • Le script shell updateCvdMirror.sh servant à actualiser le miroir de la base de données ClamAV de définitions de logiciels malveillants dans Cloud Storage.
  • Le service cloud-run-proxy servant de proxy pour les requêtes HTTP freshclam, qui fournissent un accès authentifié aux API Cloud Storage.
  • Le script shell bootstrap.sh afin d'exécuter les services nécessaires au démarrage de l'instance.
  1. Dans Cloud Shell, clonez le dépôt GitHub contenant les fichiers de code :

    git clone https://github.com/GoogleCloudPlatform/docker-clamav-malware-scanner.git
    
  2. Accédez au répertoire cloudrun-malware-scanner :

    cd docker-clamav-malware-scanner/cloudrun-malware-scanner
    
  3. Modifiez le fichier de configuration config.json pour spécifier les buckets Cloud Storage que vous venez de créer. Comme ils sont basés sur l'ID du projet, vous pouvez utiliser une simple opération de recherche et remplacement :

    sed "s/-bucket-name/-${PROJECT_ID}/" config.json.tmpl > config.json
    

    Vous pouvez afficher le fichier de configuration mis à jour :

    cat config.json
    
  4. Effectuez un remplissage initial du miroir de la base de données ClamAV dans Cloud Storage :

    python3 -m venv pyenv
    . pyenv/bin/activate
    pip3 install crcmod cvdupdate
    ./updateCvdMirror.sh "cvd-mirror-${PROJECT_ID}"
    deactivate
    

    Cette commande effectue une installation locale de l'outil CVDUpdate, l'utilise pour télécharger la base de données de logiciels malveillants, puis importe celle-ci dans le bucket cvd-mirror Cloud Storage que vous avez créé précédemment.

    Vous pouvez vérifier le contenu du miroir :

    gsutil ls "gs://cvd-mirror-${PROJECT_ID}/cvds"
    

    Le bucket doit contenir plusieurs fichiers CVD qui correspondent à la base de données complète de logiciels malveillants, plusieurs fichiers .cdiff contenant les mises à jour différentielles quotidiennes, et deux fichiers .json contenant des informations de configuration et d'état.

  5. Créez et déployez le service Cloud Run à l'aide du compte de service créé précédemment :

    gcloud beta run deploy "${SERVICE_NAME}" \
      --source . \
      --region "${REGION}" \
      --no-allow-unauthenticated \
      --memory 4Gi \
      --cpu 1 \
      --concurrency 20 \
      --min-instances 1 \
      --max-instances 5 \
      --no-cpu-throttling \
      --cpu-boost \
      --service-account="${SERVICE_ACCOUNT}"
    

    Cela crée une instance Cloud Run dotée d'un processeur virtuel et de 4 Gio de RAM. Bien que cette taille soit acceptable pour ce tutoriel, un environnement de production peut justifier de choisir des valeurs plus élevées de nombre de processeurs et de taille de mémoire pour l'instance, ainsi qu'un paramètre --max-instances plus élevé en fonction du trafic que le service doit gérer.

    Le paramètre --concurrency indique le nombre de requêtes simultanées que chaque instance peut traiter.

    Le paramètre --no-cpu-throttling permet à l'instance d'effectuer des opérations en arrière-plan, telles que la mise à jour des définitions de logiciels malveillants.

    Le paramètre --cpu-boost double le nombre de vCPU au démarrage de l'instance afin de réduire la latence de démarrage.

    Le paramètre --min-instances 1 conserve au moins une instance active, car le temps de démarrage de chaque instance est relativement élevé.

    Le paramètre --max-instances 5 empêche un scaling à la hausse excessif du service.

  6. Lorsque vous y êtes invité, saisissez Y.

La compilation et le déploiement prennent environ 10 minutes. Une fois l'opération terminée, un message s'affiche :

Service [malware-scanner] revision [malware-scanner-NNNNN-XXX] has been deployed and is serving 100 percent of traffic.
Service URL: https://malware-scanner-XXXXXXXX-XX.a.run.app

Stockez la valeur Service URL résultant de la commande de déploiement dans une variable shell. Elle sera utilisée ultérieurement lors de la création d'un job Cloud Scheduler :

SERVICE_URL="SERVICE_URL"

Le service Cloud Run exige que tous les appels soient authentifiés, et les identités d'authentification doivent disposer de l'autorisation run.routes.invoke sur le service.

Vous pouvez vérifier le service en cours d'exécution et la version de ClamAV en exécutant la commande suivante :

curl -D - -H "Authorization: Bearer $(gcloud auth print-identity-token)"  \
     ${SERVICE_URL}

Créer un déclencheur Cloud Storage pour Eventarc

Dans cette section, vous allez ajouter des autorisations pour permettre à Eventarc de capturer les événements Cloud Storage et un déclencheur pour envoyer ces événements au service malware-scanner Cloud Run.

  1. Si vous utilisez un projet existant créé avant le 8 avril 2021, configurez Pub/Sub pour les notifications push.

  2. Dans Cloud Shell, attribuez le rôle roles/pubsub.publisher au compte de service Cloud Storage :

    STORAGE_SERVICE_ACCOUNT=$(gsutil kms serviceaccount -p "${PROJECT_ID}")
    
    gcloud projects add-iam-policy-binding "${PROJECT_ID}" \
      --member "serviceAccount:${STORAGE_SERVICE_ACCOUNT}" \
      --role "roles/pubsub.publisher"
    
  3. Autorisez le compte de service malware-scanner à appeler le service Cloud Run et à agir en tant que récepteur d'événements Eventarc :

    gcloud run services add-iam-policy-binding "${SERVICE_NAME}" \
      --region="${REGION}" \
      --member "serviceAccount:${SERVICE_ACCOUNT}" \
      --role roles/run.invoker
    gcloud projects add-iam-policy-binding "${PROJECT_ID}" \
      --member "serviceAccount:${SERVICE_ACCOUNT}" \
      --role "roles/eventarc.eventReceiver"
    
  4. Créez un déclencheur Eventarc pour capturer l'événement d'objet finalisé dans le bucket Cloud Storage non analysé et l'envoyer à votre service Cloud Run. Le déclencheur utilisera le compte de service malware-scanner pour l'authentification :

    BUCKET_NAME="unscanned-${PROJECT_ID}"
    gcloud eventarc triggers create "trigger-${BUCKET_NAME}-${SERVICE_NAME}" \
      --destination-run-service="${SERVICE_NAME}" \
      --destination-run-region="${REGION}" \
      --location="${LOCATION}" \
      --event-filters="type=google.cloud.storage.object.v1.finalized" \
      --event-filters="bucket=${BUCKET_NAME}" \
      --service-account="${SERVICE_ACCOUNT}"
    

    Si vous recevez l'une des deux erreurs suivantes, attendez une minute, puis exécutez à nouveau la commande :

    ERROR: (gcloud.eventarc.triggers.create) INVALID_ARGUMENT: The request was invalid: Bucket "unscanned-PROJECT_ID" was not found. Please verify that the bucket exists.

    ERROR: (gcloud.eventarc.triggers.create) FAILED_PRECONDITION: Invalid resource state for "": Permission denied while using the Eventarc Service Agent. If you recently started to use Eventarc, it may take a few minutes before all necessary permissions are propagated to the Service Agent. Otherwise, verify that it has Eventarc Service Agent role.

  5. Passez le délai de confirmation des messages à deux minutes dans l'abonnement Pub/Sub sous-jacent utilisé par le déclencheur Eventarc :

    SUBSCRIPTION_NAME=$(gcloud eventarc triggers describe \
        "trigger-${BUCKET_NAME}-${SERVICE_NAME}" \
        --location="${LOCATION}" \
        --format="get(transport.pubsub.subscription)")
    gcloud pubsub subscriptions update "${SUBSCRIPTION_NAME}" --ack-deadline=120
    

    La valeur par défaut de dix secondes est trop courte pour les fichiers volumineux ou les charges élevées.

Créer un job Cloud Scheduler pour déclencher les mises à jour du miroir de la base de données ClamAV

Créez un job Cloud Scheduler qui exécute une requête HTTP POST sur le service Cloud Run avec une commande permettant de mettre à jour le miroir de la base de données de définitions de logiciels malveillants. Pour éviter que trop de clients n'utilisent le même créneau, ClamAV exige de planifier le job à une minute aléatoire comprise entre 3 et 57, en évitant les multiples de 10.

while : ; do
  # set MINUTE to a random number between 3 and 57
  MINUTE="$((RANDOM%55 + 3))"
  # exit loop if MINUTE is not a multiple of 10
  [[ $((MINUTE % 10)) != 0 ]] && break
done

gcloud scheduler jobs create http \
    "${SERVICE_NAME}-mirror-update" \
    --location="${REGION}" \
    --schedule="${MINUTE} */2 * * *" \
    --oidc-service-account-email="${SERVICE_ACCOUNT}" \
    --uri="${SERVICE_URL}" \
    --http-method=post \
    --message-body='{"kind":"schedule#cvd_update"}' \
    --headers="Content-Type=application/json"

L'argument de ligne de commande --schedule définit le moment où le job est exécuté au format de chaîne unix-cron. La valeur fournie indique qu'elle doit s'exécuter toutes les 2 heures à la minute spécifiée, générée aléatoirement.

Ce job ne met à jour que le miroir ClamAV dans Cloud Storage. Le daemon ClamAV freshclam dans chaque instance de Cloud Run vérifie la présence de nouvelles définitions auprès du miroir toutes les 30 minutes, et met à jour le daemon ClamAV.

Tester le pipeline en important des fichiers

Vous importez un fichier sain (sans logiciel malveillant) et un fichier infecté pour tester le pipeline.

  1. Créez un exemple de fichier texte ou utilisez un fichier sain existant pour tester les processus du pipeline.

  2. Copiez l'exemple de fichier de données dans le bucket des fichiers non analysés :

    gsutil cp filename "gs://unscanned-${PROJECT_ID}"
    

    Remplacez filename par le nom du fichier texte sain. Le service de détection de logiciels malveillants inspecte chaque fichier et le déplace vers le bucket approprié. Ce fichier est déplacé vers le bucket sain.

  3. Laissez quelques secondes au pipeline pour traiter le fichier, puis vérifiez dans le bucket sain que le fichier traité est bien présent :

    gsutil ls -r "gs://clean-${PROJECT_ID}"
    
  4. Le fichier a bien été supprimé du bucket non analysé :

    gsutil ls -r "gs://unscanned-${PROJECT_ID}"
    
  5. Dans Cloud Shell, importez un fichier eicar-infected.txt contenant la signature de test anti-logiciels malveillants standard EICAR dans votre bucket non analysé :

    echo -e 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' \
        | gsutil cp - "gs://unscanned-${PROJECT_ID}/eicar-infected.txt"
    
  6. Attendez quelques secondes, puis vérifiez dans le bucket de quarantaine que votre fichier est bien passé à travers le pipeline. Le service consigne également une entrée de journal Logging lorsqu'un fichier infecté par un logiciel malveillant est détecté.

    gsutil ls -r "gs://quarantined-${PROJECT_ID}"
    
  7. Le fichier a bien été supprimé du bucket non analysé :

    gsutil ls -r "gs://unscanned-${PROJECT_ID}"
    

Tester le mécanisme de mise à jour de la base de données de définitions de logiciels malveillants

  • Dans Cloud Shell, vous pouvez déclencher la vérification des mises à jour en forçant l'exécution du job Cloud Scheduler :

    gcloud scheduler jobs run "${SERVICE_NAME}-mirror-update" --location="${REGION}"
    

    Les résultats de cette commande ne seront affichés que dans les journaux détaillés.

Surveiller le service

Le service peut être surveillé à l'aide de Cloud Logging et de Cloud Monitoring.

Afficher les journaux détaillés

  1. Dans la console Google Cloud, accédez à la page "Explorateur de journaux" de Cloud Logging.

    Accéder à l'explorateur de journaux

  2. Si le filtre Champs de journal ne s'affiche pas, cliquez sur le bouton Champs de journal.

  3. Dans le filtre Champs de journal, cliquez sur Révision dans Cloud Run.

  4. Dans la section Nom du service du filtre Champs de journal, cliquez sur malware-scanner.

Les résultats de la requête de journaux affichent les journaux du service, y compris plusieurs lignes indiquant les requêtes d'analyse et l'état des deux fichiers que vous avez importés. Exemple :

Scan request for gs://unscanned-PROJECT_ID/filename, (##### bytes) scanning with clam ClamAV CLAMAV_VERSION_STRING
Scan status for gs://unscanned-PROJECT_ID/filename: CLEAN (##### bytes in #### ms)
...
Scan request for gs://unscanned-PROJECT_ID/eicar-infected.txt, (69 bytes) scanning with clam ClamAV CLAMAV_VERSION_STRING
Scan status for gs://unscanned-PROJECT_ID/eicar-infected.txt: INFECTED stream: Eicar-Signature FOUND (69 bytes in ### ms)

Vous pouvez constater que la version de ClamAV et la révision de la signature de la base de données de logiciels malveillants sont renseignées, ainsi que le nom du logiciel malveillant correspondant au fichier de test infecté.

Vous pouvez utiliser ces messages de journaux pour configurer des alertes chaque fois qu'un logiciel malveillant a été détecté ou lorsque des échecs se sont produits lors de l'analyse.

Les journaux concernant la mise en miroir des définitions de logiciels malveillants sont également affichés et se présentent comme suit :

Starting CVD Mirror update
CVD Mirror update check complete. output: ...

Si le miroir a été mis à jour, une ligne supplémentaire s'affiche :

CVD Mirror updated: DATE_TIME - INFO: Downloaded daily.cvd. Version: VERSION_INFO

Les journaux de mise à jour freshclam apparaissent toutes les 30 minutes et s'affichent comme suit :

DATE_TIME -> Received signal: wake up
DATE_TIME -> ClamAV update process started at DATE_TIME
DATE_TIME -> daily.cvd database is up-to-date (version: VERSION_INFO)
DATE_TIME -> main.cvd database is up-to-date (version: VERSION_INFO)
DATE_TIME -> bytecode.cvd database is up-to-date (version: VERSION_INFO)

Si la base de données a été mise à jour, les lignes de journal freshclam s'afficheront alors comme suit :

DATE_TIME -> daily.cld updated (version: VERSION_INFO)

Afficher les métriques

Le service génère les métriques suivantes à des fins de surveillance et d'alerte :

  • Nombre de fichiers sains traités :
    custom.googleapis.com/opencensus/malware-scanning/clean_files
  • Nombre de fichiers infectés traités :
    custom.googleapis.com/opencensus/malware-scanning/infected_files
  • Temps passé à analyser les fichiers :
    custom.googleapis.com/opencensus/malware-scanning/scan_duration
  • Nombre total d'octets analysés :
    custom.googleapis.com/opencensus/malware-scanning/bytes_scanned
  • Nombre d'échecs d'analyse de logiciels malveillants :
    custom.googleapis.com/opencensus/malware-scanning/scans_failed
  • Nombre de vérifications de mise à jour du miroir CVD :
    custom.googleapis.com/opencensus/malware-scanning/cvd-mirror-updates

Vous pouvez consulter ces métriques dans l'explorateur de métriques Cloud Monitoring.

  1. Dans la console Google Cloud, accédez à la page "Explorateur de métriques" de Cloud Monitoring.

    Accéder à l'explorateur de métriques

  2. Cliquez sur le champ Sélectionner une métrique, puis saisissez la chaîne de filtre malware.

  3. Sélectionnez la métrique OpenCensus/malware-scanning/clean_files. Le graphique affiche un point de données indiquant à quel moment le fichier sain a été analysé.

Les métriques peuvent être utilisées pour surveiller le pipeline et créer des alertes en cas de détection d'un logiciel malveillant ou d'échec du traitement des fichiers.

Pour plus de détails, les métriques peuvent être réparties en fonction de divers libellés de métrique :

  • source_bucket
  • destination_bucket
  • clam_version
  • cloud_run_revision

Gérer plusieurs buckets

Le service de détection de logiciels malveillants peut analyser des fichiers provenant de plusieurs buckets sources, en les envoyant à des buckets distincts pour les fichiers sains et mis en quarantaine.

Bien que cette configuration avancée n'entre pas dans le cadre de ce tutoriel, les étapes à suivre sont résumées comme suit :

  1. Créez les différents buckets Cloud Storage de fichiers non analysés, sains et mis en quarantaine avec des noms uniques.

  2. Attribuez les rôles appropriés au compte de service malware-scanner sur les différents buckets.

  3. Modifiez le fichier de configuration config.json pour spécifier les noms des buckets pour chaque configuration :

    {
      "buckets": [
        {
          "unscanned": "unscanned-bucket-1-name",
          "clean": "clean-bucket-1-name",
          "quarantined": "quarantined-bucket-1-name"
        },
        {
          "unscanned": "unscanned-bucket-2-name",
          "clean": "clean-bucket-2-name",
          "quarantined": "quarantined-bucket-2-name"
        }
      ]
      "ClamCvdMirrorBucket": "cvd-mirror-bucket-name"
    }
    
  4. Pour chacun des buckets non analysés, créez un déclencheur Eventarc, en veillant à associer un nom de déclencheur unique à chaque bucket.

Effectuer un nettoyage

Pour éviter que les ressources utilisées lors de ce tutoriel soient facturées sur votre compte Google Cloud, supprimez le projet contenant les ressources, ou conservez le projet et supprimez les ressources individuelles.

Supprimer le projet

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Étapes suivantes

  • Passez en revue la documentation Cloud Storage.
  • Découvrez des architectures de référence, des schémas et des bonnes pratiques concernant Google Cloud. Consultez notre Centre d'architecture cloud.