Coletar registros do AWS WAF

Compatível com:

Neste documento, explicamos como coletar os registros do firewall de aplicativos da Web (WAF) da AWS configurando um feed do Google Security Operations. O analisador transforma registros brutos formatados em JSON em um formato estruturado de acordo com a UDM do Google SecOps. Ele extrai campos como endereços IP, URLs, user agents e detalhes de regras de segurança, mapeando-os para os campos correspondentes da UDM para representação e análise consistentes.

Antes de começar

*Verifique se você atende aos seguintes pré-requisitos:

  • Instância do Google SecOps
  • Acesso privilegiado à AWS

Configurar o bucket do Amazon S3

  1. Crie um bucket do Amazon S3 seguindo este guia do usuário: Como criar um bucket
  2. Salve o Nome e a Região do bucket para uso posterior.
  3. Crie um usuário seguindo este guia: Como criar um usuário do IAM.
  4. Selecione o usuário criado.
  5. Selecione a guia Credenciais de segurança.
  6. Clique em Criar chave de acesso na seção Chaves de acesso.
  7. Selecione Serviço de terceiros como o Caso de uso.
  8. Clique em Próxima.
  9. Opcional: adicione uma tag de descrição.
  10. Clique em Criar chave de acesso.
  11. Clique em Fazer o download do arquivo CSV para salvar a chave de acesso e a chave de acesso secreta para uso posterior.
  12. Clique em Concluído.
  13. Selecione a guia Permissões.
  14. Clique em Adicionar permissões na seção Políticas de permissões.
  15. Selecione Adicionar permissões.
  16. Selecione Anexar políticas diretamente.
  17. Pesquise e selecione a política AmazonS3FullAccess.
  18. Clique em Próxima.
  19. Clique em Adicionar permissões

Criar uma ACL da Web do WAF (lista de controle de acesso)

Se você ainda não configurou o AWS WAF, crie uma ACL da Web do WAF (lista de controle de acesso). Para configurações atuais, pule para o próximo procedimento.

  1. No console da AWS, pesquise e selecione AWS WAF & Shield.
  2. Clique em Criar ACL da Web.
  3. Forneça as seguintes configurações:
    • Nome: dê um nome à ACL (por exemplo, my-waf-web-acl).
    • Região: escolha a região em que você quer aplicar o WAF.
    • Métricas do CloudWatch: ative a coleta de métricas para monitorar a atividade e as regras acionadas.
  4. Depois de criada, selecione a ACL da Web para ativar o registro em registros.

Como configurar o registro em log do AWS WAF

  1. No console do AWS WAF, acesse a guia Logging da ACL da Web.
  2. Clique em Ativar a geração de registros.
  3. Selecione Amazon S3 como o destino dos seus registros.
  4. Escolha o bucket do S3 criado anteriormente para armazenar os registros.
  5. Opcional: configure um prefixo de registro para organizar os registros (por exemplo, waf-logs/).
  6. Clique em Salvar.

Verificar as permissões do bucket do S3

