Recopilar registros de OpenCanary
Información general
Este analizador extrae campos de los registros SYSLOG y JSON de OpenCanary, los normaliza en el formato UDM y enriquece los datos con campos derivados, como metadata.event_type y security_result.severity. Gestiona varios formatos de registro, valida direcciones IP y asigna campos a los objetos UDM correspondientes, como principal, target y network.
Antes de empezar
Asegúrate de que cumples los siguientes requisitos previos:
- Instancia de Google SecOps.
- Acceso privilegiado a OpenCanary.
Configurar feeds
Para configurar un feed, sigue estos pasos:
- Ve a Configuración de SIEM > Feeds.
- Haz clic en Añadir feed.
- En la página siguiente, haga clic en Configurar un solo feed.
- En el campo Nombre del feed, introduzca un nombre para el feed (por ejemplo, Registros de OpenCanary).
- Selecciona Webhook como Tipo de fuente.
- Selecciona OpenCanary como Tipo de registro.
- Haz clic en Siguiente.
- 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.
 
- Delimitador de división: el delimitador que se usa para separar las líneas de registro, como 
- Haz clic en Siguiente.
- Revise la configuración del feed en la pantalla Finalizar y, a continuación, haga clic en Enviar.
- Haz clic en Generar clave secreta para generar una clave secreta que autentique este feed.
- 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.
- En la pestaña Detalles, copia la URL del endpoint del feed del campo Información del endpoint. Debes especificar esta URL de endpoint en tu aplicación cliente.
- Haz clic en Listo.
Crear una clave de API para la feed de webhook
- Ve a la consolaGoogle Cloud > Credenciales. 
- Haz clic en Crear credenciales y, a continuación, selecciona Clave de API. 
- Restringe el acceso de la clave de API a la API Google Security Operations. 
Especificar la URL del endpoint
- En tu aplicación cliente, especifica la URL del endpoint HTTPS proporcionada 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 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.
 
