Recolha registos do WAF do Azure

Compatível com:

Este documento explica como exportar registos da firewall de aplicações Web (WAF) do Azure para o Google Security Operations através de uma conta de armazenamento do Azure. O analisador processa registos no formato JSON, transformando-os em UDM. Processa registos que contêm uma matriz records iterando através de cada registo e mapeando campos específicos para propriedades da UDM. Se a matriz records estiver ausente, o analisador processa o registo como um único evento, extraindo e mapeando os campos em conformidade.

Antes de começar

Certifique-se de que cumpre os seguintes pré-requisitos:

  • Instância do Google SecOps
  • Um inquilino do Azure ativo
  • Acesso privilegiado ao Azure

Configure a conta de armazenamento do Azure

  1. Na consola do Azure, pesquise Contas de armazenamento.
  2. Clique em Criar.
  3. Especifique valores para os seguintes parâmetros de entrada:
    • Subscrição: selecione a subscrição.
    • Grupo de recursos: selecione o grupo de recursos.
    • Região: selecione a região.
    • Desempenho: selecione o desempenho (padrão recomendado).
    • Redundância: selecione a redundância (GRS ou LRS recomendado).
    • Nome da conta de armazenamento: introduza um nome para a nova conta de armazenamento.
  4. Clique em Rever + criar.
  5. Reveja a vista geral da conta e clique em Criar.
  6. Na página Vista geral da conta de armazenamento, selecione o submenu Chaves de acesso em Segurança + rede.
  7. Clique em Mostrar junto a key1 ou key2.
  8. Clique em Copiar para a área de transferência para copiar a chave.
  9. Guarde a chave num local seguro para utilização posterior.
  10. Na página Vista geral da conta de armazenamento, selecione o submenu Pontos finais em Definições.
  11. Clique em Copiar para a área de transferência para copiar o URL do ponto final do serviço Blob; por exemplo, https://<storageaccountname>.blob.core.windows.net.
  12. Guarde o URL do ponto final numa localização segura para utilização posterior.

Como configurar a exportação de registos para registos do WAF do Azure

  1. Inicie sessão no Portal do Azure com a sua conta privilegiada.
  2. Aceda a Regras do firewall de app Web (WAF) e selecione um WAF para monitorizar.
  3. Selecione Monitorização > Definições de diagnóstico.
  4. Clique em + Adicionar definição de diagnóstico.
    • Introduza um nome descritivo para a definição de diagnóstico.
  5. Selecione allLogs.
  6. Selecione a caixa de verificação Arquivar numa conta de armazenamento como destino.
    • Especifique a Subscrição e a Conta de armazenamento.
  7. Clique em Guardar.

Configure feeds

Existem dois pontos de entrada diferentes para configurar feeds na plataforma Google SecOps:

  • Definições do SIEM > Feeds > Adicionar novo
  • Content Hub > Pacotes de conteúdo > Começar

