Automatiser la gestion des alertes CERT avec Google Sheets et Google Apps Script

Face aux risques croissants en matière de cybersécurité, de nombreuses entreprises surveillent attentivement les alertes de sécurité, notamment celles émises par le CERT-FR (Centre gouvernemental de veille, d’alerte et de réponse aux attaques informatiques). Le flux RSS des alertes CERT permet d’accéder rapidement aux informations concernant les nouvelles vulnérabilités et menaces potentielles. Cependant, il peut être fastidieux de gérer manuellement chaque alerte pour éviter les doublons et suivre les alertes en cours de traitement.

Dans cet article, nous allons découvrir comment utiliser Google Sheets et Google Apps Script pour automatiser la gestion des alertes CERT. Grâce à un script qui importe et vérifie les alertes, nous pourrons suivre les nouvelles alertes, les marquer comme « À traiter » ou « Terminé », et recevoir une notification par email pour chaque alerte inédite.

Idéé de présentation

Pourquoi automatiser la gestion des alertes CERT ?

L’automatisation de la gestion des alertes présente plusieurs avantages :

  1. Gain de temps : Inutile de vérifier manuellement chaque alerte pour éviter les doublons.
  2. Traçabilité : Garder une trace de toutes les alertes reçues, avec leur statut de traitement.
  3. Notification automatique : Recevoir une alerte par email uniquement pour les nouvelles informations.
  4. Suivi facilité : Utiliser un tableau Google Sheets pour visualiser, trier, et filtrer les alertes.

Configuration requise

Avant de commencer, assurez-vous d’avoir accès à :

• Un compte Google avec Google Sheets.

• L’autorisation d’utiliser Google Apps Script dans ce compte.

Le code pour automatiser les alertes

Voici le code en question. Il se divise en plusieurs parties : l’importation du flux RSS, la vérification des doublons, l’insertion des nouvelles alertes, et l’envoi d’un email pour chaque alerte inédite.

/**
 * Script pour automatiser la gestion des alertes CERT dans Google Sheets.
 * Ce script importe les alertes du flux RSS du CERT-FR, vérifie les doublons,
 * et notifie par email pour chaque nouvelle alerte non encore envoyée.
 *
 * @param {string} urlRSS - Lien du flux RSS des alertes CERT-FR.
 * @param {string} destinataire - Adresse email pour recevoir les notifications d'alerte.
 * 
 * Fonctionnalités :
 * - Initialisation des en-têtes de colonne dans Google Sheets.
 * - Récupération et traitement du flux RSS du CERT-FR.
 * - Vérification des doublons d'alertes dans la feuille.
 * - Ajout des nouvelles alertes avec statut par défaut.
 * - Envoi d'email de notification pour chaque alerte inédite.
 * - Mise à jour du statut d'envoi pour éviter les renvois.
 * 
 * Instructions :
 * - Créer une feuille nommée "Alertes" dans Google Sheets.
 * - Ajouter le script dans l’éditeur de Google Apps Script.
 * - Configurer un déclencheur journalier pour une exécution automatique.
 * 
 * Auteur : Fabrice Faucheux
 * Date : 27/10/2024
 */

