Collecter les journaux OpenCanary

Compatible avec:

Présentation

Cet analyseur extrait des champs des journaux JSON et SYSLOG OpenCanary, les normalise au format UDM et enrichit les données avec des champs dérivés tels que metadata.event_type et security_result.severity. Il gère différents formats de journaux, effectue la validation des adresses IP et mappe les champs sur les objets UDM appropriés, tels que principal, target et network.

Avant de commencer

  • Assurez-vous de disposer d'une instance Google SecOps.
  • Assurez-vous de disposer d'un accès privilégié à OpenCanary.

Configurer un flux dans Google SecOps pour ingérer les journaux OpenCanary

  1. Accédez à Paramètres du SIEM > Flux.
  2. Cliquez sur Ajouter.
  3. Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple, Journaux OpenCanary).
  4. Sélectionnez Webhook comme type de source.
  5. Sélectionnez OpenCanary comme type de journal.
  6. Cliquez sur Suivant.
  7. Facultatif: spécifiez des valeurs pour les paramètres d'entrée suivants :
    • Délimiteur de fractionnement: délimiteur utilisé pour séparer les lignes de journal, par exemple \n.
    • Espace de noms des éléments: espace de noms des éléments.
    • Libellés d'ingestion: libellé appliqué aux événements de ce flux.
  8. Cliquez sur Suivant.
  9. Vérifiez la configuration du flux dans l'écran Finaliser, puis cliquez sur Envoyer.
  10. Cliquez sur Générer une clé secrète pour générer une clé secrète permettant d'authentifier ce flux.
  11. Copiez et stockez la clé secrète. Vous ne pourrez plus afficher cette clé secrète. Si nécessaire, vous pouvez générer une nouvelle clé secrète, mais cette action rend l'ancienne clé secrète obsolète.
  12. Dans l'onglet Détails, copiez l'URL du point de terminaison du flux dans le champ Informations sur le point de terminaison. Vous devez spécifier cette URL de point de terminaison dans votre application cliente.
  13. Cliquez sur OK.

Créer une clé API pour le flux webhook

  1. Accédez à la console Google Cloud > Identifiants.

    Accéder à "Identifiants"

  2. Cliquez sur Créer des identifiants, puis sélectionnez Clé API.

  3. Limitez l'accès de la clé API à l'API Google Security Operations.

Spécifier l'URL du point de terminaison

  1. Dans votre application cliente, spécifiez l'URL du point de terminaison HTTPS fournie dans le flux de webhook.
  2. Activez l'authentification en spécifiant la clé API et la clé secrète dans l'en-tête personnalisé au format suivant:

    X-goog-api-key = API_KEY
    X-Webhook-Access-Key = SECRET
    

    Recommandation: Spécifiez la clé API en tant qu'en-tête plutôt que dans l'URL.

  3. Si votre client webhook n'est pas compatible avec les en-têtes personnalisés, vous pouvez spécifier la clé API et la clé secrète à l'aide de paramètres de requête au format suivant:

    ENDPOINT_URL?key=API_KEY&secret=SECRET
    

    Remplacez les éléments suivants :

    • ENDPOINT_URL: URL du point de terminaison du flux.
    • API_KEY: clé API permettant de s'authentifier auprès de Google Security Operations.
    • SECRET: clé secrète que vous avez générée pour authentifier le flux.

Configurer un Webhook OpenCanary pour Google SecOps

  1. Recherchez le fichier de configuration OpenCanary, config.json.

  2. Ouvrez le fichier config.json dans un éditeur de texte.

  3. Recherchez la section alerters (Alerteurs) dans le fichier de configuration.

  4. Si un déclencheur d'alerte webhook existe déjà, modifiez-le. Sinon, ajoutez une entrée pour l'alerteur webhook.

  5. Utilisez la configuration suivante (remplacez ENDPOINT_URL, SECRET et API_KEY par vos valeurs):

"handlers": {
    "Webhook": {
        "class": "opencanary.logger.WebhookHandler",
        "url": "<ENDPOINT_URL>",
        "method": "POST",
        "data": {"message": "%(message)s"},
        "status_code": 200,
        "headers": {
            "X-Webhook-Access-Key": "<SECRET>",
            "X-goog-api-key": "<API_KEY>"
         }
    }
}
  1. Enregistrez le fichier config.json.
  2. Redémarrez le service OpenCanary pour appliquer les modifications. (par exemple, sudo systemctl restart opencanary).

Tableau de mappage UDM

