Coletar registros do Jamf Security Cloud

Compatível com:

Este documento explica como ingerir registros do Jamf Security Cloud no Google Security Operations usando o Google Cloud Storage ou o Amazon S3. O Jamf Security Cloud é uma plataforma de defesa contra ameaças móveis e segurança de endpoint para dispositivos Apple. Ele gera registros de eventos de detecção de ameaças, compliance e segurança do dispositivo que abrangem proteção da camada de DNS, prevenção contra phishing, filtragem de conteúdo e avaliação de risco do dispositivo. O Jamf Security Cloud exporta registros usando o Data Streams. Cada configuração de fluxo de dados envia exatamente um tipo de dado para um destino.

Antes de começar

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

  • Uma instância do Google SecOps
  • Acesso privilegiado ao portal do Jamf Security Cloud
  • Para o método 1: acesso privilegiado a Google Cloud (Google Cloud Storage, Cloud Run)
  • Para o método 2: acesso privilegiado à AWS (S3, IAM)

Selecionar os tipos de fluxos de dados para exportar

O analisador da Jamf Security Cloud é compatível com todos os seis tipos de fluxo de dados. Crie uma configuração de fluxo de dados separada para cada tipo de dado que você quer ingerir:

  • Eventos de ameaça: eventos de ameaça detectados, incluindo comunicações de rede maliciosas, malware e apps arriscados
  • Tráfego de rede: registros de tráfego de rede processados pela infraestrutura de rede da Jamf.
  • Eventos de acesso: solicitações permitidas e negadas das políticas de acesso de rede Zero Trust (ZTNA) do Jamf Connect.
  • Dados do dispositivo: informações sobre dispositivos
  • Insights de apps: informações sobre aplicativos instalados em dispositivos
  • Dados de vulnerabilidade: detalhes sobre cada vulnerabilidade descoberta e o dispositivo em que ela foi encontrada.

Método 1: Google Cloud Armazenamento

O Jamf Security Cloud não tem um destino de armazenamento Google Cloud integrado, e a Jamf informa que o envio de dados diretamente para o Google SecOps usando a integração HTTP não é compatível. Esse método usa o destino de fluxo de dados HTTP genérico para enviar eventos a uma função do Cloud Run de sua propriedade, que os grava em um bucket do Google Cloud Storage. Em seguida, o Google SecOps ingere o bucket usando um feed do Google Cloud Storage V2.

Criar um bucket do Google Cloud Storage

  1. Acesse o console doGoogle Cloud .
  2. Selecione um 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 exclusivo globalmente, por exemplo, jamf-security-cloud-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: ativar o controle de versões de objetos ou a política de retenção
  6. Clique em Criar.

Criar uma conta de serviço para a função do Cloud Run

  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 jamf-sc-receiver-sa
    • Descrição da conta de serviço: digite Service account for the Cloud Run function that receives Jamf Security Cloud events
  4. Clique em Criar e continuar.
  5. Clique em Concluído.

Conceder à conta de serviço acesso ao bucket

  1. Acesse Cloud Storage > Buckets.
  2. Clique no nome do bucket.
  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, jamf-sc-receiver-sa@PROJECT_ID.iam.gserviceaccount.com).
    • Atribuir papéis: selecione Administrador de objetos do Storage.
  6. Clique em Salvar.

