Coletar registros do WAF do Azure

Compatível com:

Este documento explica como exportar registros do firewall de aplicativos da Web (WAF) do Azure para o Google Security Operations usando uma conta de armazenamento do Azure. O analisador processa registros no formato JSON, transformando-os em UDM. Ele processa registros que contêm uma matriz records iterando por cada registro e mapeando campos específicos para propriedades da UDM. Se a matriz records estiver ausente, o analisador vai processar o registro como um único evento, extraindo e mapeando os campos de acordo com a situação.

Antes de começar

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

  • Instância do Google SecOps
  • Um locatário ativo do Azure
  • Acesso privilegiado ao Azure

Configurar a conta de armazenamento do Azure

  1. No console do Azure, pesquise Contas de armazenamento.
  2. Clique em Criar.
  3. Especifique valores para os seguintes parâmetros de entrada:
    • Assinatura: selecione a assinatura.
    • Grupo de recursos: selecione o grupo de recursos.
    • Região: selecione a região.
    • Performance: selecione a performance (padrão recomendado).
    • Redundância: selecione a redundância (GRS ou LRS recomendado).
    • Nome da conta de armazenamento: insira um nome para a nova conta de armazenamento.
  4. Clique em Revisar + criar.
  5. Revise a visão geral da conta e clique em Criar.
  6. Na página Visão geral da conta de armazenamento, selecione o submenu Chaves de acesso em Segurança e rede.
  7. Clique em Mostrar ao lado de key1 ou key2.
  8. Clique em Copiar para a área de transferência para copiar a chave.
  9. Salve a chave em um local seguro para uso posterior.
  10. Na página Visão geral da conta de armazenamento, selecione o submenu Endpoints em Configurações.
  11. Clique em Copiar para a área de transferência para copiar o URL do endpoint do serviço de blob. Por exemplo, https://<storageaccountname>.blob.core.windows.net.
  12. Salve o URL do endpoint em um local seguro para uso posterior.

