Collecter les journaux Halcyon Anti-Ransomware
Ce document explique comment ingérer des journaux Halcyon Anti-Ransomware dans Google Security Operations à l'aide de Google Cloud Storage V2.
Halcyon est une plate-forme anti-ransomware qui utilise l'IA pour détecter, prévenir et récupérer les attaques de ransomware. 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 journal 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
- Accédez à la console Google Cloud.
- Sélectionnez votre projet ou créez-en un.
- Dans le menu de navigation, accédez à Cloud Storage > Buckets.
- Cliquez sur Créer un bucket.
Fournissez les informations de configuration suivantes :
Paramètre Valeur Attribuez un nom au bucket Saisissez un nom unique (par exemple, halcyon-logs).Type d'emplacement Choisissez celle qui correspond le mieux à vos besoins (régionale, birégionale ou multirégionale). Emplacement Sélectionnez l'emplacement (par exemple, us-central1).Classe de stockage Standard (recommandé pour les journaux fréquemment consultés) Access control (Contrôle des accès) Uniforme (recommandé) Outils de protection Facultatif : Activez la gestion des versions d'objets ou la règle de conservation. 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
- Connectez-vous à la console de gestion Halcyon.
- Accédez à Settings > API Access (Paramètres > Accès à l'API) et générez une clé API avec des autorisations de lecture.
- Copiez et enregistrez la clé API.
- 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 vers GCS
- Connectez-vous à la console de gestion Halcyon.
- Accédez à Settings > Integrations > SIEM (Paramètres > Intégrations > SIEM).
- 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.
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
- Connectez-vous à la console Google SecOps.
- Accédez à Paramètres > Gestion des données > Flux. Si vous utilisez une plate-forme SIEM uniquement, accédez à Paramètres > Flux.
- Cliquez sur Ajouter un flux d'actualités.
- Cliquez sur Configurer un flux unique.
- Sélectionnez Google Cloud Storage V2 comme Type de source.
- Sélectionnez Halcyon Anti Ransomware comme type de journal.
Cliquez sur Get Service Account (Obtenir un compte de service). Une adresse e-mail de compte de service unique s'affiche, par exemple :
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.comCopiez cette adresse e-mail. Vous en aurez besoin lors de la tâche suivante.
Accorder des autorisations IAM au compte de service Google SecOps
- Accédez à Cloud Storage > Buckets.
- Cliquez sur le nom de votre bucket.
- Accédez à l'onglet Autorisations.
- Cliquez sur Accorder l'accès.
- 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.
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 "Lecteur des objets Storage".
Configurer un flux dans Google SecOps pour ingérer les journaux Halcyon Anti-Ransomware
- Accédez à Paramètres > Gestion des données > Flux. Si vous utilisez une plate-forme SIEM uniquement, accédez à Paramètres > Flux.
- Cliquez sur Ajouter un flux d'actualités.
- Cliquez sur Configurer un flux unique.
- Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple,
Halcyon Anti-Ransomware logs). - Sélectionnez Google Cloud Storage V2 comme Type de source.
- Sélectionnez Halcyon Anti Ransomware comme type de journal.
- Cliquez sur Suivant.
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 du fichier (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-logspar le nom réel de votre bucket GCS. - Incluez toujours la barre oblique finale (
/) à la fin de l'URI.
- Remplacez
Cliquez sur Suivant.
Vérifiez la configuration de votre nouveau flux d'actualités sur l'écran Finaliser, puis cliquez sur Envoyer.
Table de mappage UDM
| Champ du 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 de 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 issue de phost si elle est présente, écrasé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 présent, écrasée par artifact.filePath si présent, écrasée par process.artifact.filePath si présent, écrasée par processes.artifact.filePath si présent (guillemets supprimés pour processes.artifact.filePath) |
| lastOccurredAt | principal.process.file.last_seen_time | Conversion à l'aide du filtre de date au format ISO 8601 |
| process.artifact.kind, artifact.kind, primaryProcess.artifact.kind | principal.process.file.mime_type | Valeur de process.artifact.kind si présente, écrasée par artifact.kind si présente, écrasée par primaryProcess.artifact.kind si présente |
| artifact.sha256, process.artifact.sha256, processes.artifact.sha256 | principal.process.file.sha256 | Valeur de artifact.sha256 si présente, écrasée par process.artifact.sha256 si présente, écrasée par processes.artifact.sha256 si 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 la 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" ou "Allow" |
| 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 ; barres obliques inverses 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 de msg si elle est présente, écrasée par reason.cause si elle est présente |
| code temporel | metadata.event_timestamp | Converti à l'aide d'un filtre de date aux formats MMM jj HH:mm:ss ou MMM j 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 de gupid si elle est présente, écrasée par guid si elle est présente |
| metadata.product_name | Définissez cette option 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 de cet analyseur
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.