Criar a função do Cloud Run para receber eventos

  1. Gere um token de autenticação forte e salve-o para referência futura. Por exemplo, execute openssl rand -hex 32. O Jamf Security Cloud envia esse token em um cabeçalho da solicitação, e a função rejeita solicitações sem ele.
  2. No console do GCP, acesse o Cloud Run.
  3. Clique em Criar serviço.
  4. Selecione Função (use um editor in-line para criar uma função).
  5. Na seção Configurar, forneça os seguintes detalhes de configuração:

    Configuração Valor
    Nome do serviço jamf-sc-receiver
    Região Selecione a região correspondente ao seu bucket do Cloud Storage (por exemplo, us-central1).
    Ambiente de execução Selecione Python 3.12 ou uma versão mais recente.
  6. Na seção Autenticação, selecione Permitir invocações não autenticadas.

  7. Abra Contêineres, rede, segurança.

  8. Acesse a guia Segurança:

    • Conta de serviço: selecione jamf-sc-receiver-sa
  9. Acesse a guia Contêineres:

    1. Clique em Variáveis e secrets.
    2. Clique em + Adicionar variável para cada variável de ambiente:
    Nome da variável Valor de exemplo Descrição
    GCS_BUCKET jamf-security-cloud-logs Nome do bucket do Cloud Storage
    GCS_PREFIX jamf-security-cloud/ Prefixo para arquivos de registro
    AUTH_TOKEN <your-generated-token> Token que a Jamf Security Cloud envia no cabeçalho X-Auth-Token.
  10. Clique em Criar.

  11. Aguarde a criação do serviço. Depois que o serviço é criado, o editor de código inline é aberto automaticamente.

  12. Insira main no campo Ponto de entrada.

  13. No editor de código em linha, crie dois arquivos:

    • Primeiro arquivo: main.py

      import hashlib
      import os
      from datetime import datetime, timezone
      
      import functions_framework
      from google.cloud import storage
      
      BUCKET = os.environ["GCS_BUCKET"]
      PREFIX = os.environ.get("GCS_PREFIX", "jamf-security-cloud/")
      AUTH_TOKEN = os.environ["AUTH_TOKEN"]
      
      storage_client = storage.Client()
      
      @functions_framework.http
      def main(request):
              if request.headers.get("X-Auth-Token") != AUTH_TOKEN:
                      return ("Unauthorized", 401)
      
              body = request.get_data()
              if not body:
                      return ("OK", 200)
      
              now = datetime.now(timezone.utc)
              digest = hashlib.sha256(body).hexdigest()[:12]
              object_name = f"{PREFIX}{now:%Y/%m/%d}/{now:%Y%m%dT%H%M%S%f}_{digest}.json"
              storage_client.bucket(BUCKET).blob(object_name).upload_from_string(
                      body, content_type="application/json"
              )
              return ("OK", 200)
      
    • Segundo arquivo: requirements.txt

      functions-framework==3.*
      google-cloud-storage==2.*
      
  14. Clique em Salvar e implantar novamente.

  15. Copie e salve o URL do serviço (por exemplo, https://jamf-sc-receiver-abc123-uc.a.run.app). Você vai usar o nome do host na próxima seção.

Configurar um fluxo de dados HTTP genérico no Jamf Security Cloud

  1. Faça login no portal do Jamf Security Cloud.
  2. Acesse Integrações > Fluxos de dados.
  3. Clique em Nova configuração.
  4. Selecione o tipo de fluxo de dados (por exemplo, Eventos de ameaça).
  5. Selecione HTTP genérico como o tipo de destino do fluxo de dados.
  6. Clique em Continuar.
  7. Informe os seguintes detalhes de configuração:
    • Protocolo: selecione https
    • Nome do host/IP do servidor: digite o nome do host do serviço do Cloud Run (por exemplo, jamf-sc-receiver-abc123-uc.a.run.app).
    • Porta: insira 443.
    • Endpoint: insira /
    • Outros cabeçalhos: clique em Adicionar cabeçalho e insira o nome X-Auth-Token com o token gerado como valor.
  8. Clique em Testar configuração e verifique se o teste foi concluído.
  9. Clique no botão Ativar configuração para ativar o fluxo de dados.
  10. Clique em Salvar.
  11. Repita essas etapas para cada tipo de fluxo de dados adicional que você quer exportar.

Recuperar a conta de serviço do Google SecOps

  1. Faça login no console do Google SecOps.
  2. Acesse Configurações do SIEM > Feeds.
  3. Clique em Adicionar novo feed.
  4. Clique em Configurar um único feed.
  5. Selecione Google Cloud Storage V2 como o Tipo de origem.
  6. Selecione JAMF Security Cloud 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:

    chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com
    
  8. Copie o endereço de e-mail. Ela será usada na próxima etapa.

Conceda à conta de serviço do Google SecOps acesso ao bucket

  1. Acesse Cloud Storage > Buckets.
  2. Clique no nome do bucket.
  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.

Configurar um feed no Google SecOps para ingerir dados do Google Cloud Storage

  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, Jamf Security Cloud logs).
  5. Selecione Google Cloud Storage V2 como o Tipo de origem.
  6. Selecione JAMF Security Cloud como o Tipo de registro.
  7. Clique em Próxima.
  8. Especifique valores para os seguintes parâmetros de entrada:

    Campo Valor
    URI do bucket de armazenamento gs://jamf-security-cloud-logs/jamf-security-cloud/
    Opção de exclusão da origem Selecione a opção de exclusão de acordo com sua preferência
    Idade máxima do arquivo (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
    • Substitua jamf-security-cloud-logs pelo nome real do bucket.
    • Sempre inclua a barra final (/) no fim do URI.
  9. Clique em Próxima.

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

Método 2: Amazon S3

O AWS S3 de propriedade do cliente é o único destino de armazenamento em nuvem compatível nativamente com os fluxos de dados do Jamf Security Cloud. O Jamf Security Cloud grava eventos diretamente no seu bucket do S3, e o Google SecOps os ingere usando um feed do Amazon S3 V2.

Configurar o bucket do AWS S3 e a função do IAM para o Jamf Security Cloud

  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, jamf-security-cloud-logs).
  3. Crie uma função do IAM que o Jamf Security Cloud assume para fazer upload de dados para o bucket. A função exige a permissão s3:PutObject no bucket e a conta da AWS da Jamf listada como uma entidade confiável.

  4. Salve a função do IAM ARN para referência futura.