Configurar un webhook de OpenCanary para Google SecOps
- Busca el archivo de configuración de OpenCanary, - config.json.
- Abre el archivo - config.jsoncon un editor de texto.
- Busca la sección alerters en el archivo de configuración. 
- Si ya existe un alerter de - webhook, modifícalo. Si no es así, añade una nueva entrada para el usuario de- webhook.
- Usa la siguiente configuración (sustituye ENDPOINT_URL, SECRET y API_KEY por tus valores): 
"handlers": {
    "Webhook": {
        "class": "opencanary.logger.WebhookHandler",
        "url": "<ENDPOINT_URL>",
        "method": "POST",
        "data": {"message": "%(message)s"},
        "status_code": 200,
        "headers": {
            "X-Webhook-Access-Key": "<SECRET>",
            "X-goog-api-key": "<API_KEY>"
         }
    }
}
- Guarda el archivo config.json.
- Reinicia el servicio OpenCanary para aplicar los cambios. Por ejemplo, sudo systemctl restart opencanary.
Tabla de asignación de UDM
| Campo de registro | Asignación de UDM | Lógica | 
|---|---|---|
| dst_host | target.asset.ip | El campo dst_hostdel registro sin procesar se asigna a UDM. También se ha asignado atarget.ip. | 
| dst_host | target.ip | El campo dst_hostdel registro sin procesar se asigna a UDM. También se ha asignado atarget.asset.ip. | 
| dst_port | target.port | El campo dst_portdel registro sin procesar se convierte en una cadena y, después, en un número entero, y se asigna a UDM. | 
| local_time | metadata.event_timestamp | El campo local_timedel registro sin procesar se usa para rellenar el campometadata.event_timestampde UDM. El analizador usa elcreate_timedel objeto por lotes si no está presente el campolocal_time. | 
| local_time_adjusted | security_result.detection_fields | El campo local_time_adjusteddel registro sin procesar se añade como par clave-valor a la matrizsecurity_result.detection_fieldsde UDM. | 
| logdata.COMMUNITY_STRING | security_result.detection_fields | El campo logdata.COMMUNITY_STRINGdel registro sin procesar se añade como par clave-valor a la matrizsecurity_result.detection_fieldsde UDM. | 
| logdata.DOMAIN | principal.administrative_domain | El campo logdata.DOMAINdel registro sin procesar se asigna a UDM. | 
| logdata.FILENAME | target.file.full_path | El campo logdata.FILENAMEdel registro sin procesar se asigna a UDM. | 
| logdata.HOSTNAME | principal.asset.hostname | Si el campo logdata.HOSTNAMEno es una dirección IP, se asigna al UDM. También se ha asignado aprincipal.hostname. | 
| logdata.HOSTNAME | principal.asset.ip | Si el campo logdata.HOSTNAMEes una dirección IP, se asigna a UDM. También se ha asignado aprincipal.ip. | 
| logdata.HOSTNAME | principal.hostname | Si el campo logdata.HOSTNAMEno es una dirección IP, se asigna al UDM. También se ha asignado aprincipal.asset.hostname. | 
| logdata.HOSTNAME | principal.ip | Si el campo logdata.HOSTNAMEes una dirección IP, se asigna a UDM. También se ha asignado aprincipal.asset.ip. | 
| logdata.LOCALNAME | principal.asset.hostname | El campo logdata.LOCALNAMEdel registro sin procesar se asigna a UDM. También se ha asignado aprincipal.hostname. | 
| logdata.LOCALNAME | principal.hostname | El campo logdata.LOCALNAMEdel registro sin procesar se asigna a UDM. También se ha asignado aprincipal.asset.hostname. | 
| logdata.LOCALVERSION | principal.platform_version | El campo logdata.LOCALVERSIONdel registro sin procesar se asigna a UDM. | 
| logdata.PASSWORD | extensions.auth.mechanism | La presencia del campo logdata.PASSWORDhace que el analizador defina el valorUSERNAME_PASSWORDen el campoextensions.auth.mechanismdel UDM. | 
| logdata.PATH | network.http.referral_url | El campo logdata.PATHdel registro sin procesar se asigna a UDM. | 
| logdata.REMOTENAME | target.asset.hostname | El campo logdata.REMOTENAMEdel registro sin procesar se asigna a UDM. También se ha asignado atarget.hostname. | 
| logdata.REMOTENAME | target.hostname | El campo logdata.REMOTENAMEdel registro sin procesar se asigna a UDM. También se ha asignado atarget.asset.hostname. | 
| logdata.REMOTEVERSION | target.platform_version | El campo logdata.REMOTEVERSIONdel registro sin procesar se asigna a UDM. | 
| logdata.SMBVER | network.application_protocol | La presencia del campo logdata.SMBVERhace que el analizador defina el valorSMBen el camponetwork.application_protocoldel UDM. | 
| logdata.USERAGENT | network.http.parsed_user_agent | El campo logdata.USERAGENTdel registro sin procesar se convierte en un user-agent analizado y se asigna al modelo de datos unificado. | 
| logdata.USERAGENT | network.http.user_agent | El campo logdata.USERAGENTdel registro sin procesar se asigna a UDM. | 
| logdata.USERNAME | target.user.userid | El campo logdata.USERNAMEdel registro sin procesar se asigna a UDM. | 
| loglevel | security_result.severity | El campo logleveldel registro sin procesar determina elsecurity_result.severityen UDM.WARNINGse asigna aHIGHyINFO/INFORMATIONse asigna aLOW. | 
| logtype | security_result.detection_fields | El campo logtypedel registro sin procesar se añade como par clave-valor a la matrizsecurity_result.detection_fieldsde UDM. | 
| node_id | principal.asset.asset_id | El campo node_iddel registro sin procesar tiene el prefijo "id:" y se asigna a UDM. | 
| src_host | principal.asset.ip | El campo src_hostdel registro sin procesar se asigna a UDM. También se ha asignado aprincipal.ip. | 
| src_host | principal.ip | El campo src_hostdel registro sin procesar se asigna a UDM. También se ha asignado aprincipal.asset.ip. | 
| src_port | principal.port | El campo src_portdel registro sin procesar se convierte en un número entero y se asigna a UDM. | 
| utc_time | security_result.detection_fields | El campo utc_timedel registro sin procesar se añade como par clave-valor a la matrizsecurity_result.detection_fieldsde UDM. | 
¿Necesitas más ayuda? Recibe respuestas de los miembros de la comunidad y de los profesionales de Google SecOps.