Coletar registros de EDR do Uptycs

Compatível com:

Este documento explica como ingerir registros do EDR da Uptycs no Google Security Operations usando o Amazon S3. O analisador transforma registros JSON brutos em um modelo de dados unificado (UDM). Primeiro, ele extrai campos do JSON, realiza limpeza e enriquecimento de dados e mapeia as informações relevantes para os campos correspondentes do UDM, processando vários tipos de dados e casos extremos para garantir uma representação precisa e consistente no esquema do UDM.

Antes de começar

Verifique se você tem os pré-requisitos a seguir:

  • Uma instância do Google SecOps
  • Acesso privilegiado ao Uptycs
  • Acesso privilegiado à AWS (S3, IAM)

Conferir os pré-requisitos do Uptycs

  1. Faça login no Admin Console da Uptycs.
  2. Acesse Configuração > Usuários.
  3. Selecione seu usuário ou crie um usuário de conta de serviço.
  4. Clique em Chave de API do usuário.
  5. Copie e salve em um local seguro os seguintes detalhes:
    • Chave de API
    • API Secret
    • ID do cliente
    • Domínio da API (derivado do seu URL do Uptycs, por exemplo, mystack.uptycs.io)

Configurar o bucket do AWS S3 e o IAM para o Google SecOps

  1. Crie um bucket do Amazon S3 seguindo este guia do usuário: Como criar um bucket.
  2. Salve o Nome e a Região do bucket para referência futura (por exemplo, uptycs-telemetry-export).
  3. Crie um usuário seguindo este guia: Como criar um usuário do IAM.
  4. Selecione o usuário criado.
  5. Selecione a guia Credenciais de segurança.
  6. Clique em Criar chave de acesso na seção Chaves de acesso.
  7. Selecione Serviço de terceiros como Caso de uso.
  8. Clique em Próxima.
  9. Opcional: adicione uma tag de descrição.
  10. Clique em Criar chave de acesso.
  11. Clique em Fazer o download do arquivo CSV para salvar a chave de acesso e a chave de acesso secreta para referência futura.
  12. Clique em Concluído.
  13. Selecione a guia Permissões.
  14. Clique em Adicionar permissões na seção Políticas de permissões.
  15. Selecione Adicionar permissões.
  16. Selecione Anexar políticas diretamente.
  17. Pesquise a política AmazonS3FullAccess.
  18. Selecione a política.
  19. Clique em Próxima.
  20. Clique em Adicionar permissões

Configurar a política e o papel do IAM para uploads do S3

  1. No console da AWS, acesse IAM > Políticas.
  2. Clique em Criar política > guia JSON.
  3. Insira a seguinte política:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "AllowPutObjects",
          "Effect": "Allow",
          "Action": "s3:PutObject",
          "Resource": "arn:aws:s3:::uptycs-telemetry-export/*"
        },
        {
          "Sid": "AllowListBucket",
          "Effect": "Allow",
          "Action": "s3:ListBucket",
          "Resource": "arn:aws:s3:::uptycs-telemetry-export"
        }
      ]
    }
    
    • Substitua uptycs-telemetry-export se você tiver inserido um nome de bucket diferente.
  4. Clique em Próxima > Criar política.

  5. Nomeie a política como uptycs-s3-write-policy.

  6. Acesse IAM > Usuários.

  7. Selecione o usuário criado para exportações da Uptycs.

  8. Clique em Adicionar permissões > Anexar políticas diretamente.

  9. Pesquise e selecione uptycs-s3-write-policy.

  10. Clique em Próxima > Adicionar permissões.