Configurar um fluxo de dados do AWS S3 de propriedade do cliente no Jamf Security Cloud

  1. Faça login no portal do Jamf Security Cloud.
  2. Acesse Integrações > Fluxos de dados.
  3. Clique em Nova configuração.
  4. Selecione o tipo de fluxo de dados (por exemplo, Eventos de ameaça).
  5. Selecione AWS S3 de propriedade do cliente como o tipo de destino do fluxo de dados.
  6. Clique em Continuar.
  7. Informe os seguintes detalhes de configuração:
    • Nome do bucket do Amazon S3: insira o nome do bucket (por exemplo, jamf-security-cloud-logs).
    • Papel do IAM assumido pelo Jamf: insira o ARN do papel do IAM que você criou para o Jamf Security Cloud.
    • Região: selecione a região do bucket do S3.
  8. Clique em Criar configuração.
  9. Opcional: em Configurações avançadas, selecione JSON como o formato da mensagem.

  10. Clique no botão Ativar configuração para ativar o fluxo de dados.

  11. Clique em Salvar.

  12. Repita essas etapas para cada tipo de fluxo de dados adicional que você quer exportar.

Criar um usuário e uma chave de acesso do IAM para o Google SecOps

  1. Crie um usuário seguindo este guia: Como criar um usuário do IAM.
  2. Selecione o usuário criado.
  3. Selecione a guia Credenciais de segurança.
  4. Clique em Criar chave de acesso na seção Chaves de acesso.
  5. Selecione Serviço de terceiros como o Caso de uso.
  6. Clique em Próxima.
  7. Opcional: adicione uma tag de descrição.
  8. Clique em Criar chave de acesso.
  9. Clique em Baixar arquivo .csv para salvar a Chave de acesso e a Chave de acesso secreta para referência futura.
  10. Clique em Concluído.
  11. Selecione a guia Permissões.
  12. Clique em Adicionar permissões na seção Políticas de permissões.
  13. Selecione Adicionar permissões.
  14. Selecione Anexar políticas diretamente.
  15. Pesquise a política AmazonS3FullAccess.
  16. Selecione a política.
  17. Clique em Próxima.
  18. Clique em Adicionar permissões