function importerEtEnvoyerAlertes() {
  const urlRSS = 'https://www.cert.ssi.gouv.fr/alerte/feed/';
  const feuille = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Alertes') || SpreadsheetApp.getActiveSpreadsheet().insertSheet('Alertes');
  const destinataire = "votre.email@exemple.com"; // Remplace par ton adresse email

  // Initialisation des en-têtes de colonne
  feuille.getRange('A1:E1').setValues([['ID', 'Titre', 'Lien', 'Statut', 'Envoyé']]);
  feuille.getRange("A1:E1").setFontWeight("bold").setHorizontalAlignment("center");

  // Récupération et traitement du flux RSS
  const réponse = UrlFetchApp.fetch(urlRSS);
  const xml = XmlService.parse(réponse.getContentText());
  const entrées = xml.getRootElement().getChild('channel').getChildren('item');

  // Récupération des IDs existants dans la feuille pour éviter les doublons
  const dernierRang = feuille.getLastRow();
  const idsExistants = dernierRang > 1 ? feuille.getRange(2, 1, dernierRang - 1, 1).getValues().flat() : [];

  let nouvellesAlertes = [];
  entrées.forEach(entrée => {
    const titre = entrée.getChild('title').getText();
    const lien = entrée.getChild('link').getText();
    const id = Utilities.base64EncodeWebSafe(titre); // Utilise le titre pour générer un ID unique
    const statut = "À traiter";
    const envoyé = "Non";

    // Vérifie si l'alerte est déjà présente dans la feuille
    if (!idsExistants.includes(id)) {
      nouvellesAlertes.push([id, titre, lien, statut, envoyé]);
    }
  });

  // Insère les nouvelles alertes dans la feuille
  if (nouvellesAlertes.length > 0) {
    feuille.getRange(dernierRang + 1, 1, nouvellesAlertes.length, 5).setValues(nouvellesAlertes);
  } else {
    Logger.log("Aucune nouvelle alerte trouvée.");
  }

  // Envoie des emails pour les nouvelles alertes
  const dernierRangApresAjout = feuille.getLastRow();
  for (let i = 2; i <= dernierRangApresAjout; i++) {
    const statutEnvoi = feuille.getRange(i, 5).getValue(); // Colonne "Envoyé"
    if (statutEnvoi === "Non") {
      const titreAlerte = feuille.getRange(i, 2).getValue();
      const lienAlerte = feuille.getRange(i, 3).getValue();
      
      // Envoi de l'email
      MailApp.sendEmail({
        to: destinataire,
        subject: `Nouvelle alerte : ${titreAlerte}`,
        body: `Une nouvelle alerte a été détectée : ${titreAlerte}\n\nLien : ${lienAlerte}`
      });
      
      // Mise à jour du statut d'envoi
      feuille.getRange(i, 5).setValue("Oui");
    }
  }
}

Explication du code

  1. Initialisation des colonnes : Le script initialise les colonnes avec les en-têtes nécessaires : ID, Titre, Lien, Statut, et Envoyé.
  2. Extraction du flux RSS : Le script lit le flux RSS du CERT pour récupérer les alertes.
  3. Vérification des doublons : Le script utilise le titre de chaque alerte pour générer un ID unique, permettant de vérifier si l’alerte est déjà présente dans la feuille. Si l’alerte n’est pas encore enregistrée, elle est ajoutée.
  4. Envoi des emails : Chaque alerte inédite génère une notification par email envoyée à l’adresse spécifiée. Le statut « Envoyé » est ensuite mis à jour pour éviter tout envoi répétitif.
  5. Déclencheur journalier : Ce script peut être configuré pour s’exécuter automatiquement chaque jour en ajoutant un déclencheur temporel.

Comment utiliser ce script ?

  1. Création de la feuille Google Sheets : Créez une feuille nommée Alertes avec les colonnes telles que définies dans le code. Collez le script dans l’éditeur de Google Apps Script, puis remplacez votre.email@example.com par votre adresse.
  2. Ajout d’un déclencheur : Pour automatiser l’importation des alertes, ajoutez un déclencheur journalier au script importerEtEnvoyerAlertes. Ce déclencheur peut être configuré dans l’interface Apps Script en choisissant un déclencheur temporel journalier.
  3. Consultation des alertes : Dans Google Sheets, vous pouvez vérifier chaque alerte, modifier le statut (« À traiter », « Terminé ») et consulter les liens vers les alertes CERT.

Ce script est une solution simple et efficace pour automatiser la gestion des alertes CERT dans un contexte de suivi des vulnérabilités. En évitant les doublons et en notifiant les nouvelles alertes, il permet aux administrateurs de se concentrer sur les alertes importantes, en réduisant le temps de gestion manuelle et en gardant un suivi clair de chaque étape du traitement des alertes.