Coletar registros do WAF da Cloudflare
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
- Fazer login no console do Google Cloud
Acesse a página Buckets do Cloud Storage.
Clique em Criar.
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).
Clique em Criar.
Conceder permissões de bucket ao usuário do IAM da Cloudflare
- Em Google Cloud, acesse Storage > Browser > Bucket > Permissões.
- 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
- Faça login no Cloudflare.
- Acesse Análise e registros > Logpush.
- Selecione Criar um job de Logpush.
- Em Selecionar um destino, escolha Google Cloud Armazenamento.
- 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
- Clique em Continuar.
- Selecione o conjunto de dados Segurança (WAF) para enviar ao armazenamento.
- 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.
- Clique em Enviar.
Configurar um feed no Google SecOps para processar registros do WAF da Cloudflare
- Acesse Configurações do SIEM > Feeds.
- Clique em Adicionar novo.
- No campo Nome do feed, insira um nome para o feed (por exemplo, Cloudflare WAF Logs).
- Selecione Google Cloud Storage como o Tipo de origem.
- Selecione Cloudflare WAF como o Tipo de registro.
- Clique em Receber conta de serviço.
- Clique em Próxima.
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.
Clique em Próxima.
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