Collecter les journaux Halcyon Anti-Ransomware

Compatible avec :

Ce document explique comment ingérer les journaux Halcyon Anti-Ransomware dans Google Security Operations à l'aide de Google Cloud Storage V2.

Halcyon est une plate-forme anti-rançongiciel qui utilise l'IA pour détecter, prévenir et contrer les attaques de rançongiciels. Il génère des alertes pour les événements de détection de ransomware, les tentatives de chiffrement et les actions de récupération. L'analyseur mappe les champs de journaux au format JSON au modèle de données unifié (UDM), en gérant les types d'événements tels que les opérations sur les fichiers, l'activité des utilisateurs et les résultats de sécurité.

Avant de commencer

Assurez-vous de remplir les conditions suivantes :

  • Une instance Google SecOps
  • Un projet GCP avec l'API Cloud Storage activée
  • Autorisations permettant de créer et de gérer des buckets GCS et des stratégies IAM
  • Accès privilégié à la console Halcyon avec des fonctionnalités d'exportation des journaux

Créer un bucket Google Cloud Storage

  1. Accédez à la console Google Cloud.
  2. Sélectionnez votre projet ou créez-en un.
  3. Dans le menu de navigation, accédez à Cloud Storage > Buckets.
  4. Cliquez sur Créer un bucket.
  5. Fournissez les informations de configuration suivantes :

    Paramètre Valeur
    Nommer votre bucket Saisissez un nom unique (par exemple, halcyon-logs).
    Type d'emplacement Choisissez en fonction de vos besoins (région, birégion ou multirégion).
    Emplacement Sélectionnez l'emplacement (par exemple, us-central1).
    Classe de stockage Standard (recommandé pour les journaux auxquels vous accédez fréquemment)
    Access control (Contrôle des accès) Uniforme (recommandé)
    Outils de protection Facultatif : Activez la gestion des versions des objets ou une règle de conservation.
  6. Cliquez sur Créer.

Exporter les journaux Halcyon vers Google Cloud Storage

Halcyon permet d'exporter les données de journaux au format JSON. Utilisez l'une des approches suivantes pour envoyer les journaux à GCS.

Option A : Exporter les journaux à l'aide de l'API Halcyon et les importer dans GCS

  1. Connectez-vous à la console de gestion Halcyon.
  2. Accédez à Paramètres > Accès à l'API et générez une clé API avec des autorisations de lecture.
  3. Copiez et enregistrez la clé API.
  4. Utilisez un script planifié ou une fonction Cloud Run pour appeler l'API REST Halcyon, récupérer les journaux d'événements et les écrire dans GCS au format JSON.

Option B : Configurer l'intégration SIEM et transférer les données à GCS

  1. Connectez-vous à la console de gestion Halcyon.
  2. Accédez à Paramètres> Intégrations> SIEM.
  3. Configurez la destination d'exportation des journaux pour écrire les événements au format JSON dans un répertoire local ou un espace de stockage intermédiaire.
  4. Utilisez une fonction Cloud Run pour importer régulièrement des journaux dans votre bucket GCS.

    • Assurez-vous que les fichiers exportés sont au format JSON.
    • Chaque fichier doit contenir un ou plusieurs enregistrements d'événements.

Récupérer le compte de service Google SecOps

  1. Connectez-vous à la console Google SecOps.
  2. Accédez à Paramètres SIEM> Flux.
  3. Cliquez sur Add New Feed (Ajouter un flux).
  4. Cliquez sur Configurer un flux unique.
  5. Sélectionnez Google Cloud Storage V2 comme Type de source.
  6. Sélectionnez Halcyon Anti Ransomware comme type de journal.
  7. Cliquez sur Obtenir un compte de service. Une adresse e-mail unique pour le compte de service s'affiche, par exemple :

    chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com
    
  8. Copiez cette adresse e-mail. Vous en aurez besoin lors de la tâche suivante.

Accorder des autorisations IAM au compte de service Google SecOps

  1. Accédez à Cloud Storage > Buckets.
  2. Cliquez sur le nom de votre bucket.
  3. Accédez à l'onglet Autorisations.
  4. Cliquez sur Accorder l'accès.
  5. Fournissez les informations de configuration suivantes :
    • Ajouter des comptes principaux : collez l'adresse e-mail du compte de service Google SecOps.
    • Attribuer des rôles : sélectionnez Lecteur d'objets Storage.
  6. Cliquez sur Enregistrer.

    • Si vous prévoyez d'utiliser l'option de suppression (supprimer les fichiers transférés), accordez le rôle Administrateur des objets Storage au lieu de celui de lecteur des objets Storage.

