Coletar registros do Sysdig

Compatível com:

Esse analisador extrai dados de eventos de segurança dos registros JSON do Sysdig, transformando e mapeando os campos de registro brutos para o formato UDM do Google Security Operations. Ele processa vários campos, incluindo metadados, informações principais/alvo, detalhes de resultados de segurança e contexto relacionado ao Kubernetes, enriquecendo os dados para análise no Google SecOps. O analisador também realiza conversões de tipo de dados, tratamento de erros e lógica condicional com base nos valores dos campos para garantir uma representação precisa e abrangente do UDM.

Antes de começar

  • Verifique se você tem uma instância do Google SecOps.
  • Verifique se você tem acesso privilegiado ao Sysdig Secure.

Criar uma chave de API para o feed de webhook

  1. Acesse o console do Google Cloud > Credenciais.

    Ir para Credenciais

  2. Clique em Criar credenciais e, em seguida, selecione Chave de API.

  3. Restrinja o acesso da chave de API à API Google Security Operations.

Opção 1

Configurar um feed de webhook no Google SecOps para processar registros do Sysdig

  1. Acesse Configurações do SIEM > Feeds.
  2. Clique em Adicionar novo.
  3. No campo Nome do feed, insira um nome para o feed (por exemplo, Sysdig Logs).
  4. Selecione Webhook como o Tipo de origem.
  5. Selecione Sysdig como o Tipo de registro.
  6. Clique em Próxima.
  7. Opcional: especifique valores para os seguintes parâmetros de entrada:
    • Delimitador de divisão: o delimitador usado para separar linhas de registro, como \n.
    • Namespace de recursos: o namespace de recursos.
    • Rótulos de ingestão: o rótulo aplicado aos eventos desse feed.
  8. Clique em Próxima.
  9. Revise a configuração do feed na tela Finalizar e clique em Enviar.
  10. Clique em Gerar chave secreta para gerar uma chave secreta para autenticar esse feed.
  11. Copie e armazene a chave secreta. Não é possível acessar essa chave secreta novamente. Se necessário, você pode gerar uma nova chave secreta, mas essa ação torna a chave secreta anterior obsoleta.
  12. Na guia Detalhes, copie o URL do endpoint do feed no campo Informações do endpoint. É necessário especificar esse URL de endpoint no aplicativo cliente.
  13. Clique em Concluído.

Especificar o URL do endpoint

  1. No aplicativo cliente, especifique o URL do endpoint HTTPS fornecido no feed de webhook.
  2. Ative a autenticação especificando a chave de API e a chave secreta como parte do cabeçalho personalizado no seguinte formato:

    X-goog-api-key = API_KEY
    X-Webhook-Access-Key = SECRET
    

    Recomendação: especifique a chave de API como um cabeçalho em vez de especificar no URL.

  3. Se o cliente do webhook não tiver suporte a cabeçalhos personalizados, especifique a chave de API e a chave secreta usando parâmetros de consulta no seguinte formato:

    ENDPOINT_URL?key=API_KEY&secret=SECRET
    

    Substitua:

    • ENDPOINT_URL: o URL do endpoint do feed.
    • API_KEY: a chave de API para autenticação no Google SecOps.
    • SECRET: a chave secreta que você gerou para autenticar o feed.

Configurar o webhook no Sysdig

  1. Faça login no Sysdig Secure com privilégios de administrador.
  2. Acesse Perfil > Configurações > Encaminhamento de eventos.
  3. Clique em +Adicionar integração e selecione Webhook no menu suspenso.
  4. Especifique valores para os seguintes parâmetros de entrada:

    • Nome da integração: forneça um nome descritivo para o webhook (por exemplo, Webhook do Google SecOps).
    • Endpoint: insira o webhook <ENDPOINT_URL>, seguido por <API_KEY e <SECRET>.
    • Dados a serem enviados: selecione no menu suspenso os tipos de dados do Sysdig que devem ser encaminhados.

    • Teste a integração e ative a opção Ativado.

    • Clique em Salvar.

Opção 2

Encaminhar dados diretamente para o Google SecOps

  1. Faça login no Sysdig Secure usando suas credenciais de administrador.
  2. Acesse Configurações > Encaminhamento de eventos.
  3. Clique em +Adicionar integração e selecione Google Chronicle no menu suspenso.
  4. Especifique valores para os seguintes parâmetros de entrada:
    • Nome da integração: forneça um nome descritivo para a integração (por exemplo, Integração do Google SecOps).
    • ID de cliente: o ID de cliente do Google associado à sua conta do GCP. No Google SecOps, você encontra essa opção em Configurações > Perfil.
    • Namespace: opcional. Use como uma tag para identificar o domínio de dados adequado para indexação e enriquecimento.
    • Credenciais JSON: faça o upload das suas credenciais JSON do Google SecOps.
    • Região: selecione sua região, como EUA, Europa ou Ásia.
    • Dados a serem enviados: selecione os tipos de dados do Sysdig que devem ser encaminhados no menu suspenso.
    • Teste a integração e ative a opção Ativado.
    • Clique em Salvar.

