Recopila registros de Atlassian Jira
Descripción general
Este analizador controla los registros de Atlassian Jira en los formatos SYSLOG y JSON. Primero, intenta analizar el mensaje como JSON. Si eso falla, usa patrones de grok para analizar mensajes con formato SYSLOG y extraer varios campos, como direcciones IP, nombres de usuario, métodos HTTP y códigos de respuesta, antes de asignarlos a la UDM. El analizador también controla eventos de auditoría específicos de Jira, incluidos los accesos exitosos y fallidos, y asigna campos relevantes a atributos de resultados de seguridad dentro de la UDM.
Antes de comenzar
- Asegúrate de tener una instancia de Google SecOps.
- Asegúrate de tener acceso con privilegios a Atlassian Jira.
Configura un feed en Google SecOps para transferir los registros de Atlassian Jira
- 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 Atlassian Jira).
- Selecciona Webhook como el Tipo de origen.
- Selecciona Atlassian Jira 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 recursos: Es el espacio de nombres de recursos.
- 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.
Habilita la autenticación especificando 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.
Crea un webhook en Atlassian Jira para Google SecOps
- Accede a tu instancia de Jira como administrador.
- Ve a Configuración configuración > Sistema > Webhooks.
- Haz clic en Crear unwebhook.
- Configura los siguientes detalles del webhook:
- Nombre: Proporciona un nombre descriptivo para el webhook (por ejemplo, Integración de SecOps de Google).
- URL: Ingresa la URL del extremo de la API de Google SecOps.
- Eventos: Selecciona los eventos de Jira que deben activar el webhook. Elige los eventos relevantes para tus necesidades de supervisión de seguridad (por ejemplo, problema creado, problema actualizado, comentario agregado). Si es necesario, puedes seleccionar Todos los eventos.
- Opcional: Filtro JQL: Usa un filtro JQL para definir mejor qué eventos activan el webhook. Esto es útil para enfocarse en proyectos, tipos de problemas o cualquier otro criterio específicos.
- Excluir cuerpo: Deja esta opción sin marcar. El webhook debe enviar los datos del evento en formato JSON a Google SecOps.
- Haz clic en Crear para guardar la configuración del webhook.
Tabla de asignación de UDM
Campo de registro | Asignación de UDM | Lógica |
---|---|---|
affectedObjects.id |
target.resource.attribute.labels.value |
El campo id dentro de cada objeto del array affectedObjects se asigna a una etiqueta con la clave "ID_[index]", donde [index] es la posición del objeto en el array. |
affectedObjects.name |
target.resource.attribute.labels.value |
El campo name dentro de cada objeto del array affectedObjects se asigna a una etiqueta con la clave "Name_[index]", donde [index] es la posición del objeto en el array. |
affectedObjects.type |
target.resource.attribute.labels.value |
El campo type dentro de cada objeto del array affectedObjects se asigna a una etiqueta con la clave "Type_[index]", donde [index] es la posición del objeto en el array. |
associatedItems.0.id |
target.user.userid |
Si associatedItems.0.typeName es "USER", este campo se asigna a target.user.userid . De lo contrario, se asigna a una etiqueta con la clave "associatedItems Id" en security_result.detection_fields . |
associatedItems.0.name |
target.user.user_display_name |
Si associatedItems.0.typeName es "USER", este campo se asigna a target.user.user_display_name . De lo contrario, se asigna a una etiqueta con la clave "associatedItems Name" en security_result.detection_fields . |
associatedItems.0.parentId |
target.process.parent_process.pid |
Si associatedItems.0.typeName es "USER", este campo se asigna a target.process.parent_process.pid . |
associatedItems.0.parentName |
target.resource.parent |
Si associatedItems.0.typeName es "USER", este campo se asigna a target.resource.parent . |
associatedItems.0.typeName |
security_result.detection_fields.value |
Se asigna a una etiqueta con la clave "associatedItems TypeName" en security_result.detection_fields . |
author.id |
principal.user.userid |
Se asignó a principal.user.userid . |
author.name |
principal.user.user_display_name |
Se asignó a principal.user.user_display_name . |
author.type |
principal.resource.attribute.labels.value |
Se asigna a una etiqueta con la clave "Author Type" en principal.resource.attribute.labels . |
author.uri |
principal.url |
Se asignó a principal.url . |
authorAccountId |
principal.user.userid |
Se asignó a principal.user.userid . |
authorKey |
target.resource.attribute.labels.value |
Se asoció a una etiqueta con la clave "Clave de autor" en target.resource.attribute.labels . |
auditType.action |
security_result.summary |
Se asignó a security_result.summary . También se usa para derivar security_result.action y metadata.event_type (USER_LOGIN si la acción contiene "login", ALLOW si es "successful", BLOCK si es "failed"). |
auditType.area |
metadata.product_event_type |
Se asignó a metadata.product_event_type . |
auditType.category |
security_result.category_details |
Se asignó a security_result.category_details . |
category |
metadata.product_event_type |
Se asignó a metadata.product_event_type . |
changedValues.changedFrom |
security_result.about.resource.attribute.labels.value |
Se asoció a una etiqueta con la clave "Changed From" en security_result.about.resource.attribute.labels . |
changedValues.changedTo |
security_result.about.resource.attribute.labels.value |
Se asoció a una etiqueta con la clave "Changed To" en security_result.about.resource.attribute.labels . |
changedValues.fieldName |
security_result.about.resource.attribute.labels.value |
Se asoció a una etiqueta con la clave "FieldName" en security_result.about.resource.attribute.labels . |
changedValues.i18nKey |
security_result.about.resource.attribute.labels.value |
Se asoció a una etiqueta con la clave "FieldName" en security_result.about.resource.attribute.labels . |
changedValues.key |
security_result.about.resource.attribute.labels.value |
Se asoció a una etiqueta con la clave "Changed From" en security_result.about.resource.attribute.labels . |
changedValues.to |
security_result.about.resource.attribute.labels.value |
Se asoció a una etiqueta con la clave "Changed To" en security_result.about.resource.attribute.labels . |
created |
metadata.event_timestamp |
Se analiza y se asigna a metadata.event_timestamp . |
dst_ip |
target.ip |
Se asignó a target.ip . |
extraAttributes.name |
principal.resource.attribute.labels.value |
Se asigna a una etiqueta con la clave "Name" en principal.resource.attribute.labels . |
extraAttributes.value |
principal.resource.attribute.labels.value |
Se asigna a una etiqueta con la clave "Value" en principal.resource.attribute.labels . |
http_method |
network.http.method |
Se asignó a network.http.method . |
http_referral_url |
network.http.referral_url |
Se asignó a network.http.referral_url . |
id |
metadata.product_log_id |
Se asignó a metadata.product_log_id . |
objectItem.id |
security_result.detection_fields.value |
Se asigna a una etiqueta con la clave "objectItem Id" en security_result.detection_fields . |
objectItem.name |
security_result.detection_fields.value |
Se asoció a una etiqueta con la clave "objectItem Name" en security_result.detection_fields . |
objectItem.typeName |
security_result.detection_fields.value |
Se asigna a una etiqueta con la clave "objectItem TypeName" en security_result.detection_fields . |
path |
principal.url |
Si no es “-” o “/status”, se asigna a principal.url . |
protocol |
network.ip_protocol |
Si es “HTTP”, se asigna a network.ip_protocol . |
remoteAddress |
principal.ip |
Se asignó a principal.ip . |
response_code |
network.http.response_code |
Se asignó a network.http.response_code . |
sent_bytes |
network.sent_bytes |
Se asignó a network.sent_bytes . |
source |
principal.ip |
Se analizan para extraer direcciones IP y se combinan en principal.ip . |
src_ip1 , src_ip2 , src_ip3 |
principal.ip |
Se asignó a principal.ip . |
summary |
metadata.description |
Se asignó a metadata.description . |
user_agent |
network.http.user_agent |
Se asignó a network.http.user_agent . |
user_name |
principal.user.userid |
Se asignó a principal.user.userid . Establece el valor en "MACHINE" si auditType.action contiene "login". Se deriva de date_time si se analiza syslog o de created si se analiza JSON. Si timestamp está disponible en JSON, se usa en lugar de created . Si no hay ninguno de estos, se usa el create_time del lote. Se deriva en función de la presencia de otros campos: NETWORK_HTTP si dst_ip está presente, USER_UNCATEGORIZED si user_name o (associatedItems.0.typeName es "USER" y associatedItems.0.id está presente), STATUS_UPDATE si src_ip1 , src_ip2 , src_ip3 o remoteAddress están presentes, o GENERIC_EVENT de lo contrario. Se anula a USER_LOGIN si auditType.action contiene "login". Siempre se establece en "ATLASSIAN_JIRA". Siempre se establece en "ATLASSIAN_JIRA". Establece el valor en "ALLOW" si auditType.action contiene "login successful" y en "BLOCK" si auditType.action contiene "login failed". |
Cambios
2023-12-12
- Se agregó compatibilidad para asignar varias direcciones IP de "source" a "principal.ip".
2023-11-10
- Se agregó un nuevo patrón de Grok para analizar los registros JSON con errores.
- Se asignó "affectedObjects" a "target.resource.attribute.labels".
- Se asignó "changedValues" a "security_result.about.resource.attribute.labels".
- Se asignó "extraAttributes" a "principal.resource.attribute.labels".
- Se asignó "source" a "principal.ip".
- Se asignaron "author.id", "author.name", "author.uri", "author.type", "auditType.area", "auditType.category" y "auditType.action" a "principal.user.userid", "principal.user.user_display_name", "principal.url", "principal.resource.attribute.labels", "metadata.product_event_type", "security_result.category_details" y "security_result.summary", respectivamente.
2023-02-09
- Se agregó un bloque "json" para recuperar los datos JSON.
2023-01-10
- Mejora: Se agregó compatibilidad con registros en formato JSON.
- Se asignó "authorAccountId" a "principal.user.userid".
- Se asignó "id" a "metadata.product_log_id".
- Se asignó "remoteAddress" a "principal.ip".
- Se asignó "summary" a "metadata.description".
- Se asignó "category" a "metadata.product_event_type".
- Se asignó "authorKey" a "target.resource.attribute.labels".
- Se asignaron "objectItem.id", "objectItem.name" y "objectItem.typeName" a "security_result.detection_fields".
- Se asignó "associatedItems.0.id" a "target.user.userid" cuando "associatedItems.0.typeName" es "USER".
- Se asignó "associatedItems.0.name" a "target.user.user_display_name" cuando "associatedItems.0.typeName" es "USER".
- Se asignó "associatedItems.0.parentId" a "target.process.parent_process.pid" cuando "associatedItems.0.typeName" es "USER".
- Se asignó "associatedItems.0.parentName" a "target.resource.parent" cuando "associatedItems.0.typeName" es "USER".
- Se asignaron "associatedItems.0.id" y "associatedItems.0.name" a "security_result.detection_fields" cuando "associatedItems.0.typeName" no es "USER".
- Se asignó "associatedItems.0.typeName" a "security_result.detection_fields".
- Se asignaron "changedValues.fieldName", "changedValues.changedFrom" y ""changedValues.changedTo" a "security_result.about.resource.attribute.labels".
- Se asignó "STATUS_UPDATE" a "metadata.event_type" si "remoteAddress" está presente.
- Se asignó "USER_UNCATEGORIZED" a "metadata.event_type" si "authorAccountId" está presente o "associatedItems.0.typeName is "USER" y "associatedItems.0.id" está presente.
2022-05-31
- Se corrigió un error: Se agregó una condición para verificar la asignación incorrecta de principal.url si el valor de la URL en los registros tiene "/status".
¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.