Recoger registros de Citrix StoreFront
En este documento se explica cómo ingerir registros de Citrix StoreFront en Google Security Operations mediante Bindplane. El analizador extrae campos de los registros con formato de registro de eventos de Windows de Citrix StoreFront. Usa la recogida de registros de eventos de Windows para analizar el mensaje de registro y, a continuación, asigna estos valores al modelo de datos unificado (UDM). También define los valores de metadatos predeterminados de la fuente y el tipo de evento. El analizador extrae datos de los registros JSON de Citrix StoreFront desglosando el campo de mensaje en entidades individuales, como Session
, User
, AppInstance
, App
, Connection
y Machine
, mediante una serie de patrones grok
. A continuación, asigna los campos extraídos a una estructura de modelo de datos unificado (UDM) y la enriquece con información de la red, la entidad principal, el intermediario y el objetivo en función de la lógica condicional y las transformaciones de datos.
Antes de empezar
Asegúrate de que cumples los siguientes requisitos previos:
- Una instancia de Google SecOps.
- Un host con Windows 2016 o una versión posterior con
systemd
donde se instalará Bindplane - Si se ejecuta a través de un proxy, asegúrese de que los puertos del cortafuegos estén abiertos según los requisitos del agente de Bindplane.
- Acceso privilegiado al servidor Citrix StoreFront y a la consola de gestión
- Acceso de administrador al servidor Windows que aloja StoreFront
Obtener el archivo de autenticación de ingestión de Google SecOps
- Inicia sesión en la consola de Google SecOps.
- Ve a Configuración de SIEM > Agentes de recogida.
- Descarga el archivo de autenticación de ingestión. Guarda el archivo de forma segura en el sistema en el que se instalará Bindplane.
Obtener el ID de cliente de Google SecOps
- Inicia sesión en la consola de Google SecOps.
- Ve a Configuración de SIEM > Perfil.
- Copia y guarda el ID de cliente de la sección Detalles de la organización.
Instalar el agente de Bindplane
Instala el agente de Bindplane en tu sistema operativo Windows o Linux siguiendo las instrucciones que se indican a continuación.
Instalación de ventanas
- Abre el símbolo del sistema o PowerShell como administrador.
Ejecuta el siguiente comando:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
Recursos de instalación adicionales
- Para ver otras opciones de instalación, consulta esta guía de instalación.
Configurar el agente de Bindplane para ingerir registros de eventos de Windows y enviarlos a Google SecOps
Accede al archivo de configuración:
- Busca el archivo
config.yaml
. Normalmente, se encuentra en el directorio/etc/bindplane-agent/
en Linux o en el directorio de instalación en Windows. - Abre el archivo con un editor de texto (por ejemplo,
nano
,vi
o Bloc de notas).
- Busca el archivo
Edita el archivo
config.yaml
de la siguiente manera:receivers: windowseventlog/storefront: channel: Application operators: - type: filter expr: 'record["source_name"] matches "^Citrix"' exporters: chronicle/chronicle_w_labels: compression: gzip # Adjust the path to the credentials file you downloaded in Step 1 creds_file_path: 'C:/path/to/ingestion-authentication-file.json' # Replace with your actual customer ID from Step 2 customer_id: CUSTOMER_ID_PLACEHOLDER endpoint: malachiteingestion-pa.googleapis.com # Add optional ingestion labels for better organization log_type: 'CITRIX_STOREFRONT' raw_log_field: body ingestion_labels: service: pipelines: logs/storefront: receivers: - windowseventlog/storefront exporters: - chronicle/chronicle_w_labels
- Sustituye
CUSTOMER_ID_PLACEHOLDER
por el ID de cliente real. - Actualiza
/path/to/ingestion-authentication-file.json
a la ruta en la que se guardó el archivo de autenticación en la sección Obtener el archivo de autenticación de ingestión de Google SecOps.
- Sustituye
Reinicia el agente de Bindplane para aplicar los cambios
Para reiniciar el agente de BindPlane en Windows, puedes usar la consola Servicios o introducir el siguiente comando:
net stop BindPlaneAgent && net start BindPlaneAgent
Configurar el registro de eventos de StoreFront
- Inicia sesión en StoreFront Server con privilegios de administrador.
- Abre PowerShell como administrador.
Carga el módulo de PowerShell de StoreFront:
Add-PSSnapin Citrix.DeliveryServices.Framework.Commands
Habilita el registro detallado para solucionar problemas (opcional):
Set-STFDiagnostics -All -TraceLevel "Info" -confirm:$False
Comprueba que el registro de eventos de Windows esté habilitado:
- Abre Visor de eventos en el servidor StoreFront.
- Ve a Registros de aplicaciones y servicios > Citrix Delivery Services.
- Verifica que se registren eventos para el servicio de autenticación, las tiendas y Receiver para sitios web.
Opcional: Configurar la limitación de registros de eventos
- Ve a los directorios de configuración de StoreFront:
- Servicio de autenticación:
C:/inetpub/wwwroot/Citrix/Authentication
- Tienda:
C:/inetpub/wwwroot/Citrixstorename
- Receptor del sitio web:
C:/inetpub/wwwroot/Citrixstorename/Web
- Servicio de autenticación:
- Abre el archivo
web.config
de cada directorio con un editor de texto. Busca el elemento de registro y configúralo según sea necesario:
<logger duplicateInterval="00:01:00" duplicateLimit="10">
duplicateInterval define el periodo en horas, minutos y segundos durante el que se monitorizan las entradas de registro duplicadas.
duplicateLimit define el número de entradas duplicadas que se deben registrar en el intervalo de tiempo especificado para activar la limitación de registros.
Guarda los archivos de configuración.
Verificar la recogida de registros
- Abre el Visor de eventos de Windows en el servidor StoreFront.
- Ve a Registros de Windows > Aplicación o Registros de aplicaciones y servicios > Servicios de entrega de Citrix.
- Verifica que se estén generando eventos de StoreFront.
- Consulta los registros del agente de Bindplane para confirmar que los registros se están reenviando a Google SecOps.
Tabla de asignación de UDM
Campo de registro | Asignación de UDM | Lógica |
---|---|---|
App.PublishedName | _principal.application | El valor se toma del campo App.PublishedName. |
Connection.ClientAddress | _principal.asset.ip | El valor se toma del campo Connection.ClientAddress. |
Connection.ClientName | _principal.asset.hostname | El valor se toma del campo Connection.ClientName. |
Connection.ClientPlatform | _principal.asset.platform_software.platform | El valor se toma del campo Connection.ClientPlatform y se convierte a mayúsculas. Si el valor es "WINDOWS", "MAC" o "LINUX", se usa directamente. De lo contrario, se le asigna el valor "UNKNOWN_PLATFORM". |
Connection.ConnectedViaHostName | src.hostname | El valor se toma del campo Connection.ConnectedViaHostName. |
Connection.LaunchedViaHostName | _intermediary.hostname | El valor se toma del campo Connection.LaunchedViaHostName. El espacio de nombres es "Servidor de StoreFront". |
Connection.LaunchedViaIPAddress | _intermediary.ip | El valor se toma del campo Connection.LaunchedViaIPAddress. |
Connection.Protocol | network.application_protocol | El valor se toma del campo Connection.Protocol. Si el valor es "HDX", se asigna el valor "UNKNOWN_APPLICATION_PROTOCOL". |
Machine.AgentVersion | metadata.product_version | El valor se toma del campo Machine.AgentVersion. |
Machine.AssociatedUserNames | _intermediary.user.userid | El valor se toma del campo Machine.AssociatedUserNames. Cada nombre se extrae y se usa como ID de usuario de un objeto de usuario intermediario. |
Machine.AssociatedUserUPNs | _target.group.email_addresses | El valor se toma del campo Machine.AssociatedUserUPNs. Cada dirección de correo se extrae y se añade al campo email_addresses del grupo de destino. |
Machine.ControllerDnsName | _intermediary.hostname | El valor se toma del campo Machine.ControllerDnsName. El espacio de nombres es "Controller". |
Machine.CreatedDate | _target.asset.attribute.creation_time | El valor se toma del campo Machine.CreatedDate y se convierte en una marca de tiempo. |
Machine.DesktopGroupId | _target.group.product_object_id | El valor se toma del campo Machine.DesktopGroupId. |
Machine.DnsName | _target.asset.network_domain | El valor se toma del campo Machine.DnsName. |
Machine.HostedMachineName | _target.asset.hostname | El valor se toma del campo Machine.HostedMachineName. |
Machine.HostingServerName | _intermediary.hostname | El valor se toma del campo Machine.HostingServerName. El espacio de nombres es "Hypervisor". |
Machine.IPAddress | _target.asset.ip | El valor se toma del campo Machine.IPAddress. |
Machine.LastDeregisteredDate | _target.asset.last_discover_time | El valor se toma del campo Machine.LastDeregisteredDate y se convierte en una marca de tiempo. |
Machine.ModifiedDate | _target.asset.system_last_update_time | El valor se toma del campo Machine.ModifiedDate y se convierte en una marca de tiempo. |
Machine.Name | _target.asset.asset_id, _target.administrative_domain | El valor se toma del campo Machine.Name y se divide en partes de dominio y de recurso. La parte del dominio se usa como dominio administrativo de destino, y la parte del recurso se usa para crear el ID del recurso de destino con el formato "machine: |
Machine.OSType | _target.asset.platform_software.platform_version | El valor se toma del campo Machine.OSType. |
Machine.PoweredOnDate | _target.asset.last_boot_time | El valor se toma del campo Machine.PoweredOnDate y se convierte en una marca de tiempo. |
Machine.RegistrationStateChangeDate | _target.asset.first_discover_time | El valor se toma del campo Machine.RegistrationStateChangeDate y se convierte en una marca de tiempo. |
Session.EndDate | _vulns.last_found | El valor se toma del campo Session.EndDate y se convierte en una marca de tiempo. |
Session.LifecycleState | extensions.auth.auth_details | El valor se toma del campo Session.LifecycleState. Si el valor es 0, se le asigna el valor "ACTIVE". Si el valor es 1, se le asigna el valor "DELETED". Si el valor es 2 o 3, se le asigna el valor "UNKNOWN_AUTHENTICATION_STATUS". |
Session.LogOnDuration | network.session_duration.seconds | El valor se toma del campo Session.LogOnDuration y se convierte en un número entero. |
Session.SessionKey | network.session_id | El valor se toma del campo Session.SessionKey. |
Session.StartDate | _vulns.first_found | El valor se toma del campo Session.StartDate y se convierte en una marca de tiempo. |
User.Domain | _principal.user.company_name, _principal.administrative_domain | El valor se toma del campo User.Domain y se usa como nombre de la empresa del usuario principal y como dominio administrativo principal. |
User.FullName | _principal.user.user_display_name | El valor se toma del campo User.FullName. |
User.Sid | _principal.user.windows_sid | El valor se toma del campo User.Sid. |
User.Upn | _principal.user.email_addresses | El valor se toma del campo User.Upn y se añade al campo email_addresses del usuario principal. |
User.UserName | _principal.user.userid | El valor se toma del campo User.UserName. |
metadata.event_type | El valor es "USER_LOGIN". | |
metadata.vendor_name | El valor se define como "Citrix". | |
metadata.product_name | El valor es "Monitor Service OData". | |
extensions.auth.type | El valor es "MACHINE". | |
_intermediary.namespace | El valor se establece en "StoreFront server", "Controller" o "Hypervisor" en función del objeto intermediario. | |
_target.asset.type | El valor es "WORKSTATION". |
¿Necesitas más ayuda? Recibe respuestas de los miembros de la comunidad y de los profesionales de Google SecOps.