Configurer un flux dans Google SecOps pour ingérer les journaux Halcyon Anti-Ransomware

  1. Accédez à Paramètres SIEM> Flux.
  2. Cliquez sur Add New Feed (Ajouter un flux).
  3. Cliquez sur Configurer un flux unique.
  4. Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple, Halcyon Anti-Ransomware logs).
  5. Sélectionnez Google Cloud Storage V2 comme Type de source.
  6. Sélectionnez Halcyon Anti Ransomware comme type de journal.
  7. Cliquez sur Suivant.
  8. Spécifiez les valeurs des paramètres d'entrée suivants :

    Champ Valeur
    URI du bucket de stockage gs://halcyon-logs/halcyon/events/
    Option de suppression de la source Sélectionnez l'option de suppression de votre choix.
    Âge maximal des fichiers (en jours) La valeur par défaut est de 180 jours.
    Espace de noms de l'élément L'espace de noms de l'élément
    Étiquettes d'ingestion Libellé à appliquer aux événements de ce flux
    • Remplacez halcyon-logs par le nom réel de votre bucket GCS.
    • Incluez toujours la barre oblique finale (/) à la fin de l'URI.
  9. Cliquez sur Suivant.

  10. Vérifiez la configuration de votre nouveau flux sur l'écran Finaliser, puis cliquez sur Envoyer.

Table de mappage UDM

