Coletar registros do Citrix StoreFront
Este documento explica como ingerir registros do Citrix StoreFront no Google Security Operations usando o Bindplane. O analisador extrai campos de registros formatados do log de eventos do Windows do Citrix StoreFront. Ele usa a coleta de logs de eventos do Windows para analisar a mensagem de log e mapear esses valores para o Modelo Unificado de Dados (UDM, na sigla em inglês). Ele também define valores de metadados padrão para a origem e o tipo do evento. O analisador extrai dados dos registros JSON do Citrix StoreFront dividindo o campo de mensagem em entidades individuais, como Session
, User
, AppInstance
, App
, Connection
e Machine
, usando uma série de padrões grok
. Em seguida, ele 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
Verifique se você tem os pré-requisitos a seguir:
- Uma instância do Google SecOps.
- Um host Windows 2016 ou mais recente com
systemd
em que o Bindplane será instalado - Se você estiver executando por trás de um proxy, verifique se as portas do firewall estão abertas de acordo com os requisitos do agente Bindplane.
- Acesso privilegiado ao servidor Citrix StoreFront e ao console de gerenciamento
- Acesso administrativo ao servidor Windows que hospeda o StoreFront
Receber o arquivo de autenticação de ingestão do Google SecOps
- Faça login no console do Google SecOps.
- Acesse Configurações do SIEM > Agentes de coleta.
- Baixe o arquivo de autenticação de ingestão. Salve o arquivo de forma segura no sistema em que o Bindplane será instalado.
Receber o ID do cliente do Google SecOps
- Faça login no console do Google SecOps.
- Acesse Configurações do SIEM > Perfil.
- Copie e salve o ID do cliente na seção Detalhes da organização.
Instalar o agente do Bindplane
Instale o agente do Bindplane no seu sistema operacional Windows ou Linux de acordo com as instruções a seguir.
Instalação do Windows
- Abra o Prompt de Comando ou o PowerShell como administrador.
Execute este comando:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
Outros recursos de instalação
- Para mais opções de instalação, consulte este guia de instalação.
Configure o agente do Bindplane para ingerir logs de eventos do Windows e enviar para o Google SecOps
Acesse o arquivo de configuração:
- Localize o arquivo
config.yaml
. Normalmente, ele fica no diretório/etc/bindplane-agent/
no Linux ou no diretório de instalação no Windows. - Abra o arquivo usando um editor de texto (por exemplo,
nano
,vi
ou Bloco de Notas).
- Localize o arquivo
Edite o arquivo
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 em que o arquivo de autenticação foi salvo na seção Receber arquivo de autenticação de ingestão do Google SecOps.
- Substitua
Reinicie o agente do Bindplane para aplicar as mudanças
Para reiniciar o agente do BindPlane no Windows, use o console Serviços ou insira o seguinte comando:
net stop BindPlaneAgent && net start BindPlaneAgent
Configurar o registro de eventos do StoreFront
- Faça login no servidor StoreFront com privilégios de administrador.
- Abra o PowerShell como administrador.
Carregue o módulo do PowerShell do StoreFront:
Add-PSSnapin Citrix.DeliveryServices.Framework.Commands
Ative o registro detalhado para solução de problemas (opcional):
Set-STFDiagnostics -All -TraceLevel "Info" -confirm:$False
Verifique se a geração de registros de eventos do Windows está ativada:
- Abra o Visualizador de eventos no servidor do StoreFront.
- Acesse Logs de aplicativos e serviços > Citrix Delivery Services.
- Verifique se os eventos estão sendo registrados para o serviço de autenticação, as lojas e os sites do Receiver para Web.
Opcional: configurar a limitação de registros de eventos
- Navegue até os diretórios de configuração do StoreFront:
- Serviço de autenticação:
C:/inetpub/wwwroot/Citrix/Authentication
- Loja:
C:/inetpub/wwwroot/Citrixstorename
- Receptor para site:
C:/inetpub/wwwroot/Citrixstorename/Web
- Serviço de autenticação:
- Abra o arquivo
web.config
em cada diretório usando um editor de texto. Localize o elemento de logger e configure conforme necessário:
<logger duplicateInterval="00:01:00" duplicateLimit="10">
duplicateInterval: define o período em horas, minutos e segundos em que as entradas de registro duplicadas são monitoradas.
duplicateLimit: define o número de entradas duplicadas que precisam ser registradas no intervalo de tempo especificado para acionar a limitação de registros.
Salve os arquivos de configuração.
Verificar a coleta de registros
- Abra o Visualizador de Eventos do Windows no servidor StoreFront.
- Acesse Logs do Windows > Aplicativo ou Logs de aplicativos e serviços > Citrix Delivery Services.
- Verifique se os eventos do StoreFront estão sendo gerados.
- Verifique os registros do agente do Bindplane para confirmar se eles estão sendo encaminhados para o Google SecOps.
Tabela de mapeamento do UDM
Campo de registro | Mapeamento do UDM | Lógica |
---|---|---|
App.PublishedName | _principal.application | O valor é extraído do campo App.PublishedName. |
Connection.ClientAddress | _principal.asset.ip | O valor é extraído do campo "Connection.ClientAddress". |
Connection.ClientName | _principal.asset.hostname | O valor é extraído do campo "Connection.ClientName". |
Connection.ClientPlatform | _principal.asset.platform_software.platform | O valor é extraído do campo "Connection.ClientPlatform" e convertido em letras maiúsculas. Se o valor for "WINDOWS", "MAC" ou "LINUX", ele será usado diretamente. Caso contrário, o valor será definido como "UNKNOWN_PLATFORM". |
Connection.ConnectedViaHostName | src.hostname | O valor é extraído do campo Connection.ConnectedViaHostName. |
Connection.LaunchedViaHostName | _intermediary.hostname | O valor é extraído do campo "Connection.LaunchedViaHostName". O namespace está definido como "Servidor StoreFront". |
Connection.LaunchedViaIPAddress | _intermediary.ip | O valor é extraído do campo "Connection.LaunchedViaIPAddress". |
Connection.Protocol | network.application_protocol | O valor é extraído do campo "Connection.Protocol". Se o valor for "HDX", ele será definido como "UNKNOWN_APPLICATION_PROTOCOL". |
Machine.AgentVersion | metadata.product_version | O valor é extraído do campo "Machine.AgentVersion". |
Machine.AssociatedUserNames | _intermediary.user.userid | O valor é extraído do campo "Machine.AssociatedUserNames". Cada nome é extraído e usado como o userid de um objeto de usuário intermediário. |
Machine.AssociatedUserUPNs | _target.group.email_addresses | O valor é extraído do campo "Machine.AssociatedUserUPNs". Cada endereço de e-mail é extraído e adicionado ao campo "email_addresses" do grupo de destino. |
Machine.ControllerDnsName | _intermediary.hostname | O valor é extraído do campo "Machine.ControllerDnsName". O namespace é definido como "Controller". |
Machine.CreatedDate | _target.asset.attribute.creation_time | O valor é extraído do campo "Machine.CreatedDate" e convertido em um carimbo de data/hora. |
Machine.DesktopGroupId | _target.group.product_object_id | O valor é extraído do campo "Machine.DesktopGroupId". |
Machine.DnsName | _target.asset.network_domain | O valor é extraído do campo "Machine.DnsName". |
Machine.HostedMachineName | _target.asset.hostname | O valor é extraído do campo "Machine.HostedMachineName". |
Machine.HostingServerName | _intermediary.hostname | O valor é extraído do campo "Machine.HostingServerName". O namespace é definido como "Hypervisor". |
Machine.IPAddress | _target.asset.ip | O valor é extraído do campo "Machine.IPAddress". |
Machine.LastDeregisteredDate | _target.asset.last_discover_time | O valor é extraído do campo "Machine.LastDeregisteredDate" e convertido em um carimbo de data/hora. |
Machine.ModifiedDate | _target.asset.system_last_update_time | O valor é extraído do campo "Machine.ModifiedDate" e convertido em um carimbo de data/hora. |
Machine.Name | _target.asset.asset_id, _target.administrative_domain | O valor é extraído do campo "Machine.Name" e dividido em partes de domínio e recurso. 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 é extraído do campo "Machine.OSType". |
Machine.PoweredOnDate | _target.asset.last_boot_time | O valor é extraído do campo "Machine.PoweredOnDate" e convertido em um carimbo de data/hora. |
Machine.RegistrationStateChangeDate | _target.asset.first_discover_time | O valor é extraído do campo "Machine.RegistrationStateChangeDate" e convertido em um carimbo de data/hora. |
Session.EndDate | _vulns.last_found | O valor é extraído do campo "Session.EndDate" e convertido em um carimbo de data/hora. |
Session.LifecycleState | extensions.auth.auth_details | O valor é extraído do campo "Session.LifecycleState". Se o valor for 0, ele será definido como "ACTIVE". Se o valor for 1, ele será definido como "DELETED". Se o valor for 2 ou 3, ele será definido como "UNKNOWN_AUTHENTICATION_STATUS". |
Session.LogOnDuration | network.session_duration.seconds | O valor é extraído do campo "Session.LogOnDuration" e convertido em um número inteiro. |
Session.SessionKey | network.session_id | O valor é extraído do campo "Session.SessionKey". |
Session.StartDate | _vulns.first_found | O valor é extraído do campo "Session.StartDate" e convertido em um carimbo de data/hora. |
User.Domain | _principal.user.company_name, _principal.administrative_domain | O valor é extraído do campo "User.Domain" e usado como o nome da empresa do usuário principal e o domínio administrativo principal. |
User.FullName | _principal.user.user_display_name | O valor é extraído do campo "User.FullName". |
User.Sid | _principal.user.windows_sid | O valor é extraído do campo "User.Sid". |
User.Upn | _principal.user.email_addresses | O valor é extraído do campo "User.Upn" e adicionado ao campo "email_addresses" do usuário principal. |
User.UserName | _principal.user.userid | O valor é extraído do campo "User.UserName". |
metadata.event_type | O valor é 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 "Servidor StoreFront", "Controlador" ou "Hypervisor", dependendo do objeto intermediário. | |
_target.asset.type | O valor é definido como "WORKSTATION". |
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.