Collecter les journaux d'IOC Anomali ThreatStream
Ce document explique comment ingérer des journaux d'IOC Anomali ThreatStream dans Google Security Operations à l'aide d'une API. L'analyseur transforme les données d'IOC au format JSON ou CEF en modèle de données unifié (UDM). Le code tente d'abord d'analyser l'entrée en tant que JSON. Si cela échoue, il recherche le préfixe "CEF:" pour la traiter en tant que message CEF, en extrayant les attributs d'IOC et en les mappant aux champs UDM.
Avant de commencer
Assurez-vous de remplir les conditions suivantes :
- Instance Google SecOps
- Accès privilégié à un locataire Enterprise Anomali ThreatStream
Créer un utilisateur API dédié
- Connectez-vous à ThreatStream. Passez à l'ancienne interface utilisateur si vous utilisez Anomali Enterprise.
- Accédez à Administration > Utilisateurs.
- Cliquez sur + Ajouter un utilisateur (ou sélectionnez un compte de service existant).
- Renseignez les informations suivantes :
- Adresse e-mail : adresse e-mail du compte de service (par exemple,
anomali_ioc_secops@example.com
). - Source d'authentification : sélectionnez Standard.
- Type d'utilisateur : sélectionnez Utilisateur de l'API.
- Rôle : sélectionnez Lecture seule (suffisant pour lister les indicateurs).
- Adresse e-mail : adresse e-mail du compte de service (par exemple,
- Cliquez sur Enregistrer.
- Un e-mail d'activation est envoyé au nouveau compte. Finalisez l'activation.
Générer une clé API
- Connectez-vous à ThreatStream en tant qu'utilisateur de l'API.
- Accédez à l'avatar de votre profil > Mes clés API.
- Cliquez sur Générer une clé.
- Saisissez une Description (par exemple,
Google SecOps export
). - Cliquez sur Enregistrer.
- Copiez et enregistrez la valeur de la clé affichée sous Clé dans un emplacement sécurisé. La valeur de clé ne s'affiche plus.
Recommandation : autoriser l'adresse IP du collecteur
- Accédez à Administration > Paramètres de l'organisation.
- Sélectionnez l'onglet Liste d'adresses IP autorisées.
- Cliquez sur + Ajouter.
- Saisissez l'adresse de votre locataire Google SecOps, puis cliquez sur Enregistrer.
Configurer des flux
- Accédez à Paramètres SIEM> Flux.
- Cliquez sur Ajouter.
- Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple,
Anomali TS IOC
). - Sélectionnez API tierce comme Type de source.
- Sélectionnez le type de journal Anomali.
- Cliquez sur Suivant.
- Spécifiez les valeurs des paramètres d'entrée suivants :
- Nom d'utilisateur : saisissez le nom d'utilisateur de l'API que vous venez de créer.
- Secret : saisissez la clé API générée et copiée précédemment.
- 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.
- Cliquez sur Suivant.
- Vérifiez la configuration du flux sur l'écran Finaliser, puis cliquez sur Envoyer.
Table de mappage UDM
Champ du journal | Mappage UDM | Logique |
---|---|---|
obj.asn |
entity.administrative_domain | Le champ "asn" du journal brut est mappé au champ "administrative_domain" de l'objet d'entité UDM. |
obj.confidence |
ioc.confidence_score | Le champ "confidence" (confiance) du journal brut est mappé au champ "confidence_score" (score de confiance) de l'objet UDM ioc. |
obj.country |
entity.location.country_or_region | Le champ "pays" du journal brut est mappé sur le champ "country_or_region" de l'objet d'entité UDM. |
obj.created_ts |
entity.metadata.creation_timestamp | Le champ "created_ts" du journal brut est mappé sur le champ "creation_timestamp" de l'objet d'entité UDM. |
obj.created_ts |
ioc.active_timerange.start | Le champ "created_ts" du journal brut est mappé au champ "start" de l'objet UDM ioc. |
obj.created_ts |
entity.metadata.threat.first_discovered_time | Le champ "created_ts" du journal brut est mappé sur le champ "first_discovered_time" de l'objet menace UDM. |
obj.expiration_ts |
entity.metadata.interval.end_time | Le champ "expiration_ts" du journal brut est mappé sur le champ "end_time" de l'objet d'entité UDM. |
obj.expiration_ts |
ioc.active_timerange.end | Le champ "expiration_ts" du journal brut est mappé sur le champ "end" de l'objet UDM ioc. |
obj.id |
entity.metadata.product_entity_id | Le champ "id" du journal brut est mappé au champ "product_entity_id" de l'objet d'entité UDM. |
obj.ip |
entity.entity.ip | Le champ "ip" du journal brut est fusionné avec le champ "ip" de l'objet d'entité UDM. |
obj.ip |
ioc.ip_and_ports.ip_address | Le champ "ip" du journal brut est mappé sur le champ "ip_address" de l'objet UDM ioc. |
obj.itype |
ioc.categorization | Le champ "itype" du journal brut est mappé sur le champ "categorization" de l'objet UDM ioc. |
obj.itype |
entity.metadata.threat.category_details | Le champ "itype" du journal brut est fusionné avec le champ "category_details" de l'objet de menace UDM. |
obj.latitude |
entity.entity.location.region_latitude | Le champ de latitude du journal brut est mappé sur le champ "region_latitude" de l'objet d'entité UDM. |
obj.longitude |
entity.entity.location.region_longitude | Le champ de longitude du journal brut est mappé sur le champ region_longitude de l'objet d'entité UDM. |
obj.meta.detail2 |
ioc.description | Le champ "detail2" du journal brut est mappé au champ de description de l'objet UDM ioc. |
obj.meta.detail2 |
entity.metadata.threat.description | Le champ "detail2" du journal brut est mappé au champ de description de l'objet de menace UDM. |
obj.meta.severity |
ioc.raw_severity | Le champ "severity" (gravité) du journal brut est mappé sur le champ "raw_severity" de l'objet IOC UDM. |
obj.meta.severity |
entity.metadata.threat.severity | Le champ "gravité" du journal brut est mappé sur le champ "gravité" de l'objet menace UDM. Si le niveau de gravité est "très élevé", il est associé à "CRITIQUE". |
obj.meta.severity |
entity.metadata.threat.severity_details | Le champ "severity" (gravité) du journal brut est mappé sur le champ "severity_details" (détails de la gravité) de l'objet menace UDM. |
obj.modified_ts |
entity.metadata.threat.last_updated_time | Le champ "modified_ts" du journal brut est mappé sur le champ "last_updated_time" de l'objet de menace UDM. |
obj.org |
entity.entity.administrative_domain | Le champ "org" du journal brut est mappé au champ "administrative_domain" de l'objet d'entité UDM. |
obj.resource_uri |
entity.metadata.threat.url_back_to_product | Le champ "resource_uri" du journal brut est mappé sur le champ "url_back_to_product" de l'objet menace UDM. |
obj.retina_confidence |
entity.metadata.threat.confidence_score | Le champ "retina_confidence" du journal brut est mappé sur le champ "confidence_score" de l'objet menace UDM. |
obj.source |
ioc.feed_name | Le champ source du journal brut est mappé sur le champ feed_name de l'objet UDM ioc. |
obj.source |
entity.metadata.threat.threat_name | Le champ source du journal brut est mappé sur le champ "threat_name" de l'objet menace UDM. |
obj.status |
entity.metadata.threat.threat_status | Le champ d'état du journal brut est mappé au champ threat_status de l'objet menace UDM. |
obj.subtype |
entity.entity.file.sha1 | Le champ de sous-type du journal brut est mappé au champ sha1 de l'objet d'entité UDM si le sous-type est "SHA1". |
obj.subtype |
entity.entity.file.sha256 | Le champ "subtype" du journal brut est mappé sur le champ "sha256" de l'objet d'entité UDM si le sous-type est "SHA256". |
obj.tags |
entity.metadata.source_labels | Le champ "tags" du journal brut est mappé sur le champ "source_labels" de l'objet d'entité UDM. |
obj.tags.id |
entity.metadata.source_labels | Le champ "id" du tableau "tags" du journal brut est mappé au champ "source_labels" de l'objet d'entité UDM. |
obj.tags.name |
entity.metadata.source_labels | Le champ "name" du tableau de tags du journal brut est mappé au champ "source_labels" de l'objet d'entité UDM. |
obj.threatscore |
entity.metadata.threat.risk_score | Le champ "threatscore" du journal brut est mappé sur le champ "risk_score" de l'objet de menace UDM. |
obj.threat_type |
entity.metadata.threat.detection_fields | Le champ "threat_type" du journal brut est mappé sur le champ "detection_fields" de l'objet menace UDM. |
obj.type |
entity.entity.file.md5 | Le champ "type" du journal brut est mappé sur le champ "md5" de l'objet d'entité UDM si le type est "md5". |
obj.type |
entity.entity.hostname | Le champ "type" du journal brut est mappé sur le champ "hostname" de l'objet d'entité UDM si le type est "domain". |
obj.type |
entity.entity.ip | Le champ "type" du journal brut est fusionné avec le champ "ip" de l'objet d'entité UDM si le type est "ip" ou "ipv6". |
obj.type |
entity.entity.url | Le champ "type" du journal brut est mappé sur le champ "url" de l'objet d'entité UDM si le type est "url" ou "string". |
obj.type |
entity.entity.user.email_addresses | Le champ "type" du journal brut est fusionné avec le champ "email_addresses" de l'objet d'entité UDM si le type est "email". |
obj.type |
entity.metadata.entity_type | Le champ "type" du journal brut est mappé sur le champ "entity_type" de l'objet d'entité UDM. Si le type est "ip" ou "ipv6", il est mappé sur "IP_ADDRESS". Si le type est "domain", il est mappé sur "DOMAIN_NAME". Si le type est "md5" ou si le champ itype contient "md5", il est mappé sur "FILE". Si le type est "url" ou "string", il est mappé sur "URL". Si le type est "email", il est mappé sur "USER". Sinon, il est mappé sur "UNKNOWN_ENTITYTYPE". |
obj.uuid |
entity.additional.fields | Le champ "uuid" du journal brut est mappé sur le champ "fields" de l'objet d'entité UDM. |
obj.value |
entity.entity.ip | Le champ "value" du journal brut est fusionné avec le champ "ip" de l'objet d'entité UDM si le champ "type" est défini sur "ip" et que le champ "ip" est vide. |
obj.value |
entity.entity.ip | Le champ "value" du journal brut est fusionné avec le champ "ip" de l'objet d'entité UDM si le champ "ip_field_not_exists" est défini sur "true" et que le champ "value" est une adresse IP. |
obj.value |
entity.entity.url | Le champ "value" du journal brut est mappé sur le champ "url" de l'objet d'entité UDM si le champ "type" est défini sur "url" ou "string". |
obj.value |
ioc.domain_and_ports.domain | Le champ "value" du journal brut est mappé sur le champ "domain" de l'objet UDM ioc si le champ "type" n'est pas "ip". |
obj.value |
ioc.ip_and_ports.ip_address | Le champ "value" du journal brut est mappé au champ "ip_address" de l'objet IoC UDM si le champ "type" est défini sur "ip" et que le champ "ip" est vide. |
cn1 |
ioc.confidence_score | Le champ "cn1" du journal brut est mappé au champ "confidence_score" de l'objet UDM ioc. |
cn2 |
entity.metadata.threat.rule_id | Le champ "cn2" du journal brut est mappé sur le champ "rule_id" de l'objet menace UDM. |
cs1 |
ioc.raw_severity | Le champ "cs1" du journal brut est mappé au champ "raw_severity" de l'objet UDM ioc. |
cs2 |
entity.metadata.threat.threat_name | Le champ "cs2" du journal brut est mappé sur le champ "threat_name" de l'objet menace UDM. |
cs3 |
entity.metadata.threat.threat_status | Le champ cs3 du journal brut est mappé au champ threat_status de l'objet menace UDM. Si le champ cs3 est défini sur "active", il est mappé sur "ACTIVE". Si le champ cs3 est "cleared", il est mappé sur "CLEARED". Si le champ cs3 est "falsePositive" ou "falsepos", il est mappé sur "FALSE_POSITIVE". Si le champ cs3 est défini sur "threat_status_unspecified", il est mappé sur "THREAT_STATUS_UNSPECIFIED". |
cs4 |
entity.entity.administrative_domain | Le champ cs4 du journal brut est mappé au champ administrative_domain de l'objet d'entité UDM. |
cs5 |
ioc.description | Le champ cs5 du journal brut est mappé au champ de description de l'objet UDM ioc. |
cs5 |
entity.metadata.threat.detection_fields | Le champ "cs5" du journal brut est mappé sur le champ "detection_fields" de l'objet menace UDM. |
cs5 |
entity.metadata.threat.description | Le champ cs5 du journal brut est mappé au champ de description de l'objet menace UDM. |
cs6 |
entity.metadata.threat.category_details | Le champ cs6 du journal brut est fusionné avec le champ category_details de l'objet menace UDM. |
device_product |
entity.metadata.product_name | Le champ "device_product" du journal brut est mappé au champ "product_name" de l'objet d'entité UDM. |
device_vendor |
entity.metadata.vendor_name | Le champ "device_vendor" du journal brut est mappé au champ "vendor_name" de l'objet d'entité UDM. |
device_version |
entity.metadata.product_version | Le champ "device_version" du journal brut est mappé sur le champ "product_version" de l'objet d'entité UDM. |
msg |
entity.metadata.threat.summary | Le champ "msg" du journal brut est mappé sur le champ "summary" de l'objet de menace UDM. |
shost |
entity.entity.hostname | Le champ "shost" du journal brut est mappé au champ "hostname" de l'objet d'entité UDM. |
shost |
entity.entity.url | Le champ "shost" du journal brut est mappé sur le champ "url" de l'objet d'entité UDM. |
shost |
ioc.domain_and_ports.domain | Le champ "shost" du journal brut est mappé sur le champ "domain" de l'objet UDM ioc. |
src |
entity.entity.ip | Le champ "src" du journal brut est fusionné avec le champ "ip" de l'objet d'entité UDM. |
src |
ioc.ip_and_ports.ip_address | Le champ "src" du journal brut est mappé sur le champ "ip_address" de l'objet UDM ioc. |
entity.metadata.threat.confidence | HIGH_CONFIDENCE | Le champ "confidence" de l'objet de menace UDM est défini sur "HIGH_CONFIDENCE" si le champ "confidence_score" est supérieur ou égal à 75. |
entity.metadata.threat.confidence | LOW_CONFIDENCE | Le champ "confidence" de l'objet de menace UDM est défini sur "LOW_CONFIDENCE" (faible niveau de confiance) si le champ "confidence_score" est inférieur ou égal à 50. |
entity.metadata.threat.confidence | MEDIUM_CONFIDENCE | Le champ "confidence" de l'objet de menace UDM est défini sur "MEDIUM_CONFIDENCE" si le champ "confidence_score" est supérieur à 50 et inférieur ou égal à 74. |
entity.metadata.threat.confidence | UNKNOWN_CONFIDENCE | Le champ "confidence" de l'objet de menace UDM est défini sur "UNKNOWN_CONFIDENCE" si le champ "confidence_score" n'est pas un entier valide. |
entity.metadata.vendor_name | ANOMALI_IOC | Le champ "vendor_name" de l'objet d'entité UDM est défini sur "ANOMALI_IOC". |
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.