Configurar a exportação de telemetria bruta do Uptycs

  1. Faça login no console do Uptycs.
  2. Acesse a seção de configuração de exportação.
  3. Configure o destino de exportação do S3.
  4. Informe os seguintes detalhes de configuração:
    • Tipo de exportação: selecione Telemetria bruta.
    • Destino: selecione Amazon S3.
    • Formato: selecione JSON.
    • Bucket do S3: insira uptycs-telemetry-export.
    • Prefixo do caminho do S3: insira telemetry/.
    • Região da AWS: selecione a região do bucket.
    • ID da chave de acesso da AWS: insira a chave de acesso do usuário do IAM.
    • Chave de acesso secreta da AWS: insira a chave de acesso secreta.
    • Tipos de evento: selecione todos os tipos de telemetria necessários.
  5. Teste e ative a exportação.

Criar um usuário do IAM com acesso somente leitura para o Google SecOps

  1. Acesse Console da AWS > IAM > Usuários.
  2. Clique em Add users.
  3. Informe os seguintes detalhes de configuração:
    • Usuário: insira secops-reader.
    • Tipo de acesso: selecione Chave de acesso – Acesso programático.
  4. Clique em Criar usuário.
  5. Anexe a política de leitura mínima (personalizada): Usuários > secops-reader > Permissões > Adicionar permissões > Anexar políticas diretamente > Criar política.
  6. No editor JSON, insira a seguinte política:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": ["s3:GetObject"],
          "Resource": "arn:aws:s3:::uptycs-telemetry-export/*"
        },
        {
          "Effect": "Allow",
          "Action": ["s3:ListBucket"],
          "Resource": "arn:aws:s3:::uptycs-telemetry-export"
        }
      ]
    }
    
  7. Defina o nome como secops-reader-policy.

  8. Acesse Criar política > pesquise/selecione > Próxima > Adicionar permissões.

  9. Acesse Credenciais de segurança > Chaves de acesso > Criar chave de acesso.

  10. Faça o download do CSV (esses valores são inseridos no feed).

Configurar um feed no Google SecOps para ingerir registros do Uptycs

  1. Acesse Configurações do SIEM > Feeds.
  2. Clique em + Adicionar novo feed.
  3. No campo Nome do feed, insira um nome para o feed (por exemplo, Uptycs EDR logs).
  4. Selecione Amazon S3 V2 como o Tipo de origem.
  5. Selecione EDR da Uptycs como o Tipo de registro.
  6. Clique em Próxima.
  7. Especifique valores para os seguintes parâmetros de entrada:
    • URI do S3: s3://uptycs-telemetry-export/telemetry/
    • Opções de exclusão da fonte: selecione a opção de exclusão de acordo com sua preferência.
    • Idade máxima do arquivo: inclui arquivos modificados no último número de dias. O padrão é de 180 dias.
    • ID da chave de acesso: chave de acesso do usuário com acesso ao bucket do S3.
    • Chave de acesso secreta: chave secreta do usuário com acesso ao bucket do S3.
    • Namespace do recurso: o namespace do recurso.
    • Rótulos de ingestão: o rótulo aplicado aos eventos deste feed.
  8. Clique em Próxima.
  9. Revise a nova configuração do feed na tela Finalizar e clique em Enviar.

Tabela de mapeamento do UDM

