Coletar registros de segurança na nuvem do Lacework

Compatível com:

Visão geral

Esse analisador extrai campos dos registros JSON do Lacework Cloud Security, transformando-os em formato UDM. Ele mapeia campos de registros brutos para campos da UDM, processando vários tipos de dados e enriquecendo o evento com contexto adicional de tags. Por fim, ele classifica o tipo de evento com base na presença de informações principais e de destino.

Antes de começar

Verifique se você atende os seguintes pré-requisitos:

  • Instância do Google Security Operations.
  • Acesso privilegiado ao FortiCNAPP Lacework.

Configurar feeds

Para configurar um feed, siga estas etapas:

  1. Acesse Configurações do SIEM > Feeds.
  2. Clique em Adicionar novo feed.
  3. Na próxima página, clique em Configurar um único feed.
  4. No campo Nome do feed, insira um nome para o feed (por exemplo, Registros do Lacework).
  5. Selecione Webhook como o Tipo de origem.
  6. Selecione Lacework como o Tipo de registro.
  7. Clique em Próxima.
  8. Opcional: especifique valores para os seguintes parâmetros de entrada:
    • Delimitador de divisão: o delimitador usado para separar linhas de registro, como \n.
  9. Clique em Próxima.
  10. Revise a configuração do feed na tela Finalizar e clique em Enviar.
  11. Clique em Gerar chave secreta para autenticar o feed.
  12. Copie e armazene a chave secreta. Não é possível ver essa chave secreta novamente. Se necessário, você pode gerar uma nova chave secreta, mas isso torna a anterior obsoleta.
  13. 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.
  14. Clique em Concluído.

Criar uma chave de API para o feed de webhook

  1. Acesse console doGoogle 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 Chronicle.

Especifique 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 no URL.

  3. Se o cliente de webhook não aceitar 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 autenticar no Google SecOps.
    • SECRET: a chave secreta gerada para autenticar o feed.

Configurar um webhook da Lacework para o Google SecOps

  1. Faça login no console do Lacework FortiCNAPP com privilégios administrativos.
  2. Acesse Configurações > Notificações > Canais de alerta.
  3. Clique em + Adicionar novo.
  4. Selecione Webhook.
  5. Clique em Próxima.
  6. Especifique um nome exclusivo para o canal (por exemplo, Google SecOps).
  7. URL do webhook: insira <ENDPOINT_URL> seguido de <API_KEY> e <SECRET>.
  8. Clique em Salvar.
  9. Selecione Regras de alerta e configure os detalhes de roteamento de alerta necessários.

