Collecter les journaux OpenCanary
Présentation
Cet analyseur extrait les champs des journaux SYSLOG et JSON 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, valide les adresses IP et mappe les champs aux objets UDM appropriés, tels que principal
, target
et network
.
Avant de commencer
Assurez-vous de remplir les conditions préalables suivantes :
- Instance Google SecOps.
- Accès privilégié à OpenCanary.
Configurer des flux
Il existe deux points d'entrée différents pour configurer les flux dans la plate-forme Google SecOps :
- Paramètres SIEM> Flux
- Plate-forme de contenu > Packs de contenu
Configurer des flux à partir de Paramètres SIEM > Flux
Pour configurer un flux, procédez comme suit :
- Accédez à Paramètres SIEM > Flux.
- Cliquez sur Add New Feed (Ajouter un flux).
- Sur la page suivante, cliquez sur Configurer un seul flux.
- Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple, Journaux OpenCanary).
- Sélectionnez Webhook comme type de source.
- Sélectionnez OpenCanary comme type de journal.
- Cliquez sur Suivant.
- Facultatif : Spécifiez les valeurs des paramètres d'entrée suivants :
- Délimiteur de fractionnement : délimiteur utilisé pour séparer les lignes de journaux, tel que
\n
.
- Délimiteur de fractionnement : délimiteur utilisé pour séparer les lignes de journaux, tel que
- Cliquez sur Suivant.
- Vérifiez la configuration du flux sur l'écran Finaliser, puis cliquez sur Envoyer.
- Cliquez sur Générer une clé secrète pour générer une clé secrète permettant d'authentifier ce flux.
- 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 l'ancienne deviendra obsolète.
- Dans l'onglet Détails, copiez l'URL du point de terminaison du flux à partir du champ Informations sur le point de terminaison. Vous devez spécifier cette URL de point de terminaison dans votre application cliente.
- Cliquez sur OK.
Configurer des flux depuis le Hub de contenu
Indiquez les valeurs des champs suivants :
- Délimiteur de fractionnement : délimiteur utilisé pour séparer les lignes de journaux, tel que
\n
.
Options avancées
- Nom du flux : valeur préremplie qui identifie le flux.
- Type de source : méthode utilisée pour collecter les journaux dans Google SecOps.
- Espace de noms de l'élément : espace de noms associé au flux.
Libellés d'ingestion : libellés appliqués à tous les événements de ce flux.
Cliquez sur Générer une clé secrète pour générer une clé secrète permettant d'authentifier ce flux.
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 l'ancienne deviendra obsolète.
Dans l'onglet Détails, copiez l'URL du point de terminaison du flux à partir du champ Informations sur le point de terminaison. Vous devez spécifier cette URL de point de terminaison dans votre application cliente.
Créer une clé API pour le flux de webhook
Accédez à la consoleGoogle Cloud > Identifiants.
Cliquez sur Créer des identifiants, puis sélectionnez Clé API.
Restreignez l'accès à la clé API à l'API Google Security Operations.
Spécifier l'URL du point de terminaison
- Dans votre application cliente, spécifiez l'URL du point de terminaison HTTPS fournie dans le flux de webhook.
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 au lieu de la spécifier dans l'URL.
Si votre client de webhook n'accepte pas 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 pour 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
Recherchez le fichier de configuration OpenCanary,
config.json
.Ouvrez le fichier
config.json
dans un éditeur de texte.Recherchez la section intitulée alerters dans le fichier de configuration.
Si un système d'alerte
webhook
existe déjà, modifiez-le. Sinon, ajoutez une entrée pour l'alerteurwebhook
.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>"
}
}
}
- Enregistrez le fichier
config.json
. - Redémarrez le service OpenCanary pour appliquer les modifications. (par exemple,
sudo systemctl restart opencanary
).
Table de mappage UDM
Champ de journal | Mappage UDM | Logique |
---|---|---|
dst_host |
target.asset.ip |
Le champ dst_host du journal brut est mappé à l'UDM. Également mappé sur target.ip . |
dst_host |
target.ip |
Le champ dst_host du journal brut est mappé à 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é à l'UDM. |
local_time |
metadata.event_timestamp |
Le champ local_time du journal brut est utilisé pour remplir le champ 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 de 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 de l'UDM. |
logdata.DOMAIN |
principal.administrative_domain |
Le champ logdata.DOMAIN du journal brut est mappé à l'UDM. |
logdata.FILENAME |
target.file.full_path |
Le champ logdata.FILENAME du journal brut est mappé à l'UDM. |
logdata.HOSTNAME |
principal.asset.hostname |
Si le champ logdata.HOSTNAME n'est pas une adresse IP, il est mappé à l'UDM. Également mappé sur principal.hostname . |
logdata.HOSTNAME |
principal.asset.ip |
Si le champ logdata.HOSTNAME est une adresse IP, il est mappé à 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é à l'UDM. Également mappé sur principal.asset.hostname . |
logdata.HOSTNAME |
principal.ip |
Si le champ logdata.HOSTNAME est une adresse IP, il est mappé à l'UDM. Également mappé sur principal.asset.ip . |
logdata.LOCALNAME |
principal.asset.hostname |
Le champ logdata.LOCALNAME du journal brut est mappé à l'UDM. Également mappé sur principal.hostname . |
logdata.LOCALNAME |
principal.hostname |
Le champ logdata.LOCALNAME du journal brut est mappé à l'UDM. Également mappé sur principal.asset.hostname . |
logdata.LOCALVERSION |
principal.platform_version |
Le champ logdata.LOCALVERSION du journal brut est mappé à 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é à l'UDM. |
logdata.REMOTENAME |
target.asset.hostname |
Le champ logdata.REMOTENAME du journal brut est mappé à l'UDM. Également mappé sur target.hostname . |
logdata.REMOTENAME |
target.hostname |
Le champ logdata.REMOTENAME du journal brut est mappé à l'UDM. Également mappé sur target.asset.hostname . |
logdata.REMOTEVERSION |
target.platform_version |
Le champ logdata.REMOTEVERSION du journal brut est mappé à 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é à l'UDM. |
logdata.USERAGENT |
network.http.user_agent |
Le champ logdata.USERAGENT du journal brut est mappé à l'UDM. |
logdata.USERNAME |
target.user.userid |
Le champ logdata.USERNAME du journal brut est mappé à 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 de l'UDM. |
node_id |
principal.asset.asset_id |
Le champ node_id du journal brut est précédé de "id:" et mappé à l'UDM. |
src_host |
principal.asset.ip |
Le champ src_host du journal brut est mappé à l'UDM. Également mappé sur principal.ip . |
src_host |
principal.ip |
Le champ src_host du journal brut est mappé à 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é à 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 de l'UDM. |
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.