Coletar registros do F5 Shape

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 identificando e reduzindo 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 Cloud Storage ativada
  • Permissões para criar e gerenciar buckets 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 seu projeto ou crie um novo.
  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 com base nas suas necessidades (região, birregião, multirregião).
    Local Selecione o local (por exemplo, us-central1).
    Classe de armazenamento Standard (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

A 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. Insira uma Senha e confirme no campo Confirmar senha.
  8. Selecione uma Data de expiração na lista de calendários.

  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 lugar seguro para uso posterior.

Criar credenciais do Cloud do GCP na F5 Distributed Cloud

O F5 Distributed Cloud exige credenciais de conta de serviço Google Cloud para gravar registros no 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 Conceda 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 e clique na conta de serviço (por exemplo, f5-xc-log-writer).
  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 da nuvem 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 que você baixou.
  8. Clique em Aplicar.
  9. Clique em Salvar e sair.

Configurar o receptor de registros global para o GCS

O receptor de registros globais do F5 Distributed Cloud transmite registros para o GCS a cada 5 minutos no formato NDJSON (JSON delimitado por nova linha).

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. Se quiser, adicione Rótulos 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 de configuração e administrativos
    • 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 registros somente do namespace compartilhado.
      • Selecionar registros de todos os namespaces: envia registros de todos os namespaces.
      • Selecionar registros em namespaces específicos: insira 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).
    • Lote de eventos máximos: 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 bem-sucedida.
      • Excluir arquivos transferidos e diretórios vazios: exclui arquivos e diretórios vazios após a transferência bem-sucedida.

    • Idade máxima do arquivo: inclui arquivos modificados nos últimos 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 de 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 do UDM

Campo de registro Mapeamento do 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 Mesclados 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 Mesclados 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 estiver em Error, error, warning; CRITICAL se corresponder a critical; MEDIUM se notice; LOW se estiver em information, info, INFO
gravidade, security_result.severity_details Valor copiado diretamente
attackCause security_result.threat_name Valor copiado diretamente
target target 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 Definido como "Forma"
metadata.vendor_name Defina como "F5"

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