Recoger registros de Uptycs EDR
En este documento se explica cómo puede ingerir registros de Uptycs EDR en Google Security Operations mediante Amazon S3. El analizador transforma los registros JSON sin procesar en un modelo de datos unificado (UDM). Primero, extrae los campos del JSON, limpia y enriquece los datos y, a continuación, asigna la información pertinente a los campos de UDM correspondientes. Además, gestiona varios tipos de datos y casos límite para asegurar una representación precisa y coherente en el esquema de UDM.
Antes de empezar
Asegúrate de que cumples los siguientes requisitos previos:
- Una instancia de Google SecOps
- Acceso privilegiado a Uptycs
- Acceso con privilegios a AWS (S3, IAM)
Obtener los requisitos previos de Uptycs
- Inicia sesión en la consola de administración de Uptycs.
- Vaya a Configuración > Usuarios.
- Selecciona un usuario o crea un usuario de cuenta de servicio.
- Haz clic en Clave de API de usuario.
- Copia y guarda en un lugar seguro los siguientes detalles:
- Clave de API
- Secreto de API
- ID de cliente
- Dominio de la API (derivado de tu URL de Uptycs, por ejemplo,
mystack.uptycs.io)
Configurar un segmento de AWS S3 y IAM para Google SecOps
- Crea un segmento de Amazon S3 siguiendo esta guía de usuario: Crear un segmento.
- Guarda el nombre y la región del segmento para consultarlos más adelante (por ejemplo,
uptycs-telemetry-export). - Crea un usuario siguiendo esta guía: Crear un usuario de gestión de identidades y accesos.
- Selecciona el usuario creado.
- Selecciona la pestaña Credenciales de seguridad.
- En la sección Claves de acceso, haz clic en Crear clave de acceso.
- Selecciona Servicio de terceros en Caso práctico.
- Haz clic en Siguiente.
- Opcional: añade una etiqueta de descripción.
- Haz clic en Crear clave de acceso.
- Haz clic en Descargar archivo CSV para guardar la clave de acceso y la clave de acceso secreta para futuras consultas.
- Haz clic en Listo.
- Selecciona la pestaña Permisos.
- En la sección Políticas de permisos, haz clic en Añadir permisos.
- Selecciona Añadir permisos.
- Seleccione Adjuntar políticas directamente.
- Busca la política AmazonS3FullAccess.
- Selecciona la política.
- Haz clic en Siguiente.
- Haz clic en Añadir permisos.
Configurar la política y el rol de gestión de identidades y accesos para las subidas de S3
- En la consola de AWS, ve a IAM > Políticas.
- Haz clic en Crear política > pestaña JSON.
Introduce la siguiente política:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutObjects", "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::uptycs-telemetry-export/*" }, { "Sid": "AllowListBucket", "Effect": "Allow", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::uptycs-telemetry-export" } ] }- Sustituye
uptycs-telemetry-exportsi has introducido otro nombre de segmento.
- Sustituye
Haz clic en Siguiente > Crear política.
Asigna un nombre a la política
uptycs-s3-write-policy.Ve a Gestión de identidades y accesos > Usuarios.
Selecciona el usuario creado para las exportaciones de Uptycs.
Haz clic en Añadir permisos > Adjuntar políticas directamente.
Busca y selecciona
uptycs-s3-write-policy.Haz clic en Siguiente > Añadir permisos.
Configurar Uptycs Export Raw Telemetry
- Inicia sesión en la consola de Uptycs.
- Ve a la sección de configuración de exportación.
- Configura el destino de exportación de S3.
- Proporcione los siguientes detalles de configuración:
- Tipo de exportación: selecciona Telemetría sin procesar.
- Destino: selecciona Amazon S3.
- Formato: selecciona JSON.
- Contenedor de S3: introduce
uptycs-telemetry-export. - Prefijo de ruta de S3: introduce
telemetry/. - Región de AWS: selecciona la región de tu segmento.
- ID de clave de acceso de AWS: introduce la clave de acceso del usuario de IAM.
- Clave de acceso secreta de AWS: introduce la clave de acceso secreta.
- Tipos de eventos: selecciona todos los tipos de telemetría necesarios.
- Prueba y habilita la exportación.
Crear un usuario de gestión de identidades y accesos de solo lectura para Google SecOps
- Ve a Consola de AWS > IAM > 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 > lector-secops > 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:::uptycs-telemetry-export/*" }, { "Effect": "Allow", "Action": ["s3:ListBucket"], "Resource": "arn:aws:s3:::uptycs-telemetry-export" } ] }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 Uptycs
- 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,
Uptycs EDR logs). - Selecciona Amazon S3 V2 como Tipo de fuente.
- Seleccione Uptycs EDR como Tipo de registro.
- Haz clic en Siguiente.
- Especifique valores para los siguientes parámetros de entrada:
- URI de S3:
s3://uptycs-telemetry-export/telemetry/ - 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 de 180 días.
- ID de clave de acceso: clave de acceso de usuario con acceso al bucket de S3.
- Clave de acceso secreta: clave secreta del usuario con acceso al segmento de S3.
- Espacio de nombres de recursos: el espacio de nombres de recursos.
- Etiquetas de ingestión: la etiqueta aplicada a los eventos de este feed.
- URI de S3:
- Haz clic en Siguiente.
- Revise la nueva configuración del feed 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 |
|---|---|---|
| osquery_raw_data.answer | read_only_udm.network.dns.answers.name | Valor tomado de osquery_raw_data.answer si osquery_raw_data.answer no está vacío. |
| osquery_raw_data.container_id | read_only_udm.metadata.product_log_id | Valor tomado de osquery_raw_data.container_id si osquery_raw_data.container_id no está vacío. |
| osquery_raw_data.local_address | read_only_udm.principal.ip | Valor tomado de osquery_raw_data.local_address si osquery_raw_data.local_address no está vacío y es una dirección IP válida. |
| osquery_raw_data.local | read_only_udm.principal.ip | De lo contrario, se tomará el valor de osquery_raw_data.local si no está vacío y es una dirección IP válida. |
| osquery_raw_data.local_port | read_only_udm.principal.port | Valor tomado de osquery_raw_data.local_port y convertido en un número entero si osquery_raw_data.local_port no está vacío. |
| osquery_raw_data.md5 | read_only_udm.target.process.file.md5 | Valor tomado de osquery_raw_data.md5 si osquery_raw_data.md5 no está vacío. |
| osquery_raw_data.port | read_only_udm.target.port | Valor tomado de osquery_raw_data.port y convertido en un número entero si osquery_raw_data.port no está vacío. |
| osquery_raw_data.question | read_only_udm.network.dns.questions.name | Valor tomado de osquery_raw_data.question si osquery_raw_data.question no está vacío. |
| osquery_raw_data.remote_address | read_only_udm.intermediary.ip | Valor tomado de osquery_raw_data.remote_address si osquery_raw_data.remote_address no está vacío. |
| osquery_raw_data.remote_port | read_only_udm.intermediary.port | Valor tomado de osquery_raw_data.remote_port y convertido en un número entero si osquery_raw_data.remote_port no está vacío. |
| osquery_raw_data.type | read_only_udm.network.dns.questions.type | Valor tomado de osquery_raw_data.type y convertido en un número entero si osquery_raw_data.type no está vacío. |
| osquery_raw_data.uid | read_only_udm.principal.user.userid | Valor tomado de osquery_raw_data.uid si osquery_raw_data.uid no está vacío y no es igual a "0". |
| osquery_raw_data.worker_instance_id | read_only_udm.principal.user.userid | De lo contrario, se toma el valor de osquery_raw_data.worker_instance_id si osquery_raw_data.worker_instance_id no está vacío. |
| upt_asset_group_id | read_only_udm.principal.user.group_identifiers | Valor tomado de upt_asset_group_id si upt_asset_group_id no está vacío. |
| upt_asset_group_name | read_only_udm.principal.group.group_display_name | Valor tomado de upt_asset_group_name si no está vacío. |
| upt_asset_id | read_only_udm.principal.asset.asset_id | Cadena concatenada "UPT ASSET ID:" con el valor de upt_asset_id si upt_asset_id no está vacío. |
| upt_hash | read_only_udm.target.file.md5 | Todas las apariciones de "-" se sustituyen por "" en upt_hash. A continuación, el valor se asigna a read_only_udm.target.file.md5 si upt_hash no está vacío. |
| upt_hostname | read_only_udm.principal.hostname | Valor tomado de upt_hostname si upt_hostname no está vacío. |
| upt_resource_type | read_only_udm.target.resource.type | Valor tomado de upt_resource_type si upt_resource_type no está vacío. |
| upt_time | read_only_udm.metadata.event_timestamp.seconds | Valor tomado de upt_time si upt_time no está vacío. |
| read_only_udm.metadata.event_type | El valor es "PROCESS_LAUNCH" si osquery_raw_data.pid no está vacío. El valor es "NETWORK_DNS" si osquery_raw_data.question no está vacío. El valor es "GENERIC_EVENT" si event_type está vacío. | |
| read_only_udm.metadata.log_type | El valor es "UPTYCS_EDR". | |
| read_only_udm.metadata.product_name | El valor es "UPTYCS_EDR". | |
| read_only_udm.metadata.vendor_name | El valor es "UPTYCS". | |
| read_only_udm.network.application_protocol | El valor se define como "DNS" si osquery_raw_data.question no está vacío. | |
| read_only_udm.security_result.action | El valor es "ALLOW" si osquery_raw_data.return_code es igual a "SUCCESS" u osquery_raw_data.success es igual a "1". | |
| read_only_udm.target.process.command_line | Valor tomado de osquery_raw_data.cmdline si osquery_raw_data.cmdline no está vacío. | |
| read_only_udm.target.process.file.full_path | Valor tomado de osquery_raw_data.path si osquery_raw_data.path no está vacío. | |
| read_only_udm.target.process.parent_process | El valor se crea iterando en la matriz ancestor_list de osquery_raw_data.ancestor_list. De cada elemento de la matriz, se extraen la línea de comandos, la ruta completa del archivo y el PID, y se les da formato en una estructura JSON que representa la cadena de procesos. | |
| read_only_udm.target.process.pid | Valor tomado de osquery_raw_data.pid si osquery_raw_data.pid no está vacío. |
¿Necesitas más ayuda? Recibe respuestas de los miembros de la comunidad y de los profesionales de Google SecOps.