Recoger registros de Atlassian Jira

Disponible en:

Información general

Este analizador gestiona los registros de Atlassian Jira en formatos SYSLOG y JSON. Primero intenta analizar el mensaje como JSON. Si no funciona, usa patrones grok para analizar mensajes con formato SYSLOG, extraer varios campos (como direcciones IP, nombres de usuario, métodos HTTP y códigos de respuesta) y, a continuación, asignarlos al modelo de datos unificado. El analizador también gestiona eventos de auditoría específicos de Jira, como los inicios de sesión correctos y fallidos, y asigna los campos relevantes a los atributos de resultados de seguridad en el modelo de datos unificado.

Antes de empezar

Asegúrate de que cumples los siguientes requisitos previos:

  • Instancia de Google SecOps.
  • Acceso privilegiado a Atlassian Jira.

Configurar feeds desde Configuración de SIEM > Feeds

Para configurar un feed, sigue estos pasos:

  1. Ve a Configuración de SIEM > Feeds.
  2. Haz clic en Añadir feed.
  3. En la página siguiente, haga clic en Configurar un solo feed.
  4. En el campo Nombre del feed, introduce un nombre para el feed (por ejemplo, Registros de Atlassian Jira).
  5. Selecciona Webhook como Tipo de fuente.
  6. Seleccione Atlassian Jira como Tipo de registro.
  7. Haz clic en Siguiente.
  8. Opcional: especifica los valores de los siguientes parámetros de entrada:
    • Delimitador de división: el delimitador que se usa para separar las líneas de registro, como \n.
    • Espacio de nombres de recursos: el espacio de nombres de recursos.
    • Etiquetas de ingestión: la etiqueta aplicada a los eventos de este feed.
  9. Haz clic en Siguiente.
  10. Revise la configuración del feed en la pantalla Finalizar y, a continuación, haga clic en Enviar.
  11. Haz clic en Generar clave secreta para generar una clave secreta que autentique este feed.
  12. Copia y guarda la clave secreta. No podrás volver a ver esta clave secreta. Si es necesario, puedes volver a generar una clave secreta, pero esta acción hará que la clave secreta anterior quede obsoleta.
  13. En la pestaña Detalles, copie la URL del endpoint del feed del campo Información del endpoint. Debes especificar esta URL de endpoint en tu aplicación cliente.
  14. Haz clic en Listo.

Crear una clave de API para la feed de webhook

  1. Ve a la Google Cloud consola > Credenciales.
  2. Haz clic en Crear credenciales y, a continuación, selecciona Clave de API.
  3. Restringe el acceso de la clave de API a la API Google Security Operations.

Especificar la URL del endpoint

  1. En tu aplicación cliente, especifica la URL del endpoint HTTPS proporcionada en el feed de webhook.
  2. Para habilitar la autenticación, especifica la clave de API y la clave secreta como parte del encabezado personalizado con el siguiente formato:

    X-goog-api-key = API_KEY
    X-Webhook-Access-Key = SECRET
    

    Recomendación: Especifica la clave de API como 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 mediante parámetros de consulta con el siguiente formato:

    ENDPOINT_URL?key=API_KEY&secret=SECRET
    

Haz los cambios siguientes:

  • ENDPOINT_URL: URL del endpoint del feed.
  • API_KEY: la clave de API para autenticarte en Google Security Operations.
  • SECRET: la clave secreta que has generado para autenticar el feed.

Crear un webhook en Atlassian Jira para Google SecOps

  1. Accede a tu instancia de Jira como administrador.
  2. Ve a Ajustes settings > Sistema > WebHooks.
  3. Haz clic en Crear un WebHook.
  4. Configura los siguientes detalles del webhook:
    • Nombre: proporciona un nombre descriptivo para el webhook (por ejemplo, Integración de Google SecOps).
    • URL: introduce la URL del endpoint de la API de Google SecOps.
    • Eventos: selecciona los eventos de Jira que deben activar el webhook. Elige los eventos que se ajusten a tus necesidades de monitorización de seguridad (por ejemplo, problema creado, problema actualizado o comentario añadido). Si es necesario, puede seleccionar Todos los eventos.
    • Opcional: Filtro JQL: usa un filtro JQL para acotar aún más los eventos que activan el webhook. Esto resulta útil para centrarse en proyectos, tipos de incidencias u otros criterios específicos.
    • Excluir cuerpo: deja esta opción desmarcada. El webhook debe enviar los datos de eventos en formato JSON a Google SecOps.
  5. 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 de cada objeto de la matriz affectedObjects se asigna a una etiqueta con la clave "ID_[index]", donde [index] es la posición del objeto en la matriz.
