Coletar registros do F5 Shape

Versão do analisador:1.0

Compatível com:

Este documento explica como ingerir registros do F5 Shape no Google Security Operations usando o Google Cloud Storage V2.

O Distributed Cloud Bot Defense da F5 (antigo Shape Security) protege aplicativos contra ataques automatizados ao identificar e reduzir bots maliciosos. A Bot Defense usa JavaScript e SDKs nativos para dispositivos móveis para coletar telemetria de navegadores clientes e dispositivos móveis, examinando essa telemetria antes que as solicitações cheguem ao seu aplicativo. O serviço oferece painéis e relatórios integrados para visualizar informações detalhadas sobre o tráfego analisado, incluindo eventos de segurança, registros de acesso e registros de auditoria.

Antes de começar

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

  • Uma instância do Google SecOps
  • Um projeto do GCP com a API Storage do Cloud ativada
  • Permissões para criar e gerenciar intervalos do GCS
  • Permissões para gerenciar políticas do IAM em buckets do GCS
  • Acesso privilegiado ao console do F5 Distributed Cloud
  • Uma conta do F5 Distributed Cloud com acesso ao serviço Multi-Cloud Network Connect ou Shared Configuration

Criar um bucket do Google Cloud Storage

  1. Acesse o Console do Google Cloud.
  2. Selecione ou crie um projeto.
  3. No menu de navegação, acesse Cloud Storage > Buckets.
  4. Clique em Criar bucket.
  5. Informe os seguintes detalhes de configuração:

    Configuração Valor
    Nomeie seu bucket Insira um nome globalmente exclusivo (por exemplo, f5-xc-logs).
    Tipo de local Escolha de acordo com suas necessidades (região, birregional, multirregional).
    Local Selecione o local (por exemplo, us-central1).
    Classe de armazenamento Padrão (recomendado para registros acessados com frequência).
    Controle de acesso Uniforme (recomendado).
    Ferramentas de proteção Opcional: ative o controle de versões de objetos ou a política de retenção.
  6. Clique em Criar.

Gerar credenciais da API F5 Shape

O F5 Distributed Cloud usa certificados de API (mTLS) ou tokens de API para autenticação. Os certificados de API são recomendados para aumentar a segurança.

Criar certificado de API

  1. Faça login no console do F5 Distributed Cloud.
  2. Na página inicial do console, selecione Administração.
  3. No menu de navegação à esquerda, acesse Gerenciamento pessoal > Credenciais.
  4. Clique em Add Credentials (Adicionar credenciais).
  5. Na seção Metadados, insira um Nome para o certificado (por exemplo, secops-integration).
  6. Na lista Tipo de credencial, selecione Certificado da API.
  7. Digite uma Senha e confirme no campo Confirmar senha.
  8. Selecione uma Data de expiração na lista do calendário.

  9. Clique em Fazer o download para gerar e baixar o certificado no formato de arquivo .p12.

  10. Salve o arquivo de certificado e a senha baixados em um local seguro para uso posterior.

Criar credenciais do GCP Cloud na F5 Distributed Cloud

O F5 Distributed Cloud exige credenciais de conta de serviço Google Cloud para gravar registros no seu bucket do GCS.

Criar Google Cloud conta de serviço

  1. No console do GCP, acesse IAM e administrador > Contas de serviço.
  2. Clique em Criar conta de serviço.
  3. Informe os seguintes detalhes de configuração:
    • Nome da conta de serviço: insira f5-xc-log-writer (ou o nome de sua preferência).
    • Descrição da conta de serviço: insira Service account for F5 Distributed Cloud to write logs to GCS.
  4. Clique em Criar e continuar.
  5. Na seção Conceder a essa conta de serviço acesso ao projeto:
    1. Clique em Selecionar papel.
    2. Pesquise e selecione Administrador de objetos do Storage.
  6. Clique em Continuar.
  7. Clique em Concluído.

Conceder permissões do IAM no bucket do GCS

  1. Acesse Cloud Storage > Buckets.
  2. Clique no nome do bucket (por exemplo, f5-xc-logs).
  3. Acesse a guia Permissões.
  4. Clique em Conceder acesso.
  5. Informe os seguintes detalhes de configuração:
    • Adicionar principais: insira o e-mail da conta de serviço (por exemplo, f5-xc-log-writer@PROJECT_ID.iam.gserviceaccount.com).
    • Atribuir papéis: selecione Administrador de objetos do Storage.
  6. Clique em Salvar.

