Recopila registros de auditoría de Tanium
En este documento, se explica cómo transferir registros de auditoría de Tanium a Google Security Operations con Amazon S3 a través de la capacidad nativa de exportación a S3 de Tanium Connect. El analizador extrae los registros y, en un principio, borra varios campos predeterminados. Luego, analiza el mensaje de registro con 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 y controla varios tipos de datos y lógica condicional para completar los campos correspondientes del UDM según la presencia y los valores de atributos específicos del registro de auditoría de Tanium.
Antes de comenzar
Asegúrate de cumplir con los siguientes requisitos previos:
- Una instancia de Google SecOps
- Acceso privilegiado a Tanium Connect y Tanium Console
- Acceso privilegiado a AWS (S3, IAM)
Crea un bucket de Amazon S3
- Abre la consola de Amazon S3.
- Si es necesario, puedes cambiar la región.
- En la barra de navegación, selecciona la región en la que deseas que residan tus registros de auditoría de Tanium.
- Haga clic en Crear bucket.
- Nombre del bucket: Ingresa un nombre significativo para el bucket (por ejemplo,
tanium-audit-logs
). - Región: Selecciona tu región preferida (por ejemplo,
us-east-1
). - Haz clic en Crear.
- Nombre del bucket: Ingresa un nombre significativo para el bucket (por ejemplo,
Crea un usuario de IAM con acceso completo a Amazon S3
- Abre la consola de IAM.
- Haz clic en Usuarios > Agregar usuario.
- Ingresa un nombre de usuario (por ejemplo,
tanium-connect-s3-user
). - Selecciona Acceso programático o Acceso a la consola de administración de AWS según sea necesario.
- Selecciona Contraseña generada automáticamente o Contraseña personalizada.
- Haz clic en Next: Permissions.
- Elige Adjuntar las políticas existentes de forma directa.
- 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 futuras referencias.
Configura los permisos en el bucket de Amazon S3
- En la consola de Amazon S3, elige el bucket que creaste anteriormente.
- Haz clic en Permisos > Política de bucket.
En el Editor de políticas de bucket, agrega 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/*" ] } ] }
Reemplaza las siguientes variables:
- Cambia
YOUR_ACCOUNT_ID
por tu ID de cuenta de AWS. - Si es diferente, cambia
tanium-audit-logs
por el nombre real de tu bucket. - Cambia
tanium-connect-s3-user
por tu nombre de usuario de IAM real si es diferente.
- Cambia
Haz clic en Guardar.
Configura Tanium Connect para la exportación a S3
Crea una conexión de AWS S3 en Tanium Connect
- Accede a la consola de Tanium como administrador.
- Ve a Tanium Connect > Connections.
- Haz clic en Create Connection.
- En la sección Información general, proporciona los siguientes detalles de configuración:
- Nombre: Ingresa un nombre descriptivo (por ejemplo,
Tanium Audit to S3
). - Descripción: Ingresa 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 (predeterminado) o ajústalo según sea necesario.
- Nombre: Ingresa un nombre descriptivo (por ejemplo,
Configura la fuente de conexión
- En la sección Configuración, en Fuente, selecciona Auditoría de Tanium.
- Configura los parámetros de la fuente de auditoría:
- Days of History Retrieved: Ingresa la cantidad de días de datos históricos de auditoría que se recuperarán (por ejemplo,
7
para una semana). - Tipos de auditoría: Selecciona los tipos de auditoría que deseas exportar. Elige una de las siguientes opciones:
- Historial de acciones: Son las acciones que emiten los operadores de la consola.
- Authentication: Eventos de autenticación de usuarios.
- Contenido: Cambios y modificaciones en el contenido
- Grupos: Cambios en los grupos de computadoras
- Packages: Actividades relacionadas con paquetes.
- Sensores: Modificaciones de sensores.
- Configuración del sistema: Cambios en la configuración del sistema
- Usuarios: Actividades de administración de usuarios.
- Days of History Retrieved: Ingresa la cantidad de días de datos históricos de auditoría que se recuperarán (por ejemplo,
Configura el destino de AWS S3
- En Destino, selecciona AWS S3.
- Proporciona los siguientes detalles de configuración:
- Nombre del destino: Ingresa un nombre (por ejemplo,
Google SecOps S3 Bucket
). - Clave de acceso de AWS: Ingresa el ID de la clave de acceso del usuario de IAM que creaste antes.
- Clave secreta de AWS: Ingresa la clave de acceso secreta del usuario de IAM que creaste antes.
- Nombre del bucket: Ingresa el nombre de tu bucket de S3 (por ejemplo,
tanium-audit-logs
). - Ruta de acceso al bucket: Opcional. Ingresa un prefijo de ruta de acceso (por ejemplo,
tanium/audit/
). - Región: Selecciona la región de AWS en la que reside tu bucket (por ejemplo,
us-east-1
).
- Nombre del destino: Ingresa un nombre (por ejemplo,
Configura el formato y la programación
- En la sección Formato, configura el formato de salida:
- Tipo de formato: Selecciona JSON.
- Include Column Headers: Selecciona esta opción si deseas incluir encabezados de columna.
- Generar documento: Anula la selección de esta opción para enviar datos JSON sin procesar.
- En la sección Programación, configura cuándo se ejecutará la conexión:
- Tipo de programa: Selecciona Cron.
- Cron Expression: Ingresa una expresión cron para las exportaciones periódicas (por ejemplo,
0 */1 * * *
para las exportaciones por hora). - Fecha de inicio: Establece la fecha de inicio de la programación.
- Haz clic en Guardar cambios.
Prueba y ejecuta la conexión
- En la página Resumen de Connect, ve a Conexiones.
- Haz clic en la conexión que creaste (Tanium Audit to S3).
- Haz clic en Ejecutar ahora para probar la conexión.
- Confirma que deseas ejecutar la conexión.
- Supervisa el estado de la conexión y verifica que los registros de auditoría se exporten a tu bucket de S3.
Opcional: Crea un usuario y claves de IAM de solo lectura para Google SecOps
- Ve a Consola de AWS > IAM > Usuarios > Agregar usuarios.
- Haz clic en Agregar usuarios.
- Proporciona los siguientes detalles de configuración:
- Usuario: Ingresa
secops-reader
. - Tipo de acceso: Selecciona Clave de acceso: Acceso programático.
- Usuario: Ingresa
- Haz clic en Crear usuario.
- Adjunta una política de lectura mínima (personalizada): Usuarios > secops-reader > Permisos > Agregar permisos > Adjuntar políticas directamente > Crear política.
En el editor de JSON, ingresa 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" } ] }
Configura el nombre como
secops-reader-policy
.Ve a Crear política > busca o selecciona > Siguiente > Agregar permisos.
Ve a Credenciales de seguridad > Claves de acceso > Crear clave de acceso.
Descarga el archivo CSV (estos valores se ingresan en el feed).
Configura un feed en Google SecOps para transferir registros de auditoría de Tanium
- Ve a Configuración de SIEM > Feeds.
- Haz clic en + Agregar feed nuevo.
- En el campo Nombre del feed, ingresa un nombre para el feed (por ejemplo,
Tanium Audit logs
). - Selecciona Amazon S3 V2 como el Tipo de fuente.
- Selecciona Tanium Audit como el Tipo de registro.
- Haz clic en Siguiente.
- Especifica valores para los siguientes parámetros de entrada:
- URI de S3:
s3://tanium-audit-logs/tanium/audit/
(ajusta la ruta de acceso si usaste un nombre o una ruta de acceso de bucket diferentes). - Opciones de borrado de la fuente: Selecciona la opción de borrado según tu preferencia.
- Antigüedad máxima del archivo: Incluye los archivos modificados en la cantidad de días especificada. El valor predeterminado es de 180 días.
- ID de clave de acceso: Clave de acceso del usuario con acceso al bucket de S3 (del usuario de solo lectura creado anteriormente).
- Clave de acceso secreta: Clave secreta del usuario con acceso al bucket de S3 (del usuario de solo lectura creado anteriormente).
- Espacio de nombres del recurso: Es el espacio de nombres del recurso.
- Etiquetas de transmisión: Es la etiqueta que se aplicará a los eventos de este feed.
- URI de S3:
- Haz clic en Siguiente.
- Revisa la nueva configuración del feed en la pantalla Finalizar y, luego, haz 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 Issuer no está presente. |
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 la decodificación de 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 con el análisis de clave-valor. |
details |
principal.user.attribute.labels[authentication_type].value |
Se extrae del campo details con el análisis de clave-valor. |
details |
principal.asset.ip , principal.ip |
La dirección IP se extrae del campo details con el análisis de 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 que se extrae del mensaje de 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 |
Se analizó 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 de 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 según 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". Se codifica de forma rígida como "TANIUM_AUDIT". Se codificó de forma rígida como "cybersecurity". Se codifica de forma rígida 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 "ALTA" si syslog_severity es "error" o "advertencia", "MEDIA" si es "aviso" y "BAJA" si es "información" o "info". |
syslog_severity |
security_result.severity_details |
Se asigna directamente desde el campo syslog_severity . |
¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.