Campo de registro Mapeamento do UDM Lógica
osquery_raw_data.answer read_only_udm.network.dns.answers.name Valor extraído de osquery_raw_data.answer se osquery_raw_data.answer não estiver vazio.
osquery_raw_data.container_id read_only_udm.metadata.product_log_id Valor extraído de osquery_raw_data.container_id se osquery_raw_data.container_id não estiver vazio.
osquery_raw_data.local_address read_only_udm.principal.ip Valor extraído de osquery_raw_data.local_address se osquery_raw_data.local_address não estiver vazio e for um endereço IP válido.
osquery_raw_data.local read_only_udm.principal.ip Caso contrário, o valor será extraído de osquery_raw_data.local se ele não estiver vazio e for um endereço IP válido.
osquery_raw_data.local_port read_only_udm.principal.port Valor extraído de osquery_raw_data.local_port e convertido em número inteiro se osquery_raw_data.local_port não estiver vazio.
osquery_raw_data.md5 read_only_udm.target.process.file.md5 Valor extraído de osquery_raw_data.md5 se osquery_raw_data.md5 não estiver vazio.
osquery_raw_data.port read_only_udm.target.port Valor extraído de osquery_raw_data.port e convertido em número inteiro se osquery_raw_data.port não estiver vazio.
osquery_raw_data.question read_only_udm.network.dns.questions.name Valor extraído de osquery_raw_data.question se osquery_raw_data.question não estiver vazio.
osquery_raw_data.remote_address read_only_udm.intermediary.ip Valor extraído de osquery_raw_data.remote_address se osquery_raw_data.remote_address não estiver vazio.
osquery_raw_data.remote_port read_only_udm.intermediary.port Valor extraído de osquery_raw_data.remote_port e convertido em número inteiro se osquery_raw_data.remote_port não estiver vazio.
osquery_raw_data.type read_only_udm.network.dns.questions.type Valor extraído de osquery_raw_data.type e convertido em número inteiro se osquery_raw_data.type não estiver vazio.
osquery_raw_data.uid read_only_udm.principal.user.userid Valor extraído de osquery_raw_data.uid se osquery_raw_data.uid não estiver vazio e não for igual a "0".
osquery_raw_data.worker_instance_id read_only_udm.principal.user.userid Caso contrário, o valor será extraído de osquery_raw_data.worker_instance_id se osquery_raw_data.worker_instance_id não estiver vazio.
upt_asset_group_id read_only_udm.principal.user.group_identifiers Valor extraído de upt_asset_group_id se upt_asset_group_id não estiver vazio.
upt_asset_group_name read_only_udm.principal.group.group_display_name Valor extraído de upt_asset_group_name se upt_asset_group_name não estiver vazio.
upt_asset_id read_only_udm.principal.asset.asset_id String concatenada "UPT ASSET ID:" com o valor de upt_asset_id se upt_asset_id não estiver vazio.
upt_hash read_only_udm.target.file.md5 Todas as ocorrências de "-" são substituídas por "" em upt_hash. Em seguida, o valor é atribuído a read_only_udm.target.file.md5 se upt_hash não estiver vazio.
upt_hostname read_only_udm.principal.hostname Valor extraído de upt_hostname se upt_hostname não estiver vazio.
upt_resource_type read_only_udm.target.resource.type Valor extraído de upt_resource_type se upt_resource_type não estiver vazio.
upt_time read_only_udm.metadata.event_timestamp.seconds Valor extraído de upt_time se upt_time não estiver vazio.
read_only_udm.metadata.event_type O valor é definido como "PROCESS_LAUNCH" se osquery_raw_data.pid não estiver vazio. O valor é definido como "NETWORK_DNS" se osquery_raw_data.question não estiver vazio. O valor é definido como "GENERIC_EVENT" se event_type estiver vazio.
read_only_udm.metadata.log_type O valor é definido como "UPTYCS_EDR".
read_only_udm.metadata.product_name O valor é definido como "UPTYCS_EDR".
read_only_udm.metadata.vendor_name O valor é definido como "UPTYCS".
read_only_udm.network.application_protocol O valor é definido como "DNS" se "osquery_raw_data.question" não estiver vazio.
read_only_udm.security_result.action O valor é definido como "ALLOW" se osquery_raw_data.return_code for igual a "SUCCESS" ou osquery_raw_data.success for igual a "1".
read_only_udm.target.process.command_line Valor extraído de osquery_raw_data.cmdline se osquery_raw_data.cmdline não estiver vazio.
read_only_udm.target.process.file.full_path Valor extraído de osquery_raw_data.path se osquery_raw_data.path não estiver vazio.
read_only_udm.target.process.parent_process O valor é construído iterando sobre a matriz ancestor_list em osquery_raw_data.ancestor_list. Para cada elemento na matriz, a linha de comando, o full_path do arquivo e o pid são extraídos e formatados em uma estrutura JSON que representa a cadeia de processos.
read_only_udm.target.process.pid Valor extraído de osquery_raw_data.pid se osquery_raw_data.pid não estiver vazio.

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