Criar chave da conta de serviço

  1. No console do GCP, acesse IAM e administrador > Contas de serviço.
  2. Encontre a conta de serviço (por exemplo, f5-xc-log-writer) e clique nela.
  3. Acesse a guia Chaves.
  4. Clique em Adicionar chave > Criar nova chave.
  5. Selecione JSON como o tipo de chave.
  6. Clique em Criar.
  7. O arquivo de chave JSON será baixado automaticamente. Salve esse arquivo com segurança.

Adicionar Google Cloud credenciais do Cloud ao F5 Distributed Cloud

  1. No console do F5 Distributed Cloud, na página inicial, selecione Multi-Cloud Network Connect ou Shared Configuration.
  2. No menu de navegação à esquerda, acesse Gerenciar > Gerenciamento de sites > Credenciais da nuvem.
  3. Clique em Adicionar credenciais da nuvem.
  4. Na seção Metadados, insira um Nome (por exemplo, gcp-secops-logs).
  5. Na lista Tipo de credenciais da nuvem, selecione Credenciais do GCP.
  6. Na seção Credenciais do GCP, clique em Configurar.
  7. Na seção Chave da conta de serviço:
    1. Na lista Tipo de secret, selecione Secret com máscara.
    2. Na lista Ação, selecione Blindfold New Secret.
    3. Na lista Tipo de política, selecione Integrada.
    4. No campo Secret to Blindfold, cole todo o conteúdo do arquivo de chave JSON baixado.
  8. Clique em Aplicar.
  9. Clique em Salvar e sair.

Configurar o receptor de registros global para o GCS

O F5 Distributed Cloud Global Log Receiver transmite registros para o GCS a cada 5 minutos no formato NDJSON (JSON delimitado por novas linhas).

Criar um receptor de registros global

  1. No console do F5 Distributed Cloud, na página inicial, selecione Multi-Cloud Network Connect ou Shared Configuration.
    • Para o Multi-Cloud Network Connect: acesse Gerenciar > Gerenciamento de registros > Receptor de registros global.
    • Para Configuração compartilhada: acesse Gerenciar > Receptor de registros global.
  2. Clique em Adicionar receptor de registros global.
  3. Na seção Metadados, insira um Nome (por exemplo, secops-gcs-receiver).
  4. Opcional: adicione Marcadores e uma Descrição.
  5. Na lista Tipo de registro, selecione os tipos de registro que você quer coletar:

    • Registros de solicitação: registros de acesso HTTP de balanceadores de carga.
    • Eventos de segurança: eventos de segurança da Bot Defense e do WAF
    • Registros de auditoria: registros de auditoria administrativos e de configuração
    • Registros de solicitações DNS: registros de consultas DNS
  6. Na lista Seleção de mensagens de registro:

    • Se você estiver usando o serviço Multi-Cloud Network Connect, selecione Selecionar registros do namespace atual (namespace do sistema).
    • Se você estiver usando o serviço Configuração compartilhada, escolha uma das seguintes opções:
      • Selecionar registros do namespace atual: envia apenas os registros do namespace compartilhado.
      • Selecionar registros de todos os namespaces: envia registros de todos os namespaces.
      • Selecionar registros em namespaces específicos: digite nomes de namespaces específicos e clique em Adicionar item para adicionar mais.
  7. Na lista Configuração do receptor, selecione Bucket do GCP.

  8. Na seção Bucket do GCP, forneça a seguinte configuração:

    • Nome do bucket do GCP: insira o nome do bucket do GCS (por exemplo, f5-xc-logs).
    • Credenciais do GCP Cloud: na lista, selecione as credenciais da nuvem que você criou (por exemplo, gcp-secops-logs).

Definir configurações avançadas (opcional)

  1. Clique no botão Mostrar campos avançados.
  2. Na seção Opções de lote, configure o seguinte (opcional):

    • Opções de tempo limite em lote: selecione Segundos de tempo limite e insira um valor (padrão: 300 segundos).
    • Eventos máximos em lote: selecione Eventos máximos e insira um valor entre 32 e 2.000 (opcional).
    • Bytes do lote: selecione Bytes máx. e insira um valor entre 4.096 e 1.048.576 (padrão: 10485760 bytes / 10 MB).