affectedObjects.name target.resource.attribute.labels.value El campo name de cada objeto de la matriz affectedObjects se asigna a una etiqueta con la clave "Name_[index]", donde [index] es la posición del objeto en la matriz.
affectedObjects.type target.resource.attribute.labels.value El campo type de cada objeto de la matriz affectedObjects se asigna a una etiqueta con la clave "Type_[index]", donde [index] es la posición del objeto en la matriz.
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 Asignado a una etiqueta con la clave "associatedItems TypeName" en security_result.detection_fields.
author.id principal.user.userid Asignado a principal.user.userid.
author.name principal.user.user_display_name Asignado a principal.user.user_display_name.
author.type principal.resource.attribute.labels.value Asignado a una etiqueta con la clave "Author Type" en principal.resource.attribute.labels.
author.uri principal.url Asignado a principal.url.
authorAccountId principal.user.userid Asignado a principal.user.userid.
authorKey target.resource.attribute.labels.value Asignado a una etiqueta con la clave "Author Key" en target.resource.attribute.labels.
auditType.action security_result.summary Asignado 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 contiene "successful" y BLOCK si contiene "failed").
auditType.area metadata.product_event_type Asignado a metadata.product_event_type.
auditType.category security_result.category_details Asignado a security_result.category_details.
category metadata.product_event_type Asignado a metadata.product_event_type.
changedValues.changedFrom security_result.about.resource.attribute.labels.value Se ha asignado 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 ha asignado 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 ha asignado a una etiqueta con la clave "FieldName" en security_result.about.resource.attribute.labels.
changedValues.i18nKey security_result.about.resource.attribute.labels.value Se ha asignado a una etiqueta con la clave "FieldName" en security_result.about.resource.attribute.labels.
changedValues.key security_result.about.resource.attribute.labels.value Se ha asignado 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 ha asignado a una etiqueta con la clave "Changed To" en security_result.about.resource.attribute.labels.
created metadata.event_timestamp Analizado y asignado a metadata.event_timestamp.
dst_ip target.ip Asignado a target.ip.
extraAttributes.name principal.resource.attribute.labels.value Asignado a una etiqueta con la clave "Name" en principal.resource.attribute.labels.
extraAttributes.value principal.resource.attribute.labels.value Asignado a una etiqueta con la clave "Value" en principal.resource.attribute.labels.
http_method network.http.method Asignado a network.http.method.
http_referral_url network.http.referral_url Asignado a network.http.referral_url.
id metadata.product_log_id Asignado a metadata.product_log_id.
objectItem.id security_result.detection_fields.value Asignado a una etiqueta con la clave "objectItem Id" en security_result.detection_fields.
objectItem.name security_result.detection_fields.value Asignado a una etiqueta con la clave "objectItem Name" en security_result.detection_fields.
objectItem.typeName security_result.detection_fields.value Asignado 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 Asignado a principal.ip.
response_code network.http.response_code Asignado a network.http.response_code.
sent_bytes network.sent_bytes Asignado a network.sent_bytes.
source principal.ip Se ha analizado para extraer direcciones IP y se ha combinado en principal.ip.
src_ip1, src_ip2, src_ip3 principal.ip Asignado a principal.ip.
summary metadata.description Asignado a metadata.description.
user_agent network.http.user_agent Asignado a network.http.user_agent.
user_name principal.user.userid Asignado a principal.user.userid. Se define como "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 se incluye ninguno de estos atributos, 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) está presente, STATUS_UPDATE si src_ip1, src_ip2, src_ip3 o remoteAddress está presente, o GENERIC_EVENT en caso contrario. Se sustituye por USER_LOGIN si auditType.action contiene "login". Siempre se define como "ATLASSIAN_JIRA". Siempre se define como "ATLASSIAN_JIRA". Asigna el valor "ALLOW" si auditType.action contiene "login successful" y "BLOCK" si auditType.action contiene "login failed".

¿Necesitas más ayuda? Recibe respuestas de los miembros de la comunidad y de los profesionales de Google SecOps.