Configurar um feed no Google SecOps para fazer a ingestão do Amazon S3

  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, Jamf Security Cloud logs).
  5. Selecione Amazon S3 V2 como o Tipo de origem.
  6. Selecione JAMF Security Cloud como o Tipo de registro.
  7. Clique em Próxima.
  8. Especifique valores para os seguintes parâmetros de entrada:

    Campo Valor
    URI do S3 s3://jamf-security-cloud-logs/
    Opção de exclusão da origem Selecione a opção de exclusão de acordo com sua preferência
    Idade máxima do arquivo (dias) O padrão é 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 a ser aplicado aos eventos deste feed
    • Substitua jamf-security-cloud-logs pelo nome real do bucket do S3.
  9. Clique em Próxima.

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

Tabela de mapeamento de UDM

Campo de registro Mapeamento do UDM Lógica
accessPoint_label additional.fields Mesclado
action_label additional.fields Mesclado
activated_label additional.fields Mesclado
alertId_label additional.fields Mesclado
appName_label additional.fields Mesclado
appRiskIndexThreshold_label additional.fields Mesclado
appVersion_label additional.fields Mesclado
app_id_label additional.fields Mesclado
carrierName_label additional.fields Mesclado
category_label additional.fields Mesclado
deploymentState_label additional.fields Mesclado
developer_label additional.fields Mesclado
deviceId_label additional.fields Mesclado
deviceModel_label additional.fields Mesclado
deviceName_label additional.fields Mesclado
deviceRiskIndex_label additional.fields Mesclado
device_os_label additional.fields Mesclado
device_user_name_label additional.fields Mesclado
eventTimeUtcMs_label additional.fields Mesclado
eventType_label additional.fields Mesclado
hwPlatform_label additional.fields Mesclado
imei_label additional.fields Mesclado
installationTimeUtcMs_label additional.fields Mesclado
installedBy_label additional.fields Mesclado
isoCountryCode_label additional.fields Mesclado
lastMdmCheckInUtcMs_label additional.fields Mesclado
lastNetworkTrafficUtcMs_label additional.fields Mesclado
lastUpdatedUtcMs_label additional.fields Mesclado
loc_isoCountryCode_label additional.fields Mesclado
mcc_label additional.fields Mesclado
mdmId_label additional.fields Mesclado
mnc_label additional.fields Mesclado
osVersion_label additional.fields Mesclado
packageName_label additional.fields Mesclado
parentId_label additional.fields Mesclado
parentId_label_1 additional.fields Mesclado
platform_label additional.fields Mesclado
profileId_label additional.fields Mesclado
profileName_label additional.fields Mesclado
profileStatus_label additional.fields Mesclado
recordType_label additional.fields Mesclado
resellerId_label additional.fields Mesclado
routeName_label additional.fields Mesclado
signatureId_id_label additional.fields Mesclado
signatureId_name_label additional.fields Mesclado
softwareId_label additional.fields Mesclado
softwareName_label additional.fields Mesclado
softwareVersion_label additional.fields Mesclado
ssid_label additional.fields Mesclado
system_label additional.fields Mesclado
threat_result_label additional.fields Mesclado
triggerTimeUtcMs_label additional.fields Mesclado
triggerType_label additional.fields Mesclado
types_list additional.fields Mesclado
userId_label additional.fields Mesclado
user_tld_label additional.fields Mesclado
vpnActive_label additional.fields Mesclado
wanderaAppVersion_label additional.fields Mesclado
wifiActive_label additional.fields Mesclado
event_data.receiptTime metadata.collected_timestamp Mapeado diretamente
event_data.cve.description metadata.description Mapeado diretamente
event_data_event_dataType_description metadata.description Mapeado diretamente
event_data.timestamp metadata.event_timestamp Analisado como yyyy-MM-ddTHH:mm:ss.SSSZ
has_principal metadata.event_type Mapeado: trueSTATUS_UPDATE
has_user metadata.event_type Mapeado: trueUSER_UNCATEGORIZED
event_data.md1.product metadata.product_event_type Mapeado diretamente
md1.product metadata.product_event_type Mapeado diretamente
event_data.device.externalId metadata.product_log_id Mapeado diretamente
event_data.externalId metadata.product_log_id Mapeado diretamente
md1.product metadata.product_name Mapeado diretamente
event_data.md1.schemaVersion metadata.product_version Mapeado diretamente
schemaVersion metadata.product_version Mapeado diretamente
dns_answers network.dns.answers Mesclado
dns_questions network.dns.questions Mesclado
event_data.domain principal.administrative_domain Mapeado diretamente
event_data.application principal.application Mapeado diretamente
event_data.hostName principal.asset.hostname Mapeado diretamente
event_data.source.ip principal.asset.ip Mesclado
event_data.device.userDeviceName principal.hostname Mapeado diretamente
event_data.hostName principal.hostname Mapeado diretamente
event_data.source.ip principal.ip Mesclado
event_data.source.port principal.port Renomeado/mapeado
event_data_event_dataType_id principal.process.pid Mapeado diretamente
event_data.cve.consoleUrl principal.url Mapeado diretamente
event_data.event_dataUrl principal.url Mapeado diretamente
device.user.email principal.user.email_addresses Mesclado
event_data.user.userEmail principal.user.email_addresses Mesclado
event_data.account.name principal.user.user_display_name Mapeado diretamente
event_data.user.userName principal.user.user_display_name Mapeado diretamente
customer.customerId principal.user.userid Mapeado diretamente
customerId principal.user.userid Mapeado diretamente
device.user.email principal.user.userid Mapeado diretamente
event_data.account.customerId principal.user.userid Mapeado diretamente
event_data.customerId principal.user.userid Mapeado diretamente
actionforBlocked security_result.action Mesclado
event_data_event_dataType_name security_result.description Mapeado diretamente
attribution_label security_result.detection_fields Mesclado
baseScore_label security_result.detection_fields Mesclado
cve_id_label security_result.detection_fields Mesclado
exploitAvailable_label security_result.detection_fields Mesclado
permission_label security_result.detection_fields Mesclado
threats_label security_result.detection_fields Mesclado
event_data.cve.severity security_result.severity Mapeado diretamente
event_data.blockReason security_result.summary Mapeado diretamente
event_data.cve.cveDetailUrl security_result.url_back_to_product Mapeado diretamente
event_data.device.deviceId target.asset.asset_id Mapeado diretamente
event_data.destination.name target.asset.hostname Mapeado diretamente
device.carrier.ipAddress target.asset.ip Mesclado
device.network.assignedIp target.asset.ip Mesclado
device.network.publicIp target.asset.ip Mesclado
event_data.destination.ip target.asset.ip Mesclado
event_data.destinationIp target.asset.ip Mesclado
ip target.asset.ip Mesclado
app_id_md5 target.file.md5 Mapeado diretamente
app_id_sha1 target.file.sha1 Mapeado diretamente
app_id_sha256 target.file.sha256 Mapeado diretamente
event_data.destination.name target.hostname Mapeado diretamente
device.carrier.ipAddress target.ip Mesclado
device.network.assignedIp target.ip Mesclado
device.network.publicIp target.ip Mesclado
event_data.destination.ip target.ip Mesclado
event_data.destinationIp target.ip Mesclado
ip target.ip Mesclado
device.location.countryName target.location.country_or_region Mapeado diretamente
event_data.location target.location.name Mapeado diretamente
device.hw.wifiMacAddress target.mac Mesclado
device.network.bssid target.mac Mesclado
event_data.accessPointBssid target.mac Mesclado
event_data_device_os_osVersion target.platform_version Mapeado diretamente
event_data.destination.port target.port Renomeado/mapeado
event_data.device.deviceName target.resource.name Mapeado diretamente
event_data.user.email target.user.email_addresses Mesclado
event_data.user.email target.user.userid Mapeado diretamente
event_data.user.name target.user.userid Mapeado diretamente
N/A metadata.event_type Constante: STATUS_UPDATE
N/A metadata.product_name Constante: JAMF_SECURITY_CLOUD
N/A metadata.vendor_name Constante: JAMF_SECURITY_CLOUD
N/A security_result.severity Constante: INFORMATIONAL
N/A target.platform Constante: WINDOWS

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.