Coletar registros do Sysdig
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
Acesse o console do Google Cloud > Credenciais.
Clique em Criar credenciais e, em seguida, selecione Chave de API.
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
- Acesse Configurações do SIEM > Feeds.
- Clique em Adicionar novo.
- No campo Nome do feed, insira um nome para o feed (por exemplo, Sysdig Logs).
- Selecione Webhook como o Tipo de origem.
- Selecione Sysdig como o Tipo de registro.
- Clique em Próxima.
- 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.
- Delimitador de divisão: o delimitador usado para separar linhas de registro, como
- Clique em Próxima.
- Revise a configuração do feed na tela Finalizar e clique em Enviar.
- Clique em Gerar chave secreta para gerar uma chave secreta para autenticar esse feed.
- 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.
- 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.
- Clique em Concluído.
Especificar o URL do endpoint
- No aplicativo cliente, especifique o URL do endpoint HTTPS fornecido no feed de webhook.
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.
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
- Faça login no Sysdig Secure com privilégios de administrador.
- Acesse Perfil > Configurações > Encaminhamento de eventos.
- Clique em +Adicionar integração e selecione Webhook no menu suspenso.
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
- Faça login no Sysdig Secure usando suas credenciais de administrador.
- Acesse Configurações > Encaminhamento de eventos.
- Clique em +Adicionar integração e selecione Google Chronicle no menu suspenso.
- 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.