Collecter les journaux IOC CrowdStrike
Présentation
Cet analyseur extrait les données CrowdStrike Falcon Intelligence à partir de messages au format JSON. Il transforme différents champs d'indicateurs de compromission dans le format UDM, en gérant différents types d'indicateurs (domaines, adresses IP, URL, hachages, etc.) et les métadonnées associées, y compris les relations, les libellés et les informations sur les menaces. L'analyseur effectue également la validation des données et le gestion des exceptions. Il donne la priorité à l'analyse JSON, puis utilise la correspondance grok si nécessaire et supprime les messages mal formés.
Avant de commencer
- Assurez-vous de disposer d'une instance Google SecOps.
- Assurez-vous de disposer des autorisations appropriées pour accéder à la plate-forme CrowdStrike Falcon Intelligence.
Configurer un flux dans Google SecOps pour ingérer les journaux d'IOC CrowdStrike
- Accédez à Paramètres du SIEM > Flux.
- Cliquez sur Ajouter.
- Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple, CrowdStrike IOC Logs).
- Sélectionnez Webhook comme type de source.
- Sélectionnez Crowdstrike IOC comme Type de journal.
- Cliquez sur Suivant.
- Facultatif: spécifiez des valeurs pour les paramètres d'entrée suivants :
- Délimiteur de fractionnement: délimiteur utilisé pour séparer les lignes de journal, par exemple
\n
. - Espace de noms des éléments: espace de noms des éléments.
- Libellés d'ingestion: libellé appliqué aux événements de ce flux.
- Délimiteur de fractionnement: délimiteur utilisé pour séparer les lignes de journal, par exemple
- Cliquez sur Suivant.
- Vérifiez la configuration du flux dans 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 cette action rend l'ancienne clé secrète obsolète.
- Dans l'onglet Détails, copiez l'URL du point de terminaison du flux dans le champ Informations sur le point de terminaison. Vous devez spécifier cette URL de point de terminaison dans votre application cliente.
- Cliquez sur OK.
Créer une clé API pour le flux webhook
Accédez à la console Google Cloud > Identifiants.
Cliquez sur Créer des identifiants, puis sélectionnez Clé API.
Limitez l'accès de 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 plutôt que dans l'URL.
Si votre client webhook n'est pas compatible avec 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 permettant de s'authentifier auprès de Google SecOps.SECRET
: clé secrète que vous avez générée pour authentifier le flux.
Créer un webhook CrowdStrike
- Connectez-vous à la console CrowdStrike Falcon Intelligence.
- Accédez au CrowdStrike Store.
- Recherchez Webhook.
- Activez l'intégration du webhook.
- Cliquez sur Configurer.
- Sélectionnez Ajouter une configuration.
- Assurez-vous que seuls les IOC sont envoyés au webhook.
- Collez l'URL du point de terminaison dans le champ URL du webhook de l'écran Configurer le webhook.
- Cliquez sur Enregistrer.
- CrowdStrike envoie désormais les événements générés au flux Google SecOps spécifié.
Tableau de mappage UDM
Champ de journal | Mappage UDM | Logique |
---|---|---|
_marker |
event.idm.entity.entity.labels.value |
La valeur du champ _marker est mappée directement. |
actors |
event.idm.entity.entity.group.group_display_name |
Si la première valeur de actors contient "panda", "bear", "kitten", "chollima", "jackal" ou "Spider", elle est mappée et event.idm.entity.entity.location.country_or_region est dérivée (respectivement Chine, Russie, Iran, Corée du Nord, groupes d'activistes et groupes criminels). Les autres valeurs de actors sont ajoutées en tant que libellés avec la clé "acteur" dans event.idm.entity.entity.group.attribute.labels . |
actors |
event.idm.entity.entity.location.country_or_region |
Dérivée en fonction de la première valeur de actors (voir ci-dessus). |
deleted |
event.idm.entity.metadata.threat.action |
Si deleted est défini sur "false", l'action est "BLOCK". Si deleted est défini sur "true", l'action est "ALLOW". |
deleted |
event.idm.entity.metadata.threat.action_details |
La valeur de deleted est mappée directement. |
domain_types |
event.idm.entity.metadata.threat.detection_fields.value |
Toutes les valeurs de domain_types sont concatenatées avec des virgules et mappées avec la clé "domain_types". |
id |
event.idm.entity.metadata.product_entity_id |
La valeur de id est mappée directement. |
indicator |
event.idm.entity.entity.hostname |
Mappé si type est "domain". |
indicator |
event.idm.entity.entity.file.md5 |
Mappé si type est "hash_md5" et que la valeur est un hachage MD5 valide. |
indicator |
event.idm.entity.entity.file.sha1 |
Mappé si type est "hash_sha1" et que la valeur est un hachage SHA1 valide. |
indicator |
event.idm.entity.entity.file.sha256 |
Mappé si type est "hash_sha256" et que la valeur est un hachage SHA256 valide. |
indicator |
event.idm.entity.entity.ip |
Mappé si type est "ip_address" et que la valeur est une adresse IP valide. |
indicator |
event.ioc.ip_and_ports.ip_address |
Mappé si type est "ip_address" et que la valeur est une adresse IP valide. |
indicator |
event.idm.entity.entity.url |
Mappé si type est "url". |
indicator |
event.idm.entity.entity.resource.name |
Mappé si type est "device_name" ou "mutex_name". |
indicator |
event.idm.entity.entity.user.email_addresses |
Mappé si type est "email_address" et que la valeur est une adresse e-mail valide. |
indicator |
event.idm.entity.metadata.threat.detection_fields.value |
Mappé avec différentes clés en fonction du champ type (par exemple, "campaign_id", "binary_string", etc.). Si le type n'est pas géré spécifiquement, il est mappé avec type comme clé. |
indicator |
event.ioc.domain_and_ports.domain |
Mappé si type n'est pas "ip_address" ou "port". |
ip_address_types |
event.idm.entity.metadata.threat.detection_fields.value |
Toutes les valeurs de ip_address_types sont concaténées avec des virgules et mappées avec la clé "ip_address_types". |
kill_chains |
event.idm.entity.metadata.threat.category |
La catégorie est dérivée des valeurs de kill_chains . "reconnaissance", "weaponization" ou "actionOnObjectives" génèrent "NETWORK_MALICIOUS". "delivery" ou "exploitation" génèrent "EXPLOIT". "installation" ou "c3" génèrent "SOFTWARE_MALICIOUS". "c2" renvoie "NETWORK_COMMAND_AND_CONTROL". Les autres valeurs renvoient "UNKNOWN_CATEGORY". Vous pouvez attribuer plusieurs catégories. |
kill_chains |
event.idm.entity.metadata.threat.category_details |
Les valeurs brutes de kill_chains sont mappées directement. Plusieurs valeurs sont possibles. |
labels |
event.idm.entity.metadata.threat.detection_fields |
Le champ "name" de chaque libellé est divisé en label_key et label_value par le caractère "/". Si label_key est "Malware" ou "ThreatType", label_value est mappé sur threat_name . Sinon, label_key et label_value sont mappés en tant que paire clé-valeur. "created_on" et "last_valid_on" dans chaque étiquette sont également mappés en tant que paires clé-valeur. |
labels |
event.idm.entity.metadata.threat.threat_name |
Dérivé du champ labels (voir ci-dessus). |
last_updated |
event.idm.entity.metadata.threat.detection_fields.value |
La valeur de last_updated est mappée avec la clé "last_updated". |
malicious_confidence |
event.idm.entity.metadata.threat.confidence |
Si malicious_confidence est défini sur "high" (élevé), le niveau de confiance est "HIGH_CONFIDENCE". Si la valeur est "low", le niveau de confiance est "LOW_CONFIDENCE". Si la valeur est "medium", la confiance est "MEDIUM_CONFIDENCE". Sinon, la valeur est "UNKNOWN_CONFIDENCE". |
malicious_confidence |
event.idm.entity.metadata.threat.confidence_details |
La valeur de malicious_confidence est mappée directement. |
malicious_confidence |
event.ioc.confidence_score |
La valeur de malicious_confidence est mappée directement. |
malware_families |
event.idm.entity.metadata.threat.threat_name |
Toutes les valeurs de malware_families sont concatenatées avec des virgules et mappées. |
published_date |
event.idm.entity.metadata.creation_timestamp |
La valeur de published_date est convertie en code temporel. |
published_date |
event.idm.entity.metadata.interval.start_time |
La valeur de published_date est convertie en code temporel. |
published_date |
event.ioc.active_timerange.start |
La valeur de published_date est convertie en code temporel. |
relations |
event.idm.entity.metadata.threat.about |
Les champs de chaque relation sont mappés à l'objet about en fonction de leur type . "created_date", "last_valid_date" et "id" sont ajoutés en tant qu'étiquettes. |
reports |
event.idm.entity.metadata.threat.about.labels.value |
Toutes les valeurs de reports sont concatenatées avec des virgules et mappées avec la clé "report_ids". |
threat_types |
event.idm.entity.metadata.threat.threat_name |
Toutes les valeurs de threat_types sont concatenatées avec des virgules avec l'threat_name existante dérivée de malware_families . |
type |
event.ioc.categorization |
La valeur de type est mappée directement. |
(Logique de l'analyseur) | event.idm.entity.metadata.collected_timestamp |
La valeur de create_time du journal brut est utilisée. |
(Logique de l'analyseur) | event.idm.entity.metadata.interval.end_time |
Code en dur sur un code temporel très éloigné (253402300799). |
(Logique de l'analyseur) | event.idm.entity.metadata.product_name |
Code dur "Falcon". |
(Logique de l'analyseur) | event.idm.entity.metadata.vendor_name |
Code codé en dur sur "CrowdStrike". |
(Logique de l'analyseur) | event.idm.entity.metadata.entity_type |
Dérivé en fonction du champ type et de la présence d'autres champs. Consultez le code de l'analyseur pour connaître la logique spécifique. |
(Logique de l'analyseur) | event.ioc.feed_name |
Code dur "CrowdStrike Falcon Intelligence". |
(Logique de l'analyseur) | event.timestamp |
La valeur de create_time du journal brut est utilisée. |
Modifications
2023-08-23
- Modification du mappage du champ
malicious_confidence
.
2023-05-04
- L'analyseur
crowdstrike_ioc
est défini par défaut.