Como configurar o feed do WAF do Azure

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

    • Source Type: Microsoft Azure Blob Storage V2.
    • URI do Azure: o URL do ponto final do blob.
      • ENDPOINT_URL/BLOB_NAME
        • Substitua o seguinte:
          • ENDPOINT_URL: o URL do ponto final do blob (https://<storageaccountname>.blob.core.windows.net)
          • BLOB_NAME: o nome do blob (por exemplo, <logname>-logs)
    • Opções de eliminação de origens: selecione a opção de eliminação de acordo com as suas preferências de carregamento. Nota: se selecionar a opção Delete transferred files ou Delete transferred files and empty directories, certifique-se de que concedeu as autorizações adequadas à conta de serviço.
    • Idade máxima do ficheiro: inclui ficheiros modificados no último número de dias. A predefinição é 180 dias.
    • Chave partilhada: a chave de acesso ao armazenamento de blobs do Azure. Opções avançadas

    • Nome do feed: um valor pré-preenchido que identifica o feed.

    • Espaço de nomes do recurso: espaço de nomes associado ao feed.

    • Etiquetas de carregamento: etiquetas aplicadas a todos os eventos deste feed.

  4. Clique em Criar feed.

Para mais informações sobre a configuração de vários feeds para diferentes tipos de registos nesta família de produtos, consulte o artigo Configure feeds por produto.

Tabela de mapeamento da UDM

Campo de registo Mapeamento de UDM Lógica
backendPoolName additional.fields[?key=='backendPoolName'].value.string_value O valor é retirado do campo backendPoolName no registo não processado.
backendSettingName additional.fields[?key=='backendSettingName'].value.string_value O valor é retirado do campo backendSettingName no registo não processado.
category metadata.product_event_type O valor é retirado do campo category no registo não processado.
EventEnqueuedUtcTime additional.fields[?key=='EventEnqueuedUtcTime'].value.string_value O valor é retirado do campo EventEnqueuedUtcTime no registo não processado quando o campo records existe.
EventProcessedUtcTime additional.fields[?key=='EventProcessedUtcTime'].value.string_value O valor é retirado do campo EventProcessedUtcTime no registo não processado quando o campo records existe.
operationName additional.fields[?key=='operationName'].value.string_value O valor é retirado do campo operationName no registo não processado.
properties.action additional.fields[?key=='action'].value.string_value O valor é retirado do campo properties.action no registo não processado quando o campo records existe.
properties.action security_result.action_details O valor é retirado do campo properties.action no registo não processado quando o campo records não existe.
properties.clientIP, properties.clientIp principal.asset.ip, principal.ip O valor é retirado do campo properties.clientIP ou properties.clientIp no registo não processado, dando prioridade a clientIP.
properties.clientPort principal.port O valor é retirado do campo properties.clientPort no registo não processado.
properties.clientResponseTime principal.resource.attribute.labels[?key=='Client Response Time'].value O valor é retirado do campo properties.clientResponseTime no registo não processado quando o campo records não existe.
properties.details.data additional.fields[?key=='Properties data'].value.string_value O valor é retirado do campo properties.details.data no registo não processado quando o campo records existe.
properties.details.file principal.process.file.full_path O valor é retirado do campo properties.details.file no registo não processado 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 é retirado da matriz properties.details.matches no registo não processado. O key no UDM é construído com o índice (idx) e matchVariableName. O valor de value é retirado de matchVariableValue.
properties.details.message metadata.description O valor é retirado do campo properties.details.message no registo não processado após a remoção das barras invertidas e das aspas.
properties.details.msg metadata.description O valor é retirado do campo properties.details.msg no registo não processado quando o campo records existe.
properties.httpMethod network.http.method O valor é retirado do campo properties.httpMethod no registo não processado.
properties.httpStatus network.http.response_code O valor é retirado do campo properties.httpStatus no registo não processado.
properties.httpVersion network.application_protocol Se o campo properties.httpVersion contiver HTTP, é atribuído o valor HTTP.
properties.host, properties.hostname, properties.originalHost principal.asset.hostname, principal.hostname O valor é retirado de um dos seguintes elementos: properties.originalHost, properties.host ou properties.hostname, dando-lhes prioridade nessa ordem.
properties.policyId security_result.detection_fields[?key=='policyId'].value O valor é retirado do campo properties.policyId no registo não processado.
properties.policyMode security_result.detection_fields[?key=='policyMode'].value O valor é retirado do campo properties.policyMode no registo não processado quando o campo records existe.
properties.policy additional.fields[?key=='Properties policy'].value.string_value O valor é retirado do campo properties.policy no registo não processado quando o campo records existe.
properties.receivedBytes network.received_bytes O valor é retirado do campo properties.receivedBytes no registo não processado.
properties.requestUri target.url O valor é retirado do campo properties.requestUri no registo não processado.
properties.ruleId security_result.rule_id O valor é retirado do campo properties.ruleId no registo não processado.
properties.ruleName security_result.rule_name O valor é retirado do campo properties.ruleName no registo não processado quando o campo records existe.
properties.ruleName, ruleSetType security_result.rule_name O valor é retirado do campo properties.ruleName ou, se estiver vazio, do campo ruleSetType no registo não processado quando o campo records não existe.
properties.ruleSetVersion security_result.detection_fields[?key=='ruleSetVersion'].value O valor é retirado do campo properties.ruleSetVersion no registo não processado.
properties.sentBytes network.sent_bytes O valor é retirado do campo properties.sentBytes no registo não processado.
properties.serverResponseLatency additional.fields[?key=='Server Response Latency'].value.string_value O valor é retirado do campo properties.serverResponseLatency no registo não processado 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 é retirado do campo properties.sslCipher no registo não processado.
properties.sslClientCertificateIssuerName network.tls.server.certificate.issuer O valor é retirado do campo properties.sslClientCertificateIssuerName no registo não processado.
properties.sslProtocol network.tls.version O valor é retirado do campo properties.sslProtocol no registo não processado.
properties.timeTaken additional.fields[?key=='Properties Timetaken'].value.string_value O valor é retirado do campo properties.timeTaken no registo não processado quando o campo records não existe.
properties.trackingReference additional.fields[?key=='trackingReference'].value.string_value O valor é retirado do campo properties.trackingReference no registo não processado quando o campo records existe.
properties.transactionId network.session_id O valor é retirado do campo properties.transactionId no registo não processado.
properties.userAgent network.http.user_agent O valor é retirado do campo properties.userAgent no registo não processado.
properties.WAFEvaluationTime additional.fields[?key=='Properties WAFEvaluationTime'].value.string_value O valor é retirado do campo properties.WAFEvaluationTime no registo não processado quando o campo records não existe.
properties.WAFMode additional.fields[?key=='Properties WAFMode'].value.string_value O valor é retirado do campo properties.WAFMode no registo não processado quando o campo records não existe.
rec.category metadata.product_event_type O valor é retirado do campo rec.category no registo não processado quando o campo records existe.
rec.operationName additional.fields[?key=='operationName'].value.string_value O valor é retirado do campo rec.operationName no registo não processado quando o campo records existe.
rec.properties.clientIP, rec.properties.clientIp principal.asset.ip, principal.ip O valor é retirado do campo rec.properties.clientIP ou rec.properties.clientIp no registo não processado, dando prioridade a clientIP quando o campo records existe.
rec.properties.clientPort principal.port O valor é retirado do campo rec.properties.clientPort no registo não processado quando o campo records existe.
rec.properties.host principal.asset.hostname, principal.hostname O valor é retirado do campo rec.properties.host no registo não processado quando o campo records existe.
rec.properties.policy additional.fields[?key=='Properties policy'].value.string_value O valor é retirado do campo rec.properties.policy no registo não processado quando o campo records existe.
rec.properties.requestUri target.url O valor é retirado do campo rec.properties.requestUri no registo não processado quando o campo records existe.
rec.properties.ruleName security_result.rule_name O valor é retirado do campo rec.properties.ruleName no registo não processado quando o campo records existe.
rec.properties.trackingReference additional.fields[?key=='trackingReference'].value.string_value O valor é retirado do campo rec.properties.trackingReference no registo não processado quando o campo records existe.
rec.resourceId target.resource.id O valor é retirado do campo rec.resourceId no registo não processado quando o campo records existe.
rec.time metadata.event_timestamp O valor é retirado do campo rec.time no registo não processado quando o campo records existe.
resourceId target.resource.id O valor é retirado do campo resourceId no registo não processado quando o campo records não existe.
timeStamp metadata.event_timestamp O valor é retirado do campo timeStamp no registo não processado quando o campo records não existe.
N/A metadata.event_type O valor é definido como NETWORK_CONNECTION se o principal (nome de anfitrião ou IP do cliente) e o IP de destino estiverem presentes. É definido como STATUS_UPDATE se estiver presente um principal, mas o IP de destino estiver em falta. Caso contrário, a predefinição é GENERIC_EVENT ou o valor do campo event_type.
N/A metadata.log_type O valor está codificado como AZURE_WAF.
N/A metadata.product_name O valor está codificado como Azure WAF Logs.
N/A metadata.vendor_name O valor está codificado 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 da Google SecOps.