Coletar registros do WAF da Cloudflare

Compatível com:

Esse analisador extrai campos dos registros JSON do firewall do aplicativo da Web (WAF, na sigla em inglês) da Cloudflare, os transforma e os mapeia para o modelo de dados unificado (UDM, na sigla em inglês). Ele processa várias ações da Cloudflare, enriquecendo os dados com metadados e informações de rede antes de estruturar a saída no formato UDM.

Antes de começar

  • Verifique se você tem uma instância do Google SecOps.
  • Verifique se você tem acesso privilegiado a Google Cloud.
  • Confira se você tem o plano Cloudflare Enterprise.
  • Verifique se você tem acesso privilegiado ao Cloudflare.

Criar um bucket do Google Cloud Storage

  1. Fazer login no console do Google Cloud
  2. Acesse a página Buckets do Cloud Storage.

    Acessar buckets

  3. Clique em Criar.

  4. Configure o bucket:

    • Nome: insira um nome exclusivo que atenda aos requisitos de nome de bucket (por exemplo, cloudflare-waf).
    • Escolha onde armazenar seus dados: selecione um local.
    • Escolha uma classe de armazenamento para seus dados: selecione uma classe de armazenamento padrão para o bucket ou selecione Classe automática para gerenciamento automático da classe de armazenamento.
    • Escolha como controlar o acesso a objetos: selecione não para aplicar a prevenção de acesso público e selecione um modelo de controle de acesso para os objetos do bucket.
    • Classe de armazenamento: escolha com base nas suas necessidades (por exemplo, Padrão).
  5. Clique em Criar.

Conceder permissões de bucket ao usuário do IAM da Cloudflare

  1. Em Google Cloud, acesse Storage > Browser > Bucket > Permissões.
  2. Adicione a conta logpush@cloudflare-data.iam.gserviceaccount.com com a permissão de administrador de objetos do Storage.

Criar um job de push de registro para logs do WAF usando a interface da Cloudflare

  1. Faça login no Cloudflare.
  2. Acesse Análise e registros > Logpush.
  3. Selecione Criar um job de Logpush.
  4. Em Selecionar um destino, escolha Google Cloud Armazenamento.
  5. Insira os seguintes detalhes do destino:
    • Bucket: Google Cloud nome do bucket do Storage
    • Caminho: localização do bucket no contêiner de armazenamento
    • Selecione Organizar registros em subpastas diárias
  6. Clique em Continuar.
  1. Selecione o conjunto de dados Segurança (WAF) para enviar ao armazenamento.
  2. Configure o job de envio de registro:
    • Digite o Nome do job.
    • Em "Se os registros corresponderem", você pode selecionar os eventos a serem incluídos e/ou removidos dos registros. Consulte Filtros para mais informações. Nem todos os conjuntos de dados têm essa opção disponível.
    • Nos campos Enviar os seguintes, você pode enviar todos os registros para o destino de armazenamento ou escolher seletivamente quais registros quer enviar.
  3. Clique em Enviar.

Configurar um feed no Google SecOps para processar registros do WAF da Cloudflare

  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, Cloudflare WAF Logs).
  4. Selecione Google Cloud Storage como o Tipo de origem.
  5. Selecione Cloudflare WAF como o Tipo de registro.
  6. Clique em Receber conta de serviço.
  7. Clique em Próxima.
  8. Especifique valores para os seguintes parâmetros de entrada:

    • URI do GCS: o URL do Cloud Storage.
    • O URI é um: selecione Diretório que inclui subdiretórios.
    • Opções de exclusão da origem: selecione a opção de exclusão de acordo com sua preferência.
    • Namespace de recursos: o namespace de recursos.
    • Rótulos de ingestão: o rótulo a ser aplicado aos eventos desse feed.
  9. Clique em Próxima.

  10. Revise a configuração do novo feed na tela Finalizar e clique em Enviar.

Tabela de mapeamento do UDM