Registros de amostra de segurança na nuvem do Lacework compatíveis

  • Informações do agente ou da máquina (inventário de host)

    {
      "AGENT_VERSION": "6.7.6-4ce73a7b",
      "CREATED_TIME": "Thu, 03 Nov 2022 02:09:36 -0700",
      "HOSTNAME": "host-agent-1",
      "IP_ADDR": "10.0.0.1",
      "LAST_UPDATE": "Wed, 18 Oct 2023 17:59:09 -0700",
      "MID": 6516601498285932156,
      "MODE": "ebpf",
      "OS": "Linux",
      "STATUS": "ACTIVE",
      "TAGS": {
        "Account": "999999999999",
        "AmiId": "ami-00000000000000000",
        "ExternalIp": "203.0.113.10",
        "Hostname": "internal-host-1.zone.compute.internal",
        "InstanceId": "i-00000000000000000",
        "InternalIp": "172.16.1.10",
        "LwTokenShort": "DUMMYTOKENABCD123456",
        "Name": "proxy-DMZ-app-1",
        "ResourceType": "proxy-machines",
        "SubnetId": "subnet-00000000000000000",
        "VmInstanceType": "t3.small",
        "VmProvider": "AWS",
        "VpcId": "vpc-00000000000000000",
        "Zone": "us-west-2a",
        "arch": "amd64",
        "falconx.io/application": "proxy-machines",
        "falconx.io/environment": "prod",
        "falconx.io/project": "edge",
        "falconx.io/team": "edge",
        "os": "linux"
      }
    }
    
  • Metadados ou integridade do arquivo

    {
    "CREATED_TIME": "Wed, 18 Oct 2023 17:02:01 -0700",
    "FILEDATA_HASH": "DUMMYHASH582C741AD91CA817B4718DEAA4E8A83C0B9D92E2",
    "FILE_PATH": "/usr/local/bin/secure_config",
    "MID": 7371220731851617371,
    "MTIME": "Fri, 25 Aug 2023 13:03:09 -0700",
    "SIZE": 8078
    }
    
  • Avaliação de vulnerabilidades do host

    {
    "CVE_PROPS": {
      "description": "DOCUMENTATION: The MITRE CVE dictionary describes this issue as: "
                     "This CVE ID has been rejected or withdrawn by its CVE Numbering "
                     "Authority for the following reason: This CVE ID has been rejected "
                     "or withdrawn by its CVE Numbering Authority.",
      "link": "https://vendor.example.com/security/cve/CVE-2021-47472",
      "metadata": null
    },
    "CVE_RISK_INFO": {
      "HOST_COUNT": 1249,
      "IMAGE_COUNT": 0,
      "PKG_COUNT": 0,
      "SEVERITY_LEVEL": 2,
      "score": 0.5154245281584533
    },
    "CVE_RISK_SCORE": 3.77,
    "END_TIME": "2024-09-04 07:00:00.000",
    "EVAL_CTX": {
      "collector_type": "Agent",
      "exception_props": [],
      "hostname": "vuln-host-1.example.net"
    },
    "EVAL_GUID": "3dc61df780e3b722aa59b0ffcac85683",
    "FEATURE_KEY": {
      "name": "kernel-headers",
      "namespace": "centos:7",
      "package_active": 1,
      "package_path": "",
      "version_installed": "0:3.10.0-1160.119.1.el7.tuxcare.els2"
    },
    "MACHINE_TAGS": {
      "Account": "999999999999",
      "AmiId": "ami-00000000000000000",
      "ExternalIp": "203.0.113.10",
      "Hostname": "ip-172-16-1-10.example-prod.aws.featurespace.net",
      "InternalIp": "10.0.0.1",
      "LwTokenShort": "DUMMYTOKENABCD123456",
      "VmProvider": "AWS",
      "VpcId": "vpc-00000000000000000",
      "os": "linux"
    },
    "MID": 5746003737030963813,
    "PACKAGE_STATUS": "ACTIVE",
    "REGION": "eu-west-2",
    "RISK_SCORE": 10,
    "SEVERITY": "Low",
    "START_TIME": "2024-09-04 06:00:00.000",
    "STATUS": "Exception",
    "VULN_ID": "CVE-2021-47472"
    }
    
  • Conformidade de configuração do Cloud (auditoria)

    {
    "ACCOUNT": {
      "AccountId": "999999999999",
      "Account_Alias": ""
    },
    "EVAL_TYPE": "LW_SA",
    "ID": "lacework-global-87",
    "REASON": "Default security group does not restrict traffic",
    "RECOMMENDATION": "Ensure the default security group of every Virtual Private Cloud (VPC) restricts all traffic",
    "REGION": "eu-north-1",
    "REPORT_TIME": "2024-11-10 18:00:00.000",
    "RESOURCE_ID": "arn:aws:ec2:eu-west-1:999999999999:security-group/sg-00000000000000000",
    "SECTION": "",
    "SEVERITY": "High",
    "STATUS": "NonCompliant"
    }
    
  • Consulta ou resolução de DNS

    {
    "CREATED_TIME": "2024-11-06 05:14:44.329",
    "DNS_SERVER_IP": "10.0.0.53",
    "FQDN": "data-service-prod-1234567890.s3.eu-west-2.amazonaws.com",
    "HOST_IP_ADDR": "172.16.1.20",
    "MID": 8843985456817096491,
    "TTL": 5
    }
    
  • Avaliação de vulnerabilidades de imagens

    {
    "CVE_PROPS": null,
    "EVAL_CTX": {
      "collector_type": "Agentless",
      "image_info": {
        "digest": "sha256:52d5cb782dad7a8a03c8bd1b285bbd32bdbfa8fcc435614bb1e6ceefcf26ae1d",
        "id": "sha256:31427c44cac7ab632d541181073bbd46a964e4ed38d087d8a47f60bb66eef4df",
        "registry": "999999999999.dkr.ecr.eu-west-1.amazonaws.com",
        "repo": "amazon/aws-network-policy-agent"
      }
    },
    "EVAL_GUID": "3a17a74f0a65eed2bddd2d37bb02e6af",
    "FEATURE_KEY": {
      "name": "perl-threads",
      "namespace": "amzn:2",
      "version": "1.87-4.amzn2.0.2"
    },
    "FIX_INFO": {
      "fix_available": 0,
      "fixed_version": ""
    },
    "IMAGE_ID": "sha256:31427c44cac7ab632d541181073bbd46a964e4ed38d087d8a47f60bb66eef4df",
    "IMAGE_RISK_INFO": {
      "factors": [
        "cve",
        "reachability"
      ],
      "factors_breakdown": {
        "cve_counts": {
          "Critical": 0,
          "High": 21,
          "Medium": 73
        },
        "internet_reachability": "Unknown"
      }
    },
    "IMAGE_RISK_SCORE": 6.4,
    "PACKAGE_STATUS": "NO_AGENT_AVAILABLE",
    "RISK_SCORE": 6.4,
    "START_TIME": "2024-11-05 19:05:03.553",
    "STATUS": "GOOD"
    }
    
  • Resumo da conexão ou do tráfego de rede

    {
    "DST_ENTITY_ID": {
      "hostname": "service-A.region.amazonaws.com",
      "ip_internal": 0,
      "port": 443,
      "protocol": "TCP"
    },
    "DST_ENTITY_TYPE": "DnsSep",
    "DST_IN_BYTES": 0,
    "DST_OUT_BYTES": 0,
    "ENDPOINT_DETAILS": [
      {
        "dst_ip_addr": "203.0.113.10",
        "dst_port": 443,
        "protocol": "TCP",
        "src_ip_addr": "192.168.1.10"
      },
      {
        "dst_ip_addr": "198.51.100.5",
        "dst_port": 443,
        "protocol": "TCP",
        "src_ip_addr": "192.168.1.10"
      }
    ],
    "END_TIME": "2024-11-05 21:00:00.000",
    "NUM_CONNS": 4,
    "SRC_ENTITY_ID": {
      "mid": 2080882850610892909,
      "pid_hash": 744766973756676842
    },
    "SRC_ENTITY_TYPE": "Process",
    "SRC_IN_BYTES": 25028,
    "SRC_OUT_BYTES": 11962,
    "START_TIME": "2024-11-05 20:00:00.000"
    }
    
  • Informações ou atualização do pacote

    {
    "ARCH": "x86_64",
    "CREATED_TIME": "2024-11-08 01:28:30.566",
    "MID": 4172267319977985370,
    "PACKAGE_NAME": "grub2",
    "VERSION": "2:2.02-0.87.0.2.el7.el7.centos.14.tuxcare.els2"
    }
    
  • Atividade do processo do contêiner

    {
    "CONTAINER_ID": "4853339865add970f72213ec5d76ff51d1308c61a7680cc23c8de20c38c0a8e1",
    "END_TIME": "2024-11-08 02:00:00.000",
    "FILE_PATH": "/app/grpc-health-probe",
    "MID": 3708952045169222383,
    "PID": 177267,
    "POD_NAME": "kubernetes-pod-abc",
    "PPID": 177257,
    "PROCESS_START_TIME": "2024-11-08 01:43:29.960",
    "START_TIME": "2024-11-08 01:00:00.000",
    "UID": 0,
    "USERNAME": "serviceuser"
    }
    
  • Alerta ou evento geral (CloudTrail)

    {
    "EVENT_ID": "413328",
    "EVENT_NAME": "Unauthorized API Call",
    "EVENT_TYPE": "CloudTrailDefaultAlert",
    "SUMMARY": " For account: 999999999999 (and 22 more) : event Unauthorized API Call from a username other "
               "than whitelisted ones. Replaces lacework-global-29 occurred 3772 times by user "
               "UDM-PRINCIPAL-ID:UDM-SERVICE-ROLE (and 167 more) ",
    "START_TIME": "07 Feb 2025 12:00 GMT",
    "EVENT_CATEGORY": "Aws",
    "LINK": "https://security.example.net/ui/alert/12345/details",
    "ACCOUNT": "UDM_ACCOUNT",
    "SOURCE": "CloudTrail",
    "subject": {
      "srcEvent": {
        "event": {
          "errorCode": "AccessDenied",
          "errorMessage": "User: arn:aws:sts::999999999999:assumed-role/UDM-SERVICE-ROLE-IngestionApiRole/UDM-SERVICE-PRINCIPAL "
                          "is not authorized to perform: kinesis:ListShards on resource: "
                          "arn:aws:kinesis:us-east-1:999999999999:stream/ingestion-qa-rel-fraud-review-Stream "
                          "because no identity-based policy allows the kinesis:ListShards action",
          "eventName": "ListShards",
          "eventSource": "kinesis.amazonaws.com",
          "eventTime": "2025-02-07T12:00:24Z",
          "recipientAccountId": "999999999999",
          "sourceIPAddress": "firehose.amazonaws.com",
          "userIdentity": {
            "accessKeyId": "ACCESSKEYIDDUMMY",
            "accountId": "999999999999",
            "arn": "arn:aws:sts::999999999999:assumed-role/UDM-SERVICE-ROLE-IngestionApiRole/UDM-SERVICE-PRINCIPAL",
            "sessionContext": {
              "sessionIssuer": {
                "accountId": "999999999999",
                "arn": "arn:aws:iam::999999999999:role/UDM-SERVICE-ROLE-IngestionApiRole",
                "principalId": "PRINCIPALIDDUMMY",
                "userName": "UDM-SERVICE-ROLE-IngestionApiRole"
              }
            }
          },
          "vpcEndpointId": "vpce-00000000000000000"
        },
        "principalId": "PRINCIPALIDDUMMY:UDM-SERVICE-PRINCIPAL",
        "recipientAccountId": "999999999999",
        "sourceIPAddress": "firehose.amazonaws.com",
        "userIdentityName": "UDM-SERVICE-ROLE-IngestionApiRole"
      }
    }
    }
    

