Recoger registros de auditoría de Tanium
En este documento se explica cómo ingerir registros de auditoría de Tanium en Google Security Operations mediante Amazon S3 con la función de exportación nativa a S3 de Tanium Connect. El analizador extrae los registros y, en un principio, borra numerosos campos predeterminados. A continuación, analiza el mensaje de registro mediante grok y el filtro JSON, y extrae campos como la marca de tiempo, la IP del dispositivo y los detalles de la auditoría. El analizador asigna estos campos extraídos al UDM, gestionando varios tipos de datos y lógica condicional para rellenar los campos de UDM adecuados en función de la presencia y los valores de atributos de registro de auditoría de Tanium específicos.
Antes de empezar
Asegúrate de que cumples los siguientes requisitos previos:
- Una instancia de Google SecOps
- Acceso privilegiado a Tanium Connect y Tanium Console
- Acceso privilegiado a AWS (S3, IAM)
Crear un segmento de Amazon S3
- Abre la consola de Amazon S3.
- Si es necesario, puede cambiar la región.
- En la barra de navegación, selecciona la región en la que quieras que se encuentren tus registros de auditoría de Tanium.
- Haz clic en Crear segmento.
- Nombre del contenedor: introduce un nombre descriptivo para el contenedor (por ejemplo,
tanium-audit-logs
). - Región: selecciona la región que prefieras (por ejemplo,
us-east-1
). - Haz clic en Crear.
- Nombre del contenedor: introduce un nombre descriptivo para el contenedor (por ejemplo,
Crear un usuario de gestión de identidades y accesos con acceso completo a Amazon S3
- Abre la consola de IAM.
- Haz clic en Usuarios > Añadir usuario.
- Escribe un nombre de usuario (por ejemplo,
tanium-connect-s3-user
). - Selecciona Acceso programático o Acceso a la consola de administración de AWS, o ambos, según sea necesario.
- Selecciona Contraseña generada automáticamente o Contraseña personalizada.
- Haz clic en Siguiente: Permisos.
- Elige Adjuntar políticas directamente.
- Busca y selecciona la política AmazonS3FullAccess para el usuario.
- Haz clic en Siguiente: Etiquetas.
- Haz clic en Siguiente: Revisar.
- Haz clic en Crear usuario.
- Copia y guarda el ID de clave de acceso y la clave de acceso secreta para consultarlos más adelante.
Configurar permisos en un segmento de Amazon S3
- En la consola de Amazon S3, elija el segmento que ha creado anteriormente.
- Haz clic en Permisos > Política de contenedor.
En el editor de políticas del segmento, añade la siguiente política:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::YOUR_ACCOUNT_ID:user/tanium-connect-s3-user" }, "Action": [ "s3:PutObject", "s3:PutObjectAcl", "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::tanium-audit-logs", "arn:aws:s3:::tanium-audit-logs/*" ] } ] }
Sustituye las siguientes variables:
- Cambia
YOUR_ACCOUNT_ID
por tu ID de cuenta de AWS. - Cambia
tanium-audit-logs
por el nombre de tu segmento si es diferente. - Cambia
tanium-connect-s3-user
por tu nombre de usuario de IAM si es diferente.
- Cambia
Haz clic en Guardar.
Configurar Tanium Connect para la exportación a S3
Crear una conexión de AWS S3 en Tanium Connect
- Inicia sesión en la consola de Tanium como administrador.
- Ve a Tanium Connect > Connections (Conexiones).
- Haga clic en Crear conexión.
- En la sección General Information (Información general), proporcione los siguientes detalles de configuración:
- Nombre: introduce un nombre descriptivo (por ejemplo,
Tanium Audit to S3
). - Descripción: escriba una descripción significativa (por ejemplo,
Export Tanium audit logs to S3 for Google SecOps ingestion
). - Habilitar: selecciona esta opción para habilitar la conexión.
- Nivel de registro: selecciona Información (opción predeterminada) o ajusta el nivel según sea necesario.
- Nombre: introduce un nombre descriptivo (por ejemplo,
Configurar la fuente de la conexión
- En la sección Configuración, en Fuente, selecciona Auditoría de Tanium.
- Configura los ajustes de la fuente de auditoría:
- Días del historial recuperado: introduce el número de días del historial de datos de auditoría que quieras recuperar (por ejemplo,
7
para una semana). - Tipos de auditoría: selecciona los tipos de auditoría que quieras exportar. Elige una de las siguientes opciones:
- Historial de acciones: acciones emitidas por los operadores de la consola.
- Autenticación: eventos de autenticación de usuarios.
- Contenido: cambios y modificaciones en el contenido.
- Grupos: cambios en los grupos de ordenadores.
- Paquetes: actividades relacionadas con los paquetes.
- Sensores: modificaciones de sensores.
- Configuración del sistema: cambios en la configuración del sistema.
- Usuarios: actividades de gestión de usuarios.
- Días del historial recuperado: introduce el número de días del historial de datos de auditoría que quieras recuperar (por ejemplo,
Configurar el destino de AWS S3
- En Destino, selecciona AWS S3.
- Proporcione los siguientes detalles de configuración:
- Nombre del destino: introduce un nombre (por ejemplo,
Google SecOps S3 Bucket
). - Clave de acceso de AWS: introduce el ID de clave de acceso del usuario de IAM que has creado anteriormente.
- Clave secreta de AWS: introduce la clave de acceso secreta del usuario de IAM que has creado antes.
- Nombre del segmento: introduce el nombre del segmento de S3 (por ejemplo,
tanium-audit-logs
). - Ruta del contenedor: opcional. Introduce un prefijo de ruta (por ejemplo,
tanium/audit/
). - Región: selecciona la región de AWS en la que se encuentra tu contenedor (por ejemplo,
us-east-1
).
- Nombre del destino: introduce un nombre (por ejemplo,
Configurar el formato y la programación
- En la sección Formato, configura el formato de salida:
- Tipo de formato: selecciona JSON.
- Incluir encabezados de columna: selecciona si quieres incluir encabezados de columna.
- Generar documento: desmarca esta opción para enviar datos JSON sin formato.
- En la sección Programación, configure cuándo se ejecutará la conexión:
- Tipo de programación: selecciona Cron.
- Expresión cron: introduce una expresión cron para las exportaciones periódicas (por ejemplo,
0 */1 * * *
para las exportaciones por horas). - Fecha de inicio: define la fecha de inicio de la programación.
- Haz clic en Guardar cambios.
Probar y ejecutar la conexión
- En la página Vista general de Connect, ve a Conexiones.
- Haga clic en la conexión que ha creado (Tanium Audit to S3).
- Haz clic en Ejecutar ahora para probar la conexión.
- Confirma que quieres ejecutar la conexión.
- Monitoriza el estado de la conexión y comprueba que los registros de auditoría se están exportando a tu contenedor de S3.
Opcional: Crear un usuario y claves de gestión de identidades y accesos de solo lectura para Google SecOps
- Ve a Consola de AWS > IAM > Usuarios > Añadir usuarios.
- Haz clic en Add users (Añadir usuarios).
- Proporcione los siguientes detalles de configuración:
- Usuario: introduce
secops-reader
. - Tipo de acceso: selecciona Clave de acceso – Acceso programático.
- Usuario: introduce
- Haz clic en Crear usuario.
- Asigna una política de lectura mínima (personalizada): Usuarios > secops-reader > Permisos > Añadir permisos > Asignar políticas directamente > Crear política.
En el editor de JSON, introduce la siguiente política:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:GetObject"], "Resource": "arn:aws:s3:::tanium-audit-logs/*" }, { "Effect": "Allow", "Action": ["s3:ListBucket"], "Resource": "arn:aws:s3:::tanium-audit-logs" } ] }
Asigna el nombre
secops-reader-policy
.Ve a Crear política > busca o selecciona > Siguiente > Añadir permisos.
Ve a Credenciales de seguridad > Claves de acceso > Crear clave de acceso.
Descarga el archivo CSV (estos valores se introducen en el feed).
Configurar un feed en Google SecOps para ingerir registros de auditoría de Tanium
- Ve a Configuración de SIEM > Feeds.
- Haz clic en + Añadir nuevo feed.
- En el campo Nombre del feed, introduce un nombre para el feed (por ejemplo,
Tanium Audit logs
). - Selecciona Amazon S3 V2 como Tipo de fuente.
- Seleccione Tanium Audit como Tipo de registro.
- Haz clic en Siguiente.
- Especifique los valores de los siguientes parámetros de entrada:
- URI de S3:
s3://tanium-audit-logs/tanium/audit/
(ajusta la ruta si has usado otro nombre o ruta de segmento). - Opciones de eliminación de la fuente: selecciona la opción de eliminación que prefieras.
- Antigüedad máxima del archivo: incluye los archivos modificados en los últimos días. El valor predeterminado es 180 días.
- ID de clave de acceso: clave de acceso de usuario con acceso al segmento de S3 (del usuario de solo lectura creado anteriormente).
- Clave de acceso secreta: clave secreta del usuario con acceso al segmento de S3 (del usuario de solo lectura creado anteriormente).
- Espacio de nombres de recursos: el espacio de nombres de recursos.
- Etiquetas de ingestión: etiqueta que se aplicará a los eventos de este feed.
- URI de S3:
- Haz clic en Siguiente.
- Revise la configuración de la nueva fuente en la pantalla Finalizar y, a continuación, haga clic en Enviar.
Tabla de asignación de UDM
Campo de registro | Asignación de UDM | Lógica |
---|---|---|
ActionId |
metadata.product_log_id |
Se asigna directamente desde el campo ActionId . |
ActionName |
security_result.action_details |
Se asigna directamente desde el campo ActionName . |
Approver |
additional.fields[Approver].value.string_value |
Se asigna directamente desde el campo Approver . |
Approver |
principal.user.userid |
Se asigna desde el campo Approver si no se incluye Issuer . |
audit_name |
metadata.description |
Se asigna directamente desde el campo audit_name . |
audit_row_id |
additional.fields[audit_row_id].value.string_value |
Se asigna directamente desde el campo audit_row_id . |
audit_type |
additional.fields[audit_type].value.string_value |
Se asigna directamente desde el campo audit_type . |
authentication_type |
principal.user.attribute.labels[authentication_type].value |
Se asigna directamente desde el campo authentication_type extraído del campo details . |
Command |
principal.process.command_line |
Se asigna directamente desde el campo Command después de decodificar la URL. |
creation_time |
target.resource.attribute.creation_time |
Se asigna directamente desde el campo creation_time . |
details |
network.session_id |
Se extrae del campo details mediante el análisis de pares clave-valor. |
details |
principal.user.attribute.labels[authentication_type].value |
Se extrae del campo details mediante el análisis de pares clave-valor. |
details |
principal.asset.ip , principal.ip |
La dirección IP se extrae del campo details mediante el análisis de pares clave-valor y se asigna a principal.asset.ip y principal.ip . |
DistributeOver |
additional.fields[DistributeOver].value.string_value |
Se asigna directamente desde el campo DistributeOver . |
dvc_ip |
intermediary.hostname |
Se asigna directamente desde el campo dvc_ip extraído del mensaje syslog. |
dvc_ip |
observer.ip |
Se asigna directamente desde el campo dvc_ip si logstash.collect.host no está presente. |
Expiration |
additional.fields[Expiration].value.string_value |
Se asigna directamente desde el campo Expiration . |
host.architecture |
target.asset.hardware.cpu_platform |
Se asigna directamente desde el campo host.architecture . |
host.id |
target.asset.asset_id |
Se asigna directamente desde el campo host.id , con el prefijo "ID de host:". |
host.ip |
target.ip |
Se asigna directamente desde el campo host.ip . |
host.mac |
target.mac |
Se asigna directamente desde el campo host.mac . |
host.name |
target.hostname |
Se asigna directamente desde el campo host.name si host.hostname no está presente. |
host.os.kernel |
target.platform_patch_level |
Se asigna directamente desde el campo host.os.kernel . |
host.os.name |
additional.fields[os_name].value.string_value |
Se asigna directamente desde el campo host.os.name . |
host.os.version |
target.platform_version |
Se asigna directamente desde el campo host.os.version . |
InsertTime |
additional.fields[InsertTime].value.string_value |
Se asigna directamente desde el campo InsertTime . |
Issuer |
additional.fields[Issuer].value.string_value |
Se asigna directamente desde el campo Issuer . |
Issuer |
principal.user.userid |
Se asigna directamente desde el campo Issuer si está presente. |
last_modified_by |
principal.resource.attribute.labels[last_modified_by].value |
Se asigna directamente desde el campo last_modified_by . |
log.source.address |
principal.ip |
La dirección IP se extrae del campo log.source.address y se asigna a principal.ip . |
log.source.address |
principal.port |
El puerto se extrae del campo log.source.address . |
logstash.collect.host |
observer.ip |
Se asigna directamente desde el campo logstash.collect.host si está presente. |
logstash.collect.timestamp |
metadata.collected_timestamp |
Se asigna directamente desde el campo logstash.collect.timestamp . |
logstash.ingest.timestamp |
metadata.ingested_timestamp |
Se asigna directamente desde el campo logstash.ingest.timestamp . |
logstash.irm_environment |
additional.fields[irm_environment].value.string_value |
Se asigna directamente desde el campo logstash.irm_environment . |
logstash.irm_region |
additional.fields[irm_region].value.string_value |
Se asigna directamente desde el campo logstash.irm_region . |
logstash.irm_site |
additional.fields[irm_site].value.string_value |
Se asigna directamente desde el campo logstash.irm_site . |
logstash.process.host |
intermediary.hostname |
Se asigna directamente desde el campo logstash.process.host . |
message |
dvc_ip , json_data , timestamp |
Analizado con grok para extraer dvc_ip , json_data y timestamp . |
modification_time |
target.resource.attribute.last_update_time |
Se asigna directamente desde el campo modification_time . |
modifier_user_id |
principal.resource.attribute.labels[modifier_user_id].value |
Se asigna directamente desde el campo modifier_user_id . |
object_id |
target.resource.product_object_id |
Se asigna directamente desde el campo object_id . |
object_name |
target.resource.name |
Se asigna directamente desde el campo object_name . |
object_type_name |
target.resource.attribute.labels[object_type_name].value |
Se asigna directamente desde el campo object_type_name . |
PackageName |
additional.fields[PackageName].value.string_value |
Se asigna directamente desde el campo PackageName . |
SourceId |
additional.fields[SourceId].value.string_value |
Se asigna directamente desde el campo SourceId . |
StartTime |
additional.fields[StartTime].value.string_value |
Se asigna directamente desde el campo StartTime . |
Status |
security_result.action |
Se asigna a "BLOCK" si Status es "Closed" y a "ALLOW" si Status es "Open". |
Status |
security_result.summary |
Se asigna directamente desde el campo Status . |
tanium_audit_type |
metadata.product_event_type |
Se asigna directamente desde el campo tanium_audit_type . |
timestamp |
metadata.event_timestamp |
Se asigna directamente desde el campo timestamp extraído del mensaje syslog o del campo message . |
type |
additional.fields[type].value.string_value |
Se asigna directamente desde el campo type . |
type_name |
metadata.product_event_type |
Se asigna directamente desde el campo type_name . |
User |
principal.user.userid |
Se asigna directamente desde el campo User . Se determina mediante la lógica del analizador en función de la presencia de src_ip , has_target y has_user . Puede ser "NETWORK_CONNECTION", "USER_RESOURCE_ACCESS", "STATUS_UPDATE" o "GENERIC_EVENT". Codificado como "TANIUM_AUDIT". Codificado como "ciberseguridad". Codificado como "TANIUM_AUDIT". |
@version |
metadata.product_version |
Se asigna directamente desde el campo @version . |
agent.ephemeral_id |
additional.fields[ephemeral_id].value.string_value |
Se asigna directamente desde el campo agent.ephemeral_id . |
agent.id |
observer.asset_id |
Se asigna directamente desde el campo agent.id , con el prefijo "filebeat:". |
agent.type |
observer.application |
Se asigna directamente desde el campo agent.type . |
agent.version |
observer.platform_version |
Se asigna directamente desde el campo agent.version . |
Comment |
security_result.description |
Se asigna directamente desde el campo Comment . |
host.hostname |
target.hostname |
Se asigna directamente desde el campo host.hostname si está presente. |
input.type |
network.ip_protocol |
Se asigna a "TCP" si input.type es "tcp" o "TCP". |
syslog_severity |
security_result.severity |
Se asigna a "HIGH" si syslog_severity es "error" o "warning", "MEDIUM" si es "notice" y "LOW" si es "information" o "info". |
syslog_severity |
security_result.severity_details |
Se asigna directamente desde el campo syslog_severity . |
¿Necesitas más ayuda? Recibe respuestas de los miembros de la comunidad y de los profesionales de Google SecOps.