Coletar registros do F5 Shape

Versão do analisador: 1.0

Compatível com:

Neste documento, explicamos 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 os aplicativos contra ataques automatizados, identificando e mitigando bots maliciosos. O Bot Defense usa JavaScript e SDKs nativos para dispositivos móveis para coletar telemetria de navegadores de clientes e dispositivos móveis, examinando essa telemetria antes que as solicitações cheguem ao aplicativo. O serviço oferece painéis e relatórios integrados para visualizar informações detalhadas sobre o tráfego analisado, incluindo ocorrências 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 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

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 de API.
  7. Digite uma Senha e confirme-a no campo Confirmar senha.
  8. Selecione uma Data de validade na lista do calendário.

  9. Clique em Download para gerar e baixar o certificado no formato do arquivo .p12.

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

Criar credenciais do GCP no F5 Distributed Cloud

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

Criar conta de serviço do Google Cloud

  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 que preferir).
    • 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 participantes: 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 download do arquivo de chave JSON será feito automaticamente. Salve esse arquivo com segurança.

Adicionar Google Cloud credenciais do Cloud à F5 Distributed Cloud

  1. Na página inicial do console do F5 Distributed Cloud, selecione Multi-Cloud Network Connect ou Shared Configuration.
  2. No menu de navegação à esquerda, acesse Manage > Site Management > Cloud Credentials.
  3. Clique em Adicionar credenciais do Cloud.
  4. Na seção Metadados, insira um Nome (por exemplo, gcp-secops-logs).
  5. Na lista Tipo de credenciais do Cloud, 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 Blindfolded.
    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 global da F5 Distributed Cloud transmite registros para o GCS a cada 5 minutos no formato NDJSON (JSON delimitado por novas linhas).

Criar receptor de registros global

  1. Na página inicial do console do F5 Distributed Cloud, selecione Multi-Cloud Network Connect ou Shared Configuration.
    • Para 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
    • Ocorrências de segurança: ocorrências de segurança do Bot Defense e do WAF
    • Registros de auditoria: registros de auditoria de configuração e administrativos
    • Registros de solicitação de DNS: registros de consulta DNS
  6. Na lista Seleção de mensagens de registro:

    • Se 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 de Configuração compartilhada, escolha uma das seguintes opções:
      • Selecionar registros do namespace atual: envia registros apenas 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 de 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 do lote: selecione Segundos de tempo limite e insira um valor (padrão: 300 segundos).
    • Máximo de eventos em lote: selecione Máximo de eventos e insira um valor entre 32 e 2.000 (opcional).
    • Bytes em lote: selecione Máximo de bytes e insira um valor entre 4096 e 1048576 (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ê verá as 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

A 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 bucket do GCS. É necessário conceder a essa conta de serviço acesso ao bucket.

Encontrar o e-mail da conta de serviço

  1. Acesse Configurações > Gerenciamento de dados > Feeds. Se você estiver em uma plataforma somente SIEM, acesse Configurações > 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 Get Service Account. 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 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 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 desse feed.

  11. Clique em Próxima.

  12. Revise a configuração do novo 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 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 participantes: 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 Mesclado de rótulos criados de vários campos
intermediário intermediário Valor copiado diretamente se não estiver vazio
descrição metadata.description Valor copiado diretamente
target, has_principal_machine metadata.event_type Defina como NETWORK_HTTP se target != "", 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 em 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, caso contrário, msg.trueClientIP, caso contrário, 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, caso contrário, msg.trueClientIP, caso contrário, o primeiro IP de X-Forwarded-For se != src
msg.requestHeaders principal.resource.attribute.labels Mesclado 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 Mesclado de rótulos criados de vários campos
act, msg.transactionResult security_result.action Defina 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 de act se não estiver vazio, caso contrário, msg.transactionResult
gravidade, security_result.severity Defina como HIGH se estiver em Error, error, warning; CRITICAL se corresponder a critical; MEDIUM se for notice; LOW se estiver em 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 Mesclado 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 alterações
requestHeaders_id_array.Referer network.http.referral_url Mapeado do registro de alterações
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 alterações

Registro de alterações

Confira o registro de alterações deste analisador

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