Collecter les journaux Tanium Threat Response
Ce document explique comment ingérer des journaux Tanium Threat Response dans Google Security Operations à l'aide de la fonctionnalité d'exportation AWS S3 native de Tanium Connect. Tanium Threat Response génère des alertes de détection des menaces, des résultats d'investigation et des données de réponse aux incidents au format JSON. Ces données peuvent être exportées directement vers S3 à l'aide de Tanium Connect, sans nécessiter de fonctions Lambda personnalisées. L'analyseur transforme les données JSON brutes de Tanium Threat Response en modèle de données unifié (UDM). Il tente d'abord d'analyser le message entrant au format JSON, gère les erreurs potentielles, puis extrait et mappe les champs pertinents à la structure UDM, y compris les détails sur l'hôte, l'utilisateur, le processus, l'activité réseau et les conclusions de sécurité concernés.
Avant de commencer
Assurez-vous de remplir les conditions suivantes :
- Une instance Google SecOps
- Tanium Core Platform 7.0 ou version ultérieure
- Module Tanium Threat Response installé et configuré
- Module Tanium Connect installé avec une licence valide
- Tanium Direct Connect 1.9.30 ou version ultérieure pour les fonctionnalités d'investigation
- Accès privilégié à la console Tanium avec droits d'administrateur
- Accès privilégié à AWS (S3, IAM)
Configurer le compte de service Tanium Threat Response
- Connectez-vous à la console Tanium.
- Accédez à Modules > Réponse aux menaces.
- Cliquez sur Paramètres en haut à droite.
- Dans la section Compte de service, configurez les éléments suivants :
- Utilisateur du compte de service : sélectionnez un utilisateur disposant des autorisations appropriées pour la réponse aux menaces.
- Vérifiez que le compte dispose du rôle utilisateur "Connect".
- Confirmez l'accès aux alertes et aux données d'investigation de la réponse aux menaces.
- Cliquez sur Enregistrer pour appliquer la configuration du compte de service.
Collecter les prérequis de Tanium Threat Response
- Connectez-vous à la console Tanium en tant qu'administrateur.
- Accédez à Administration > Autorisations > Utilisateurs.
- Créez ou identifiez un utilisateur de compte de service avec les rôles suivants :
- Rôle Administrateur de la réponse aux menaces ou Utilisateur de la réponse aux menaces en lecture seule.
- Privilège du rôle Connect User (Utilisateur Connect).
- Accès aux groupes d'ordinateurs surveillés (recommandé : groupe Tous les ordinateurs).
- Autorisation Lire les questions enregistrées pour les ensembles de contenus sur la réponse aux menaces.
Configurer un bucket AWS S3 et IAM pour Google SecOps
- Créez un bucket Amazon S3 en suivant ce guide de l'utilisateur : Créer un bucket.
- Enregistrez le Nom et la Région du bucket pour référence ultérieure (par exemple,
tanium-threat-response-logs
). - Créez un utilisateur en suivant ce guide : Créer un utilisateur IAM.
- Sélectionnez l'utilisateur créé.
- Sélectionnez l'onglet Informations d'identification de sécurité.
- Cliquez sur Créer une clé d'accès dans la section Clés d'accès.
- Sélectionnez Service tiers comme Cas d'utilisation.
- Cliquez sur Suivant.
- Facultatif : ajoutez un tag de description.
- Cliquez sur Créer une clé d'accès.
- Cliquez sur Télécharger le fichier CSV pour enregistrer la clé d'accès et la clé d'accès secrète pour une utilisation ultérieure.
- Cliquez sur OK.
- Sélectionnez l'onglet Autorisations.
- Cliquez sur Ajouter des autorisations dans la section Règles d'autorisation.
- Sélectionnez Ajouter des autorisations.
- Sélectionnez Joindre directement des règles.
- Recherchez et sélectionnez la règle AmazonS3FullAccess.
- Cliquez sur Suivant.
- Cliquez sur Ajouter des autorisations.
Configurer la destination Tanium Connect AWS S3
- Connectez-vous à la console Tanium.
- Accédez à Modules > Connect.
- Cliquez sur Créer une connexion.
- Fournissez les informations de configuration suivantes :
- Nom : saisissez un nom descriptif (par exemple,
Threat Response Alerts to S3 for SecOps
). - Description : description facultative (par exemple,
Export threat detection alerts and investigation findings to AWS S3 for Google SecOps ingestion
). - Activer : sélectionnez cette option pour activer la connexion et l'exécuter selon la programmation.
- Nom : saisissez un nom descriptif (par exemple,
- Cliquez sur Suivant.
Configurer la source de connexion
- Dans la section Source, fournissez les informations de configuration suivantes :
- Type de source : sélectionnez Question enregistrée.
- Question enregistrée : sélectionnez l'une des questions enregistrées suivantes liées à la réponse aux menaces :
- Réponse aux menaces > Alertes pour les alertes de détection des menaces.
- Résultats de l'analyse de la réponse aux menaces pour les résultats de l'analyse.
- Réponse aux menaces : correspondances Intel pour les correspondances de renseignements sur les menaces.
- Réponse aux menaces : activité des points de terminaison pour les activités suspectes des points de terminaison.
- Réponse aux menaces : connexions réseau pour les menaces basées sur le réseau.
- Groupe d'ordinateurs : sélectionnez Tous les ordinateurs ou des groupes d'ordinateurs spécifiques à surveiller.
- Intervalle d'actualisation : définissez l'intervalle approprié pour la collecte de données (par exemple, 10 minutes pour les alertes de menace).
- Cliquez sur Suivant.
Configurer la destination AWS S3
- Dans la section Destination, fournissez les informations de configuration suivantes :
- Type de destination : sélectionnez AWS S3.
- Nom de la destination : saisissez un nom unique (par exemple,
Google SecOps ThreatResponse S3 Destination
). - Clé d'accès AWS : saisissez la clé d'accès AWS du fichier CSV téléchargé lors de l'étape de configuration d'AWS S3.
- Clé d'accès secrète AWS : saisissez la clé d'accès secrète AWS à partir du fichier CSV téléchargé lors de l'étape de configuration d'AWS S3.
- Nom du bucket : saisissez le nom de votre bucket S3 (par exemple,
tanium-threat-response-logs
). - Région : sélectionnez la région AWS où se trouve votre bucket S3.
- Préfixe de clé : saisissez un préfixe pour les objets S3 (par exemple,
tanium/threat-response/
).
- Cliquez sur Suivant.
Configurer des filtres
- Dans la section Filtres, configurez les options de filtrage des données :
- Envoyer uniquement les nouveaux éléments : sélectionnez cette option pour n'envoyer que les nouvelles alertes de menace depuis la dernière exportation.
- Filtres de colonne : ajoutez des filtres basés sur des attributs d'alerte spécifiques si nécessaire (par exemple, filtrez par gravité de l'alerte, type de menace ou état de l'investigation).
- Cliquez sur Suivant.
Mettre en forme les données pour AWS S3
- Dans la section Format, configurez le format des données :
- Format : sélectionnez JSON.
- Options :
- Inclure les en-têtes : décochez cette option pour éviter d'inclure les en-têtes dans la sortie JSON.
- Inclure les cellules vides : sélectionnez cette option selon vos préférences.
- Options avancées :
- Nommage des fichiers : utilisez le nommage par défaut basé sur le code temporel.
- Compression : sélectionnez Gzip pour réduire les coûts de stockage et le temps de transfert.
- Cliquez sur Suivant.
Planifier la connexion
- Dans la section Programmation, configurez la programmation de l'exportation :
- Activer la planification : sélectionnez cette option pour activer les exportations automatiques planifiées.
- Type de programmation : sélectionnez Récurrente.
- Fréquence : sélectionnez Toutes les 10 minutes pour recevoir des alertes en temps opportun sur les menaces.
- Heure de début : définissez une heure de début appropriée pour la première exportation.
- Cliquez sur Suivant.
Enregistrer et valider la connexion
- Vérifiez la configuration de la connexion sur l'écran récapitulatif.
- Cliquez sur Save (Enregistrer) pour créer la connexion.
- Cliquez sur Tester la connexion pour vérifier la configuration.
- Si le test réussit, cliquez sur Exécuter maintenant pour effectuer une première exportation.
- Surveillez l'état de la connexion sur la page Présentation de Connect.
Configurer un flux dans Google SecOps pour ingérer les journaux Tanium Threat Response
- Accédez à Paramètres SIEM> Flux.
- Cliquez sur + Ajouter un flux.
- Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple,
Tanium Threat Response logs
). - Sélectionnez Amazon S3 V2 comme type de source.
- Sélectionnez Tanium Threat Response comme type de journal.
- Cliquez sur Suivant.
- Spécifiez les valeurs des paramètres d'entrée suivants :
- URI S3 :
s3://tanium-threat-response-logs/tanium/threat-response/
- Options de suppression de la source : sélectionnez l'option de suppression de votre choix.
- Âge maximal des fichiers : incluez les fichiers modifiés au cours des derniers jours. La valeur par défaut est de 180 jours.
- ID de clé d'accès : clé d'accès utilisateur ayant accès au bucket S3.
- Clé d'accès secrète : clé secrète de l'utilisateur ayant accès au bucket S3.
- Espace de noms de l'élément : espace de noms de l'élément.
- Libellés d'ingestion : libellé appliqué aux événements de ce flux.
- URI S3 :
- Cliquez sur Suivant.
- Vérifiez la configuration de votre nouveau flux sur l'écran Finaliser, puis cliquez sur Envoyer.
Table de mappage UDM
Champ du journal | Mappage UDM | Logique |
---|---|---|
ID de l'alerte | security_result.rule_instance | La valeur de ce champ est extraite du champ "ID d'alerte" du journal brut. |
Adresse IP de l'ordinateur | principal.ip | La valeur de ce champ est extraite du champ "Adresse IP de l'ordinateur" du journal brut. |
Adresse IP de l'ordinateur | target.ip | La valeur de ce champ est extraite du champ "Adresse IP de l'ordinateur" du journal brut. |
Nom de l'ordinateur | principal.hostname | La valeur de ce champ est extraite du champ "Nom de l'ordinateur" du journal brut. |
Nom de l'ordinateur | target.hostname | La valeur de ce champ est extraite du champ "Nom de l'ordinateur" du journal brut. |
id | target.resource.attribute.labels | La valeur de ce champ est extraite du champ "id" du journal brut. La clé est codée en dur sur "id". |
ID Intel | security_result.rule_id | La valeur de ce champ est extraite du champ "Intel Id" du journal brut. |
Étiquettes Intel | security_result.description | La valeur de ce champ est extraite du champ "Libellés Intel" du journal brut. |
Nom Intel | security_result.summary | La valeur de ce champ est extraite du champ "Nom de l'info" du journal brut. |
Nom Intel | security_result.threat_name | La valeur de ce champ est extraite du champ "Nom de l'info" du journal brut. |
Type d'informations | security_result.rule_type | La valeur de ce champ est extraite du champ "Type d'informations" du journal brut. |
MatchDetails.finding.system_info.bits | principal.asset.platform_software.bits | La valeur de ce champ est extraite du champ "MatchDetails.finding.system_info.bits" du journal brut. |
MatchDetails.finding.system_info.os | principal.asset.platform_software.platform_version | La valeur de ce champ est extraite du champ "MatchDetails.finding.system_info.os" du journal brut. |
MatchDetails.finding.system_info.patch_level | principal.asset.platform_software.platform_patch_level | La valeur de ce champ est extraite du champ "MatchDetails.finding.system_info.patch_level" du journal brut. |
MatchDetails.finding.system_info.platform | principal.asset.platform_software.platform | La valeur de ce champ est extraite du champ "MatchDetails.finding.system_info.platform" du journal brut. |
MatchDetails.match.contexts.0.event.registrySet.keyPath | target.registry.registry_key | La valeur de ce champ est extraite du champ "MatchDetails.match.contexts.0.event.registrySet.keyPath" du journal brut. |
MatchDetails.match.contexts.0.event.registrySet.valueName | target.registry.registry_value_name | La valeur de ce champ est extraite du champ "MatchDetails.match.contexts.0.event.registrySet.valueName" du journal brut. |
MatchDetails.match.properties.args | security_result.about.process.command_line | La valeur de ce champ est extraite du champ "MatchDetails.match.properties.args" du journal brut. |
MatchDetails.match.properties.file.fullpath | target.process.file.full_path | La valeur de ce champ est extraite du champ "MatchDetails.match.properties.file.fullpath" du journal brut. |
MatchDetails.match.properties.file.md5 | target.process.file.md5 | La valeur de ce champ est extraite du champ "MatchDetails.match.properties.file.md5" du journal brut. |
MatchDetails.match.properties.file.sha1 | target.process.file.sha1 | La valeur de ce champ est extraite du champ "MatchDetails.match.properties.file.sha1" du journal brut. |
MatchDetails.match.properties.file.sha256 | target.process.file.sha256 | La valeur de ce champ est extraite du champ "MatchDetails.match.properties.file.sha256" du journal brut. |
MatchDetails.match.properties.fullpath | target.process.file.full_path | La valeur de ce champ est extraite du champ "MatchDetails.match.properties.fullpath" du journal brut. |
MatchDetails.match.properties.local_port | principal.port | La valeur de ce champ est extraite du champ "MatchDetails.match.properties.local_port" du journal brut. |
MatchDetails.match.properties.md5 | target.process.file.md5 | La valeur de ce champ est extraite du champ "MatchDetails.match.properties.md5" du journal brut. |
MatchDetails.match.properties.parent.args | security_result.about.process.command_line | La valeur de ce champ est extraite du champ "MatchDetails.match.properties.parent.args" du journal brut. |
MatchDetails.match.properties.parent.file.fullpath | target.process.parent_process.file.full_path | La valeur de ce champ est extraite du champ "MatchDetails.match.properties.parent.file.fullpath" du journal brut. |
MatchDetails.match.properties.parent.file.md5 | target.process.parent_process.file.md5 | La valeur de ce champ est extraite du champ "MatchDetails.match.properties.parent.file.md5" du journal brut. |
MatchDetails.match.properties.parent.parent.file.fullpath | target.process.parent_process.parent_process.file.full_path | La valeur de ce champ est extraite du champ "MatchDetails.match.properties.parent.parent.file.fullpath" du journal brut. |
MatchDetails.match.properties.parent.parent.file.md5 | target.process.parent_process.parent_process.file.md5 | La valeur de ce champ est extraite du champ "MatchDetails.match.properties.parent.parent.file.md5" du journal brut. |
MatchDetails.match.properties.parent.parent.parent.file.fullpath | target.process.parent_process.parent_process.parent_process.file.full_path | La valeur de ce champ est extraite du champ "MatchDetails.match.properties.parent.parent.parent.file.fullpath" du journal brut. |
MatchDetails.match.properties.parent.parent.parent.file.md5 | target.process.parent_process.parent_process.parent_process.file.md5 | La valeur de ce champ est extraite du champ "MatchDetails.match.properties.parent.parent.parent.file.md5" du journal brut. |
MatchDetails.match.properties.parent.parent.parent.parent.file.fullpath | target.process.parent_process.parent_process.parent_process.parent_process.file.full_path | La valeur de ce champ est extraite du champ "MatchDetails.match.properties.parent.parent.parent.parent.file.fullpath" du journal brut. |
MatchDetails.match.properties.parent.parent.parent.parent.file.md5 | target.process.parent_process.parent_process.parent_process.parent_process.file.md5 | La valeur de ce champ est extraite du champ "MatchDetails.match.properties.parent.parent.parent.parent.file.md5" du journal brut. |
MatchDetails.match.properties.parent.parent.parent.parent.parent.file.fullpath | target.process.parent_process.parent_process.parent_process.parent_process.parent_process.file.full_path | La valeur de ce champ est extraite du champ "MatchDetails.match.properties.parent.parent.parent.parent.parent.file.fullpath" du journal brut. |
MatchDetails.match.properties.parent.parent.parent.parent.parent.file.md5 | target.process.parent_process.parent_process.parent_process.parent_process.parent_process.file.md5 | La valeur de ce champ est extraite du champ "MatchDetails.match.properties.parent.parent.parent.parent.parent.file.md5" du journal brut. |
MatchDetails.match.properties.parent.pid | target.process.parent_process.pid | La valeur de ce champ est extraite du champ "MatchDetails.match.properties.parent.pid" du journal brut. |
MatchDetails.match.properties.parent.parent.pid | target.process.parent_process.parent_process.pid | La valeur de ce champ est extraite du champ "MatchDetails.match.properties.parent.parent.pid" du journal brut. |
MatchDetails.match.properties.parent.parent.parent.pid | target.process.parent_process.parent_process.parent_process.pid | La valeur de ce champ est extraite du champ "MatchDetails.match.properties.parent.parent.parent.pid" du journal brut. |
MatchDetails.match.properties.parent.parent.parent.parent.pid | target.process.parent_process.parent_process.parent_process.parent_process.pid | La valeur de ce champ est extraite du champ "MatchDetails.match.properties.parent.parent.parent.parent.pid" du journal brut. |
MatchDetails.match.properties.parent.parent.parent.parent.parent.pid | target.process.parent_process.parent_process.parent_process.parent_process.parent_process.pid | La valeur de ce champ est extraite du champ "MatchDetails.match.properties.parent.parent.parent.parent.parent.pid" du journal brut. |
MatchDetails.match.properties.pid | target.process.pid | La valeur de ce champ est extraite du champ "MatchDetails.match.properties.pid" du journal brut. |
MatchDetails.match.properties.protocol | network.ip_protocol | La valeur de ce champ est extraite du champ "MatchDetails.match.properties.protocol" du journal brut. |
MatchDetails.match.properties.remote_ip | target.ip | La valeur de ce champ est extraite du champ "MatchDetails.match.properties.remote_ip" du journal brut. |
MatchDetails.match.properties.remote_port | target.port | La valeur de ce champ est extraite du champ "MatchDetails.match.properties.remote_port" du journal brut. |
MatchDetails.match.properties.sha1 | target.process.file.sha1 | La valeur de ce champ est extraite du champ "MatchDetails.match.properties.sha1" du journal brut. |
MatchDetails.match.properties.sha256 | target.process.file.sha256 | La valeur de ce champ est extraite du champ "MatchDetails.match.properties.sha256" du journal brut. |
MatchDetails.match.properties.user | target.administrative_domain | Le nom de domaine est extrait du champ "MatchDetails.match.properties.user" du journal brut en recherchant une barre oblique inverse (""). Les caractères précédant la barre oblique sont considérés comme le nom de domaine. |
MatchDetails.match.properties.user | target.user.userid | Le nom d'utilisateur est extrait du champ "MatchDetails.match.properties.user" du journal brut en recherchant une barre oblique inverse (""). Les caractères situés après la barre oblique inverse sont considérés comme le nom d'utilisateur. |
Techniques MITRE | security_result.threat_id | La valeur de ce champ est extraite du champ "Techniques MITRE" du journal brut. |
params | security_result.detection_fields | La valeur de ce champ est extraite du champ "params" du journal brut. La clé est codée en dur sur "params_" concaténé avec l'index du paramètre. |
Horodatage | metadata.event_timestamp | La valeur de ce champ est extraite du champ "Timestamp" (Code temporel) du journal brut. |
N/A | is_alert | Ce champ est codé en dur sur "true" si le champ "Adresse IP de l'ordinateur" du journal brut n'est pas vide. |
N/A | metadata.log_type | Ce champ est codé en dur sur "TANIUM_THREAT_RESPONSE". |
N/A | metadata.product_event_type | Ce champ est codé en dur sur "Tanium Signal". |
N/A | metadata.product_name | Ce champ est codé en dur sur "Réponse aux menaces". |
N/A | metadata.vendor_name | Ce champ est codé en dur sur "Tanium". |
N/A | network.http.method | Ce champ est codé en dur sur "POST" si la valeur du champ "method" dans le journal brut est "submit". |
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.