Verifique se o bucket do S3 tem as permissões adequadas para o AWS WAF gravar registros.

  1. Acesse o console do S3.
  2. Selecione o bucket em que os registros serão armazenados.
  3. Na guia Permissões, adicione a seguinte política de bucket para permitir que o AWS WAF grave registros:

    {
      "Version": "2012-10-17",
      "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
                "Service": "wafv2.amazonaws.com"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::your-log-bucket-name/*"
          }
      ]
    }
    
  1. Clique em Salvar.

Configurar feeds

Há dois pontos de entrada diferentes para configurar feeds na plataforma do Google SecOps:

  • Configurações do SIEM > Feeds
  • Central de conteúdo > Pacotes de conteúdo

Configure feeds em Configurações do SIEM > Feeds

Para configurar vários feeds para diferentes tipos de registros nessa família de produtos, consulte Configurar vários feeds.

Para configurar um único 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 AWS WAF).
  5. Selecione Amazon S3 como o Tipo de origem.
  6. Selecione AWS WAF como o Tipo de registro.
  7. Clique em Próxima.
  8. Especifique valores para os seguintes parâmetros de entrada:

    • Região: a região em que o bucket do Amazon S3 está localizado.
    • URI do S3: o URI do bucket.
      • s3://your-log-bucket-name/waf-logs/
        • Substitua:
          • your-log-bucket-name: o nome real do bucket.
    • URI é um: selecione Diretório ou Diretório que inclui subdiretórios.
    • Opções de exclusão de origem: selecione a opção de exclusão de acordo com suas preferências de ingestão.
    • ID da chave de acesso: a chave de acesso do usuário com permissões para ler do bucket do S3.

    • Chave de acesso secreta: a chave secreta do usuário com permissões para ler do bucket do S3.

    • Namespace do recurso: o namespace do recurso.

    • Rótulos de ingestão: o rótulo a ser aplicado aos eventos deste feed.

  9. Clique em Próxima.

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

Configurar feeds na Central de conteúdo

Especifique valores para os seguintes campos:

  • Região: a região em que o bucket do Amazon S3 está localizado.
  • URI do S3: o URI do bucket.
    • s3://your-log-bucket-name/
      • Substitua your-log-bucket-name pelo nome real do seu bucket do S3.
  • URI é um: selecione Diretório ou Diretório que inclui subdiretórios, dependendo da estrutura do bucket.
  • Opções de exclusão de origem: selecione a opção de exclusão de acordo com suas preferências de ingestão.
  • ID da chave de acesso: a chave de acesso do usuário com permissões para ler do bucket do S3.

  • Chave de acesso secreta: a chave secreta do usuário com permissões para ler do bucket do S3.

Opções avançadas

  • Nome do feed: um valor pré-preenchido que identifica o feed.
  • Tipo de origem: método usado para coletar registros no Google SecOps.
  • Namespace do recurso: namespace associado ao feed.
  • Rótulos de ingestão: rótulos aplicados a todos os eventos deste feed.

Tabela de mapeamento do UDM

Campo de registro Mapeamento da UDM Lógica
ação security_result.action Se a ação for ALLOW, defina security_result.action como ALLOW e security_result.severity como INFORMATIONAL. Se a ação for BLOCK, defina security_result.action como BLOCK. Se a ação for CAPTCHA e captchaResponse.responseCode for 405, defina security_result.action como BLOCK e security_result.action_details como "CAPTCHA {captchaResponse.failureReason}".
captchaResponse.failureReason security_result.action_details Usado em conjunto com "action" e "captchaResponse.responseCode" para determinar "security_result.action_details".
captchaResponse.responseCode security_result.action_details Usado em conjunto com action e captchaResponse.failureReason para determinar security_result.action_details.
httpRequest.clientIp principal.ip, principal.asset.ip Mapeado diretamente para principal.ip e principal.asset.ip.
httpRequest.headers target.hostname, target.asset.hostname, network.http.user_agent, network.http.parsed_user_agent, network.http.referral_url, target.location.country_or_region, target.resource.attribute.labels, target.user.userid Itera por cada cabeçalho em httpRequest.headers. Se o nome do cabeçalho for "host" ou "Host", o valor será mapeado para target.hostname e target.asset.hostname. Se o nome do cabeçalho for "User-Agent" ou "user-agent", o valor será mapeado para "network.http.user_agent" e analisado em "network.http.parsed_user_agent". Se o nome do cabeçalho for "Referer" ou "referer", o valor será mapeado para "network.http.referral_url". Se o nome do cabeçalho for "(?i)time-zone", o valor será mapeado para target.location.country_or_region. Se o nome do cabeçalho for "authorization", o valor será decodificado, e o nome de usuário será extraído e mapeado para target.user.userid. Todos os outros cabeçalhos são adicionados como pares de chave-valor a "target.resource.attribute.labels".
httpRequest.httpMethod network.http.method Mapeado diretamente para "network.http.method".
httpRequest.requestId network.session_id Mapeado diretamente para network.session_id.
httpRequest.uri target.url Mapeado diretamente para target.url.
httpSourceId target.resource.name Mapeado diretamente para target.resource.name.
httpSourceName metadata.product_event_type Mapeado diretamente para "metadata.product_event_type".
rótulos security_result.rule_labels Itera por cada rótulo em "labels". Se o nome do rótulo não estiver vazio, ele será adicionado como um par de chave-valor a security_result.rule_labels.
nonTerminatingMatchingRules security_result.action_details, security_result.rule_labels Itera por cada regra em "nonTerminatingMatchingRules". Se a ação for ALLOW e a ação da regra for CAPTCHA, defina security_result.action_details como "CAPTCHA SUCCESSFUL" e adicione o ID da regra a security_result.rule_labels com a chave "nonTerminatingCaptchaRuleName". Se a ação for BLOCK ou ALLOW e a ação da regra for COUNT, defina security_result.action_details como "COUNT RULE" e adicione o ID da regra a security_result.rule_labels com a chave "nonTerminatingCountRuleName". Se a ação for BLOCK ou ALLOW e a ação da regra for CHALLENGE, defina security_result.action_details como "COUNT RULE" e adicione o ID da regra a security_result.rule_labels com a chave "nonTerminatingChallengeRuleName".
rateBasedRuleList security_result.rule_id, security_result.rule_name, security_result.description Se "terminatingRuleType" for "RATE_BASED", itera por cada regra em "rateBasedRuleList". Se terminatingRuleId corresponder ao nome da regra, o ID, o nome e a descrição da regra serão mapeados para security_result.rule_id, security_result.rule_name e security_result.description, respectivamente.
responseCodeSent network.http.response_code Mapeado diretamente para network.http.response_code e convertido em um número inteiro.
ruleGroupList intermediary.labels, security_result.rule_id, security_result.rule_name, security_result.description, security_result.detection_fields Itera por cada grupo de regras em ruleGroupList. O ID do grupo de regras é adicionado como um par de chave-valor a intermediary.labels. Se "terminatingRuleType" for "MANAGED_RULE_GROUP" e "terminatingRuleId" corresponder ao ID do grupo de regras, o ID, o nome e a descrição da regra serão mapeados para "security_result.rule_id", "security_result.rule_name" e "security_result.description", respectivamente. Se "terminatingRuleType" for "GROUP", o ID da regra de encerramento será extraído e mapeado para "security_result.rule_name" e "security_result.description". O ID do grupo de regras de encerramento é adicionado a "security_result.rule_labels" com a chave "terminatingRuleGroupName". Se "terminatingRuleType" for "REGULAR", a ação da regra de encerramento será extraída e adicionada aos campos security_result.detectioncom a chave "terminatingRuleAction{index}".
terminatingRuleId security_result.rule_id, security_result.rule_name, security_result.description Se "terminatingRuleType" for "RATE_BASED", "MANAGED_RULE_GROUP" ou "REGULAR", "terminatingRuleId" será mapeado para "security_result.rule_id", "security_result.rule_name" e usado para construir "security_result.description".
terminatingRuleMatchDetails security_result.description, security_result.category_details, security_result.detection_fields Itera por cada correspondência em "terminatingRuleMatchDetails". Define security_result.description como "Terminating Rule". Se o tipo de condição não estiver vazio, ele será adicionado a "security_result.category_details". Se o local não estiver vazio, ele será adicionado a security_result.detection_fields com a chave "location". Cada elemento de dados correspondente é adicionado a "security_result.detection_fields" com a chave "matchedData".
terminatingRuleType security_result.rule_type Mapeado diretamente para "security_result.rule_type".
timestamp metadata.event_timestamp Convertido em um carimbo de data/hora e mapeado para "metadata.event_timestamp".
webaclId intermediary.resource.name Mapeado diretamente para intermediary.resource.name.
metadata.vendor_name Defina como "AMAZON".
metadata.product_name Defina como "AWS Web Application Firewall".
metadata.log_type Defina como "AWS_WAF".
network.application_protocol Defina como "HTTP".
metadata.event_type Definido como "NETWORK_HTTP" se httpRequest.headers contiver um cabeçalho "host" ou "Host". Caso contrário, defina como "STATUS_UPDATE".

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