Concluir e testar a configuração

  1. Clique em Salvar e sair para criar o receptor de registros global.
  2. Na lista Receptor de registros global, encontre seu receptor (por exemplo, secops-gcs-receiver).
  3. Na coluna Ações, clique nos três pontos ... e selecione Testar conexão.
  4. Aguarde a conclusão do teste. Uma mensagem de sucesso indica que a conexão está funcionando.

  5. Verifique se os registros estão sendo gravados no GCS:

    1. Acesse Cloud Storage > Buckets no console do GCP.
    2. Clique no nome do bucket (por exemplo, f5-xc-logs).
    3. Em 5 a 10 minutos, você vai ver pastas criadas com a seguinte estrutura:
      • Pasta diária: YYYY-MM-DD/
      • Subpasta por hora: YYYY-MM-DD/HH/
      • Arquivos de registro: YYYY-MM-DD/HH/logs_YYYYMMDDHHMMSS.ndjson.gz

Configurar a lista de permissões do firewall

O F5 Distributed Cloud exige que intervalos de IP específicos sejam permitidos no firewall para a entrega de registros.

Adicione os seguintes intervalos de endereços IP à lista de permissões do firewall:

  • 193.16.236.64/29
  • 185.160.8.152/29

Recuperar a conta de serviço do Google SecOps

O Google SecOps usa uma conta de serviço exclusiva para ler dados do seu bucket do GCS. Você precisa conceder a essa conta de serviço acesso ao seu bucket.

