Recolha registos do centro de autenticação VIP da Symantec

Compatível com:

Este documento explica como carregar registos do Symantec VIP Authentication Hub para o Google Security Operations através do Bindplane. O código do analisador primeiro limpa e pré-processa a mensagem de registo de entrada, convertendo campos específicos e reestruturando dados de pares de chave/valor. Em seguida, extrai informações relevantes de vários campos através de padrões grok e lógica condicional, mapeando-os para os atributos correspondentes no modelo de dados unificado (UDM) para uma representação de eventos de segurança padronizada.

Antes de começar

Certifique-se de que tem os seguintes pré-requisitos:

  • Instância do Google SecOps
  • Windows 2016 ou posterior, ou anfitrião Linux com systemd
  • Se estiver a ser executado através de um proxy, as portas da firewall estão abertas
  • Acesso privilegiado ao centro de autenticação VIP da Symantec

Obtenha o ficheiro de autenticação de carregamento do Google SecOps

  1. Inicie sessão na consola Google SecOps.
  2. Aceda a Definições do SIEM > Agentes de recolha.
  3. 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

  1. Inicie sessão na consola Google SecOps.
  2. Aceda a Definições do SIEM > Perfil.
  3. Copie e guarde o ID do cliente da secção Detalhes da organização.

Instale o agente do Bindplane

Instalação do Windows

  1. Abra a Linha de comandos ou o PowerShell como administrador.
  2. Execute o seguinte comando:

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    

Instalação do Linux

  1. Abra um terminal com privilégios de raiz ou sudo.
  2. Execute o seguinte comando:

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
    

Recursos de instalação adicionais

Para ver opções de instalação adicionais, consulte o guia de instalação.

Configure o agente Bindplane para carregar o Syslog e enviá-lo para o Google SecOps

  1. 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).
  2. Edite o ficheiro config.yaml da seguinte forma:

    receivers:
        udplog:
            # Replace the port and IP address as required
            listen_address: "0.0.0.0:514"
    
    exporters:
        chronicle/chronicle_w_labels:
            compression: gzip
            # Adjust the path to the credentials file you downloaded in Step 1
            creds: '/path/to/ingestion-authentication-file.json'
            # Replace with your actual customer ID from Step 2
            customer_id: <customer_id>
            endpoint: malachiteingestion-pa.googleapis.com
            # Add optional ingestion labels for better organization
            ingestion_labels:
                log_type: 'SYMANTEC_VIP_AUTHHUB'
                raw_log_field: body
    
    service:
        pipelines:
            logs/source0__chronicle_w_labels-0:
                receivers:
                    - udplog
                exporters:
                    - chronicle/chronicle_w_labels
    
  3. Substitua a porta e o endereço IP conforme necessário na sua infraestrutura.

  4. Substitua <customer_id> pelo ID de cliente real.

  5. 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.

Reinicie o agente do Bindplane para aplicar as alterações

  • Para reiniciar o agente do Bindplane no Linux, execute o seguinte comando:

    sudo systemctl restart bindplane-agent
    
  • Para reiniciar o agente do Bindplane no Windows, pode usar a consola Services ou introduzir o seguinte comando:

    net stop BindPlaneAgent && net start BindPlaneAgent
    

Configure o Syslog no centro de autenticação VIP da Symantec

  1. Inicie sessão na IU Web do Symantec VIP Gateway.
  2. Aceda a Registos > Configuração do Syslog.
  3. Se estiver a configurar o Syslog pela primeira vez, é-lhe pedido que configure as definições do Syslog. Selecione Sim.
  4. Se já configurou o Syslog, clique em Editar na parte inferior da página.
  5. Indique os seguintes detalhes de configuração:
    • Syslog Facility: selecione LOG_LOCAL0.
    • Anfitrião Syslog: introduza o endereço IP do agente Bindplane.
    • Porta Syslog: introduza o número da porta do agente Bindplane (por exemplo, 514 para UDP).
  6. Clique em Guardar.
  7. Aceda a Fornecedores de identidade > Configuração do portal de autosserviço.
  8. Edite os seguintes detalhes de configuração:
    • Nível de registo: selecione Informações.
    • Ativar Syslog: selecione Sim.
  9. Clique em Enviar.
  10. Aceda a Fornecedores de identidade > Configuração de autenticação do gestor de VIP.
  11. Edite os seguintes detalhes de configuração:
    • Nível de registo: selecione Informações.
    • Ativar Syslog: selecione Sim.
  12. Clique em Enviar.
  13. Aceda a Armazenamento de utilizadores > Sincronização do diretório LDAP.
  14. Edite os seguintes detalhes de configuração:
    • Nível do registo: selecione Informações.
    • Ativar Syslog: selecione Sim.
  15. Clique em Enviar.

