Recopila registros de Sysdig
Este analizador extrae datos de eventos de seguridad de los registros JSON de Sysdig, transforma y asigna los campos de registro sin procesar al formato UDM de Google Security Operations. Controla varios campos, incluidos los metadatos, la información principal o del objetivo, los detalles de los resultados de seguridad y el contexto relacionado con Kubernetes, lo que enriquece los datos para el análisis en Google SecOps. El analizador también realiza conversiones de tipos de datos, control de errores y lógica condicional en función de los valores de los campos para garantizar una representación precisa y completa de la AUA.
Antes de comenzar
- Asegúrate de tener una instancia de Google SecOps.
- Asegúrate de tener acceso con privilegios a Sysdig Secure.
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.
Opción 1
Configura un feed de webhook en Google SecOps para transferir registros de Sysdig
- 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, Sysdig Logs).
- Selecciona Webhook como el Tipo de origen.
- Selecciona Sysdig 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.
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 autenticar en Google SecOps.SECRET
: Es la clave secreta que generaste para autenticar el feed.
Configura el webhook en Sysdig
- Accede a Sysdig Secure con privilegios de administrador.
- Ve a Profile > Settings > Event Forwarding.
- Haz clic en +Agregar integración y selecciona Webhook en el menú desplegable.
Especifica valores para los siguientes parámetros de entrada:
- Nombre de la integración: Proporciona un nombre descriptivo para el webhook (por ejemplo, Webhook de SecOps de Google).
- Extremo: Ingresa el webhook
<ENDPOINT_URL>
, seguido de<API_KEY
y<SECRET>
. Datos para enviar: En el menú desplegable, selecciona los tipos de datos de Sysdig que se deben reenviar.
Prueba la integración y, luego, activa la opción Habilitada.
Haz clic en Guardar.
Opción 2
Reenvía datos directamente a Google SecOps
- Accede a Sysdig Secure con tus credenciales de administrador.
- Ve a Configuración > Reenvío de eventos.
- Haz clic en + Agregar integración y selecciona Google Chronicle en el menú desplegable.
- Especifica valores para los siguientes parámetros de entrada:
- Nombre de la integración: Proporciona un nombre descriptivo para la integración (por ejemplo, Integración de Google SecOps).
- ID de cliente: Es el ID de cliente de Google asociado con tu cuenta de GCP. (en Google SecOps, búscala en Configuración > Perfil).
- Espacio de nombres: Opcional. Úsalo como una etiqueta para identificar el dominio de datos adecuado para la indexación y el enriquecimiento.
- Credenciales JSON: Sube tus credenciales JSON de SecOps de Google.
- Región: Selecciona tu región, como EE.UU., Europa o Asia.
- Datos para enviar: Selecciona los tipos de datos de Sysdig que se deben reenviar desde el menú desplegable.
- Prueba la integración y, luego, activa la opción Habilitada.
- Haz clic en Guardar.
Tabla de asignación de UDM
Campo de registro | Asignación de UDM | Lógica |
---|---|---|
agentId |
read_only_udm.metadata.product_deployment_id |
El valor de agentId del registro sin procesar se asigna directamente a este campo de la AUA. |
category |
read_only_udm.security_result.category_details |
El valor de category del registro sin procesar se asigna directamente a este campo de la AUA. |
content.fields.container.id |
read_only_udm.target.asset.asset_id |
El valor de content.fields.container.id del registro sin procesar se antepone con "container_id:" y se asigna a este campo de la UDM. Se usa si containerId está vacío. |
content.fields.container.image.repository |
read_only_udm.target.file.full_path |
El valor de content.fields.container.image.repository del registro sin procesar se asigna directamente a este campo de la AUA. |
content.fields.container.image.tag |
read_only_udm.metadata.ingestion_labels.value , donde la clave es tag |
El valor de content.fields.container.image.tag del registro sin procesar se asigna directamente a este campo de la AUA. |
content.fields.evt.res |
read_only_udm.metadata.ingestion_labels.value , donde la clave es evt_res |
El valor de content.fields.evt.res del registro sin procesar se asigna directamente a este campo de la AUA. |
content.fields.evt.type |
read_only_udm.metadata.event_type |
El valor de content.fields.evt.type del registro sin procesar se asigna directamente a este campo de la AUA. |
content.fields.falco.rule |
read_only_udm.security_result.rule_name |
El valor de content.fields.falco.rule del registro sin procesar se asigna directamente a este campo de la AUA. Se usa si content.ruleName está vacío. |
content.fields.group.gid |
read_only_udm.target.group.product_object_id |
El valor de content.fields.group.gid del registro sin procesar se asigna directamente a este campo de la AUA. |
content.fields.group.name |
read_only_udm.target.group.group_display_name |
El valor de content.fields.group.name del registro sin procesar se asigna directamente a este campo de la AUA. |
content.fields.proc.cmdline |
read_only_udm.target.process.command_line |
El valor de content.fields.proc.cmdline del registro sin procesar se asigna directamente a este campo de la AUA. |
content.fields.proc.pcmdline |
read_only_udm.target.process.parent_process.command_line |
El valor de content.fields.proc.pcmdline del registro sin procesar se asigna directamente a este campo de la AUA. |
content.fields.proc.pid |
read_only_udm.target.process.pid |
El valor de content.fields.proc.pid del registro sin procesar se asigna directamente a este campo de la AUA. |
content.fields.proc.ppid |
read_only_udm.target.process.parent_process.pid |
El valor de content.fields.proc.ppid del registro sin procesar se asigna directamente a este campo de la AUA. |
content.fields.proc.sid |
read_only_udm.metadata.ingestion_labels.value , donde la clave es sid |
El valor de content.fields.proc.sid del registro sin procesar se asigna directamente a este campo de la AUA. |
content.fields.user.loginname |
read_only_udm.principal.user.user_display_name |
El valor de content.fields.user.loginname del registro sin procesar se asigna directamente a este campo de la AUA. |
content.fields.user.uid |
read_only_udm.principal.user.userid |
El valor de content.fields.user.uid del registro sin procesar se asigna directamente a este campo de la AUA. |
content.output |
read_only_udm.additional.fields.value.string_value , donde la clave es content_output |
El valor de content.output del registro sin procesar se asigna directamente a este campo de la AUA. |
content.policyId |
read_only_udm.security_result.rule_id |
El valor de content.policyId del registro sin procesar se asigna directamente a este campo de la AUA. |
content.policyOrigin |
read_only_udm.additional.fields.value.string_value , donde la clave es content_policyOrigin |
El valor de content.policyOrigin del registro sin procesar se asigna directamente a este campo de la AUA. |
content.policyVersion |
read_only_udm.additional.fields.value.string_value , donde la clave es content_policyVersion |
El valor de content.policyVersion del registro sin procesar se asigna directamente a este campo de la AUA. |
content.ruleName |
read_only_udm.security_result.rule_name |
El valor de content.ruleName del registro sin procesar se asigna directamente a este campo de la AUA. |
content.ruleTags |
read_only_udm.security_result.rule_labels |
Los valores del array content.ruleTags del registro sin procesar se asignan a este campo de la UDM, con claves generadas de forma dinámica como "ruletag_index". |
content.ruleType |
read_only_udm.additional.fields.value.string_value , donde la clave es content_ruleType |
El valor de content.ruleType del registro sin procesar se asigna directamente a este campo de la AUA. |
containerId |
read_only_udm.target.asset.asset_id |
El valor de containerId del registro sin procesar se antepone con "container_id:" y se asigna a este campo de la UDM. |
description |
read_only_udm.metadata.description |
El valor de description del registro sin procesar se asigna directamente a este campo de la AUA. |
id |
read_only_udm.metadata.product_log_id |
El valor de id del registro sin procesar se asigna directamente a este campo de la AUA. |
labels.container.label.io.kubernetes.container.name |
read_only_udm.additional.fields.value.string_value , donde la clave es container_name |
El valor de labels.container.label.io.kubernetes.container.name del registro sin procesar se asigna directamente a este campo de la AUA. |
labels.container.label.io.kubernetes.pod.name |
read_only_udm.additional.fields.value.string_value , donde la clave es pod_name |
El valor de labels.container.label.io.kubernetes.pod.name del registro sin procesar se asigna directamente a este campo de la AUA. Se usa si labels.kubernetes.pod.name está vacío. |
labels.container.label.io.kubernetes.pod.namespace |
read_only_udm.principal.namespace |
El valor de labels.container.label.io.kubernetes.pod.namespace del registro sin procesar se asigna directamente a este campo de la AUA. Se usa si labels.kubernetes.namespace.name está vacío. |
labels.aws.instanceId |
read_only_udm.target.resource.product_object_id |
El valor de labels.aws.instanceId del registro sin procesar se asigna directamente a este campo de la AUA. |
labels.aws.region |
read_only_udm.target.resource.attribute.cloud.availability_zone |
El valor de labels.aws.region del registro sin procesar se asigna directamente a este campo de la AUA. |
labels.host.hostName |
read_only_udm.principal.ip O read_only_udm.principal.hostname |
Si el valor contiene "ip", se analiza como una dirección IP y se asigna a principal.ip . De lo contrario, se asigna a principal.hostname . |
labels.host.mac |
read_only_udm.principal.mac |
El valor de labels.host.mac del registro sin procesar se asigna directamente a este campo de la AUA. Se usa si machineId está vacío. |
labels.kubernetes.cluster.name |
read_only_udm.additional.fields.value.string_value , donde la clave es kubernetes_cluster_name |
El valor de labels.kubernetes.cluster.name del registro sin procesar se asigna directamente a este campo de la AUA. |
labels.kubernetes.deployment.name |
read_only_udm.additional.fields.value.string_value , donde la clave es kubernetes_deployment_name |
El valor de labels.kubernetes.deployment.name del registro sin procesar se asigna directamente a este campo de la AUA. |
labels.kubernetes.namespace.name |
read_only_udm.principal.namespace |
El valor de labels.kubernetes.namespace.name del registro sin procesar se asigna directamente a este campo de la AUA. |
labels.kubernetes.node.name |
read_only_udm.additional.fields.value.string_value , donde la clave es kubernetes_node_name |
El valor de labels.kubernetes.node.name del registro sin procesar se asigna directamente a este campo de la AUA. |
labels.kubernetes.pod.name |
read_only_udm.additional.fields.value.string_value , donde la clave es pod_name |
El valor de labels.kubernetes.pod.name del registro sin procesar se asigna directamente a este campo de la AUA. |
labels.kubernetes.service.name |
read_only_udm.additional.fields.value.string_value , donde la clave es kubernetes_service_name |
El valor de labels.kubernetes.service.name del registro sin procesar se asigna directamente a este campo de la AUA. |
machineId |
read_only_udm.principal.mac |
El valor de machineId del registro sin procesar se asigna directamente a este campo de la AUA. |
name |
read_only_udm.security_result.summary |
El valor de name del registro sin procesar se asigna directamente a este campo de la AUA. |
severity |
read_only_udm.security_result.severity |
El valor de severity del registro sin procesar se asigna a un valor de cadena según estos rangos: <4 = ALTO, >3 y <6 = MEDIO, 6 = BAJO, 7 = INFORMATIVO. |
source |
read_only_udm.security_result.description |
El valor de source del registro sin procesar se asigna directamente a este campo de la AUA. |
timestampRFC3339Nano |
read_only_udm.metadata.event_timestamp |
El valor de timestampRFC3339Nano del registro sin procesar se analiza como una marca de tiempo y se asigna a este campo de la AUA. |
type |
read_only_udm.metadata.product_event_type |
El valor de type del registro sin procesar se asigna directamente a este campo de la AUA. |
(lógica del analizador) | read_only_udm.metadata.product_name |
Está codificado de forma fija en "SYSDIG". |
(lógica del analizador) | read_only_udm.metadata.vendor_name |
Está codificado de forma fija en "SYSDIG". |
(lógica del analizador) | read_only_udm.metadata.event_type |
Se establece en "PROCESS_UNCATEGORIZED" de forma predeterminada o en "GENERIC_EVENT" si labels.host.hostName está vacío. |
(lógica del analizador) | read_only_udm.metadata.log_type |
Está codificado de forma fija en "SYSDIG". |
(lógica del analizador) | read_only_udm.target.resource.resource_type |
Se establece en "CLOUD_PROJECT" si existe labels.aws.instanceId . |
Cambios
2024-01-05
- Cuando "severity" es 0, 1, 2, 3, se cambió la asignación de "security_result.severity" de "LOW" a "HIGH".
- Cuando "severity" es 6, se cambió la asignación de "security_result.severity" de "HIGH" a "LOW".
- Cuando "severity" es 7, se cambió la asignación de "security_result.severity" de "HIGH" a "INFORMATIONAL".
- Se agregó "drop" para los registros que no están en formato JSON.
- Se agregó "on_error" a la asignación de fecha "timestampRFC3339Nano".
2022-10-07
- Sin embargo, el analizador se creó recientemente.