Recopila registros de Atlassian Bitbucket
Descripción general
Este analizador extrae campos de los registros JSON de Atlassian Bitbucket y los asigna al UDM. Maneja varios formatos de registro y completa las entidades principales o de destino según los campos disponibles, como direcciones IP, IDs de usuario y la información de los activos. También categoriza los eventos según la actividad de la red y del usuario, y enriquece los datos con los hallazgos de seguridad, si están presentes. El analizador prioriza agentRealtimeInfo
sobre agentDetectionInfo
cuando completa los campos.
Antes de comenzar
Asegúrate de cumplir con los siguientes requisitos previos:
- Instancia de Google SecOps.
- Acceso con privilegios a un repositorio interno
Configura feeds
Existen dos puntos de entrada diferentes para configurar feeds en la plataforma de Google SecOps:
- Configuración de SIEM > Feeds
- Centro de contenido > Paquetes de contenido
Configura feeds en Configuración del SIEM > Feeds
Para configurar un feed, sigue estos pasos:
- Ve a Configuración del SIEM > Feeds.
- Haz clic en Agregar feed nuevo.
- En la siguiente página, haz clic en Configurar un solo feed.
- En el campo Nombre del feed, ingresa un nombre para el feed (por ejemplo, Registros de Atlassian Bitbucket).
- Selecciona Webhook como el Tipo de origen.
- Selecciona Atlassian Bitbucket 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 del recurso: Es el espacio de nombres del recurso.
- 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 Generar clave secreta 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 regenerar 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.
Configura feeds desde el Centro de contenido
Especifica valores para los siguientes campos:
- Delimitador de división: Es el delimitador que se usa para separar las líneas de registro, como
\n
.
Opciones avanzadas
- Espacio de nombres del recurso: Es el espacio de nombres del recurso.
- Etiquetas de transferencia: Es la etiqueta que se aplica a los eventos de este feed.
- Nombre del feed: Es un valor completado previamente que identifica el feed.
Tipo de fuente: Es el método que se usa para recopilar registros en Google SecOps.
Haz clic en Generar clave secreta 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 regenerar 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.
Crea una clave de API para el feed del webhook
Ve a Google Cloud consola > Credenciales.
Haz clic en Crear credenciales y selecciona Clave de API.
Restringe el acceso a 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 con 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 búsqueda 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 Bitbucket
- En Bitbucket, ve a la configuración del repositorio.
- Haz clic en Webhooks en Flujo de trabajo.
- Haz clic en Add webhook (Agregar webhook).
- Configura los siguientes campos:
- Título: Proporciona un nombre descriptivo (por ejemplo, Google SecOps).
- URL: Ingresa la URL del extremo de API de Google SecOps.
- Estado: Se establece en Activo.
- Activadores: Selecciona los eventos pertinentes.
- Haz clic en Guardar.
Tabla de asignación de UDM
Campo de registro | Asignación de UDM | Lógica |
---|---|---|
agentComputerName |
principal.hostname |
Se completa a partir de agentRealtimeInfo.agentComputerName . |
agentDetectionInfo.accountId |
metadata.product_deployment_id |
Se convirtió en una cadena. Se usa si agentRealtimeInfo.accountId no está presente. |
agentDetectionInfo.accountName |
metadata.product_name |
Se usa si agentRealtimeInfo.accountName no está presente. |
agentDetectionInfo.agentDomain |
principal.administrative_domain |
Se asigna directamente. |
agentDetectionInfo.agentIpV4 |
target.ip |
Se extrae del array JSON y se combina en el campo target.ip . |
agentDetectionInfo.agentIpV6 |
principal.ip |
Se extrae del array JSON y se combina en el campo principal.ip . |
agentDetectionInfo.agentLastLoggedInUserName |
principal.user.userid |
Se analiza para extraer el ID de usuario y el dominio (si están presentes). Si no hay dominio, se asigna directamente a principal.user.userid . |
agentDetectionInfo.agentOsName |
principal.platform_version , principal.asset.platform_software.platform_version |
Se usa si agentRealtimeInfo.agentOsName no está presente. |
agentDetectionInfo.agentOsRevision |
principal.platform_patch_level , principal.asset.platform_software.platform_patch_level |
Se usa si agentRealtimeInfo.agentOsRevision no está presente. |
agentDetectionInfo.agentRegisteredAt |
principal.asset.first_discover_time |
Se analiza como una marca de tiempo ISO8601. |
agentDetectionInfo.agentUuid |
principal.asset_id , principal.asset.asset_id |
Se usa si agentRealtimeInfo.agentUuid no está presente. Tiene el prefijo "agentUuid:". |
agentDetectionInfo.agentVersion |
metadata.product_version |
Se usa si agentRealtimeInfo.agentVersion no está presente. |
agentDetectionInfo.externalIp |
target.ip |
Se asigna directamente. |
agentDetectionInfo.groupId |
principal.user.group_identifiers |
Se combina en el campo si no está vacío o no contiene un guion. Se usa si agentRealtimeInfo.groupId no está presente. |
agentDetectionInfo.groupName |
principal.group.group_display_name |
Se usa si agentRealtimeInfo.groupName no está presente. |
agentDetectionInfo.siteId |
additional.fields |
Se agregó como un par clave-valor con la clave "agentDetectionInfo.siteId". Se usa si agentRealtimeInfo.siteId no está presente. |
agentDetectionInfo.siteName |
additional.fields |
Se agrega como un par clave-valor con la clave "agentDetectionInfo.siteName". Se usa si agentRealtimeInfo.siteName no está presente. |
agentRealtimeInfo.accountId |
metadata.product_deployment_id |
Se convirtió en una cadena. |
agentRealtimeInfo.accountName |
metadata.product_name |
Se asigna directamente. |
agentRealtimeInfo.agentComputerName |
principal.hostname , principal.asset.hostname |
Se asigna directamente. |
agentRealtimeInfo.agentId |
principal.asset_id , principal.asset.asset_id |
Tiene el prefijo "agentId:". |
agentRealtimeInfo.agentMachineType |
principal.asset.category |
Se asigna directamente. |
agentRealtimeInfo.agentOsName |
principal.platform_version , principal.asset.platform_software.platform_version |
Se asigna directamente. |
agentRealtimeInfo.agentOsRevision |
principal.platform_patch_level , principal.asset.platform_software.platform_patch_level |
Se asigna directamente. |
agentRealtimeInfo.agentOsType |
principal.asset.platform_software.platform , principal.platform |
Se asigna a WINDOWS, MAC o LINUX según el valor. |
agentRealtimeInfo.agentUuid |
principal.asset_id , principal.asset.asset_id |
Se asigna directamente. Tiene el prefijo "agentUuid:". |
agentRealtimeInfo.agentVersion |
metadata.product_version |
Se asigna directamente. |
agentRealtimeInfo.groupId |
principal.user.group_identifiers |
Se combina en el campo si no está vacío o si contiene un guion (“-”). |
agentRealtimeInfo.groupName |
principal.group.group_display_name |
Se asigna directamente. |
agentRealtimeInfo.siteId |
additional.fields |
Se agregó como un par clave-valor con la clave "agentDetectionInfo.siteId". |
agentRealtimeInfo.siteName |
additional.fields |
Se agrega como un par clave-valor con la clave "agentDetectionInfo.siteName". |
associatedItems.0.id |
principal.resource.id |
Se asigna directamente. |
associatedItems.0.name |
principal.resource.name |
Se asigna directamente. |
associatedItems.0.typeName |
principal.resource.resource_subtype |
Se asigna directamente. |
authorAccountId |
principal.user.userid |
Se asigna directamente. |
category |
metadata.product_event_type |
Se asigna directamente. Si no está presente y el mensaje contiene "amenazas", se establece en "Amenazas". |
id |
metadata.product_log_id |
Se convirtió en una cadena. |
indicators.0.description |
security_result.description |
Se asigna directamente. |
objectItem.id |
additional.fields |
Se agrega como un par clave-valor con la clave "objectItem.id". |
objectItem.name |
additional.fields |
Se agrega como un par clave-valor con la clave "objectItem.name". |
objectItem.typeName |
additional.fields |
Se agrega como un par clave-valor con la clave "objectItem.typeName". |
remoteAddress |
principal.ip |
Se asigna directamente. |
summary |
security_result.summary |
Se asigna directamente. |
threatInfo.classification |
security_result.category_details |
Se asigna directamente. También se usa para determinar security_result.category . |
threatInfo.collectionId |
metadata.ingestion_labels |
Se agrega como un par clave-valor con la clave "alert_aggregation_value". |
threatInfo.confidenceLevel |
security_result.confidence_details |
Se asigna directamente. También se usa para determinar security_result.confidence . |
threatInfo.createdAt |
metadata.collected_timestamp |
Se analiza como una marca de tiempo ISO8601. |
threatInfo.detectionEngines |
metadata.ingestion_labels |
Los elementos key y title de cada elemento se agregan como pares clave-valor. |
threatInfo.fileExtensionType |
target.process.file.mime_type |
Se asigna directamente. |
threatInfo.filePath |
target.file.full_path |
Se asigna directamente. |
threatInfo.fileSize |
target.file.size |
Se convierte en una cadena y, luego, en un número entero sin signo. |
threatInfo.identifiedAt |
event_timestamp |
Se analiza como una marca de tiempo ISO8601. |
threatInfo.maliciousProcessArguments |
principal.process.command_line |
Se asigna directamente. También se usa en el campo security_result.summary si summary no está presente. |
threatInfo.md5 |
target.file.md5 |
Se asigna directamente. |
threatInfo.originatorProcess |
target.process.parent_process.file.full_path |
Se asigna directamente. También se usa en el campo security_result.summary si summary no está presente. |
threatInfo.processUser |
target.user.userid |
Se asigna directamente. |
threatInfo.sha1 |
target.file.sha1 |
Se asigna directamente. |
threatInfo.sha256 |
target.file.sha256 |
Se asigna directamente. |
threatInfo.storyline |
principal.process.product_specific_process_id |
Tiene el prefijo "ID:". |
threatInfo.threatId |
security_result.threat_id |
Se asigna directamente. |
threatInfo.threatName |
security_result.threat_name , target.file.names |
Se asigna y se combina directamente en target.file.names . También se usa en el campo security_result.summary si summary no está presente. Inicialmente, se establece en "GENERIC_EVENT". Se cambió a "NETWORK_UNCATEGORIZED", "STATUS_UPDATE" o "USER_UNCATEGORIZED" según la presencia de la entidad principal y la IP, el nombre de host o el usuario de destino. Se copió del campo event.type . Se establece en "Atlassian Bitbucket". Inicialmente, se establece en "Atlassian Bitbucket". Se puede anular con agentRealtimeInfo.accountName o agentDetectionInfo.accountName . |
timestamp |
metadata.event_timestamp , timestamp |
Se asigna directamente. |
¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.