Recopila registros de IOC de MISP
Descripción general
Este analizador extrae IOC de los datos de MISP con formato JSON o CSV. Analiza la entrada, asigna campos a la UDM, controla varios tipos de IOC (IP, dominio, hashes de archivos, etc.) y enriquece los datos con contexto de inteligencia de amenazas, como confianza y gravedad. El analizador también realiza una lógica específica para diferentes formatos de datos y controla los casos con campos faltantes o no admitidos.
Antes de comenzar
- Asegúrate de tener una instancia de Google SecOps.
- Asegúrate de tener acceso con privilegios a MISP.
Configura un feed en Google SecOps para transferir los registros de inteligencia sobre amenazas de MISP
- Ve a Configuración de SIEM > Feeds.
- Haz clic en Agregar nueva.
- En el campo Nombre del feed, ingresa un nombre para el feed (por ejemplo, Registros de MISP).
- Selecciona Webhook como el Tipo de origen.
- Selecciona MISP Threat Intelligence como el Tipo de registro.
- Haz clic en Siguiente.
- Opcional: Especifica valores para los siguientes parámetros de entrada:
- Delimitador de división: Es el delimitador que se usa para separar las líneas de registro, como
\n
. - Espacio de nombres de activos: Es el espacio de nombres de activos.
- Etiquetas de transferencia: Es la etiqueta que se aplica a los eventos de este feed.
- Delimitador de división: Es el delimitador que se usa para separar las líneas de registro, como
- Haz clic en Siguiente.
- Revisa la configuración del feed en la pantalla Finalizar y, luego, haz clic en Enviar.
- Haz clic en Generate Secret Key para generar una clave secreta que autentique este feed.
- Copia y almacena la clave secreta. No podrás volver a ver esta clave secreta. Si es necesario, puedes volver a generar una clave secreta nueva, pero esta acción hace que la clave secreta anterior quede obsoleta.
- En la pestaña Detalles, copia la URL del extremo del feed del campo Información del extremo. Debes especificar esta URL de extremo en tu aplicación cliente.
- Haz clic en Listo.
Crea una clave de API para el feed de webhook
Ve a consola de Google Cloud > Credenciales.
Haz clic en Crear credenciales y selecciona Clave de API.
Restringe el acceso de la clave de API a la API de Google Security Operations.
Especifica la URL del extremo
- En tu aplicación cliente, especifica la URL del extremo HTTPS que se proporciona en el feed de webhook.
Para habilitar la autenticación, especifica la clave de API y la clave secreta como parte del encabezado personalizado en el siguiente formato:
X-goog-api-key = API_KEY X-Webhook-Access-Key = SECRET
Recomendación: Especifica la clave de API como un encabezado en lugar de hacerlo en la URL.
Si tu cliente de webhook no admite encabezados personalizados, puedes especificar la clave de API y la clave secreta con parámetros de consulta en el siguiente formato:
ENDPOINT_URL?key=API_KEY&secret=SECRET
Reemplaza lo siguiente:
ENDPOINT_URL
: Es la URL del extremo del feed.API_KEY
: Es la clave de API para autenticarse en Google Security Operations.SECRET
: Es la clave secreta que generaste para autenticar el feed.
Habilita el envío de solicitudes HTTP a URLs externas en MISP
- Accede a la máquina en la que se implementó MISP.
- Edita el archivo config.php que se encuentra en
app/Config/
. - Busca la configuración
rest_client_enable_arbitrary_urls
y configúrala como True.none 'rest_client_enable_arbitrary_urls' => true
- Guarde el archivo.
Configura el webhook en MISP para Google SecOps
- Accede a MISP Threat Intelligence.
- Ve a Administración > Flujo de trabajo > Lista de módulos.
- Selecciona Webhook.
- Ve a la columna Acción y haz clic en Habilitar.
- Ve a Workflows > List triggers.
- Selecciona el activador de webhook que prefieras.
- Selecciona Webhook en la lista de módulos.
- Arrastra y suelta el elemento en el lugar de trabajo.
- Conecta la entrada con la salida del activador.
- En el módulo Webhook, completa los siguientes campos:
- URL: Ingresa ENDPOINT_URL, seguido de API_KEY y SECRET.
- Método de solicitud HTTP: Selecciona POST.
- Haz clic en Guardar.
Tabla de asignación de UDM
Campo de registro | Asignación de UDM | Lógica |
---|---|---|
Attribute.category |
event.idm.entity.metadata.threat.category_details |
Se asignan directamente desde Attribute.category en el objeto JSON anidado dentro del campo "data". Se usa en la ruta de análisis de JSON. |
Attribute.comment |
event.idm.entity.metadata.threat.summary |
Se asigna directamente desde Attribute.comment en el objeto JSON anidado dentro del campo "data". Se usa en la ruta de análisis de JSON. |
Attribute.deleted |
event.idm.entity.metadata.threat.detection_fields.value |
Se asignó directamente desde Attribute.deleted y se agregó como un campo de detección con la clave "Attribute deleted". Se usa en la ruta de análisis de JSON. |
Attribute.event_id |
event.idm.entity.metadata.threat.detection_fields.value |
Se asigna directamente desde Attribute.event_id y se agrega como un campo de detección con la clave "Attribute event_id". Se usa en la ruta de análisis de JSON. |
Attribute.first_seen |
event.idm.entity.metadata.threat.detection_fields.value |
Se asigna directamente desde Attribute.first_seen y se agrega como un campo de detección con la clave "Attribute first_seen". Se usa en la ruta de análisis de JSON. |
Attribute.id |
event.idm.entity.metadata.threat.detection_fields.value |
Se asignan directamente desde Attribute.id y se agregan como un campo de detección con la clave "Attribute id" o "Attribute id $$", según la ruta de análisis. Se usa en las rutas de análisis de CSV y JSON. |
Attribute.timestamp |
event.idm.entity.metadata.threat.detection_fields.value |
Se asigna directamente desde Attribute.timestamp y se agrega como un campo de detección con la clave "Attribute timestamp". Se usa en la ruta de análisis de JSON. |
Attribute.to_ids |
event.idm.entity.metadata.threat.detection_fields.value |
Se asignó directamente desde Attribute.to_ids y se agregó como un campo de detección con la clave "Attribute to_ids". Se usa en la ruta de análisis de JSON. |
Attribute.type |
log_type |
Se asigna directamente desde Attribute.type en el objeto JSON anidado dentro del campo "data". Se usa como campo provisional y, más adelante, para propagar otros campos de la AUA. Se usa en la ruta de análisis de JSON. |
Attribute.uuid |
event.idm.entity.metadata.product_entity_id |
Se asigna directamente desde Attribute.uuid en el objeto JSON anidado dentro del campo "data". Se usa en la ruta de análisis de JSON. |
Attribute.value |
Varias | El valor de este campo se usa para propagar varios campos de la AUA según el Attribute.type (o log_type si se deriva de Attribute.type ):: event.idm.entity.entity.hostname si type es "domain".: event.idm.entity.entity.file.md5 si type es "md5".: event.idm.entity.entity.file.sha1 si type es "sha1".: event.idm.entity.entity.file.sha256 si type es "sha256".: event.idm.entity.entity.resource.name si type es "mutex".: event.idm.entity.entity.registry.registry_key si type es "regkey".: event.idm.entity.entity.user.email_addresses si type es "threat-actor".: event.idm.entity.entity.url si type es "uri" o "url".: event.idm.entity.entity.file.full_path si type es "filename".: Se analiza para obtener la IP y el puerto si type es "ip-dst|port", "ip-dst" o "ip-src". Se usa en la ruta de análisis de JSON. |
column1 |
event.idm.entity.metadata.product_entity_id |
Se asigna directamente desde column1 en la ruta de análisis de CSV. |
column14 |
Parte de event.idm.entity.metadata.threat.description |
Se concatena con description para formar la descripción final en los metadatos de amenazas. Se usa en la ruta de análisis de CSV. |
column16 |
event.idm.entity.metadata.threat.threat_feed_name , event.ioc.feed_name |
Se asigna directamente desde column16 . Se usa en la ruta de análisis de CSV. |
column18 |
event.idm.entity.metadata.threat.severity_details , event.ioc.raw_severity |
Se asigna directamente desde column18 . Se usa en la ruta de análisis de CSV. |
column21 |
Parte de event.idm.entity.metadata.threat.description , event.ioc.description |
Se usa como base para la descripción y, luego, se concatena con event_info . Se usa en la ruta de análisis de CSV. |
column3 |
Parte de event.ioc.categorization |
Se asignan directamente desde column3 y se concatenan con "IOC" para formar la categorización final. Se usa en la ruta de análisis de CSV. |
column4 |
event.idm.entity.metadata.description |
Se asigna directamente desde column4 . Se usa en la ruta de análisis de CSV. |
column5 |
Varias | El valor de este campo se usa para propagar varios campos de la AUA según el campo column4 (que se asigna a type ):: event.idm.entity.entity.hostname si type es "domain".: Se analiza para obtener la IP y el puerto si type es "ip-dst|port", "ip-dst" o "ip-src".: event.idm.entity.entity.file.md5 si type es "md5".: event.idm.entity.entity.file.sha1 si type es "sha1".: event.idm.entity.entity.file.sha256 si type es "sha256".: event.idm.entity.entity.resource.name si type es "mutex".: event.idm.entity.entity.registry.registry_key si type es "regkey".: event.idm.entity.entity.user.email_addresses si type es "threat-actor".: event.idm.entity.entity.url si type es "uri" o "url".: event.idm.entity.entity.file.full_path si type es "filename". Se usa en la ruta de análisis de CSV. |
column6 |
event.idm.entity.metadata.threat.summary |
Se asigna directamente desde column6 . Se usa en la ruta de análisis de CSV. |
column8 |
event.ioc.active_timerange.start , event.idm.entity.metadata.interval.start_time |
Se analiza como una marca de tiempo UNIX. Se usa en la ruta de análisis de CSV. |
date description |
event.idm.entity.metadata.threat.description |
Se asigna directamente desde description en el objeto JSON anidado dentro del campo "data". Se usa en la ruta de análisis de JSON. |
event_creator_email |
event.idm.entity.entity.labels.value |
Se asigna directamente desde event_creator_email y se agrega como etiqueta con la clave "event_creator_email". Se usa en la ruta de análisis de JSON. |
event_id Feed.publish |
event.idm.entity.metadata.threat.detection_fields.value |
Se asigna directamente desde Feed.publish y se agrega como un campo de detección con la clave "Publicación de feeds". Se usa en la ruta de análisis de JSON. |
first_seen |
event.ioc.active_timerange.start , event.idm.entity.metadata.interval.start_time |
Se analiza como una marca de tiempo en el formato “aaaa-MM-ddThh:mm:ssZZ”. Se usa en la ruta de análisis de JSON. |
id info |
event.idm.entity.metadata.description |
Se asignan directamente desde info en el objeto JSON anidado dentro del campo "data". Se usa en la ruta de análisis de JSON. |
last_seen |
event.ioc.active_timerange.end |
Se analiza como una marca de tiempo en el formato “aaaa-MM-ddThh:mm:ssZZ”. Se usa en la ruta de análisis de JSON. |
Org.name |
event.idm.entity.metadata.threat.detection_fields.value |
Se asignó directamente desde Org.name y se agregó como un campo de detección con la clave "Nombre de la organización". Se usa en la ruta de análisis de JSON. |
published |
event.idm.entity.metadata.threat.detection_fields.value |
Se asigna directamente desde published y se agrega como un campo de detección con la clave "published". Se usa en la ruta de análisis de JSON. |
Tag.colour |
event.idm.entity.metadata.threat.detection_fields.value |
Se asignó directamente desde Tag.colour y se agregó como un campo de detección con la clave "tag color". Se usa en la ruta de análisis de JSON. |
Tag.exportable |
event.idm.entity.metadata.threat.detection_fields.value |
Se asigna directamente desde Tag.exportable y se agrega como un campo de detección con la clave "tag exportable". Se usa en la ruta de análisis de JSON. |
Tag.hide_tag |
event.idm.entity.metadata.threat.detection_fields.value |
Se asigna directamente desde Tag.hide_tag y se agrega como un campo de detección con la clave "tag hide_tag". Se usa en la ruta de análisis de JSON. |
Tag.id |
event.idm.entity.metadata.threat.detection_fields.value |
Se asigna directamente desde Tag.id y se agrega como un campo de detección con la clave "tag id". Se usa en la ruta de análisis de JSON. |
Tag.is_custom_galaxy |
event.idm.entity.metadata.threat.detection_fields.value |
Se asigna directamente desde Tag.is_custom_galaxy y se agrega como un campo de detección con la clave "tag is_custom_galaxy". Se usa en la ruta de análisis de JSON. |
Tag.is_galaxy |
event.idm.entity.metadata.threat.detection_fields.value |
Se asigna directamente desde Tag.is_galaxy y se agrega como un campo de detección con la clave "tag is_galaxy". Se usa en la ruta de análisis de JSON. |
Tag.isinherited |
event.idm.entity.metadata.threat.detection_fields.value |
Se asigna directamente desde Tag.isinherited y se agrega como un campo de detección con la clave "tag isinherited". Se usa en la ruta de análisis de JSON. |
Tag.name |
event.idm.entity.metadata.threat.detection_fields.value |
Se asignan directamente desde Tag.name y se agregan como un campo de detección con la clave "nombre de la etiqueta". Se usa en la ruta de análisis de JSON. |
Tag.numerical_value |
event.idm.entity.metadata.threat.detection_fields.value |
Se asigna directamente desde Tag.numerical_value y se agrega como un campo de detección con la clave "tag numerical_value". Se usa en la ruta de análisis de JSON. |
Tag.user_id |
event.idm.entity.metadata.threat.detection_fields.value |
Se asigna directamente desde Tag.user_id y se agrega como un campo de detección con la clave "tag user_id". Se usa en la ruta de análisis de JSON. |
threat_level_id |
event.idm.entity.entity.labels.value |
Se asigna directamente desde threat_level_id y se agrega como una etiqueta con la clave "threat_level_id". Se usa en la ruta de análisis de JSON. |
timestamp |
event.idm.entity.metadata.collected_timestamp , event.idm.entity.metadata.interval.start_time |
Se analiza como una marca de tiempo UNIX. Se usa en la ruta de análisis de CSV. |
uuid |
event.idm.entity.metadata.vendor_name |
El analizador lo establece en “MISP”. El analizador lo establece en “MISP”. Se establece en un valor predeterminado muy lejano en el futuro (253402300799 segundos desde la época). El analizador lo determina en función del campo type o log_type . Puede ser “FILE”, “DOMAIN_NAME”, “IP_ADDRESS”, “MUTEX”, “RESOURCE” o “USER”. Se puede derivar de Attribute.comment o Attribute.value según el Attribute.type . Se analiza a partir de Attribute.value o column5 si el tipo está relacionado con la IP. Se analiza desde Attribute.value o column5 si el tipo es "ip-dst|port". Se deriva de column3 en el análisis de CSV o de Attribute.category en el análisis de JSON. Se deriva de column21 y column14 en el análisis de CSV. Se deriva de column8 o first_seen . Derivado de last_seen . Se deriva de description con un patrón grok. Se deriva de column16 o se establece en "MISP". Derivado de column18 . Se analiza a partir de Attribute.value o column5 si el tipo está relacionado con la IP. Se analiza desde Attribute.value o column5 si el tipo es "ip-dst|port". Se deriva de Attribute.value o column5 si el tipo es "domain". Se deriva del campo confidence , que se extrae del campo description . Los valores pueden ser "HIGH_CONFIDENCE", "MEDIUM_CONFIDENCE", "LOW_CONFIDENCE" o "UNKNOWN_CONFIDENCE". Se asigna directamente desde el campo confidence , que se extrae del campo description . Se asigna directamente desde el campo threat_level , que se deriva de column18 en la ruta de análisis de CSV. Se asigna directamente desde el campo feed_name , que se deriva de column16 en la ruta de análisis de CSV. Se deriva de column21 y column14 en el análisis de CSV. Se deriva de column6 en el análisis de CSV o de Attribute.comment en el análisis de JSON. Se agregan varios campos como campos de detección con sus claves correspondientes. Se agregan varios campos como etiquetas con sus claves correspondientes. Se copia del campo timestamp de nivel superior en el registro sin procesar. |
Cambios
2023-09-26
- Se asignaron "published", "Feed.publish", "Org.name", "Attribute.id", "Attribute.event_id", "Attribute.to_ids", "Attribute.timestamp", "Attribute.comment", "Attribute.deleted", "Attribute.first_seen" y todos los "tag.names" a "threat.detection_fields".
2023-08-17
- Corrección de errores :
- Se agregó una condición para realizar una operación "gsub", que quita la barra invertida adicional, solo cuando el registro no es JSON.
2023-07-20
- Corrección de errores :
- Se cambió "metadata.entity_type" a "MUTEX" cuando el registro es de tipo mutex.
2023-07-04
- Sin embargo, el analizador se creó recientemente.