Champ de journal Mappage UDM Logique
dst_host target.asset.ip Le champ dst_host du journal brut est mappé sur l'UDM. Également mappé sur target.ip.
dst_host target.ip Le champ dst_host du journal brut est mappé sur l'UDM. Également mappé sur target.asset.ip.
dst_port target.port Le champ dst_port du journal brut est converti en chaîne, puis en entier, et mappé sur l'UDM.
local_time metadata.event_timestamp Le champ local_time du journal brut est utilisé pour renseigner metadata.event_timestamp dans l'UDM. L'analyseur utilise le create_time de l'objet de lot si le champ local_time n'est pas présent.
local_time_adjusted security_result.detection_fields Le champ local_time_adjusted du journal brut est ajouté en tant que paire clé-valeur au tableau security_result.detection_fields dans l'UDM.
logdata.COMMUNITY_STRING security_result.detection_fields Le champ logdata.COMMUNITY_STRING du journal brut est ajouté en tant que paire clé-valeur au tableau security_result.detection_fields dans l'UDM.
logdata.DOMAIN principal.administrative_domain Le champ logdata.DOMAIN du journal brut est mappé sur l'UDM.
logdata.FILENAME target.file.full_path Le champ logdata.FILENAME du journal brut est mappé sur l'UDM.
logdata.HOSTNAME principal.asset.hostname Si le champ logdata.HOSTNAME n'est pas une adresse IP, il est mappé sur l'UDM. Également mappé sur principal.hostname.
logdata.HOSTNAME principal.asset.ip Si le champ logdata.HOSTNAME est une adresse IP, il est mappé sur l'UDM. Également mappé sur principal.ip.
logdata.HOSTNAME principal.hostname Si le champ logdata.HOSTNAME n'est pas une adresse IP, il est mappé sur l'UDM. Également mappé sur principal.asset.hostname.
logdata.HOSTNAME principal.ip Si le champ logdata.HOSTNAME est une adresse IP, il est mappé sur l'UDM. Également mappé sur principal.asset.ip.
logdata.LOCALNAME principal.asset.hostname Le champ logdata.LOCALNAME du journal brut est mappé sur l'UDM. Également mappé sur principal.hostname.
logdata.LOCALNAME principal.hostname Le champ logdata.LOCALNAME du journal brut est mappé sur l'UDM. Également mappé sur principal.asset.hostname.
logdata.LOCALVERSION principal.platform_version Le champ logdata.LOCALVERSION du journal brut est mappé sur l'UDM.
logdata.PASSWORD extensions.auth.mechanism La présence du champ logdata.PASSWORD déclenche l'analyseur pour définir extensions.auth.mechanism sur USERNAME_PASSWORD dans l'UDM.
logdata.PATH network.http.referral_url Le champ logdata.PATH du journal brut est mappé sur l'UDM.
logdata.REMOTENAME target.asset.hostname Le champ logdata.REMOTENAME du journal brut est mappé sur l'UDM. Également mappé sur target.hostname.
logdata.REMOTENAME target.hostname Le champ logdata.REMOTENAME du journal brut est mappé sur l'UDM. Également mappé sur target.asset.hostname.
logdata.REMOTEVERSION target.platform_version Le champ logdata.REMOTEVERSION du journal brut est mappé sur l'UDM.
logdata.SMBVER network.application_protocol La présence du champ logdata.SMBVER déclenche l'analyseur pour définir network.application_protocol sur SMB dans l'UDM.
logdata.USERAGENT network.http.parsed_user_agent Le champ logdata.USERAGENT du journal brut est converti en user-agent analysé et mappé sur l'UDM.
logdata.USERAGENT network.http.user_agent Le champ logdata.USERAGENT du journal brut est mappé sur l'UDM.
logdata.USERNAME target.user.userid Le champ logdata.USERNAME du journal brut est mappé sur l'UDM.
loglevel security_result.severity Le champ loglevel du journal brut détermine le security_result.severity dans l'UDM. WARNING correspond à HIGH, INFO/INFORMATION correspond à LOW.
logtype security_result.detection_fields Le champ logtype du journal brut est ajouté en tant que paire clé-valeur au tableau security_result.detection_fields dans l'UDM.
node_id principal.asset.asset_id Le champ node_id du journal brut est précédé de "id:" et mappé sur l'UDM.
src_host principal.asset.ip Le champ src_host du journal brut est mappé sur l'UDM. Également mappé sur principal.ip.
src_host principal.ip Le champ src_host du journal brut est mappé sur l'UDM. Également mappé sur principal.asset.ip.
src_port principal.port Le champ src_port du journal brut est converti en entier et mappé sur l'UDM.
utc_time security_result.detection_fields Le champ utc_time du journal brut est ajouté en tant que paire clé-valeur au tableau security_result.detection_fields dans l'UDM.

Modifications

2024-03-11

  • Suppression du caractère non valide à la fin des journaux JSON pour analyser les journaux non analysés.
  • Mise en correspondance des mappages "principal.ip" et "principal.asset.ip".
  • Mise en correspondance des mappages "target.ip" et "target.asset.ip".

2024-02-08

  • Analyseur nouvellement créé.