Champ de journal Mappage UDM Logique
sshd, tty, euid, dataType, filterName, totalOccurrences, occurredAt, count, occurrences.IncorrectPasswords, occurrences.FailedPassword, occurrences.AuthFailure, policyMode, action additional.fields Fusionné avec les libellés créés à partir de chaque champ, le cas échéant ; les champs "totalOccurrences", "count" et "occurrences" sont convertis en chaîne.
dnsArtifact.uri network.dns.questions Fusionné avec le tableau des questions contenant le nom
asset.id principal.asset.asset_id Concaténé sous la forme "ASSET:" + asset.id
asset.kind principal.asset.attribute.labels Fusionné avec asset_kind_label créé à partir de asset.kind
asset.name principal.asset.hostname Valeur copiée directement
ipArtifact.ipAddress principal.asset.ip Valeur copiée directement
summary.applicationName principal.application Valeur copiée directement
phost, asset.name principal.hostname Valeur provenant de phost si elle est présente, remplacée par asset.name si elle est présente
ipArtifact.ipAddress principal.ip Valeur copiée directement
process.commandLine principal.process.command_line Valeur copiée directement
modifiedFilePath, artifact.filePath, process.artifact.filePath, processes.artifact.filePath principal.process.file.full_path Valeur définie sur modifiedFilePath si elle est présente, remplacée par artifact.filePath si elle est présente, remplacée par process.artifact.filePath si elle est présente, remplacée par processes.artifact.filePath si elle est présente (guillemets supprimés pour processes.artifact.filePath)
lastOccurredAt principal.process.file.last_seen_time Converti à l'aide du filtre de date au format ISO8601
process.artifact.kind, artifact.kind, primaryProcess.artifact.kind principal.process.file.mime_type Valeur de process.artifact.kind si elle est présente, remplacée par artifact.kind si elle est présente, remplacée par primaryProcess.artifact.kind si elle est présente
artifact.sha256, process.artifact.sha256, processes.artifact.sha256 principal.process.file.sha256 Valeur de artifact.sha256, si elle est présente. Elle est remplacée par process.artifact.sha256, si elle est présente, puis par processes.artifact.sha256, si elle est présente.
process.parentPid principal.process.parent_pid Valeur copiée directement
process.pid principal.process.pid Valeur copiée directement
user_displayname principal.user.user_display_name Valeur copiée directement
utilisateur principal.user.userid Valeur copiée directement
summary.artifact.filePath target.file.full_path Valeur copiée directement
summary.artifact.sha256 target.file.sha256 Valeur copiée directement
primaryProcess.commandLine target.process.command_line Valeur copiée directement après suppression des guillemets
primaryProcess.kind target.process.file.mime_type Valeur copiée directement
primaryProcess.parentPid target.process.parent_process.pid Valeur copiée directement
primaryProcess.pid target.process.pid Valeur copiée directement
uid target.user.userid Valeur copiée directement
id target.asset_id Concaténé sous la forme "ASSET:" + id
action security_result.action En majuscules si l'action est "Block" (Bloquer) ou "Allow" (Autoriser)
reason.exitCode security_result.action_details Valeur copiée directement
dxpRule, monitoringReason, tenantId security_result.detection_fields Fusionné avec les libellés créés à partir de chaque champ, le cas échéant ; les barres obliques inverses sont supprimées pour dxpRule
dxpRuleType security_result.rule_type Valeur copiée directement
ipArtifact.version security_result.rule_version Valeur copiée directement
msg, reason.cause security_result.summary Valeur du message (si présente), remplacée par reason.cause (si présente)
timestamp metadata.event_timestamp Converti à l'aide du filtre de date avec les formats MMM dd HH:mm:ss ou MMM d HH:mm:ss
phost, ipArtifact.ipAddress, asset.name, user, uid, summary.artifact.sha256, summary.artifact.filePath metadata.event_type Définissez sur FILE_UNCATEGORIZED si has_principal et has_target_file ; USER_UNCATEGORIZED si has_principal et has_target ; STATUS_UPDATE si has_principal ; sinon GENERIC_EVENT (indicateurs dérivés des sources).
kind metadata.product_event_type Valeur copiée directement
gupid, guid metadata.product_log_id Valeur issue de gupid (si présente), remplacée par guid (si présent)
metadata.product_name Définissez-le sur "Halcyon Anti Ransomware".
metadata.vendor_name Défini sur "Halcyon"
primaryProcess.kind event.idm.read_only_udm.target.process.file.mime_type Mappé à partir du journal des modifications
primaryProcess.artifact.kind event.idm.read_only_udm.principal.process.file.mime_type Mappé à partir du journal des modifications
processes.artifact.filePath event.idm.read_only_udm.principal.process.file.full_path Mappé à partir du journal des modifications
processes.artifact.sha256 event.idm.read_only_udm.principal.process.file.sha256 Mappé à partir du journal des modifications
action event.idm.read_only_udm.additional.fields Mappé à partir du journal des modifications
filterName event.idm.read_only_udm.additional.fields Mappé à partir du journal des modifications
policyMode event.idm.read_only_udm.additional.fields Mappé à partir du journal des modifications
euid event.idm.read_only_udm.additional.fields Mappé à partir du journal des modifications
occurrences.AuthFailure event.idm.read_only_udm.additional.fields Mappé à partir du journal des modifications
occurrences.FailedPassword event.idm.read_only_udm.additional.fields Mappé à partir du journal des modifications
occurredAt event.idm.read_only_udm.additional.fields Mappé à partir du journal des modifications
occurrences.IncorrectPasswords event.idm.read_only_udm.additional.fields Mappé à partir du journal des modifications
guid event.idm.read_only_udm.metadata.product_log_id Mappé à partir du journal des modifications
gupid event.idm.read_only_udm.metadata.product_log_id Mappé à partir du journal des modifications
count event.idm.read_only_udm.additional.fields Mappé à partir du journal des modifications
artifact.filePath event.idm.read_only_udm.principal.process.file.full_path Mappé à partir du journal des modifications
artifact.sha256 event.idm.read_only_udm.principal.process.file.sha256 Mappé à partir du journal des modifications
artifact.kind event.idm.read_only_udm.principal.process.file.mime_type Mappé à partir du journal des modifications
monitoringReason event.idm.read_only_udm.security_result.detection_fields Mappé à partir du journal des modifications
dxpRule event.idm.read_only_udm.security_result.detection_fields Mappé à partir du journal des modifications
modifiedFilePath event.idm.read_only_udm.principal.process.file.full_path Mappé à partir du journal des modifications
ipArtifact.version event.idm.read_only_udm.security_result.rule_version Mappé à partir du journal des modifications
ipArtifact.ipAddress event.idm.read_only_udm.principal.ip Mappé à partir du journal des modifications
ipArtifact.ipAddress event.idm.read_only_udm.principal.asset.ip Mappé à partir du journal des modifications
process.parentPid event.idm.read_only_udm.principal.process.parent_pid Mappé à partir du journal des modifications
dxpRuleType event.idm.read_only_udm.security_result.rule_type Mappé à partir du journal des modifications
summary.applicationName event.idm.read_only_udm.principal.application Mappé à partir du journal des modifications
process.pid event.idm.read_only_udm.principal.process.pid Mappé à partir du journal des modifications
reason.exitCode event.idm.read_only_udm.security_result.action_details Mappé à partir du journal des modifications
reason.cause event.idm.read_only_udm.security_result.summary Mappé à partir du journal des modifications
dnsArtifact_uri event.idm.read_only_udm.network.dns.questions Mappé à partir du journal des modifications
uid event.idm.read_only_udm.target.user.userid Mappé à partir du journal des modifications
tty event.idm.read_only_udm.additional.fields Mappé à partir du journal des modifications
sshd event.idm.read_only_udm.additional.fields Mappé à partir du journal des modifications
phost event.idm.read_only_udm.principal.hostname Mappé à partir du journal des modifications
user_displayname event.idm.read_only_udm.principal.user.user_display_name Mappé à partir du journal des modifications
msg event.idm.read_only_udm.security_result.summary Mappé à partir du journal des modifications
timestamp event.idm.read_only_udm.metadata.event_timestamp Mappé à partir du journal des modifications
user event.idm.read_only_udm.principal.user.userid Mappé à partir du journal des modifications

Journal des modifications

Afficher le journal des modifications pour ce parseur

Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.