Recopila registros de Citrix StoreFront
En este documento, se explica cómo transferir registros de Citrix StoreFront a Google Security Operations con Bindplane. El analizador extrae campos de los registros con formato de registro de eventos de Windows de Citrix StoreFront. Utiliza la recopilación de registros de eventos de Windows para analizar el mensaje de registro y, luego, asigna estos valores al Modelo de datos unificado (UDM). También establece valores de metadatos predeterminados para el origen y el tipo del evento. El analizador extrae datos de los registros JSON de Citrix StoreFront dividiendo el campo de mensaje en entidades individuales, como Session
, User
, AppInstance
, App
, Connection
y Machine
, con una serie de patrones grok
. Luego, asigna los campos extraídos a una estructura de modelo de datos unificado (UDM) y la enriquece con información de red, principal, intermediario y objetivo según la lógica condicional y las transformaciones de datos.
Antes de comenzar
Asegúrate de cumplir con los siguientes requisitos previos:
- Es una instancia de Google SecOps.
- Un host de Windows 2016 o posterior con
systemd
en el que se instalará BindPlane - Si se ejecuta detrás de un proxy, asegúrate de que los puertos de firewall estén abiertos según los requisitos del agente de Bindplane.
- Acceso con privilegios al servidor de Citrix StoreFront y a la consola de administración
- Acceso administrativo al servidor de Windows que aloja StoreFront
Obtén el archivo de autenticación de transferencia de Google SecOps
- Accede a la consola de Google SecOps.
- Ve a Configuración de SIEM > Agentes de recopilación.
- Descarga el archivo de autenticación de transferencia. Guarda el archivo de forma segura en el sistema en el que se instalará BindPlane.
Obtén el ID de cliente de Google SecOps
- Accede a 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.
Instala el agente de BindPlane
Instala el agente de Bindplane en tu sistema operativo Windows o Linux según las siguientes instrucciones.
Instalación en Windows
- 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 obtener más opciones de instalación, consulta esta guía de instalación.
Configura el agente de BindPlane para que ingiera registros de eventos de Windows y los envíe a Google SecOps
Accede al archivo de configuración:
- Ubica el archivo
config.yaml
. Por lo general, 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).
- Ubica 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
- Reemplaza
CUSTOMER_ID_PLACEHOLDER
por el ID de cliente real. - Actualiza
/path/to/ingestion-authentication-file.json
a la ruta de acceso en la que se guardó el archivo de autenticación en la sección Cómo obtener el archivo de autenticación de la transferencia de datos de Google SecOps.
- Reemplaza
Reinicia el agente de Bindplane para aplicar los cambios
Para reiniciar el agente de BindPlane en Windows, puedes usar la consola de Servicios o ingresar el siguiente comando:
net stop BindPlaneAgent && net start BindPlaneAgent
Configura el registro de eventos de StoreFront
- Accede al servidor de StoreFront con privilegios administrativos.
- 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
Verifica que el registro de eventos de Windows esté habilitado:
- Abre el Visor de eventos en el servidor de StoreFront.
- Navega a Registros de aplicaciones y servicios > Citrix Delivery Services.
- Verifica que se registren eventos para el servicio de autenticación, las tiendas y el receptor de sitios web.
Opcional: Configura la limitación del registro de eventos
- Navega 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
en cada directorio con un editor de texto. Ubica el elemento de registro y configúralo según sea necesario:
<logger duplicateInterval="00:01:00" duplicateLimit="10">
duplicateInterval: Establece el período en horas, minutos y segundos durante el cual se supervisan las entradas de registro duplicadas.
duplicateLimit: Establece la cantidad de entradas duplicadas que se deben registrar dentro del intervalo de tiempo especificado para activar la regulación de registros.
Guarda los archivos de configuración.
Verifica la recopilación de registros
- Abre el Visor de eventos de Windows en el servidor de StoreFront.
- Navega a Registros de Windows > Aplicación o Registros de aplicaciones y servicios > Citrix Delivery Services.
- Verifica que se generen eventos de StoreFront.
- Revisa los registros del agente de Bindplane para confirmar que se reenvían 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, el valor se establece en "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 se establece en "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 establece como "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 el ID de usuario para un objeto de usuario intermedio. |
Machine.AssociatedUserUPNs | _target.group.email_addresses | El valor se toma del campo Machine.AssociatedUserUPNs. Cada dirección de correo electrónico se extrae y se agrega al campo email_addresses del grupo objetivo. |
Machine.ControllerDnsName | _intermediary.hostname | El valor se toma del campo Machine.ControllerDnsName. El espacio de nombres se establece en "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 se establece en "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 activo. La parte del dominio se usa como el dominio administrativo de destino, y la parte del activo se usa para construir el ID del activo de destino en el formato "máquina: |
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 establece en "ACTIVE". Si el valor es 1, se establece como "DELETED". Si el valor es 2 o 3, se establece en "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 el nombre de la empresa del usuario principal y el 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 agrega 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 se establece en "USER_LOGIN". | |
metadata.vendor_name | El valor se establece en "Citrix". | |
metadata.product_name | El valor se establece en "Monitor Service OData". | |
extensions.auth.type | El valor se establece en "MACHINE". | |
_intermediary.namespace | El valor se establece en "Servidor de StoreFront", "Controlador" o "Hipervisor", según el objeto intermedio. | |
_target.asset.type | El valor se establece en "WORKSTATION". |
¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.