Tabela de mapeamento do UDM

Campo de registro Mapeamento do UDM Lógica
AGENT_VERSION metadata.product_version Mapeado diretamente do campo AGENT_VERSION.
CREATED_TIME metadata.event_timestamp Mapeado diretamente do campo CREATED_TIME e convertido em um carimbo de data/hora.
FILEDATA_HASH target.file.sha256 Mapeado diretamente do campo FILEDATA_HASH.
FILE_PATH target.file.full_path Mapeado diretamente do campo FILE_PATH.
IP_ADDR principal.ip Mapeado diretamente do campo IP_ADDR.
OS target.platform Mapeado do campo OS. A lógica converte várias strings de SO (Linux, Windows, Mac) em valores de enumeração da UDM (LINUX, WINDOWS, MAC). O padrão é UNKNOWN_PLATFORM se nenhuma correspondência for encontrada.
STATUS additional.fields[].key:"STATUS", value.string_value Mapeado diretamente do campo STATUS como um campo adicional.
TAGS.Account metadata.product_deployment_id Mapeado diretamente do campo TAGS.Account.
TAGS.AmiId additional.fields[].key:"AmiId", value.string_value Mapeado diretamente do campo TAGS.AmiId como um campo adicional.
TAGS.ExternalIp target.ip Mapeado diretamente do campo TAGS.ExternalIp.
TAGS.Hostname principal.hostname Mapeado diretamente do campo TAGS.Hostname.
TAGS.InstanceId target.asset_id Mapeado diretamente do campo TAGS.InstanceId, com o prefixo "Device Instance Id: ".
TAGS.LwTokenShort additional.fields[].key:"LwTokenShort", value.string_value Mapeado diretamente do campo TAGS.LwTokenShort como um campo adicional.
TAGS.MID additional.fields[].key:"MID", value.string_value Mapeado diretamente do campo MID como um campo adicional.
TAGS.MODE additional.fields[].key:"MODE", value.string_value Mapeado diretamente do campo MODE como um campo adicional.
TAGS.Name additional.fields[].key:"Name", value.string_value Mapeado diretamente do campo TAGS.Name como um campo adicional.
TAGS.QSConfigName-vfzg0 additional.fields[].key:"QSConfigName", value.string_value Mapeado diretamente do campo TAGS.QSConfigName-vfzg0 como um campo adicional.
TAGS.ResourceType target.resource.resource_subtype Mapeado diretamente do campo TAGS.ResourceType.
TAGS.SubnetId target.resource.attribute.labels[].key:"Subnet Id", value Mapeado diretamente do campo TAGS.SubnetId como um rótulo em target.resource.attribute.
TAGS.VmInstanceType target.resource.attribute.labels[].key:"VmInstanceType", value Mapeado diretamente do campo TAGS.VmInstanceType como um rótulo em target.resource.attribute.
TAGS.VmProvider target.resource.attribute.labels[].key:"VmProvider", value Mapeado diretamente do campo TAGS.VmProvider como um rótulo em target.resource.attribute.
TAGS.VpcId target.resource.product_object_id Mapeado diretamente do campo TAGS.VpcId.
TAGS.Zone target.cloud.availability_zone Mapeado diretamente do campo TAGS.Zone.
TAGS.alpha.eksctl.io/nodegroup-name additional.fields[].key:"eksctl_nodegroup_name", value.string_value Mapeado diretamente do campo TAGS.alpha.eksctl.io/nodegroup-name como um campo adicional.
TAGS.alpha.eksctl.io/nodegroup-type additional.fields[].key:"eksctl_nodegroup_type", value.string_value Mapeado diretamente do campo TAGS.alpha.eksctl.io/nodegroup-type como um campo adicional.
TAGS.arch principal.platform_version Mapeado diretamente do campo TAGS.arch.
TAGS.aws:autoscaling:groupName additional.fields[].key:"autoscaling_groupName", value.string_value Mapeado diretamente do campo TAGS.aws:autoscaling:groupName como um campo adicional.
TAGS.aws:ec2:fleet-id additional.fields[].key:"ec2_fleetid", value.string_value Mapeado diretamente do campo TAGS.aws:ec2:fleet-id como um campo adicional.
TAGS.aws:ec2launchtemplate:id additional.fields[].key:"ec2launchtemplate_id", value.string_value Mapeado diretamente do campo TAGS.aws:ec2launchtemplate:id como um campo adicional.
TAGS.aws:ec2launchtemplate:version additional.fields[].key:"ec2launchtemplate_ver", value.string_value Mapeado diretamente do campo TAGS.aws:ec2launchtemplate:version como um campo adicional.
TAGS.aws:eks:cluster-name additional.fields[].key:"eks_cluster_name", value.string_value Mapeado diretamente do campo TAGS.aws:eks:cluster-name como um campo adicional.
TAGS.enableCrowdStrike additional.fields[].key:"enableCrowdStrike", value.string_value Mapeado diretamente do campo TAGS.enableCrowdStrike como um campo adicional.
TAGS.falconx.io/application additional.fields[].key:"io/application", value.string_value Mapeado diretamente do campo TAGS.falconx.io/application como um campo adicional.
TAGS.falconx.io/environment additional.fields[].key:"io/environment", value.string_value Mapeado diretamente do campo TAGS.falconx.io/environment como um campo adicional.
TAGS.falconx.io/managedBy additional.fields[].key:"io/managedBy", value.string_value Mapeado diretamente do campo TAGS.falconx.io/managedBy como um campo adicional.
TAGS.falconx.io/project additional.fields[].key:"io/project", value.string_value Mapeado diretamente do campo TAGS.falconx.io/project como um campo adicional.
TAGS.falconx.io/proxy-type additional.fields[].key:"io/proxy_type", value.string_value Mapeado diretamente do campo TAGS.falconx.io/proxy-type como um campo adicional.
TAGS.falconx.io/service additional.fields[].key:"io/service", value.string_value Mapeado diretamente do campo TAGS.falconx.io/service como um campo adicional.
TAGS.falconx.io/team additional.fields[].key:"io/team", value.string_value Mapeado diretamente do campo TAGS.falconx.io/team como um campo adicional.
TAGS.k8s.io/cluster-autoscaler/enabled additional.fields[].key:"k8s_autoscaler_enabled", value.string_value Mapeado diretamente do campo TAGS.k8s.io/cluster-autoscaler/enabled como um campo adicional.
TAGS.k8s.io/cluster-autoscaler/falcon additional.fields[].key:"k8s_cluster_autoscaler", value.string_value Mapeado diretamente do campo TAGS.k8s.io/cluster-autoscaler/falcon como um campo adicional.
TAGS.kubernetes.io/cluster/falcon additional.fields[].key:"kubernetes_io_cluster", value.string_value Mapeado diretamente do campo TAGS.kubernetes.io/cluster/falcon como um campo adicional.
TAGS.lw_KubernetesCluster additional.fields[].key:"lw_KubernetesCluster", value.string_value Mapeado diretamente do campo TAGS.lw_KubernetesCluster como um campo adicional.
LAST_UPDATE additional.fields[].key:"LAST_UPDATE", value.string_value Mapeado diretamente do campo LAST_UPDATE como um campo adicional. Fixado no código como "LACEWORK". Fixado no código como "Lacework Cloud Security".
metadata.event_type metadata.event_type Determinado pela lógica. Definido como "NETWORK_CONNECTION" se principal.ip e target.ip estiverem presentes, "STATUS_UPDATE" se apenas principal.ip estiver presente e "GENERIC_EVENT" caso contrário.

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