Como configurar a exportação de registros do WAF do Azure

  1. Faça login no portal do Azure usando sua conta privilegiada.
  2. Acesse Regras de firewall de aplicativos da Web (WAF) e selecione um WAF para monitorar.
  3. Selecione Monitoring > Configurações de diagnóstico.
  4. Clique em + Adicionar configuração de diagnóstico.
    • Insira um nome descritivo para a configuração de diagnóstico.
  5. Selecione allLogs.
  6. Marque a caixa de seleção Arquivar em uma conta de armazenamento como destino.
    • Especifique a Assinatura e a Conta de armazenamento.
  7. 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 WAF do Azure

  1. Clique no pacote Plataforma do Azure.
  2. Localize o tipo de registro WAF do Azure e clique em Adicionar novo feed.
  3. Especifique valores para os seguintes campos:

    • Tipo de origem: Armazenamento de blobs do Microsoft Azure V2.
    • URI do Azure: o URL do endpoint do blob.
      • ENDPOINT_URL/BLOB_NAME
        • Substitua:
          • ENDPOINT_URL: o URL do endpoint do blob (https://<storageaccountname>.blob.core.windows.net)
          • BLOB_NAME: o nome do blob (por exemplo, <logname>-logs)
    • Opções de exclusão de origem: selecione a opção de exclusão de acordo com suas preferências de ingestão. Observação: se você selecionar a opção Delete transferred files ou Delete transferred files and empty directories, verifique se concedeu as permissões adequadas à conta de serviço.
    • Idade máxima do arquivo: inclui arquivos modificados no último número de dias. O padrão é de 180 dias.
    • Chave compartilhada: a chave de acesso ao Azure Blob Storage. 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 do UDM

Campo de registro Mapeamento do UDM Lógica
backendPoolName additional.fields[?key=='backendPoolName'].value.string_value O valor é extraído do campo backendPoolName no registro bruto.
backendSettingName additional.fields[?key=='backendSettingName'].value.string_value O valor é extraído do campo backendSettingName no registro bruto.
category metadata.product_event_type O valor é extraído do campo category no registro bruto.
EventEnqueuedUtcTime additional.fields[?key=='EventEnqueuedUtcTime'].value.string_value O valor é extraído do campo EventEnqueuedUtcTime no registro bruto quando o campo records existe.
EventProcessedUtcTime additional.fields[?key=='EventProcessedUtcTime'].value.string_value O valor é extraído do campo EventProcessedUtcTime no registro bruto quando o campo records existe.
operationName additional.fields[?key=='operationName'].value.string_value O valor é extraído do campo operationName no registro bruto.
properties.action additional.fields[?key=='action'].value.string_value O valor é extraído do campo properties.action no registro bruto quando o campo records existe.
properties.action security_result.action_details O valor é extraído do campo properties.action no registro bruto quando o campo records não existe.
properties.clientIP, properties.clientIp principal.asset.ip, principal.ip O valor é extraído do campo properties.clientIP ou properties.clientIp no registro bruto, priorizando clientIP.
properties.clientPort principal.port O valor é extraído do campo properties.clientPort no registro bruto.
properties.clientResponseTime principal.resource.attribute.labels[?key=='Client Response Time'].value O valor é extraído do campo properties.clientResponseTime no registro bruto quando o campo records não existe.
properties.details.data additional.fields[?key=='Properties data'].value.string_value O valor é extraído do campo properties.details.data no registro bruto quando o campo records existe.
properties.details.file principal.process.file.full_path O valor é extraído do campo properties.details.file no registro bruto quando o campo records não existe.
properties.details.matches[].matchVariableName, properties.details.matches[].matchVariableValue additional.fields[?key.startsWith('%{idx} ')].value.string_value O valor é extraído da matriz properties.details.matches no registro bruto. O key na UDM é construído usando o índice (idx) e matchVariableName. O value é extraído de matchVariableValue.
properties.details.message metadata.description O valor é extraído do campo properties.details.message no registro bruto após a remoção de barras invertidas e aspas.
properties.details.msg metadata.description O valor é extraído do campo properties.details.msg no registro bruto quando o campo records existe.
properties.httpMethod network.http.method O valor é extraído do campo properties.httpMethod no registro bruto.
properties.httpStatus network.http.response_code O valor é extraído do campo properties.httpStatus no registro bruto.
properties.httpVersion network.application_protocol Se o campo properties.httpVersion contiver HTTP, o valor HTTP será atribuído.
properties.host, properties.hostname, properties.originalHost principal.asset.hostname, principal.hostname O valor é extraído de properties.originalHost, properties.host ou properties.hostname, priorizando-os nessa ordem.
properties.policyId security_result.detection_fields[?key=='policyId'].value O valor é extraído do campo properties.policyId no registro bruto.
properties.policyMode security_result.detection_fields[?key=='policyMode'].value O valor é extraído do campo properties.policyMode no registro bruto quando o campo records existe.
properties.policy additional.fields[?key=='Properties policy'].value.string_value O valor é extraído do campo properties.policy no registro bruto quando o campo records existe.
properties.receivedBytes network.received_bytes O valor é extraído do campo properties.receivedBytes no registro bruto.
properties.requestUri target.url O valor é extraído do campo properties.requestUri no registro bruto.
properties.ruleId security_result.rule_id O valor é extraído do campo properties.ruleId no registro bruto.
properties.ruleName security_result.rule_name O valor é extraído do campo properties.ruleName no registro bruto quando o campo records existe.
properties.ruleName, ruleSetType security_result.rule_name O valor é extraído do campo properties.ruleName ou, se estiver vazio, do campo ruleSetType no registro bruto quando o campo records não existe.
properties.ruleSetVersion security_result.detection_fields[?key=='ruleSetVersion'].value O valor é extraído do campo properties.ruleSetVersion no registro bruto.
properties.sentBytes network.sent_bytes O valor é extraído do campo properties.sentBytes no registro bruto.
properties.serverResponseLatency additional.fields[?key=='Server Response Latency'].value.string_value O valor é extraído do campo properties.serverResponseLatency no registro bruto quando o campo records não existe.
properties.serverRouted target.asset.ip, target.ip, target.port O IP e a porta são extraídos do campo properties.serverRouted.
properties.sslCipher network.tls.cipher O valor é extraído do campo properties.sslCipher no registro bruto.
properties.sslClientCertificateIssuerName network.tls.server.certificate.issuer O valor é extraído do campo properties.sslClientCertificateIssuerName no registro bruto.
properties.sslProtocol network.tls.version O valor é extraído do campo properties.sslProtocol no registro bruto.
properties.timeTaken additional.fields[?key=='Properties Timetaken'].value.string_value O valor é extraído do campo properties.timeTaken no registro bruto quando o campo records não existe.
properties.trackingReference additional.fields[?key=='trackingReference'].value.string_value O valor é extraído do campo properties.trackingReference no registro bruto quando o campo records existe.
properties.transactionId network.session_id O valor é extraído do campo properties.transactionId no registro bruto.
properties.userAgent network.http.user_agent O valor é extraído do campo properties.userAgent no registro bruto.
properties.WAFEvaluationTime additional.fields[?key=='Properties WAFEvaluationTime'].value.string_value O valor é extraído do campo properties.WAFEvaluationTime no registro bruto quando o campo records não existe.
properties.WAFMode additional.fields[?key=='Properties WAFMode'].value.string_value O valor é extraído do campo properties.WAFMode no registro bruto quando o campo records não existe.
rec.category metadata.product_event_type O valor é extraído do campo rec.category no registro bruto quando o campo records existe.
rec.operationName additional.fields[?key=='operationName'].value.string_value O valor é extraído do campo rec.operationName no registro bruto quando o campo records existe.
rec.properties.clientIP, rec.properties.clientIp principal.asset.ip, principal.ip O valor é extraído do campo rec.properties.clientIP ou rec.properties.clientIp no registro bruto, priorizando clientIP quando o campo records existe.
rec.properties.clientPort principal.port O valor é extraído do campo rec.properties.clientPort no registro bruto quando o campo records existe.
rec.properties.host principal.asset.hostname, principal.hostname O valor é extraído do campo rec.properties.host no registro bruto quando o campo records existe.
rec.properties.policy additional.fields[?key=='Properties policy'].value.string_value O valor é extraído do campo rec.properties.policy no registro bruto quando o campo records existe.
rec.properties.requestUri target.url O valor é extraído do campo rec.properties.requestUri no registro bruto quando o campo records existe.
rec.properties.ruleName security_result.rule_name O valor é extraído do campo rec.properties.ruleName no registro bruto quando o campo records existe.
rec.properties.trackingReference additional.fields[?key=='trackingReference'].value.string_value O valor é extraído do campo rec.properties.trackingReference no registro bruto quando o campo records existe.
rec.resourceId target.resource.id O valor é extraído do campo rec.resourceId no registro bruto quando o campo records existe.
rec.time metadata.event_timestamp O valor é extraído do campo rec.time no registro bruto quando o campo records existe.
resourceId target.resource.id O valor é extraído do campo resourceId no registro bruto quando o campo records não existe.
timeStamp metadata.event_timestamp O valor é extraído do campo timeStamp no registro bruto quando o campo records não existe.
N/A metadata.event_type O valor é definido como NETWORK_CONNECTION se o principal (nome do host ou IP do cliente) e o IP de destino estiverem presentes. Ele é definido como STATUS_UPDATE se uma conta principal estiver presente, mas o IP de destino estiver faltando. Caso contrário, o padrão será GENERIC_EVENT ou o valor do campo event_type.
N/A metadata.log_type O valor está fixado no código como AZURE_WAF.
N/A metadata.product_name O valor está fixado no código como Azure WAF Logs.
N/A metadata.vendor_name O valor está fixado no código como Microsoft.
N/A security_result.action O valor é definido como ALLOW se properties.action for Matched e BLOCK se properties.action for Block.

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