Tabela de mapeamento do UDM

Campo de registo Mapeamento do UDM Lógica
/auth/v1/authenticate security_result.detection_fields[].value O valor é retirado do campo /auth/v1/authenticate no registo não processado e atribuído a um objeto security_result.detection_fields com a chave api.
__isAuditIdLcmIdStore additional.fields[].value.string_value O valor é retirado do campo __isAuditIdLcmIdStore no registo não processado e atribuído a um objeto additional.fields com a chave __isAuditIdLcmIdStore.
accessTokenScopes security_result.detection_fields[].value O valor é retirado do campo accessTokenScopes no registo não processado e atribuído a um objeto security_result.detection_fields com a chave accessTokenScopes.
accessTokenTid security_result.detection_fields[].value O valor é retirado do campo accessTokenTid no registo não processado e atribuído a um objeto security_result.detection_fields com a chave accessTokenTid.
api security_result.detection_fields[].value O valor é retirado do campo api no registo não processado e atribuído a um objeto security_result.detection_fields com a chave api.
appId additional.fields[].value.string_value O valor é retirado do campo appId no registo não processado e atribuído a um objeto additional.fields com a chave appId.
appName principal.application O valor é retirado do campo appName no registo não processado.
azpName additional.fields[].value.string_value O valor é retirado do campo azpName no registo não processado e atribuído a um objeto additional.fields com a chave azpName.
bytes_sent network.sent_bytes O valor é retirado do campo bytes_sent no registo não processado.
client principal.asset.ip, principal.ip O endereço IP é extraído do campo client no registo não processado através de um padrão grok e adicionado aos campos principal.ip e principal.asset.ip.
clientId additional.fields[].value.string_value, principal.user.userid O valor é retirado do campo clientId no registo não processado e atribuído a um objeto additional.fields com a chave clientId. Se o campo clientId não estiver vazio, também é usado para preencher o campo principal.user.userid.
clientIp principal.asset.ip, principal.ip O valor é retirado do campo clientIp no registo não processado e adicionado aos campos principal.ip e principal.asset.ip.
clientTid additional.fields[].value.string_value O valor é retirado do campo clientTid no registo não processado e atribuído a um objeto additional.fields com a chave clientTid.
clientTxnId additional.fields[].value.string_value O valor é retirado do campo clientTxnId no registo não processado e atribuído a um objeto additional.fields com a chave clientTxnId.
contentType additional.fields[].value.string_value O valor é retirado do campo contentType no registo não processado e atribuído a um objeto additional.fields com a chave contentType.
countryISO principal.location.country_or_region O valor é retirado do campo countryISO no registo não processado.
eventId metadata.product_event_type O valor é retirado do campo eventId no registo não processado.
flowStateId additional.fields[].value.string_value O valor é retirado do campo flowStateId no registo não processado e atribuído a um objeto additional.fields com a chave flowStateId.
geo.city_name principal.location.city O valor é retirado do campo geo.city_name no registo não processado.
geo.country_name principal.location.country_or_region O valor é retirado do campo geo.country_name no registo não processado.
geo.location.lat principal.location.region_coordinates.latitude O valor é retirado do campo geo.location.lat no registo não processado, convertido num número de vírgula flutuante e mudado para principal.location.region_coordinates.latitude.
geo.location.lon principal.location.region_coordinates.longitude O valor é retirado do campo geo.location.lon no registo não processado, convertido num número de vírgula flutuante e mudado para principal.location.region_coordinates.longitude.
guid metadata.product_log_id O valor é retirado do campo guid no registo não processado.
host principal.asset.hostname, principal.hostname O valor é retirado do campo host no registo não processado, sem as aspas, e adicionado aos campos principal.hostname e principal.asset.hostname.
httpMethod network.http.method O valor é retirado do campo httpMethod no registo não processado.
httpReferrer network.http.referral_url O valor é retirado do campo httpReferrer no registo não processado.
identitySourceId additional.fields[].value.string_value O valor é retirado do campo identitySourceId no registo não processado e atribuído a um objeto additional.fields com a chave identitySourceId.
internal-user-sync-ext-resourceGuid target.user.userid O valor é retirado do campo internal-user-sync-ext-resourceGuid no registo não processado.
internal-user-sync-ext-resourceName target.user.email_addresses O valor é retirado do campo internal-user-sync-ext-resourceName no registo não processado e adicionado ao campo target.user.email_addresses.
issuerUrl target.url O valor é retirado do campo issuerUrl no registo não processado.
kubernetes.annotations.cni.projectcalico.org_containerID target.resource.product_object_id O valor é retirado do campo kubernetes.annotations.cni.projectcalico.org_containerID no registo não processado.
kubernetes.annotations.cni.projectcalico.org_podIP target.resource.attribute.labels[].value O valor é retirado do campo kubernetes.annotations.cni.projectcalico.org_podIP no registo não processado e atribuído a um objeto target.resource.attribute.labels com a chave podIP.
kubernetes.annotations.cni.projectcalico.org_podIPs target.resource.attribute.labels[].value O valor é retirado do campo kubernetes.annotations.cni.projectcalico.org_podIPs no registo não processado e atribuído a um objeto target.resource.attribute.labels com a chave podIPs.
kubernetes.container_hash target.resource.attribute.labels[].value O valor é retirado do campo kubernetes.container_hash no registo não processado e atribuído a um objeto target.resource.attribute.labels com a chave container_hash.
kubernetes.container_image target.resource.attribute.labels[].value O valor é retirado do campo kubernetes.container_image no registo não processado e atribuído a um objeto target.resource.attribute.labels com a chave container_image.
kubernetes.container_name target.resource.attribute.labels[].value O valor é retirado do campo kubernetes.container_name no registo não processado e atribuído a um objeto target.resource.attribute.labels com a chave container_name.
kubernetes.docker_id target.resource.attribute.labels[].value O valor é retirado do campo kubernetes.docker_id no registo não processado e atribuído a um objeto target.resource.attribute.labels com a chave docker_id.
kubernetes.host principal.asset.hostname, principal.hostname O valor é retirado do campo kubernetes.host no registo não processado e adicionado aos campos principal.hostname e principal.asset.hostname.
kubernetes.labels.app Este campo não está mapeado para o objeto IDM no UDM.
kubernetes.labels.app.kubernetes.io/component target.resource.attribute.labels[].value O valor é retirado do campo kubernetes.labels.app.kubernetes.io/component no registo não processado e atribuído a um objeto target.resource.attribute.labels com a chave io_component.
kubernetes.labels.app.kubernetes.io/instance target.resource.attribute.labels[].value O valor é retirado do campo kubernetes.labels.app.kubernetes.io/instance no registo não processado e atribuído a um objeto target.resource.attribute.labels com a chave io_instance.
kubernetes.labels.app.kubernetes.io/managed-by target.resource.attribute.labels[].value O valor é retirado do campo kubernetes.labels.app.kubernetes.io/managed-by no registo não processado e atribuído a um objeto target.resource.attribute.labels com a chave io_managed-by.
kubernetes.labels.app.kubernetes.io/name target.resource.attribute.labels[].value O valor é retirado do campo kubernetes.labels.app.kubernetes.io/name no registo não processado e atribuído a um objeto target.resource.attribute.labels com a chave io_name.
kubernetes.labels.app.kubernetes.io/part-of target.resource.attribute.labels[].value O valor é retirado do campo kubernetes.labels.app.kubernetes.io/part-of no registo não processado e atribuído a um objeto target.resource.attribute.labels com a chave io_part-of.
kubernetes.labels.app.kubernetes.io/version target.resource.attribute.labels[].value O valor é retirado do campo kubernetes.labels.app.kubernetes.io/version no registo não processado e atribuído a um objeto target.resource.attribute.labels com a chave io_version.
kubernetes.labels.helm.sh/chart target.resource.attribute.labels[].value O valor é retirado do campo kubernetes.labels.helm.sh/chart no registo não processado e atribuído a um objeto target.resource.attribute.labels com a chave helm_sh_chart.
kubernetes.labels.helmChartName target.resource.attribute.labels[].value O valor é retirado do campo kubernetes.labels.helmChartName no registo não processado e atribuído a um objeto target.resource.attribute.labels com a chave helmChartName.
kubernetes.labels.imageTag target.resource.attribute.labels[].value O valor é retirado do campo kubernetes.labels.imageTag no registo não processado e atribuído a um objeto target.resource.attribute.labels com a chave imageTag.
kubernetes.labels.pod-template-hash target.resource.attribute.labels[].value O valor é retirado do campo kubernetes.labels.pod-template-hash no registo não processado e atribuído a um objeto target.resource.attribute.labels com a chave pod-template-hash.
kubernetes.namespace_name target.resource.attribute.labels[].value O valor é retirado do campo kubernetes.namespace_name no registo não processado e atribuído a um objeto target.resource.attribute.labels com a chave namespace_name.
kubernetes.pod_id target.resource.attribute.labels[].value O valor é retirado do campo kubernetes.pod_id no registo não processado e atribuído a um objeto target.resource.attribute.labels com a chave pod_id.
kubernetes.pod_name target.resource.attribute.labels[].value O valor é retirado do campo kubernetes.pod_name no registo não processado e atribuído a um objeto target.resource.attribute.labels com a chave pod_name.
level security_result.severity Se o campo level no registo não processado corresponder a notice ou info (sem distinção entre maiúsculas e minúsculas), o campo security_result.severity é definido como INFORMATIONAL.
log security_result.description, level, kv_data Os campos level e kv_data são extraídos do campo log no registo não processado através de um padrão grok. O campo security_result.description é preenchido com o campo log completo.
logtag additional.fields[].value.string_value O valor é retirado do campo logtag no registo não processado e atribuído a um objeto additional.fields com a chave logtag.
method network.http.method O valor é retirado do campo method no registo não processado.
msg metadata.event_type, security_result.description O valor é retirado do campo msg no registo não processado e usado para preencher o campo security_result.description. O campo metadata.event_type é determinado com base no conteúdo do campo msg: * USER_CREATION se msg contiver Internal user created or updated. * USER_LOGIN se msg contiver Authorization Initiated Succesfully, Authentication Initiated Successfully ou Authentication Successful. * USER_RESOURCE_ACCESS se msg contiver Token Generated ou token verified. * NETWORK_CONNECTION se has_principal e has_target forem verdadeiros. * STATUS_UPDATE se has_principal for verdadeiro. * GENERIC_EVENT caso contrário.
path principal.file.full_path O valor é retirado do campo path no registo não processado.
principalId additional.fields[].value.string_value, principal.user.userid O valor é retirado do campo principalId no registo não processado e atribuído a um objeto additional.fields com a chave principalId. Se o campo principalId não for clientId e não estiver vazio, também é usado para preencher o campo principal.user.userid.
principalType additional.fields[].value.string_value O valor é retirado do campo principalType no registo não processado e atribuído a um objeto additional.fields com a chave principalType.
protocol network.application_protocol Se o campo protocol no registo não processado corresponder a HTTP (sem distinção entre maiúsculas e minúsculas), o campo network.application_protocol é definido como HTTP.
referrer network.http.referral_url O valor é retirado do campo referrer no registo não processado, sem as aspas, e atribuído ao campo network.http.referral_url.
relVersion metadata.product_version O valor é retirado do campo relVersion no registo não processado.
remoteAddr additional.fields[].value.string_value O valor é retirado do campo remoteAddr no registo não processado e atribuído a um objeto additional.fields com a chave remoteAddr.
requestId additional.fields[].value.string_value O valor é retirado do campo requestId no registo não processado e atribuído a um objeto additional.fields com a chave requestId.
requestTime additional.fields[].value.string_value O valor é retirado do campo requestTime no registo não processado e atribuído a um objeto additional.fields com a chave requestTime.
responseCode network.http.response_code O valor numérico é extraído do campo responseCode no registo não processado através de um padrão grok, convertido num número inteiro e atribuído ao campo network.http.response_code.
request method, path, protocol Os campos method, path e protocol são extraídos do campo request no registo não processado através de um padrão grok após a remoção de quaisquer aspas.
server target.asset.hostname, target.hostname O valor é retirado do campo server no registo não processado e adicionado aos campos target.hostname e target.asset.hostname.
service additional.fields[].value.string_value O valor é retirado do campo service no registo não processado e atribuído a um objeto additional.fields com a chave service.
status network.http.response_code O valor é retirado do campo status no registo não processado, convertido num número inteiro e atribuído ao campo network.http.response_code.
stream additional.fields[].value.string_value O valor é retirado do campo stream no registo não processado e atribuído a um objeto additional.fields com a chave stream.
sub additional.fields[].value.string_value O valor é retirado do campo sub no registo não processado e atribuído a um objeto additional.fields com a chave sub.
subType additional.fields[].value.string_value O valor é retirado do campo subType no registo não processado e atribuído a um objeto additional.fields com a chave subType.
tid additional.fields[].value.string_value O valor é retirado do campo tid no registo não processado e atribuído a um objeto additional.fields com a chave tid.
timestamp metadata.event_timestamp O valor é retirado do campo timestamp no registo não processado e analisado como uma indicação de tempo ISO8601.
tname additional.fields[].value.string_value O valor é retirado do campo tname no registo não processado e atribuído a um objeto additional.fields com a chave tname.
txnId additional.fields[].value.string_value O valor é retirado do campo txnId no registo não processado e atribuído a um objeto additional.fields com a chave txnId.
type additional.fields[].value.string_value O valor é retirado do campo type no registo não processado e atribuído a um objeto additional.fields com a chave type.
userAgent network.http.parsed_user_agent, network.http.user_agent O valor é retirado do campo userAgent no registo não processado e atribuído aos campos network.http.user_agent e network.http.parsed_user_agent. O campo network.http.parsed_user_agent é, em seguida, convertido num objeto de agente do utilizador analisado.
userDN additional.fields[].value.string_value O valor é retirado do campo userDN no registo não processado e atribuído a um objeto additional.fields com a chave userDN.
userGuid additional.fields[].value.string_value O valor é retirado do campo userGuid no registo não processado e atribuído a um objeto additional.fields com a chave userGuid.
userIdpGuid additional.fields[].value.string_value O valor é retirado do campo userIdpGuid no registo não processado e atribuído a um objeto additional.fields com a chave userIdpGuid.
userIP principal.asset.ip, principal.ip, target.asset.ip, target.ip e intermediary.ip Os endereços IP são extraídos do campo userIP no registo não processado através de um padrão grok. O primeiro endereço IP é adicionado aos campos principal.ip e principal.asset.ip. O segundo endereço IP é adicionado aos campos target.ip e target.asset.ip. O terceiro endereço IP é adicionado ao campo intermediary.ip.
userLoginId target.user.email_addresses Se o campo userLoginId no registo não processado não estiver vazio e corresponder a um padrão de endereço de email, é adicionado ao campo target.user.email_addresses.
userLoginIdAttributeMappingName target.user.user_display_name O valor é retirado do campo userLoginIdAttributeMappingName no registo não processado.
userRiskLevel additional.fields[].value.string_value O valor é retirado do campo userRiskLevel no registo não processado e atribuído a um objeto additional.fields com a chave userRiskLevel.
userRiskScore additional.fields[].value.string_value O valor é retirado do campo userRiskScore no registo não processado e atribuído a um objeto additional.fields com a chave userRiskScore.
userIp principal.asset.ip, principal.ip O valor é retirado do campo userIp no registo não processado e adicionado aos campos principal.ip e principal.asset.ip.
userUniversalId additional.fields[].value.string_value O valor é retirado do campo userUniversalId no registo não processado e atribuído a um objeto additional.fields com a chave userUniversalId.
vhost additional.fields[].value.string_value O valor é retirado do campo vhost no registo não processado e atribuído a um objeto additional.fields com a chave vhost.
N/A extensions.auth.type O valor é definido como SSO se o campo metadata.event_type for USER_LOGIN.
N/A metadata.log_type O valor é definido como SYMANTEC_VIP_AUTHHUB.

Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais da Google SecOps.