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 (lista de controle de acesso) da Web do WAF

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 > Adicionar novo
  • Central de conteúdo > Pacotes de conteúdo > Começar

Como configurar o feed do AWS WAF

  1. Clique no pacote Amazon Cloud Platform.
  2. Localize o tipo de registro AWS WAF.
  3. Especifique os valores nos campos a seguir.

    • Tipo de origem: Amazon SQS V2
    • Nome da fila: o nome da fila do SQS de onde ler.
    • 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.
    • Opções de exclusão de origem: selecione a opção de exclusão de acordo com suas preferências de ingestão.

    • Idade máxima do arquivo: inclui arquivos modificados no último número de dias. O padrão é de 180 dias.

    • ID da chave de acesso à fila do SQS: uma chave de acesso à conta que é uma string alfanumérica de 20 caracteres.

    • Chave de acesso secreta da fila do SQS: uma chave de acesso da conta que é uma string alfanumérica de 40 caracteres.

    Opções avançadas

    • Nome do feed: um valor pré-preenchido que identifica o feed.
    • Namespace do recurso: namespace associado ao feed.
    • Rótulos de ingestão: rótulos aplicados a todos os eventos deste feed.
  4. Clique em Criar feed.

Para mais informações sobre como configurar vários feeds para diferentes tipos de registros nessa família de produtos, consulte Configurar feeds por produto.

Tabela de mapeamento da 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.