Campo de registro Mapeamento do UDM Lógica
Action security_result.action_details O valor de Action do registro bruto é atribuído diretamente a esse campo do UDM.
Action security_result.action O valor desse campo é derivado do campo Action no registro bruto. Se Action for "permitir", o campo UDM será definido como ALLOW. Se Action for "challengeSolved", "jschallengeSolved", "managedchallengenoninteractivesolved" ou "managedchallengeinteractivesolved", o campo UDM será definido como ALLOW_WITH_MODIFICATION. Se Action for "drop", "block" ou "connectionclose", o campo UDM será definido como BLOCK. Se Action for "challengefailed" ou "jschallengefailed", o campo UDM será definido como FAIL. Caso contrário, será definido como UNKNOWN_ACTION.
ClientASN network.asn O valor de ClientASN do registro bruto é atribuído diretamente a esse campo da UDM depois de ser convertido em uma string.
ClientASNDescription additional.fields.key A chave é definida de forma estática como "ClientASNDescription".
ClientASNDescription additional.fields.value.string_value O valor de ClientASNDescription do registro bruto é atribuído diretamente a esse campo do UDM.
ClientCountry principal.location.country_or_region O valor de ClientCountry do registro bruto é atribuído diretamente a esse campo do UDM.
ClientIP principal.ip O valor de ClientIP do registro bruto é atribuído diretamente a esse campo do UDM.
ClientRefererHost intermediary.hostname O valor de ClientRefererHost do registro bruto é atribuído diretamente a esse campo do UDM.
ClientRefererPath network.http.referral_url O valor de ClientRefererPath do registro bruto é atribuído diretamente a esse campo do UDM.
ClientRequestHost target.hostname O valor de ClientRequestHost do registro bruto é atribuído diretamente a esse campo do UDM.
ClientRequestMethod network.http.method O valor de ClientRequestMethod do registro bruto é atribuído diretamente a esse campo do UDM.
ClientRequestPath target.file.full_path O valor de ClientRequestPath do registro bruto é atribuído diretamente a esse campo do UDM.
ClientRequestProtocol network.application_protocol A parte do protocolo de ClientRequestProtocol (por exemplo, "HTTP" em "HTTP/1.1") é extraído usando grok, convertido em letras maiúsculas e atribuído a esse campo da UDM.
ClientRequestUserAgent network.http.user_agent O valor de ClientRequestUserAgent do registro bruto é atribuído diretamente a esse campo do UDM.
Datetime metadata.event_timestamp O valor de Datetime do registro bruto é analisado como um carimbo de data/hora RFC 3339 e atribuído a esse campo do UDM.
EdgeColoCode additional.fields.key A chave é definida de forma estática como "EdgeColoCode".
EdgeColoCode additional.fields.value.string_value O valor de EdgeColoCode do registro bruto é atribuído diretamente a esse campo do UDM.
EdgeResponseStatus network.http.response_code O valor de EdgeResponseStatus do registro bruto é atribuído diretamente a esse campo do UDM e convertido em um número inteiro.
Kind metadata.product_event_type O valor de Kind do registro bruto é atribuído diretamente a esse campo do UDM.
Metadata.filter target.resource.attribute.labels.value O valor de Metadata.filter do registro bruto é atribuído ao campo value de um rótulo em target.resource.attribute.labels. O key desse marcador é definido de forma estática como "Filtro de metadados".
Metadata.type target.resource.attribute.labels.value O valor de Metadata.type do registro bruto é atribuído ao campo value de um rótulo em target.resource.attribute.labels. O key desse rótulo é definido de forma estática como "Tipo de metadados". O valor desse campo é derivado com base na presença e nos valores de ClientIP, ClientRequestHost e app_protocol. Consulte o código do analisador para conferir a lógica específica. Estaticamente definido como "Cloudflare". Estaticamente definido como "Agregador de registros da Cloudflare". Estaticamente definido como "CLOUDFLARE_WAF".
RayID metadata.product_log_id O valor de RayID do registro bruto é atribuído diretamente a esse campo do UDM.
RuleID security_result.rule_id O valor de RuleID do registro bruto é atribuído diretamente a esse campo do UDM.
Source security_result.rule_name O valor de Source do registro bruto é atribuído diretamente a esse campo do UDM.
timestamp metadata.event_timestamp, events.timestamp O valor de timestamp do registro bruto é atribuído diretamente a esses campos do UDM.

Alterações

2024-08-08

  • Extraiu dados de "ClientRequestHost" e "ClientRequestURI", mesclou e mapeou o resultado para "target.url".

2023-08-30

  • O campo "ClientRequestPath" foi inicializado.

2023-02-02

  • Validou o valor "security_result" antes da mesclagem com o evento.

2022-09-16

  • O campo "Ação" foi mapeado para "security_result.action_details".
  • O "security_result.action" foi associado a "ALLOW_WITH_MODIFICATION" quando a ação contém "challengeSolved", "jschallengeSolved", "managedchallengenoninteractivesolved" e "managedchallengeinteractivesolved".
  • O "security_result.action" foi mapeado para "BLOCK" quando a ação contém "drop", "block" e "connectionclose".
  • O mapeamento de "security_result.action" para "FAIL" quando a ação contém "challengefailed" ou "jschallengefailed".

2022-07-25

  • Parser recém-criado