Coletar registros de IOC do Anomali ThreatStream
Este documento explica como ingerir registros de IOC do Anomali ThreatStream no Google Security Operations usando uma API. O analisador transforma os dados de IOC do formato JSON ou CEF em um modelo de dados unificado (UDM). Primeiro, o código tenta analisar a entrada como JSON e, se não for possível, verifica o prefixo "CEF:" para processá-la como uma mensagem CEF, extraindo atributos de IOC e mapeando-os para campos UDM.
Antes de começar
Verifique se você tem os pré-requisitos a seguir:
- Instância do Google SecOps
- Acesso privilegiado a um locatário empresarial do Anomali ThreatStream.
Criar um usuário de API dedicado
- Faça login no ThreatStream. Mude para a interface clássica se você estiver no Anomali Enterprise.
- Acesse Administração > Usuários.
- Clique em + Adicionar usuário ou selecione uma conta de serviço.
- Preencha os seguintes detalhes:
- E-mail: endereço de e-mail da conta de serviço (por exemplo,
anomali_ioc_secops@example.com
). - Origem da autenticação: selecione Padrão.
- Tipo de usuário: selecione Usuário da API.
- Função: selecione Somente leitura (suficiente para listar indicadores).
- E-mail: endereço de e-mail da conta de serviço (por exemplo,
- Clique em Salvar.
- Um e-mail de ativação é enviado para a nova conta. Conclua a ativação.
Gerar chave de API
- Faça login no ThreatStream como o usuário da API.
- Acesse avatar do perfil > Minhas chaves de API.
- Clique em Gerar nova chave.
- Insira uma Descrição (por exemplo,
Google SecOps export
). - Clique em Salvar.
- Copie e salve o valor da chave exibido em Chave em um local seguro. O valor da chave não será mostrado novamente.
Recomendado: lista de permissões de IP do coletor
- Acesse Administração > Configurações da organização.
- Selecione a guia Lista de permissão de IP.
- Clique em + Adicionar.
- Digite o endereço do seu locatário do Google SecOps e clique em Salvar.
Configurar feeds
- Acesse Configurações do SIEM > Feeds.
- Clique em Adicionar novo.
- No campo Nome do feed, insira um nome para o feed (por exemplo,
Anomali TS IOC
). - Selecione API de terceiros como o Tipo de origem.
- Selecione o tipo de registro Anomali.
- Clique em Próxima.
- Especifique valores para os seguintes parâmetros de entrada:
- Nome de usuário: insira o usuário da API recém-criado.
- Secret: insira a chave de API gerada e copiada anteriormente.
- Namespace do recurso: o namespace do recurso.
- Rótulos de ingestão: o rótulo aplicado aos eventos deste feed.
- Clique em Próxima.
- Revise a configuração do feed na tela Finalizar e clique em Enviar.
Tabela de mapeamento da UDM
Campo de registro | Mapeamento da UDM | Lógica |
---|---|---|
obj.asn |
entity.administrative_domain | O campo "asn" no registro bruto é mapeado para o campo "administrative_domain" no objeto da entidade UDM. |
obj.confidence |
ioc.confidence_score | O campo "confidence" no registro bruto é mapeado para o campo "confidence_score" no objeto ioc do UDM. |
obj.country |
entity.location.country_or_region | O campo "country" no registro bruto é mapeado para o campo "country_or_region" no objeto da entidade UDM. |
obj.created_ts |
entity.metadata.creation_timestamp | O campo "created_ts" no registro bruto é mapeado para o campo "creation_timestamp" no objeto da entidade UDM. |
obj.created_ts |
ioc.active_timerange.start | O campo "created_ts" no registro bruto é mapeado para o campo "start" no objeto UDM ioc. |
obj.created_ts |
entity.metadata.threat.first_discovered_time | O campo "created_ts" no registro bruto é mapeado para o campo "first_discovered_time" no objeto de ameaça do UDM. |
obj.expiration_ts |
entity.metadata.interval.end_time | O campo "expiration_ts" no registro bruto é mapeado para o campo "end_time" no objeto da entidade UDM. |
obj.expiration_ts |
ioc.active_timerange.end | O campo "expiration_ts" no registro bruto é mapeado para o campo "end" no objeto ioc da UDM. |
obj.id |
entity.metadata.product_entity_id | O campo "id" no registro bruto é mapeado para o campo "product_entity_id" no objeto da entidade UDM. |
obj.ip |
entity.entity.ip | O campo "ip" no registro bruto é mesclado ao campo "ip" no objeto da entidade UDM. |
obj.ip |
ioc.ip_and_ports.ip_address | O campo "ip" no registro bruto é mapeado para o campo "ip_address" no objeto UDM ioc. |
obj.itype |
ioc.categorization | O campo "itype" no registro bruto é mapeado para o campo "categorization" no objeto UDM ioc. |
obj.itype |
entity.metadata.threat.category_details | O campo "itype" no registro bruto é mesclado ao campo "category_details" no objeto de ameaça do UDM. |
obj.latitude |
entity.entity.location.region_latitude | O campo de latitude no registro bruto é mapeado para o campo "region_latitude" no objeto da entidade UDM. |
obj.longitude |
entity.entity.location.region_longitude | O campo de longitude no registro bruto é mapeado para o campo "region_longitude" no objeto da entidade UDM. |
obj.meta.detail2 |
ioc.description | O campo "detail2" no registro bruto é mapeado para o campo "description" no objeto ioc da UDM. |
obj.meta.detail2 |
entity.metadata.threat.description | O campo "detail2" no registro bruto é mapeado para o campo "description" no objeto de ameaça da UDM. |
obj.meta.severity |
ioc.raw_severity | O campo "severity" no registro bruto é mapeado para o campo "raw_severity" no objeto UDM ioc. |
obj.meta.severity |
entity.metadata.threat.severity | O campo de gravidade no registro bruto é mapeado para o campo de gravidade no objeto de ameaça do UDM. Se a gravidade for "muito alta", ela será mapeada como "CRÍTICA". |
obj.meta.severity |
entity.metadata.threat.severity_details | O campo "gravidade" no registro bruto é mapeado para o campo "severity_details" no objeto de ameaça do UDM. |
obj.modified_ts |
entity.metadata.threat.last_updated_time | O campo "modified_ts" no registro bruto é mapeado para o campo "last_updated_time" no objeto de ameaça da UDM. |
obj.org |
entity.entity.administrative_domain | O campo "org" no registro bruto é mapeado para o campo "administrative_domain" no objeto de entidade do UDM. |
obj.resource_uri |
entity.metadata.threat.url_back_to_product | O campo "resource_uri" no registro bruto é mapeado para o campo "url_back_to_product" no objeto de ameaça da UDM. |
obj.retina_confidence |
entity.metadata.threat.confidence_score | O campo "retina_confidence" no registro bruto é mapeado para o campo "confidence_score" no objeto de ameaça da UDM. |
obj.source |
ioc.feed_name | O campo de origem no registro bruto é mapeado para o campo "feed_name" no objeto UDM ioc. |
obj.source |
entity.metadata.threat.threat_name | O campo de origem no registro bruto é mapeado para o campo "threat_name" no objeto de ameaça do UDM. |
obj.status |
entity.metadata.threat.threat_status | O campo "status" no registro bruto é mapeado para o campo "threat_status" no objeto de ameaça da UDM. |
obj.subtype |
entity.entity.file.sha1 | O campo "subtype" no registro bruto é mapeado para o campo "sha1" no objeto da entidade UDM se o subtipo for "SHA1". |
obj.subtype |
entity.entity.file.sha256 | O campo "subtype" no registro bruto é mapeado para o campo "sha256" no objeto da entidade UDM se o subtipo for "SHA256". |
obj.tags |
entity.metadata.source_labels | O campo "tags" no registro bruto é mapeado para o campo "source_labels" no objeto da entidade UDM. |
obj.tags.id |
entity.metadata.source_labels | O campo "id" na matriz de tags do registro bruto é mapeado para o campo "source_labels" no objeto da entidade UDM. |
obj.tags.name |
entity.metadata.source_labels | O campo "name" na matriz de tags do registro bruto é mapeado para o campo "source_labels" no objeto da entidade UDM. |
obj.threatscore |
entity.metadata.threat.risk_score | O campo "threatscore" no registro bruto é mapeado para o campo "risk_score" no objeto de ameaça do UDM. |
obj.threat_type |
entity.metadata.threat.detection_fields | O campo "threat_type" no registro bruto é mapeado para o campo "detection_fields" no objeto de ameaça do UDM. |
obj.type |
entity.entity.file.md5 | O campo "type" no registro bruto é mapeado para o campo "md5" no objeto de entidade da UDM se o tipo for "md5". |
obj.type |
entity.entity.hostname | O campo "type" no registro bruto é mapeado para o campo "hostname" no objeto de entidade da UDM se o tipo for "domain". |
obj.type |
entity.entity.ip | O campo "type" no registro bruto é mesclado ao campo "ip" no objeto de entidade da UDM se o tipo for "ip" ou "ipv6". |
obj.type |
entity.entity.url | O campo "type" no registro bruto é mapeado para o campo "url" no objeto da entidade UDM se o tipo for "url" ou "string". |
obj.type |
entity.entity.user.email_addresses | O campo "type" no registro bruto é mesclado ao campo "email_addresses" no objeto de entidade da UDM se o tipo for "email". |
obj.type |
entity.metadata.entity_type | O campo "type" no registro bruto é mapeado para o campo "entity_type" no objeto de entidade do UDM. Se o tipo for "ip" ou "ipv6", ele será mapeado como "IP_ADDRESS". Se o tipo for "domain", ele será mapeado para "DOMAIN_NAME". Se o tipo for "md5" ou o campo "itype" contiver "md5", ele será mapeado para "FILE". Se o tipo for "url" ou "string", ele será mapeado como "URL". Se o tipo for "e-mail", ele será mapeado como "USER". Caso contrário, ele será mapeado como "UNKNOWN_ENTITYTYPE". |
obj.uuid |
entity.additional.fields | O campo "uuid" no registro bruto é mapeado para o campo "fields" no objeto da entidade UDM. |
obj.value |
entity.entity.ip | O campo "value" no registro bruto é mesclado ao campo "ip" no objeto da entidade UDM se o campo "type" for "ip" e o campo "ip" estiver vazio. |
obj.value |
entity.entity.ip | O campo "value" no registro bruto é mesclado ao campo "ip" no objeto da entidade UDM se o campo "ip_field_not_exists" for verdadeiro e o campo "value" for um endereço IP. |
obj.value |
entity.entity.url | O campo "value" no registro bruto é mapeado para o campo "url" no objeto da entidade UDM se o campo "type" for "url" ou "string". |
obj.value |
ioc.domain_and_ports.domain | O campo "value" no registro bruto é mapeado para o campo "domain" no objeto de IOC da UDM se o campo "type" não for "ip". |
obj.value |
ioc.ip_and_ports.ip_address | O campo "value" no registro bruto é mapeado para o campo "ip_address" no objeto UDM ioc se o campo "type" for "ip" e o campo "ip" estiver vazio. |
cn1 |
ioc.confidence_score | O campo cn1 no registro bruto é mapeado para o campo confidence_score no objeto UDM ioc. |
cn2 |
entity.metadata.threat.rule_id | O campo "cn2" no registro bruto é mapeado para o campo "rule_id" no objeto de ameaça da UDM. |
cs1 |
ioc.raw_severity | O campo "cs1" no registro bruto é mapeado para o campo "raw_severity" no objeto UDM ioc. |
cs2 |
entity.metadata.threat.threat_name | O campo "cs2" no registro bruto é mapeado para o campo "threat_name" no objeto de ameaça do UDM. |
cs3 |
entity.metadata.threat.threat_status | O campo cs3 no registro bruto é mapeado para o campo threat_status no objeto de ameaça da UDM. Se o campo cs3 for "active", ele será mapeado como "ACTIVE". Se o campo cs3 for "cleared", ele será mapeado como "CLEARED". Se o campo cs3 for "falsePositive" ou "falsepos", ele será mapeado como "FALSE_POSITIVE". Se o campo cs3 for "threat_status_unspecified", ele será mapeado para "THREAT_STATUS_UNSPECIFIED". |
cs4 |
entity.entity.administrative_domain | O campo "cs4" no registro bruto é mapeado para o campo "administrative_domain" no objeto da entidade UDM. |
cs5 |
ioc.description | O campo "cs5" no registro bruto é mapeado para o campo "description" no objeto ioc da UDM. |
cs5 |
entity.metadata.threat.detection_fields | O campo cs5 no registro bruto é mapeado para o campo detection_fields no objeto de ameaça da UDM. |
cs5 |
entity.metadata.threat.description | O campo "cs5" no registro bruto é mapeado para o campo "description" no objeto de ameaça da UDM. |
cs6 |
entity.metadata.threat.category_details | O campo "cs6" no registro bruto é mesclado ao campo "category_details" no objeto de ameaça do UDM. |
device_product |
entity.metadata.product_name | O campo "device_product" no registro bruto é mapeado para o campo "product_name" no objeto da entidade UDM. |
device_vendor |
entity.metadata.vendor_name | O campo "device_vendor" no registro bruto é mapeado para o campo "vendor_name" no objeto da entidade UDM. |
device_version |
entity.metadata.product_version | O campo "device_version" no registro bruto é mapeado para o campo "product_version" no objeto da entidade UDM. |
msg |
entity.metadata.threat.summary | O campo "msg" no registro bruto é mapeado para o campo "summary" no objeto de ameaça do UDM. |
shost |
entity.entity.hostname | O campo "shost" no registro bruto é mapeado para o campo "hostname" no objeto da entidade UDM. |
shost |
entity.entity.url | O campo "shost" no registro bruto é mapeado para o campo "url" no objeto da entidade UDM. |
shost |
ioc.domain_and_ports.domain | O campo "shost" no registro bruto é mapeado para o campo "domain" no objeto UDM ioc. |
src |
entity.entity.ip | O campo "src" no registro bruto é mesclado ao campo "ip" no objeto de entidade da UDM. |
src |
ioc.ip_and_ports.ip_address | O campo "src" no registro bruto é mapeado para o campo "ip_address" no objeto UDM ioc. |
entity.metadata.threat.confidence | HIGH_CONFIDENCE | O campo "confidence" no objeto de ameaça da UDM é definido como "HIGH_CONFIDENCE" se o campo "confidence_score" for maior ou igual a 75. |
entity.metadata.threat.confidence | LOW_CONFIDENCE | O campo de confiança no objeto de ameaça da UDM é definido como "LOW_CONFIDENCE" se o campo "confidence_score" for menor ou igual a 50. |
entity.metadata.threat.confidence | MEDIUM_CONFIDENCE | O campo de confiança no objeto de ameaça da UDM é definido como "MEDIUM_CONFIDENCE" se o campo "confidence_score" for maior que 50 e menor ou igual a 74. |
entity.metadata.threat.confidence | UNKNOWN_CONFIDENCE | O campo "confidence" no objeto de ameaça da UDM é definido como "UNKNOWN_CONFIDENCE" se o campo "confidence_score" não for um número inteiro válido. |
entity.metadata.vendor_name | ANOMALI_IOC | O campo "vendor_name" no objeto da entidade UDM é definido como "ANOMALI_IOC". |
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.