Receber o e-mail da conta de serviço

  1. Acesse Configurações do SIEM > Feeds.
  2. Clique em Adicionar novo feed.
  3. Clique em Configurar um único feed.
  4. No campo Nome do feed, insira um nome para o feed (por exemplo, F5 Distributed Cloud Bot Defense).
  5. Selecione Google Cloud Storage V2 como o Tipo de origem.
  6. Selecione F5_SHAPE como o Tipo de registro.
  7. Clique em Receber conta de serviço. Um e-mail exclusivo da conta de serviço será exibido, por exemplo:

    secops-12345678@secops-gcp-prod.iam.gserviceaccount.com
    
  8. Copie o endereço de e-mail para usar na próxima etapa.

  9. Clique em Próxima.

  10. Especifique valores para os seguintes parâmetros de entrada:

    • URL do bucket de armazenamento: insira o URI do bucket do GCS com o caminho do prefixo:

      gs://f5-xc-logs/
      
      • Substitua f5-xc-logs pelo nome real do bucket do GCS.
      • Se você configurou um prefixo específico no receptor de registros global, inclua-o no caminho (por exemplo, gs://f5-xc-logs/bot-defense/).
    • Opção de exclusão da fonte: selecione a opção de exclusão de acordo com sua preferência:

      • Nunca: nunca exclui arquivos após as transferências (recomendado para testes).
      • Excluir arquivos transferidos: exclui os arquivos após a transferência.
      • Excluir arquivos transferidos e diretórios vazios: exclui arquivos e diretórios vazios após a transferência.

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

    • Namespace do recurso: o namespace do recurso.

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

  11. Clique em Próxima.

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

Conceder permissões do IAM à conta de serviço do Google SecOps

A conta de serviço do Google SecOps precisa do papel Leitor de objetos do Storage no seu bucket do GCS.

  1. Acesse Cloud Storage > Buckets.
  2. Clique no nome do bucket (por exemplo, f5-xc-logs).
  3. Acesse a guia Permissões.
  4. Clique em Conceder acesso.
  5. Informe os seguintes detalhes de configuração:
    • Adicionar principais: cole o e-mail da conta de serviço do Google SecOps.
    • Atribuir papéis: selecione Leitor de objetos do Storage.
  6. Clique em Salvar.

Tabela de mapeamento de UDM

Campo de registro Mapeamento de UDM Lógica
msg.requestHeaders.Proxy-Client-IP, msg.requestHeaders.WF-Forwarded-For, msg.requestHeaders.X-Forwarded-For, msg.requestHeaders.wl-proxy-client-ip, msg.hashedUserAgent, msg.transactionId, msg.hashedUsername, msg.dcgShapeFailedOn, ShapeShifterId, eventType, eventId, latRequest, latResponse, latTotal, latRspWait, count, latEccWait additional.fields Unidos de rótulos criados com base em vários campos
intermediário intermediário O valor é copiado diretamente se não estiver vazio
descrição metadata.description Valor copiado diretamente
target, has_principal_machine metadata.event_type Definido como NETWORK_HTTP se target != "", caso contrário, STATUS_UPDATE se has_principal_machine == true, caso contrário, GENERIC_EVENT
app network.application_protocol Valor em maiúsculas
requestMethod, msg.method network.http.method Valor de requestMethod se não estiver vazio, caso contrário, msg.method
requestClientApplication, msg.requestHeaders.User-Agent network.http.parsed_user_agent Valor de requestClientApplication se não estiver vazio. Caso contrário, msg.requestHeaders.User-Agent, convertido para user agent analisado.
requestContext, msg.requestHeaders.Referer network.http.referral_url Valor de requestContext se não estiver vazio. Caso contrário, msg.requestHeaders.Referer.
msg.sseResponseCode, prCode network.http.response_code Valor de msg.sseResponseCode se não estiver vazio, caso contrário, prCode, convertido em número inteiro.
requestClientApplication, msg.requestHeaders.User-Agent network.http.user_agent Valor de requestClientApplication se não estiver vazio. Caso contrário, msg.requestHeaders.User-Agent
requestHeader.x-shape-src-virtual observer.ip Valor copiado diretamente
participante participante Valor copiado diretamente
msg.host principal.asset.hostname Valor copiado diretamente
src, msg.src, msg.trueClientIP, requestHeader.X-Forwarded-For principal.asset.ip Valor de src se não estiver vazio, caso contrário, msg.src, msg.trueClientIP ou o primeiro IP de X-Forwarded-For se != src
msg.host principal.hostname Valor copiado diretamente
src, msg.src, msg.trueClientIP, requestHeader.X-Forwarded-For principal.ip Valor de src se não estiver vazio, caso contrário, msg.src, msg.trueClientIP ou o primeiro IP de X-Forwarded-For se != src
msg.requestHeaders principal.resource.attribute.labels Unidos de pares de chave-valor em msg.requestHeaders
msg.uri principal.url Valor copiado diretamente
security_result security_result Valor copiado diretamente
deviceExternalId security_result.about.asset_id Valor copiado diretamente
flowLabel, agentLabel, requestHeader.Content-Length, requestHeader.Content-Type, requestHeader.Accept, requestHeader.Accept-Encoding, browserType, accountInfo, requestHeader.Via, asn, tid, ctag, requestHeader.Cache-Control, transactionResult security_result.about.labels Unidos de rótulos criados com base em vários campos
act, msg.transactionResult security_result.action Definido como ALLOW se act corresponder a PASS e isAttack, caso contrário, UNKNOWN_ACTION; ou ALLOW se msg.transactionResult == Success, BLOCK se Failure
act, msg.transactionResult security_result.action_details Valor da ação, se não estiver vazio, caso contrário, msg.transactionResult
gravidade, security_result.severity Definido como "HIGH" se for "Error", "error", "warning"; "CRITICAL" se corresponder a "critical"; "MEDIUM" se for "notice"; "LOW" se for "information", "info", "INFO"
gravidade, security_result.severity_details Valor copiado diretamente
attackCause security_result.threat_name Valor copiado diretamente
destino destino Valor copiado diretamente
appName target.application Valor copiado diretamente
dst, msg.dst target.asset.ip Valor de "dst" se não estiver vazio. Caso contrário, "msg.dst".
dhost target.hostname Valor copiado diretamente
dst, msg.dst target.ip Valor de "dst" se não estiver vazio. Caso contrário, "msg.dst".
countryName target.location.country_or_region Valor copiado diretamente
dpt target.port Convertido para número inteiro
msg.responseHeaders target.resource.attribute.labels Unidos de pares de chave-valor em msg.responseHeaders
solicitação target.url Valor copiado diretamente
requestHeader.X-Forwarded-For intermediary.ip Definido como IPs subsequentes da matriz X-Forwarded-For
metadata.product_name Defina como "Forma".
metadata.vendor_name Defina como "F5"
requestHeaders_id_array.User-Agent network.http.user_agent Mapeado do registro de mudanças
requestHeaders_id_array.Referer network.http.referral_url Mapeado do registro de mudanças
requestHeaders_id_array.Proxy-Client-IP", "requestHeaders_id_array.WF-Forwarded-For", "requestHeaders_id_array.X-Forwarded-For", and "requestHeaders_id_array.wl-proxy-client-ip additional.fields Mapeado do registro de mudanças

Registro de alterações

Ver o registro de alterações deste analisador

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