Coletar resultados da DomainTools Iris Investigate
Este documento explica como ingerir resultados do DomainTools Iris Investigate no Google Security Operations usando o Amazon S3. O analisador transforma dados JSON brutos da API Iris do DomainTools em um formato estruturado de acordo com o modelo de dados unificado (UDM) do Google SecOps. Ele extrai informações relacionadas a detalhes do domínio, dados de contato, riscos de segurança, certificados SSL e outros atributos relevantes, mapeando-os para os campos correspondentes da UDM para análise consistente e inteligência de ameaças.
Antes de começar
- Instância do Google SecOps
- Acesso privilegiado à conta corporativa do DomainTools (acesso à API do Iris Investigate)
- Acesso privilegiado à AWS (S3, IAM, Lambda, EventBridge)
Receber a chave de API e o endpoint do DomainTools
- Faça login no painel da API DomainTools. Somente a conta do proprietário da API pode redefinir a chave de API.
- Na seção Minha conta, selecione o link Ver painel da API, localizado na guia Resumo da conta.
- Acesse a seção Nome de usuário da API para conseguir seu nome de usuário.
- Na mesma guia, localize a chave de API.
- Copie e salve a chave em um local seguro.
Se você precisar de uma nova chave, selecione Redefinir chave de API.
Observe o endpoint do Iris Investigate:
https://api.domaintools.com/v1/iris-investigate/
.
Configurar o bucket do AWS S3 e o IAM para o Google SecOps
- Crie um bucket do Amazon S3 seguindo este guia do usuário: Como criar um bucket
- Salve o Nome e a Região do bucket para referência futura (por exemplo,
domaintools-iris
). - Crie um usuário seguindo este guia: Como criar um usuário do IAM.
- Selecione o usuário criado.
- Selecione a guia Credenciais de segurança.
- Clique em Criar chave de acesso na seção Chaves de acesso.
- Selecione Serviço de terceiros como o Caso de uso.
- Clique em Próxima.
- Opcional: adicione uma tag de descrição.
- Clique em Criar chave de acesso.
- Clique em Fazer o download do arquivo CSV para salvar a chave de acesso e a chave de acesso secreta para uso posterior.
- Clique em Concluído.
- Selecione a guia Permissões.
- Clique em Adicionar permissões na seção Políticas de permissões.
- Selecione Adicionar permissões.
- Selecione Anexar políticas diretamente.
- Pesquise e selecione a política AmazonS3FullAccess.
- Clique em Próxima.
- Clique em Adicionar permissões
Configurar a política e o papel do IAM para uploads do S3
- No console da AWS, acesse IAM > Políticas > Criar política > guia JSON.
Insira a seguinte política:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutDomainToolsIrisObjects", "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::domaintools-iris/*" } ] }
- Substitua
domaintools-iris
se você tiver inserido um nome de bucket diferente.
- Substitua
Clique em Próxima > Criar política.
Acesse IAM > Funções > Criar função > Serviço da AWS > Lambda.
Anexe a política recém-criada.
Nomeie a função como
WriteDomainToolsIrisToS3Role
e clique em Criar função.
Criar a função Lambda
- No console da AWS, acesse Lambda > Functions > Create function.
- Clique em Criar do zero.
Informe os seguintes detalhes de configuração:
Configuração Valor Nome domaintools_iris_to_s3
Ambiente de execução Python 3.13 Arquitetura x86_64 Função de execução WriteDomainToolsIrisToS3Role
Depois que a função for criada, abra a guia Código, exclua o stub e insira o seguinte código (
domaintools_iris_to_s3.py
):#!/usr/bin/env python3 # Lambda: Pull DomainTools Iris Investigate results to S3 (no transform) import os, json, time, urllib.parse from urllib.request import Request, urlopen from urllib.error import HTTPError import boto3 # --- Environment --- S3_BUCKET = os.environ["S3_BUCKET"].strip() S3_PREFIX = os.environ.get("S3_PREFIX", "domaintools/iris/").strip() STATE_KEY = os.environ.get("STATE_KEY", "domaintools/iris/state.json").strip() DT_API_KEY = os.environ["DT_API_KEY"].strip() DT_API_SECRET= os.environ.get("DT_API_SECRET", "").strip() # optional if your account uses key-only auth USE_MODE = os.environ.get("USE_MODE", "HASH").strip().upper() # HASH | DOMAINS | QUERY SEARCH_HASHES= [h.strip() for h in os.environ.get("SEARCH_HASHES", "").split(";") if h.strip()] DOMAINS = [d.strip() for d in os.environ.get("DOMAINS", "").split(";") if d.strip()] QUERY_LIST = [q.strip() for q in os.environ.get("QUERY_LIST", "").split(";") if q.strip()] PAGE_SIZE = int(os.environ.get("PAGE_SIZE", "500")) MAX_PAGES = int(os.environ.get("MAX_PAGES", "20")) USE_NEXT = os.environ.get("USE_NEXT", "true").lower() == "true" HTTP_TIMEOUT = int(os.environ.get("HTTP_TIMEOUT", "60")) RETRIES = int(os.environ.get("HTTP_RETRIES", "2")) BASE_URL = "https://api.domaintools.com/v1/iris-investigate/" HDRS = { "X-Api-Key": DT_API_KEY, "Accept": "application/json", } if DT_API_SECRET: HDRS["X-Api-Secret"] = DT_API_SECRET s3 = boto3.client("s3") # --- HTTP helpers --- def _http_get(url: str) -> dict: req = Request(url, method="GET") for k, v in HDRS.items(): req.add_header(k, v) attempt = 0 while True: try: with urlopen(req, timeout=HTTP_TIMEOUT) as r: return json.loads(r.read().decode("utf-8")) except HTTPError as e: if e.code in (429, 500, 502, 503, 504) and attempt < RETRIES: delay = int(e.headers.get("Retry-After", "2")) time.sleep(max(1, delay)) attempt += 1 continue raise def _build_url(params: dict) -> str: return BASE_URL + ("?" + urllib.parse.urlencode(params, doseq=True) if params else "") # --- S3 helpers --- def _write_page(obj: dict, label: str, page: int) -> str: ts = time.strftime("%Y/%m/%d/%H%M%S", time.gmtime()) key = f"{S3_PREFIX.rstrip('/')}/{ts}-{label}-p{page:05d}.json" s3.put_object( Bucket=S3_BUCKET, Key=key, Body=json.dumps(obj, separators=(",", ":")).encode("utf-8"), ContentType="application/json", ) return key # --- Iris paging --- def _first_page_params() -> dict: params: dict[str, object] = {"page_size": str(PAGE_SIZE)} if USE_NEXT: params["next"] = "true" return params def _paginate(label: str, params: dict) -> tuple[int, int]: pages = 0 total = 0 url = _build_url(params) while pages < MAX_PAGES: data = _http_get(url) _write_page(data, label, pages) resp = data.get("response") or {} results = resp.get("results") or [] total += len(results) pages += 1 # Prefer `next` absolute URL if present next_url = resp.get("next") if isinstance(resp, dict) else None if next_url: url = next_url continue # Fallback: position pager when `next=true` not used/supported if resp.get("has_more_results") and resp.get("position"): base = _first_page_params() base.pop("next", None) base["position"] = resp["position"] url = _build_url(base) continue break return pages, total # --- Mode runners --- def run_hashes(hashes: list[str]) -> dict: agg_pages = agg_results = 0 for h in hashes: params = _first_page_params() params["search_hash"] = h p, r = _paginate(f"hash-{h}", params) agg_pages += p agg_results += r return {"pages": agg_pages, "results": agg_results} def run_domains(domains: list[str]) -> dict: agg_pages = agg_results = 0 for d in domains: params = _first_page_params() # DomainTools accepts `domain` as a filter in Investigate search params["domain"] = d p, r = _paginate(f"domain-{d}", params) agg_pages += p agg_results += r return {"pages": agg_pages, "results": agg_results} def run_queries(queries: list[str]) -> dict: agg_pages = agg_results = 0 for q in queries: # Merge arbitrary k=v pairs from the query string base = _first_page_params() for k, v in urllib.parse.parse_qsl(q, keep_blank_values=True): base.setdefault(k, v) p, r = _paginate(f"query-{q.replace('=','-')}", base) agg_pages += p agg_results += r return {"pages": agg_pages, "results": agg_results} # --- Entry point --- def lambda_handler(event=None, context=None): if USE_MODE == "HASH" and SEARCH_HASHES: res = run_hashes(SEARCH_HASHES) elif USE_MODE == "DOMAINS" and DOMAINS: res = run_domains(DOMAINS) elif USE_MODE == "QUERY" and QUERY_LIST: res = run_queries(QUERY_LIST) else: raise ValueError("Invalid USE_MODE or missing parameters. Set USE_MODE to HASH | DOMAINS | QUERY and provide SEARCH_HASHES | DOMAINS | QUERY_LIST accordingly.") return {"ok": True, "mode": USE_MODE, **res} if __name__ == "__main__": print(json.dumps(lambda_handler(), indent=2))
Acesse Configuração > Variáveis de ambiente > Editar > Adicionar nova variável de ambiente.
Insira as seguintes variáveis de ambiente, substituindo pelos seus valores:
Chave Valor de exemplo Descrição S3_BUCKET
domaintools-iris
Nome do bucket do S3 em que os dados serão armazenados. S3_PREFIX
domaintools/iris/
Prefixo do S3 opcional (subpasta) para objetos. STATE_KEY
domaintools/iris/state.json
Chave opcional do arquivo de estado/checkpoint. DT_API_KEY
DT-XXXXXXXXXXXXXXXXXXXX
Chave de API do DomainTools. DT_API_SECRET
YYYYYYYYYYYYYYYYYYYYYYYY
Segredo da API DomainTools (se aplicável). USE_MODE
HASH
|DOMAINS
|QUERY
Selecione o modo que você quer usar (apenas um fica ativo por vez). SEARCH_HASHES
hash1;hash2;hash3
Obrigatório se USE_MODE=HASH
. Lista separada por ponto e vírgula de hashes de pesquisa salva da interface da Iris.DOMAINS
example.com;domaintools.com
Obrigatório se USE_MODE=DOMAINS
. Lista de domínios separados por ponto e vírgula.QUERY_LIST
ip=1.1.1.1;ip=8.8.8.8;domain=example.org
Obrigatório se USE_MODE=QUERY
. Lista de strings de consulta separadas por ponto e vírgula (k=v&k2=v2
).PAGE_SIZE
500
Linhas por página (padrão: 500). MAX_PAGES
20
Máximo de páginas por solicitação Depois que a função for criada, permaneça na página dela ou abra Lambda > Functions > sua-função.
Selecione a guia Configuração.
No painel Configuração geral, clique em Editar.
Mude Tempo limite para 15 minutos (900 segundos) e clique em Salvar.
Criar uma programação do EventBridge
- Acesse Amazon EventBridge > Scheduler > Criar programação.
- Informe os seguintes detalhes de configuração:
- Programação recorrente: Taxa (
1 hour
). - Destino: sua função Lambda.
- Nome:
domaintools-iris-1h
.
- Programação recorrente: Taxa (
- Clique em Criar programação.
Opcional: criar um usuário e chaves do IAM somente leitura para o Google SecOps
- No console da AWS, acesse IAM > Usuários e clique em Adicionar usuários.
- Informe os seguintes detalhes de configuração:
- Usuário: insira um nome exclusivo (por exemplo,
secops-reader
) - Tipo de acesso: selecione Chave de acesso - Acesso programático.
- Clique em Criar usuário.
- Usuário: insira um nome exclusivo (por exemplo,
- Anexe a política de leitura mínima (personalizada): Usuários > selecione
secops-reader
> Permissões > Adicionar permissões > Anexar políticas diretamente > Criar política No editor JSON, insira a seguinte política:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:GetObject"], "Resource": "arn:aws:s3:::<your-bucket>/*" }, { "Effect": "Allow", "Action": ["s3:ListBucket"], "Resource": "arn:aws:s3:::<your-bucket>" } ] }
Defina o nome como
secops-reader-policy
.Acesse Criar política > pesquise/selecione > Próxima > Adicionar permissões.
Acesse Credenciais de segurança > Chaves de acesso > Criar chave de acesso.
Faça o download do CSV (esses valores são inseridos no feed).
Configurar um feed no Google SecOps para ingerir resultados do DomainTools Iris Investigate
- Acesse Configurações do SIEM > Feeds.
- Clique em Adicionar novo feed.
- No campo Nome do feed, insira um nome para o feed (por exemplo,
DomainTools Iris Investigate
). - Selecione Amazon S3 V2 como o Tipo de origem.
- Selecione Inteligência de ameaças da DomainTools como o Tipo de registro.
- Clique em Próxima.
- Especifique valores para os seguintes parâmetros de entrada:
- URI do S3:
s3://domaintools-iris/domaintools/iris/
- Opções de exclusão de fontes: selecione a opção de exclusão de acordo com sua preferência.
- Idade máxima do arquivo: 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:
domaintools.threat_intel
- Rótulos de ingestão: o rótulo a ser aplicado aos eventos deste feed.
- URI do S3:
- Clique em Próxima.
- Revise a nova configuração do feed na tela Finalizar e clique em Enviar.
Tabela de mapeamento da UDM
Campo de registro | Mapeamento do UDM | Lógica |
---|---|---|
ativo | principal.domain.status | Mapeado diretamente do campo active no registro bruto. |
additional_whois_email.[].value | about.labels.additional_whois_email | Extraído da matriz additional_whois_email e adicionado como um rótulo no objeto about . |
adsense.value | about.labels.adsense | Extraído de adsense.value e adicionado como um rótulo no objeto about . |
admin_contact.city.value | principal.domain.admin.office_address.city | Mapeado diretamente do campo admin_contact.city.value no registro bruto. |
admin_contact.country.value | principal.domain.admin.office_address.country_or_region | Mapeado diretamente do campo admin_contact.country.value no registro bruto. |
admin_contact.email.[].value | principal.domain.admin.email_addresses | Extraído da matriz admin_contact.email e adicionado ao campo email_addresses . |
admin_contact.fax.value | principal.domain.admin.attribute.labels.fax | Extraído de admin_contact.fax.value e adicionado como um rótulo com a chave "fax" no atributo admin . |
admin_contact.name.value | principal.domain.admin.user_display_name | Mapeado diretamente do campo admin_contact.name.value no registro bruto. |
admin_contact.org.value | principal.domain.admin.company_name | Mapeado diretamente do campo admin_contact.org.value no registro bruto. |
admin_contact.phone.value | principal.domain.admin.phone_numbers | Mapeado diretamente do campo admin_contact.phone.value no registro bruto. |
admin_contact.postal.value | principal.domain.admin.attribute.labels.postal | Extraído de admin_contact.postal.value e adicionado como um rótulo com a chave "postal" no atributo admin . |
admin_contact.state.value | principal.domain.admin.office_address.state | Mapeado diretamente do campo admin_contact.state.value no registro bruto. |
admin_contact.street.value | principal.domain.admin.office_address.name | Mapeado diretamente do campo admin_contact.street.value no registro bruto. |
alexa | about.labels.alexa | Mapeado diretamente do campo alexa no registro bruto e adicionado como um rótulo no objeto about . |
baidu_codes.[].value | about.labels.baidu_codes | Extraído da matriz baidu_codes e adicionado como um rótulo no objeto about . |
billing_contact.city.value | principal.domain.billing.office_address.city | Mapeado diretamente do campo billing_contact.city.value no registro bruto. |
billing_contact.country.value | principal.domain.billing.office_address.country_or_region | Mapeado diretamente do campo billing_contact.country.value no registro bruto. |
billing_contact.email.[].value | principal.domain.billing.email_addresses | Extraído da matriz billing_contact.email e adicionado ao campo email_addresses . |
billing_contact.fax.value | principal.domain.billing.attribute.labels.fax | Extraído de billing_contact.fax.value e adicionado como um rótulo com a chave "fax" no atributo billing . |
billing_contact.name.value | principal.domain.billing.user_display_name | Mapeado diretamente do campo billing_contact.name.value no registro bruto. |
billing_contact.org.value | principal.domain.billing.company_name | Mapeado diretamente do campo billing_contact.org.value no registro bruto. |
billing_contact.phone.value | principal.domain.billing.phone_numbers | Mapeado diretamente do campo billing_contact.phone.value no registro bruto. |
billing_contact.postal.value | principal.domain.billing.attribute.labels.postal | Extraído de billing_contact.postal.value e adicionado como um rótulo com a chave "postal" no atributo billing . |
billing_contact.state.value | principal.domain.billing.office_address.state | Mapeado diretamente do campo billing_contact.state.value no registro bruto. |
billing_contact.street.value | principal.domain.billing.office_address.name | Mapeado diretamente do campo billing_contact.street.value no registro bruto. |
create_date.value | principal.domain.creation_time | Convertido para o formato de carimbo de data/hora do campo create_date.value no registro bruto. |
data_updated_timestamp | principal.domain.audit_update_time | Convertido para o formato de carimbo de data/hora do campo data_updated_timestamp no registro bruto. |
domínio | principal.hostname | Mapeado diretamente do campo domain no registro bruto. |
domain_risk.components.[].evidence | security_result.detection_fields.evidence | Extraído da matriz domain_risk.components.[].evidence e adicionado como um campo de detecção com a chave "evidence" no objeto security_result . |
domain_risk.components.[].name | security_result.category_details | Mapeado diretamente do campo domain_risk.components.[].name no registro bruto. |
domain_risk.components.[].risk_score | security_result.risk_score | Mapeado diretamente do campo domain_risk.components.[].risk_score no registro bruto. |
domain_risk.components.[].threats | security_result.threat_name | O primeiro elemento da matriz domain_risk.components.[].threats é mapeado para security_result.threat_name . |
domain_risk.components.[].threats | security_result.detection_fields.threats | Os elementos restantes da matriz domain_risk.components.[].threats são adicionados como campos de detecção com a chave "threats" no objeto security_result . |
domain_risk.risk_score | security_result.risk_score | Mapeado diretamente do campo domain_risk.risk_score no registro bruto. |
email_domain.[].value | about.labels.email_domain | Extraído da matriz email_domain e adicionado como um rótulo no objeto about . |
expiration_date.value | principal.domain.expiration_time | Convertido para o formato de carimbo de data/hora do campo expiration_date.value no registro bruto. |
fb_codes.[].value | about.labels.fb_codes | Extraído da matriz fb_codes e adicionado como um rótulo no objeto about . |
first_seen.value | principal.domain.first_seen_time | Convertido para o formato de carimbo de data/hora do campo first_seen.value no registro bruto. |
ga4.[].value | about.labels.ga4 | Extraído da matriz ga4 e adicionado como um rótulo no objeto about . |
google_analytics.value | about.labels.google_analytics | Extraído de google_analytics.value e adicionado como um rótulo no objeto about . |
gtm_codes.[].value | about.labels.gtm_codes | Extraído da matriz gtm_codes e adicionado como um rótulo no objeto about . |
hotjar_codes.[].value | about.labels.hotjar_codes | Extraído da matriz hotjar_codes e adicionado como um rótulo no objeto about . |
ip.[].address.value | principal.ip | O primeiro elemento da matriz ip é mapeado para principal.ip . |
ip.[].address.value | about.labels.ip_address | Os elementos restantes da matriz ip são adicionados como rótulos com a chave "ip_address" no objeto about . |
ip.[].asn.[].value | network.asn | O primeiro elemento da primeira matriz ip.asn é mapeado para network.asn . |
ip.[].asn.[].value | about.labels.asn | Os elementos restantes das matrizes ip.asn são adicionados como rótulos com a chave "asn" no objeto about . |
ip.[].country_code.value | principal.location.country_or_region | O country_code.value do primeiro elemento na matriz ip é mapeado para principal.location.country_or_region . |
ip.[].country_code.value | about.location.country_or_region | O country_code.value dos elementos restantes na matriz ip é mapeado para about.location.country_or_region . |
ip.[].isp.value | principal.labels.isp | O isp.value do primeiro elemento na matriz ip é mapeado para principal.labels.isp . |
ip.[].isp.value | about.labels.isp | O isp.value dos elementos restantes na matriz ip é mapeado para about.labels.isp . |
matomo_codes.[].value | about.labels.matomo_codes | Extraído da matriz matomo_codes e adicionado como um rótulo no objeto about . |
monitor_domain | about.labels.monitor_domain | Mapeado diretamente do campo monitor_domain no registro bruto e adicionado como um rótulo no objeto about . |
monitoring_domain_list_name | about.labels.monitoring_domain_list_name | Mapeado diretamente do campo monitoring_domain_list_name no registro bruto e adicionado como um rótulo no objeto about . |
mx.[].domain.value | about.domain.name | Mapeado diretamente do campo mx.[].domain.value no registro bruto. |
mx.[].host.value | about.hostname | Mapeado diretamente do campo mx.[].host.value no registro bruto. |
mx.[].ip.[].value | about.ip | Extraído da matriz mx.[].ip e adicionado ao campo ip . |
mx.[].priority | about.security_result.priority_details | Mapeado diretamente do campo mx.[].priority no registro bruto. |
name_server.[].domain.value | about.labels.name_server_domain | Extraído de name_server.[].domain.value e adicionado como um rótulo com a chave "name_server_domain" no objeto about . |
name_server.[].host.value | principal.domain.name_server | Extraído de name_server.[].host.value e adicionado ao campo name_server . |
name_server.[].host.value | about.domain.name_server | Extraído de name_server.[].host.value e adicionado ao campo name_server . |
name_server.[].ip.[].value | about.labels.ip | Extraído da matriz name_server.[].ip e adicionado como um rótulo com a chave "ip" no objeto about . |
popularity_rank | about.labels.popularity_rank | Mapeado diretamente do campo popularity_rank no registro bruto e adicionado como um rótulo no objeto about . |
redirect.value | about.labels.redirect | Extraído de redirect.value e adicionado como um rótulo no objeto about . |
redirect_domain.value | about.labels.redirect_domain | Extraído de redirect_domain.value e adicionado como um rótulo no objeto about . |
registrant_contact.city.value | principal.domain.registrant.office_address.city | Mapeado diretamente do campo registrant_contact.city.value no registro bruto. |
registrant_contact.country.value | principal.domain.registrant.office_address.country_or_region | Mapeado diretamente do campo registrant_contact.country.value no registro bruto. |
registrant_contact.email.[].value | principal.domain.registrant.email_addresses | Extraído da matriz registrant_contact.email e adicionado ao campo email_addresses . |
registrant_contact.fax.value | principal.domain.registrant.attribute.labels.fax | Extraído de registrant_contact.fax.value e adicionado como um rótulo com a chave "fax" no atributo registrant . |
registrant_contact.name.value | principal.domain.registrant.user_display_name | Mapeado diretamente do campo registrant_contact.name.value no registro bruto. |
registrant_contact.org.value | principal.domain.registrant.company_name | Mapeado diretamente do campo registrant_contact.org.value no registro bruto. |
registrant_contact.phone.value | principal.domain.registrant.phone_numbers | Mapeado diretamente do campo registrant_contact.phone.value no registro bruto. |
registrant_contact.postal.value | principal.domain.registrant.attribute.labels.postal | Extraído de registrant_contact.postal.value e adicionado como um rótulo com a chave "postal" no atributo registrant . |
registrant_contact.state.value | principal.domain.registrant.office_address.state | Mapeado diretamente do campo registrant_contact.state.value no registro bruto. |
registrant_contact.street.value | principal.domain.registrant.office_address.name | Mapeado diretamente do campo registrant_contact.street.value no registro bruto. |
registrant_name.value | about.labels.registrant_name | Extraído de registrant_name.value e adicionado como um rótulo no objeto about . |
registrant_org.value | about.labels.registrant_org | Extraído de registrant_org.value e adicionado como um rótulo no objeto about . |
registrar.value | principal.domain.registrar | Mapeado diretamente do campo registrar.value no registro bruto. |
registrar_status | about.labels.registrar_status | Extraído da matriz registrar_status e adicionado como um rótulo no objeto about . |
server_type | network.tls.client.server_name | Mapeado diretamente do campo server_type no registro bruto. |
soa_email.[].value | principal.user.email_addresses | Extraído da matriz soa_email e adicionado ao campo email_addresses . |
spf_info | about.labels.spf_info | Mapeado diretamente do campo spf_info no registro bruto e adicionado como um rótulo no objeto about . |
ssl_email.[].value | about.labels.ssl_email | Extraído da matriz ssl_email e adicionado como um rótulo no objeto about . |
ssl_info.[].alt_names.[].value | about.labels.alt_names | Extraído da matriz ssl_info.[].alt_names e adicionado como um rótulo no objeto about . |
ssl_info.[].common_name.value | about.labels.common_name | Extraído de ssl_info.[].common_name.value e adicionado como um rótulo no objeto about . |
ssl_info.[].duration.value | about.labels.duration | Extraído de ssl_info.[].duration.value e adicionado como um rótulo no objeto about . |
ssl_info.[].email.[].value | about.labels.ssl_info_email | Extraído da matriz ssl_info.[].email e adicionado como um rótulo com a chave "ssl_info_email" no objeto about . |
ssl_info.[].hash.value | network.tls.server.certificate.sha1 | O hash.value do primeiro elemento na matriz ssl_info é mapeado para network.tls.server.certificate.sha1 . |
ssl_info.[].hash.value | about.labels.hash | O hash.value dos elementos restantes na matriz ssl_info é mapeado para about.labels.hash . |
ssl_info.[].issuer_common_name.value | network.tls.server.certificate.issuer | O issuer_common_name.value do primeiro elemento na matriz ssl_info é mapeado para network.tls.server.certificate.issuer . |
ssl_info.[].issuer_common_name.value | about.labels.issuer_common_name | O issuer_common_name.value dos elementos restantes na matriz ssl_info é mapeado para about.labels.issuer_common_name . |
ssl_info.[].not_after.value | network.tls.server.certificate.not_after | O not_after.value do primeiro elemento na matriz ssl_info é convertido para o formato de carimbo de data/hora e mapeado para network.tls.server.certificate.not_after . |
ssl_info.[].not_after.value | about.labels.not_after | O not_after.value dos elementos restantes na matriz ssl_info é mapeado para about.labels.not_after . |
ssl_info.[].not_before.value | network.tls.server.certificate.not_before | O not_before.value do primeiro elemento na matriz ssl_info é convertido para o formato de carimbo de data/hora e mapeado para network.tls.server.certificate.not_before . |
ssl_info.[].not_before.value | about.labels.not_before | O not_before.value dos elementos restantes na matriz ssl_info é mapeado para about.labels.not_before . |
ssl_info.[].organization.value | network.organization_name | O organization.value do primeiro elemento na matriz ssl_info é mapeado para network.organization_name . |
ssl_info.[].organization.value | about.labels.organization | O organization.value dos elementos restantes na matriz ssl_info é mapeado para about.labels.organization . |
ssl_info.[].subject.value | about.labels.subject | Extraído de ssl_info.[].subject.value e adicionado como um rótulo no objeto about . |
statcounter_project_codes.[].value | about.labels.statcounter_project_codes | Extraído da matriz statcounter_project_codes e adicionado como um rótulo no objeto about . |
statcounter_security_codes.[].value | about.labels.statcounter_security_codes | Extraído da matriz statcounter_security_codes e adicionado como um rótulo no objeto about . |
tags.[].label | about.file.tags | Extraído de tags.[].label e adicionado ao campo tags . |
tags.[].scope | security_result.detection_fields.scope | Extraído de tags.[].scope e adicionado como um campo de detecção com a chave "scope" no objeto security_result . |
tags.[].tagged_at | security_result.detection_fields.tagged_at | Extraído de tags.[].tagged_at e adicionado como um campo de detecção com a chave "tagged_at" no objeto security_result . |
technical_contact.city.value | principal.domain.tech.office_address.city | Mapeado diretamente do campo technical_contact.city.value no registro bruto. |
technical_contact.country.value | principal.domain.tech.office_address.country_or_region | Mapeado diretamente do campo technical_contact.country.value no registro bruto. |
technical_contact.email.[].value | principal.domain.tech.email_addresses | Extraído da matriz technical_contact.email e adicionado ao campo email_addresses . |
technical_contact.fax.value | principal.domain.tech.attribute.labels.fax | Extraído de technical_contact.fax.value e adicionado como um rótulo com a chave "fax" no atributo tech . |
technical_contact.name.value | principal.domain.tech.user_display_name | Mapeado diretamente do campo technical_contact.name.value no registro bruto. |
technical_contact.org.value | principal.domain.tech.company_name | Mapeado diretamente do campo technical_contact.org.value no registro bruto. |
technical_contact.phone.value | principal.domain.tech.phone_numbers | Mapeado diretamente do campo technical_contact.phone.value no registro bruto. |
technical_contact.postal.value | principal.domain.tech.attribute.labels.postal | Extraído de technical_contact.postal.value e adicionado como um rótulo com a chave "postal" no atributo tech . |
technical_contact.state.value | principal.domain.tech.office_address.state | Mapeado diretamente do campo technical_contact.state.value no registro bruto. |
technical_contact.street.value | principal.domain.tech.office_address.name | Mapeado diretamente do campo technical_contact.street.value no registro bruto. |
tld | about.labels.tld | Mapeado diretamente do campo tld no registro bruto e adicionado como um rótulo no objeto about . |
timestamp | about.labels.timestamp | Mapeado diretamente do campo timestamp no registro bruto e adicionado como um rótulo no objeto about . |
website_response | principal.network.http.response_code | Mapeado diretamente do campo website_response no registro bruto. |
website_title | about.labels.website_title | Mapeado diretamente do campo website_title no registro bruto e adicionado como um rótulo no objeto about . |
whois_url | principal.domain.whois_server | Mapeado diretamente do campo whois_url no registro bruto. |
yandex_codes.[].value | about.labels.yandex_codes | Extraído da matriz yandex_codes e adicionado como um rótulo no objeto about . |
edr.client.hostname | Definido como o valor do campo domain . |
|
edr.client.ip_addresses | Definido como o valor do primeiro elemento na matriz ip , especificamente ip.[0].address.value . |
|
edr.raw_event_name | Definido como "STATUS_UPDATE" se principal.hostname estiver presente. Caso contrário, definido como "GENERIC_EVENT". |
|
metadata.event_timestamp | Copiado do campo create_time de nível superior no registro bruto. |
|
metadata.event_type | Definido como "STATUS_UPDATE" se principal.hostname estiver presente. Caso contrário, definido como "GENERIC_EVENT". |
|
metadata.log_type | Defina como "DOMAINTOOLS_THREATINTEL". | |
metadata.product_name | Defina como "DOMAINTOOLS". | |
metadata.vendor_name | Defina como "DOMAINTOOLS". |
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.