Tabela de mapeamento do UDM

Campo de registro Mapeamento do UDM Lógica
agentId read_only_udm.metadata.product_deployment_id O valor de agentId do registro bruto é mapeado diretamente para esse campo do UDM.
category read_only_udm.security_result.category_details O valor de category do registro bruto é mapeado diretamente para esse campo do UDM.
content.fields.container.id read_only_udm.target.asset.asset_id O valor de content.fields.container.id do registro bruto é precedido por "container_id:" e mapeado para esse campo do UDM. Usado se containerId estiver vazio.
content.fields.container.image.repository read_only_udm.target.file.full_path O valor de content.fields.container.image.repository do registro bruto é mapeado diretamente para esse campo do UDM.
content.fields.container.image.tag read_only_udm.metadata.ingestion_labels.value, em que a chave é tag O valor de content.fields.container.image.tag do registro bruto é mapeado diretamente para esse campo do UDM.
content.fields.evt.res read_only_udm.metadata.ingestion_labels.value, em que a chave é evt_res O valor de content.fields.evt.res do registro bruto é mapeado diretamente para esse campo do UDM.
content.fields.evt.type read_only_udm.metadata.event_type O valor de content.fields.evt.type do registro bruto é mapeado diretamente para esse campo do UDM.
content.fields.falco.rule read_only_udm.security_result.rule_name O valor de content.fields.falco.rule do registro bruto é mapeado diretamente para esse campo do UDM. Usado se content.ruleName estiver vazio.
content.fields.group.gid read_only_udm.target.group.product_object_id O valor de content.fields.group.gid do registro bruto é mapeado diretamente para esse campo do UDM.
content.fields.group.name read_only_udm.target.group.group_display_name O valor de content.fields.group.name do registro bruto é mapeado diretamente para esse campo do UDM.
content.fields.proc.cmdline read_only_udm.target.process.command_line O valor de content.fields.proc.cmdline do registro bruto é mapeado diretamente para esse campo do UDM.
content.fields.proc.pcmdline read_only_udm.target.process.parent_process.command_line O valor de content.fields.proc.pcmdline do registro bruto é mapeado diretamente para esse campo do UDM.
content.fields.proc.pid read_only_udm.target.process.pid O valor de content.fields.proc.pid do registro bruto é mapeado diretamente para esse campo do UDM.
content.fields.proc.ppid read_only_udm.target.process.parent_process.pid O valor de content.fields.proc.ppid do registro bruto é mapeado diretamente para esse campo do UDM.
content.fields.proc.sid read_only_udm.metadata.ingestion_labels.value, em que a chave é sid O valor de content.fields.proc.sid do registro bruto é mapeado diretamente para esse campo do UDM.
content.fields.user.loginname read_only_udm.principal.user.user_display_name O valor de content.fields.user.loginname do registro bruto é mapeado diretamente para esse campo do UDM.
content.fields.user.uid read_only_udm.principal.user.userid O valor de content.fields.user.uid do registro bruto é mapeado diretamente para esse campo do UDM.
content.output read_only_udm.additional.fields.value.string_value, em que a chave é content_output O valor de content.output do registro bruto é mapeado diretamente para esse campo do UDM.
content.policyId read_only_udm.security_result.rule_id O valor de content.policyId do registro bruto é mapeado diretamente para esse campo do UDM.
content.policyOrigin read_only_udm.additional.fields.value.string_value, em que a chave é content_policyOrigin O valor de content.policyOrigin do registro bruto é mapeado diretamente para esse campo do UDM.
content.policyVersion read_only_udm.additional.fields.value.string_value, em que a chave é content_policyVersion O valor de content.policyVersion do registro bruto é mapeado diretamente para esse campo do UDM.
content.ruleName read_only_udm.security_result.rule_name O valor de content.ruleName do registro bruto é mapeado diretamente para esse campo do UDM.
content.ruleTags read_only_udm.security_result.rule_labels Os valores na matriz content.ruleTags do registro bruto são mapeados para esse campo do UDM, com chaves geradas dinamicamente como "ruletag_index".
content.ruleType read_only_udm.additional.fields.value.string_value, em que a chave é content_ruleType O valor de content.ruleType do registro bruto é mapeado diretamente para esse campo do UDM.
containerId read_only_udm.target.asset.asset_id O valor de containerId do registro bruto é precedido por "container_id:" e mapeado para esse campo do UDM.
description read_only_udm.metadata.description O valor de description do registro bruto é mapeado diretamente para esse campo do UDM.
id read_only_udm.metadata.product_log_id O valor de id do registro bruto é mapeado diretamente para esse campo do UDM.
labels.container.label.io.kubernetes.container.name read_only_udm.additional.fields.value.string_value, em que a chave é container_name O valor de labels.container.label.io.kubernetes.container.name do registro bruto é mapeado diretamente para esse campo do UDM.
labels.container.label.io.kubernetes.pod.name read_only_udm.additional.fields.value.string_value, em que a chave é pod_name O valor de labels.container.label.io.kubernetes.pod.name do registro bruto é mapeado diretamente para esse campo do UDM. Usado se labels.kubernetes.pod.name estiver vazio.
labels.container.label.io.kubernetes.pod.namespace read_only_udm.principal.namespace O valor de labels.container.label.io.kubernetes.pod.namespace do registro bruto é mapeado diretamente para esse campo do UDM. Usado se labels.kubernetes.namespace.name estiver vazio.
labels.aws.instanceId read_only_udm.target.resource.product_object_id O valor de labels.aws.instanceId do registro bruto é mapeado diretamente para esse campo do UDM.
labels.aws.region read_only_udm.target.resource.attribute.cloud.availability_zone O valor de labels.aws.region do registro bruto é mapeado diretamente para esse campo do UDM.
labels.host.hostName read_only_udm.principal.ip OU read_only_udm.principal.hostname Se o valor contiver "ip", ele será analisado como um endereço IP e mapeado para principal.ip. Caso contrário, ele será mapeado para principal.hostname.
labels.host.mac read_only_udm.principal.mac O valor de labels.host.mac do registro bruto é mapeado diretamente para esse campo do UDM. Usado se machineId estiver vazio.
labels.kubernetes.cluster.name read_only_udm.additional.fields.value.string_value, em que a chave é kubernetes_cluster_name O valor de labels.kubernetes.cluster.name do registro bruto é mapeado diretamente para esse campo do UDM.
labels.kubernetes.deployment.name read_only_udm.additional.fields.value.string_value, em que a chave é kubernetes_deployment_name O valor de labels.kubernetes.deployment.name do registro bruto é mapeado diretamente para esse campo do UDM.
labels.kubernetes.namespace.name read_only_udm.principal.namespace O valor de labels.kubernetes.namespace.name do registro bruto é mapeado diretamente para esse campo do UDM.
labels.kubernetes.node.name read_only_udm.additional.fields.value.string_value, em que a chave é kubernetes_node_name O valor de labels.kubernetes.node.name do registro bruto é mapeado diretamente para esse campo do UDM.
labels.kubernetes.pod.name read_only_udm.additional.fields.value.string_value, em que a chave é pod_name O valor de labels.kubernetes.pod.name do registro bruto é mapeado diretamente para esse campo do UDM.
labels.kubernetes.service.name read_only_udm.additional.fields.value.string_value, em que a chave é kubernetes_service_name O valor de labels.kubernetes.service.name do registro bruto é mapeado diretamente para esse campo do UDM.
machineId read_only_udm.principal.mac O valor de machineId do registro bruto é mapeado diretamente para esse campo do UDM.
name read_only_udm.security_result.summary O valor de name do registro bruto é mapeado diretamente para esse campo do UDM.
severity read_only_udm.security_result.severity O valor de severity do registro bruto é mapeado para um valor de string com base nestes intervalos: <4 = ALTO, >3 e <6 = MÉDIO, 6 = BAIXO, 7 = INFORMATIVO.
source read_only_udm.security_result.description O valor de source do registro bruto é mapeado diretamente para esse campo do UDM.
timestampRFC3339Nano read_only_udm.metadata.event_timestamp O valor de timestampRFC3339Nano do registro bruto é analisado como um carimbo de data/hora e mapeado para esse campo do UDM.
type read_only_udm.metadata.product_event_type O valor de type do registro bruto é mapeado diretamente para esse campo do UDM.
(Parser Logic) read_only_udm.metadata.product_name Fixado em "SYSDIG".
(Parser Logic) read_only_udm.metadata.vendor_name Fixado em "SYSDIG".
(Parser Logic) read_only_udm.metadata.event_type É definido como "PROCESS_UNCATEGORIZED" por padrão ou "GENERIC_EVENT" se labels.host.hostName estiver vazio.
(Parser Logic) read_only_udm.metadata.log_type Fixado em "SYSDIG".
(Parser Logic) read_only_udm.target.resource.resource_type Defina como "CLOUD_PROJECT" se labels.aws.instanceId existir.

Alterações

2024-01-05

  • Quando "severity" é 0, 1, 2, 3, o mapeamento de "security_result.severity" mudou de "LOW" para "HIGH".
  • Quando "severity" é 6, o mapeamento de "security_result.severity" muda de "HIGH" para "LOW".
  • Quando "severity" é 7, o mapeamento de "security_result.severity" muda de "HIGH" para "INFORMATIONAL".
  • A opção "drop" foi adicionada para registros que não estão no formato JSON.
  • "On_error" foi adicionado ao mapeamento de data "timestampRFC3339Nano".

2022-10-07

  • Parser recém-criado.