Recolha registos do Citrix StoreFront
Este documento explica como carregar registos do Citrix StoreFront para o Google Security Operations através do Bindplane. O analisador extrai campos de registos formatados do registo de eventos do Windows do Citrix StoreFront. Usa a recolha do registo de eventos do Windows para analisar a mensagem de registo e, em seguida, mapeia estes valores para o modelo de dados unificado (UDM). Também define valores de metadados predefinidos para a origem e o tipo do evento. O analisador extrai dados dos registos JSON do Citrix StoreFront dividindo o campo de mensagem em entidades individuais, como Session
, User
, AppInstance
, App
, Connection
e Machine
, através de uma série de padrões grok
. Em seguida, mapeia os campos extraídos para uma estrutura de modelo de dados unificado (UDM), enriquecendo-a com informações de rede, principal, intermediário e destino com base na lógica condicional e nas transformações de dados.
Antes de começar
Certifique-se de que tem os seguintes pré-requisitos:
- Uma instância do Google SecOps.
- Um anfitrião com Windows 2016 ou posterior com o
systemd
onde o Bindplane vai ser instalado - Se estiver a ser executado através de um proxy, certifique-se de que as portas da firewall estão abertas de acordo com os requisitos do agente Bindplane
- Acesso privilegiado ao servidor Citrix StoreFront e à consola de gestão
- Acesso administrativo ao servidor Windows que aloja o StoreFront
Obtenha o ficheiro de autenticação de carregamento do Google SecOps
- Inicie sessão na consola Google SecOps.
- Aceda a Definições do SIEM > Agentes de recolha.
- Transfira o ficheiro de autenticação de carregamento. Guarde o ficheiro de forma segura no sistema onde o Bindplane vai ser instalado.
Obtenha o ID de cliente do Google SecOps
- Inicie sessão na consola Google SecOps.
- Aceda a Definições do SIEM > Perfil.
- Copie e guarde o ID do cliente da secção Detalhes da organização.
Instale o agente do Bindplane
Instale o agente do Bindplane no seu sistema operativo Windows ou Linux de acordo com as seguintes instruções.
Instalação do Windows
- Abra a Linha de comandos ou o PowerShell como administrador.
Execute o seguinte comando:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
Recursos de instalação adicionais
- Para ver opções de instalação adicionais, consulte este guia de instalação.
Configure o agente do Bindplane para carregar registos de eventos do Windows e enviá-los para o Google SecOps
Aceda ao ficheiro de configuração:
- Localize o ficheiro
config.yaml
. Normalmente, encontra-se no diretório/etc/bindplane-agent/
no Linux ou no diretório de instalação no Windows. - Abra o ficheiro com um editor de texto (por exemplo,
nano
,vi
ou Bloco de notas).
- Localize o ficheiro
Edite o ficheiro
config.yaml
da seguinte forma: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
- Substitua
CUSTOMER_ID_PLACEHOLDER
pelo ID de cliente real. - Atualize
/path/to/ingestion-authentication-file.json
para o caminho onde o ficheiro de autenticação foi guardado na secção Obtenha o ficheiro de autenticação de carregamento do Google SecOps.
- Substitua
Reinicie o agente do Bindplane para aplicar as alterações
Para reiniciar o agente BindPlane no Windows, pode usar a consola Serviços ou introduzir o seguinte comando:
net stop BindPlaneAgent && net start BindPlaneAgent
Configure o registo de eventos do StoreFront
- Inicie sessão no servidor StoreFront com privilégios administrativos.
- Abra o PowerShell como administrador.
Carregue o módulo do PowerShell do StoreFront:
Add-PSSnapin Citrix.DeliveryServices.Framework.Commands
Ative o registo verboso para a resolução de problemas (opcional):
Set-STFDiagnostics -All -TraceLevel "Info" -confirm:$False
Verifique se o registo de eventos do Windows está ativado:
- Abra o Event Viewer no servidor StoreFront.
- Navegue para Registos de aplicações e serviços > Citrix Delivery Services.
- Verifique se os eventos estão a ser registados para o serviço de autenticação, as lojas e o Receiver para Websites.
Opcional: configure a limitação do registo de eventos
- Navegue para os diretórios de configuração do StoreFront:
- Serviço de autenticação:
C:/inetpub/wwwroot/Citrix/Authentication
- Loja:
C:/inetpub/wwwroot/Citrixstorename
- Recetor do Website:
C:/inetpub/wwwroot/Citrixstorename/Web
- Serviço de autenticação:
- Abra o ficheiro
web.config
em cada diretório com um editor de texto. Localize o elemento do registador e configure-o conforme necessário:
<logger duplicateInterval="00:01:00" duplicateLimit="10">
duplicateInterval: defina o período em horas, minutos e segundos durante o qual as entradas de registo duplicadas são monitorizadas.
duplicateLimit: defina o número de entradas duplicadas que têm de ser registadas no intervalo de tempo especificado para acionar a limitação de registos.
Guarde os ficheiros de configuração.
Valide a recolha de registos
- Abra o Windows Event Viewer no servidor StoreFront.
- Navegue para Registos do Windows > Aplicação ou Registos de aplicações e serviços > Citrix Delivery Services.
- Verifique se os eventos da StoreFront estão a ser gerados.
- Verifique os registos do agente Bindplane para confirmar se os registos estão a ser encaminhados para o Google SecOps.
Tabela de mapeamento do UDM
Campo de registo | Mapeamento do UDM | Lógica |
---|---|---|
App.PublishedName | _principal.application | O valor é retirado do campo App.PublishedName. |
Connection.ClientAddress | _principal.asset.ip | O valor é retirado do campo Connection.ClientAddress. |
Connection.ClientName | _principal.asset.hostname | O valor é retirado do campo Connection.ClientName. |
Connection.ClientPlatform | _principal.asset.platform_software.platform | O valor é retirado do campo Connection.ClientPlatform e convertido em maiúsculas. Se o valor for "WINDOWS", "MAC" ou "LINUX", é usado diretamente. Caso contrário, o valor é definido como "UNKNOWN_PLATFORM". |
Connection.ConnectedViaHostName | src.hostname | O valor é retirado do campo Connection.ConnectedViaHostName. |
Connection.LaunchedViaHostName | _intermediary.hostname | O valor é retirado do campo Connection.LaunchedViaHostName. O espaço de nomes está definido como "Servidor da loja online". |
Connection.LaunchedViaIPAddress | _intermediary.ip | O valor é retirado do campo Connection.LaunchedViaIPAddress. |
Connection.Protocol | network.application_protocol | O valor é retirado do campo Connection.Protocol. Se o valor for "HDX", é definido como "UNKNOWN_APPLICATION_PROTOCOL". |
Machine.AgentVersion | metadata.product_version | O valor é retirado do campo Machine.AgentVersion. |
Machine.AssociatedUserNames | _intermediary.user.userid | O valor é retirado do campo Machine.AssociatedUserNames. Cada nome é extraído e usado como o ID do utilizador para um objeto de utilizador intermediário. |
Machine.AssociatedUserUPNs | _target.group.email_addresses | O valor é retirado do campo Machine.AssociatedUserUPNs. Cada endereço de email é extraído e adicionado ao campo email_addresses do grupo de destino. |
Machine.ControllerDnsName | _intermediary.hostname | O valor é retirado do campo Machine.ControllerDnsName. O espaço de nomes está definido como "Controller". |
Machine.CreatedDate | _target.asset.attribute.creation_time | O valor é retirado do campo Machine.CreatedDate e convertido numa data/hora. |
Machine.DesktopGroupId | _target.group.product_object_id | O valor é retirado do campo Machine.DesktopGroupId. |
Machine.DnsName | _target.asset.network_domain | O valor é retirado do campo Machine.DnsName. |
Machine.HostedMachineName | _target.asset.hostname | O valor é retirado do campo Machine.HostedMachineName. |
Machine.HostingServerName | _intermediary.hostname | O valor é retirado do campo Machine.HostingServerName. O espaço de nomes está definido como "Hypervisor". |
Machine.IPAddress | _target.asset.ip | O valor é retirado do campo Machine.IPAddress. |
Machine.LastDeregisteredDate | _target.asset.last_discover_time | O valor é retirado do campo Machine.LastDeregisteredDate e convertido numa data/hora. |
Machine.ModifiedDate | _target.asset.system_last_update_time | O valor é retirado do campo Machine.ModifiedDate e convertido numa data/hora. |
Machine.Name | _target.asset.asset_id, _target.administrative_domain | O valor é retirado do campo Machine.Name e dividido em partes de domínio e recursos. A parte do domínio é usada como o domínio administrativo de destino e a parte do recurso é usada para construir o ID do recurso de destino no formato "machine: |
Machine.OSType | _target.asset.platform_software.platform_version | O valor é retirado do campo Machine.OSType. |
Machine.PoweredOnDate | _target.asset.last_boot_time | O valor é retirado do campo Machine.PoweredOnDate e convertido numa data/hora. |
Machine.RegistrationStateChangeDate | _target.asset.first_discover_time | O valor é retirado do campo Machine.RegistrationStateChangeDate e convertido numa data/hora. |
Session.EndDate | _vulns.last_found | O valor é retirado do campo Session.EndDate e convertido numa indicação de tempo. |
Session.LifecycleState | extensions.auth.auth_details | O valor é retirado do campo Session.LifecycleState. Se o valor for 0, é definido como "ACTIVE". Se o valor for 1, é definido como "DELETED". Se o valor for 2 ou 3, é definido como "UNKNOWN_AUTHENTICATION_STATUS". |
Session.LogOnDuration | network.session_duration.seconds | O valor é retirado do campo Session.LogOnDuration e convertido num número inteiro. |
Session.SessionKey | network.session_id | O valor é retirado do campo Session.SessionKey. |
Session.StartDate | _vulns.first_found | O valor é retirado do campo Session.StartDate e convertido numa indicação de tempo. |
User.Domain | _principal.user.company_name, _principal.administrative_domain | O valor é retirado do campo User.Domain e usado como o nome da empresa do utilizador principal e o domínio administrativo principal. |
User.FullName | _principal.user.user_display_name | O valor é retirado do campo User.FullName. |
User.Sid | _principal.user.windows_sid | O valor é retirado do campo User.Sid. |
User.Upn | _principal.user.email_addresses | O valor é retirado do campo User.Upn e adicionado ao campo email_addresses do utilizador principal. |
User.UserName | _principal.user.userid | O valor é retirado do campo User.UserName. |
metadata.event_type | O valor está definido como "USER_LOGIN". | |
metadata.vendor_name | O valor é definido como "Citrix". | |
metadata.product_name | O valor é definido como "Monitor Service OData". | |
extensions.auth.type | O valor é definido como "MACHINE". | |
_intermediary.namespace | O valor é definido como "StoreFront server", "Controller" ou "Hypervisor", consoante o objeto intermediário. | |
_target.asset.type | O valor é definido como "WORKSTATION". |
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais da Google SecOps.