Collecter les journaux IOC du MISP
Présentation
Cet analyseur extrait les IOC des données du MISP au format JSON ou CSV. Il analyse l'entrée, met en correspondance les champs avec la UDM, gère différents types d'IOC (adresses IP, domaines, hachages de fichiers, etc.) et enrichit les données avec le contexte de la CTI, comme la confiance et la gravité. L'analyseur exécute également une logique spécifique pour différents formats de données et gère les cas où des champs sont manquants ou non compatibles.
Avant de commencer
- Assurez-vous de disposer d'une instance Google SecOps.
- Assurez-vous de disposer d'un accès privilégié au MISP.
Configurer un flux dans Google SecOps pour ingérer les journaux de renseignement sur les menaces du MISP
- Accédez à Paramètres du SIEM > Flux.
- Cliquez sur Ajouter.
- Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple, Journaux du SIEM).
- Sélectionnez Webhook comme type de source.
- Sélectionnez Intelligence sur les menaces du référentiel MISP 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 Security Operations.SECRET
: clé secrète que vous avez générée pour authentifier le flux.
Activer l'envoi de requêtes HTTP vers une URL externe dans MISP
- Accédez à la machine sur laquelle MISP est déployé.
- Modifiez le fichier config.php situé dans
app/Config/
. - Recherchez la configuration
rest_client_enable_arbitrary_urls
et définissez-la sur True.none 'rest_client_enable_arbitrary_urls' => true
- Enregistrez le fichier.
Configurer un webhook dans MISP pour Google SecOps
- Connectez-vous à la plate-forme MISP Threat Intelligence.
- Accédez à Administration > Workflows > List Modules (Administration > Workflows > Lister les modules).
- Sélectionnez Webhook.
- Accédez à la colonne Action, puis cliquez sur Activer.
- Accédez à Workflows > List triggers (Workflows > Liste des déclencheurs).
- Sélectionnez le déclencheur de webhook de votre choix.
- Sélectionnez Webhook dans la liste des modules.
- Glissez-déposez-la dans l'espace de travail.
- Connectez l'entrée à la sortie du déclencheur.
- Dans le module Webhook, renseignez les champs suivants :
- URL: saisissez ENDPOINT_URL, suivi de API_KEY et de SECRET.
- Méthode de requête HTTP: sélectionnez POST.
- Cliquez sur Enregistrer.
Tableau de mappage UDM
Champ de journal | Mappage UDM | Logique |
---|---|---|
Attribute.category |
event.idm.entity.metadata.threat.category_details |
Mappé directement à partir de Attribute.category dans l'objet JSON imbriqué dans le champ "data". Utilisé dans le chemin d'analyse JSON. |
Attribute.comment |
event.idm.entity.metadata.threat.summary |
Mappé directement à partir de Attribute.comment dans l'objet JSON imbriqué dans le champ "data". Utilisé dans le chemin d'analyse JSON. |
Attribute.deleted |
event.idm.entity.metadata.threat.detection_fields.value |
Mappé directement à partir de Attribute.deleted et ajouté en tant que champ de détection avec la clé "Attribut supprimé". Utilisé dans le chemin d'analyse JSON. |
Attribute.event_id |
event.idm.entity.metadata.threat.detection_fields.value |
Mappé directement à partir de Attribute.event_id et ajouté en tant que champ de détection avec la clé "Attribute event_id". Utilisé dans le chemin d'analyse JSON. |
Attribute.first_seen |
event.idm.entity.metadata.threat.detection_fields.value |
Mappé directement à partir de Attribute.first_seen et ajouté en tant que champ de détection avec la clé "Attribute first_seen". Utilisé dans le chemin d'analyse JSON. |
Attribute.id |
event.idm.entity.metadata.threat.detection_fields.value |
Mappé directement à partir de Attribute.id et ajouté en tant que champ de détection avec la clé "ID de l'attribut" ou "ID de l'attribut $$", en fonction du chemin d'analyse. Utilisé dans les chemins d'analyse CSV et JSON. |
Attribute.timestamp |
event.idm.entity.metadata.threat.detection_fields.value |
Mappé directement à partir de Attribute.timestamp et ajouté en tant que champ de détection avec la clé "Code temporel de l'attribut". Utilisé dans le chemin d'analyse JSON. |
Attribute.to_ids |
event.idm.entity.metadata.threat.detection_fields.value |
Mappé directement à partir de Attribute.to_ids et ajouté en tant que champ de détection avec la clé "Attribute to_ids". Utilisé dans le chemin d'analyse JSON. |
Attribute.type |
log_type |
Mappé directement à partir de Attribute.type dans l'objet JSON imbriqué dans le champ "data". Utilisé comme champ provisoire, puis pour renseigner d'autres champs UDM. Utilisé dans le chemin d'analyse JSON. |
Attribute.uuid |
event.idm.entity.metadata.product_entity_id |
Mappé directement à partir de Attribute.uuid dans l'objet JSON imbriqué dans le champ "data". Utilisé dans le chemin d'analyse JSON. |
Attribute.value |
Plusieurs | La valeur de ce champ permet de renseigner plusieurs champs UDM en fonction de Attribute.type (ou log_type si dérivé de Attribute.type ) :: event.idm.entity.entity.hostname si type est "domain".- event.idm.entity.entity.file.md5 si type est "md5".- event.idm.entity.entity.file.sha1 si type est "sha1".: event.idm.entity.entity.file.sha256 si type est "sha256".: event.idm.entity.entity.resource.name si type est "mutex".: event.idm.entity.entity.registry.registry_key si type est "regkey".: event.idm.entity.entity.user.email_addresses si type est "threat-actor".: event.idm.entity.entity.url si type est "uri" ou "url".: event.idm.entity.entity.file.full_path si type est "nom de fichier".: analyse de l'adresse IP et du port si type est "ip-dst|port", "ip-dst" ou "ip-src". Utilisé dans le chemin d'analyse JSON. |
column1 |
event.idm.entity.metadata.product_entity_id |
Mappé directement à partir de column1 dans le chemin d'analyse CSV. |
column14 |
Fait partie de event.idm.entity.metadata.threat.description |
Associé à description pour former la description finale dans les métadonnées de la menace. Utilisé dans le chemin d'analyse CSV. |
column16 |
event.idm.entity.metadata.threat.threat_feed_name , event.ioc.feed_name |
Mappé directement à partir de column16 . Utilisé dans le chemin d'analyse CSV. |
column18 |
event.idm.entity.metadata.threat.severity_details , event.ioc.raw_severity |
Mappé directement à partir de column18 . Utilisé dans le chemin d'analyse CSV. |
column21 |
Partie de event.idm.entity.metadata.threat.description , event.ioc.description |
Utilisé comme base de la description, puis concatenant avec event_info . Utilisé dans le chemin d'analyse CSV. |
column3 |
Fait partie de event.ioc.categorization |
Mappé directement à partir de column3 et concatenated avec "IOCs" pour former la catégorisation finale. Utilisé dans le chemin d'analyse CSV. |
column4 |
event.idm.entity.metadata.description |
Mappé directement à partir de column4 . Utilisé dans le chemin d'analyse CSV. |
column5 |
Plusieurs | La valeur de ce champ est utilisée pour renseigner plusieurs champs UDM en fonction du champ column4 (qui est mappé sur type ) :: event.idm.entity.entity.hostname si type est "domain".: analyse de l'adresse IP et du port si type est "ip-dst|port", "ip-dst" ou "ip-src".- event.idm.entity.entity.file.md5 si type est "md5".- event.idm.entity.entity.file.sha1 si type est "sha1".: event.idm.entity.entity.file.sha256 si type est "sha256".: event.idm.entity.entity.resource.name si type est "mutex".: event.idm.entity.entity.registry.registry_key si type est "regkey".: event.idm.entity.entity.user.email_addresses si type est "threat-actor".: event.idm.entity.entity.url si type est "uri" ou "url".: event.idm.entity.entity.file.full_path si type est "nom de fichier". Utilisé dans le chemin d'analyse CSV. |
column6 |
event.idm.entity.metadata.threat.summary |
Mappé directement à partir de column6 . Utilisé dans le chemin d'analyse CSV. |
column8 |
event.ioc.active_timerange.start , event.idm.entity.metadata.interval.start_time |
Analysé en tant qu'horodatage UNIX. Utilisé dans le chemin d'analyse CSV. |
date description |
event.idm.entity.metadata.threat.description |
Mappé directement à partir de description dans l'objet JSON imbriqué dans le champ "data". Utilisé dans le chemin d'analyse JSON. |
event_creator_email |
event.idm.entity.entity.labels.value |
Mappé directement à partir de event_creator_email et ajouté en tant que libellé avec la clé "event_creator_email". Utilisé dans le chemin d'analyse JSON. |
event_id Feed.publish |
event.idm.entity.metadata.threat.detection_fields.value |
Mappé directement à partir de Feed.publish et ajouté en tant que champ de détection avec la clé "Publication du flux". Utilisé dans le chemin d'analyse JSON. |
first_seen |
event.ioc.active_timerange.start , event.idm.entity.metadata.interval.start_time |
Analyse comme un code temporel au format "aaaa-MM-jjThh:mm:ssZZ". Utilisé dans le chemin d'analyse JSON. |
id info |
event.idm.entity.metadata.description |
Mappé directement à partir de info dans l'objet JSON imbriqué dans le champ "data". Utilisé dans le chemin d'analyse JSON. |
last_seen |
event.ioc.active_timerange.end |
Analyse comme un code temporel au format "aaaa-MM-jjThh:mm:ssZZ". Utilisé dans le chemin d'analyse JSON. |
Org.name |
event.idm.entity.metadata.threat.detection_fields.value |
Mappé directement à partir de Org.name et ajouté en tant que champ de détection avec la clé "Nom de l'organisation". Utilisé dans le chemin d'analyse JSON. |
published |
event.idm.entity.metadata.threat.detection_fields.value |
Mappé directement à partir de published et ajouté en tant que champ de détection avec la clé "published". Utilisé dans le chemin d'analyse JSON. |
Tag.colour |
event.idm.entity.metadata.threat.detection_fields.value |
Mappé directement à partir de Tag.colour et ajouté en tant que champ de détection avec la clé "couleur de la balise". Utilisé dans le chemin d'analyse JSON. |
Tag.exportable |
event.idm.entity.metadata.threat.detection_fields.value |
Mappé directement à partir de Tag.exportable et ajouté en tant que champ de détection avec la clé "tag exportable". Utilisé dans le chemin d'analyse JSON. |
Tag.hide_tag |
event.idm.entity.metadata.threat.detection_fields.value |
Mappé directement à partir de Tag.hide_tag et ajouté en tant que champ de détection avec la clé "tag hide_tag". Utilisé dans le chemin d'analyse JSON. |
Tag.id |
event.idm.entity.metadata.threat.detection_fields.value |
Mappé directement à partir de Tag.id et ajouté en tant que champ de détection avec la clé "tag id". Utilisé dans le chemin d'analyse JSON. |
Tag.is_custom_galaxy |
event.idm.entity.metadata.threat.detection_fields.value |
Mappé directement à partir de Tag.is_custom_galaxy et ajouté en tant que champ de détection avec la clé "tag is_custom_galaxy". Utilisé dans le chemin d'analyse JSON. |
Tag.is_galaxy |
event.idm.entity.metadata.threat.detection_fields.value |
Mappé directement à partir de Tag.is_galaxy et ajouté en tant que champ de détection avec la clé "tag is_galaxy". Utilisé dans le chemin d'analyse JSON. |
Tag.isinherited |
event.idm.entity.metadata.threat.detection_fields.value |
Mappé directement à partir de Tag.isinherited et ajouté en tant que champ de détection avec la clé "tag isinherited". Utilisé dans le chemin d'analyse JSON. |
Tag.name |
event.idm.entity.metadata.threat.detection_fields.value |
Mappé directement à partir de Tag.name et ajouté en tant que champ de détection avec la clé "nom de la balise". Utilisé dans le chemin d'analyse JSON. |
Tag.numerical_value |
event.idm.entity.metadata.threat.detection_fields.value |
Mappé directement à partir de Tag.numerical_value et ajouté en tant que champ de détection avec la clé "tag numerical_value". Utilisé dans le chemin d'analyse JSON. |
Tag.user_id |
event.idm.entity.metadata.threat.detection_fields.value |
Mappé directement à partir de Tag.user_id et ajouté en tant que champ de détection avec la clé "tag user_id". Utilisé dans le chemin d'analyse JSON. |
threat_level_id |
event.idm.entity.entity.labels.value |
Mappé directement à partir de threat_level_id et ajouté en tant que libellé avec la clé "threat_level_id". Utilisé dans le chemin d'analyse JSON. |
timestamp |
event.idm.entity.metadata.collected_timestamp , event.idm.entity.metadata.interval.start_time |
Analysé en tant qu'horodatage UNIX. Utilisé dans le chemin d'analyse CSV. |
uuid |
event.idm.entity.metadata.vendor_name |
Défini sur "MISP" par l'analyseur. Défini sur "MISP" par l'analyseur. Défini sur une valeur par défaut très éloignée dans le futur (2 534 023 00799 secondes après l'epoch). Déterminé par l'analyseur en fonction du champ type ou log_type . Valeurs possibles : "FILE", "DOMAIN_NAME", "IP_ADDRESS", "MUTEX", "RESOURCE" ou "USER". Peut être dérivé de Attribute.comment ou Attribute.value , en fonction de Attribute.type . Analyse à partir de Attribute.value ou column5 si le type est lié à l'adresse IP. Analyse à partir de Attribute.value ou column5 si le type est "ip-dst|port". Dérivé de column3 lors de l'analyse CSV ou de Attribute.category lors de l'analyse JSON. Dérivé de column21 et column14 lors de l'analyse CSV. Dérivé de column8 ou first_seen . Dérivé de last_seen . Dérivé de description à l'aide d'un modèle Grok. Dérivé de column16 ou défini sur "MISP". Dérivé de column18 . Analyse à partir de Attribute.value ou column5 si le type est lié à l'adresse IP. Analyse à partir de Attribute.value ou column5 si le type est "ip-dst|port". Dérivé de Attribute.value ou column5 si le type est "domain". Dérivé du champ confidence , qui est extrait du champ description . Les valeurs possibles sont "HIGH_CONFIDENCE", "MEDIUM_CONFIDENCE", "LOW_CONFIDENCE" ou "UNKNOWN_CONFIDENCE". Mappé directement à partir du champ confidence , qui est extrait du champ description . Mappé directement à partir du champ threat_level , qui est dérivé de column18 dans le chemin d'analyse CSV. Mappé directement à partir du champ feed_name , qui est dérivé de column16 dans le chemin d'analyse CSV. Dérivé de column21 et column14 lors de l'analyse CSV. Dérivé de column6 lors de l'analyse CSV ou de Attribute.comment lors de l'analyse JSON. Plusieurs champs sont ajoutés en tant que champs de détection avec leurs clés correspondantes. Plusieurs champs sont ajoutés en tant qu'étiquettes avec leurs clés correspondantes. Copié à partir du champ timestamp de niveau supérieur dans le journal brut. |
Modifications
2023-09-26
- "published", "Feed.publish", "Org.name", "Attribute.id", "Attribute.event_id", "Attribute.to_ids", "Attribute.timestamp", "Attribute.comment", "Attribute.deleted", "Attribute.first_seen", tous les "tag.names" mappés sur "threat.detection_fields".
2023-08-17
- Correction de bug :
- Ajout d'une condition pour effectuer une opération "gsub", qui supprime les barres obliques supplémentaires, uniquement lorsque le journal n'est pas au format JSON.
2023-07-20
- Correction de bug :
- Modification de "metadata.entity_type" en "MUTEX" lorsque le journal est de type mutex.
2023-07-04
- Analyseur nouvellement créé.