Recolha resultados do DomainTools Iris Investigate

Compatível com:

Este documento explica como carregar resultados do DomainTools Iris Investigate para o Google Security Operations através do Amazon S3. O analisador transforma dados JSON não processados da API Iris da DomainTools num formato estruturado em conformidade com o modelo de dados unificado (UDM) da Google SecOps. Extrai informações relacionadas com detalhes do domínio, informações de contacto, riscos de segurança, certificados SSL e outros atributos relevantes, mapeando-os para os campos UDM correspondentes para uma análise consistente e informações sobre ameaças.

Antes de começar

  • Instância do Google SecOps
  • Acesso privilegiado à conta empresarial da DomainTools (acesso à API do Iris Investigate)
  • Acesso privilegiado à AWS (S3, IAM, Lambda, EventBridge)

Obtenha a chave da API e o ponto final da DomainTools

  1. Inicie sessão no painel de controlo da API DomainTools (apenas a conta do proprietário da API pode repor a chave da API).
  2. Na secção A minha conta, selecione o link Ver painel de controlo da API localizado no separador Resumo da conta.
  3. Aceda à secção Nome de utilizador da API para obter o seu nome de utilizador.
  4. No mesmo separador, localize a sua chave da API.
  5. Copie e guarde a chave num local seguro.
  6. Se precisar de uma nova chave, selecione Repor chave da API.

  7. Tenha em atenção o ponto final do Iris Investigate: https://api.domaintools.com/v1/iris-investigate/.

Configure o contentor do AWS S3 e o IAM para o Google SecOps

  1. Crie um contentor do Amazon S3 seguindo este manual do utilizador: Criar um contentor
  2. Guarde o nome e a região do contentor para referência futura (por exemplo, domaintools-iris).
  3. Crie um utilizador seguindo este guia do utilizador: Criar um utilizador do IAM.
  4. Selecione o utilizador criado.
  5. Selecione o separador Credenciais de segurança.
  6. Clique em Criar chave de acesso na secção Chaves de acesso.
  7. Selecione Serviço de terceiros como o Exemplo de utilização.
  8. Clicar em Seguinte.
  9. Opcional: adicione uma etiqueta de descrição.
  10. Clique em Criar chave de acesso.
  11. Clique em Transferir ficheiro CSV para guardar a chave de acesso e a chave de acesso secreta para utilização posterior.
  12. Clique em Concluído.
  13. Selecione o separador Autorizações.
  14. Clique em Adicionar autorizações na secção Políticas de autorizações.
  15. Selecione Adicionar autorizações.
  16. Selecione Anexar políticas diretamente
  17. Pesquise e selecione a política AmazonS3FullAccess.
  18. Clicar em Seguinte.
  19. Clique em Adicionar autorizações.

Configure a política e a função de IAM para carregamentos do S3

  1. Na consola da AWS, aceda a IAM > Políticas > Criar política > separador JSON.
  2. Introduza 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 tiver introduzido um nome de contentor diferente.
  3. Clique em Seguinte > Criar política.

  4. Aceda a IAM > Funções > Criar função > Serviço AWS > Lambda.

  5. Anexe a política criada recentemente.

  6. Dê o nome WriteDomainToolsIrisToS3Role à função e clique em Criar função.

Crie a função Lambda

  1. Na consola da AWS, aceda a Lambda > Functions > Create function.
  2. Clique em Criar do zero.
  3. Faculte os seguintes detalhes de configuração:

    Definição Valor
    Nome domaintools_iris_to_s3
    Runtime Python 3.13
    Arquitetura x86_64
    Função de execução WriteDomainToolsIrisToS3Role
  4. Depois de criar a função, abra o separador Código, elimine o fragmento e introduza 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))
    
  5. Aceda a Configuração > Variáveis de ambiente > Editar > Adicionar nova variável de ambiente.

  6. Introduza as seguintes variáveis de ambiente, substituindo-as pelos seus valores:

    Chave Exemplo de valor Descrição
    S3_BUCKET domaintools-iris Nome do contentor do S3 onde os dados vão ser armazenados.
    S3_PREFIX domaintools/iris/ Prefixo S3 opcional (subpasta) para objetos.
    STATE_KEY domaintools/iris/state.json Chave de ficheiro de estado/ponto de verificação opcional.
    DT_API_KEY DT-XXXXXXXXXXXXXXXXXXXX Chave da API DomainTools.
    DT_API_SECRET YYYYYYYYYYYYYYYYYYYYYYYY API Secret da DomainTools (se aplicável).
    USE_MODE HASH | DOMAINS | QUERY Selecione o modo a usar (apenas um está ativo de cada vez).
    SEARCH_HASHES hash1;hash2;hash3 Obrigatório se USE_MODE=HASH. Lista de hashes de pesquisas guardadas separados por pontos e vírgulas da IU do 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 pontos e vírgulas (k=v&k2=v2).
    PAGE_SIZE 500 Linhas por página (predefinição: 500).
    MAX_PAGES 20 Máximo de páginas por pedido
  7. Depois de criar a função, permaneça na respetiva página (ou abra Lambda > Functions > your-function).

  8. Selecione o separador Configuração.

  9. No painel Configuração geral, clique em Editar.

  10. Altere Tempo limite para 15 minutos (900 segundos) e clique em Guardar.

Crie um horário do EventBridge

  1. Aceda a Amazon EventBridge > Scheduler > Create schedule.
  2. Indique os seguintes detalhes de configuração:
    • Agenda recorrente: Taxa (1 hour).
    • Alvo: a sua função Lambda.
    • Nome: domaintools-iris-1h.
  3. Clique em Criar programação.

Opcional: crie um utilizador e chaves da IAM só de leitura para o Google SecOps

  1. Na consola da AWS, aceda a IAM > Users e, de seguida, clique em Add users.
  2. Indique os seguintes detalhes de configuração:
    • Utilizador: introduza um nome único (por exemplo, secops-reader)
    • Tipo de acesso: selecione Chave de acesso – Acesso programático
    • Clique em Criar utilizador.
  3. Anexe a política de leitura mínima (personalizada): Utilizadores > selecione secops-reader > Autorizações > Adicionar autorizações > Anexar políticas diretamente > Criar política
  4. No editor JSON, introduza 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>"
        }
      ]
    }
    
  5. Defina o nome como secops-reader-policy.

  6. Aceda a Criar política > pesquise/selecione > Seguinte > Adicionar autorizações.

  7. Aceda a Credenciais de segurança > Chaves de acesso > Criar chave de acesso.

  8. Transfira o CSV (estes valores são introduzidos no feed).

Configure um feed no Google SecOps para carregar resultados do DomainTools Iris Investigate

  1. Aceda a Definições do SIEM > Feeds.
  2. Clique em Adicionar novo feed.
  3. No campo Nome do feed, introduza um nome para o feed (por exemplo, DomainTools Iris Investigate).
  4. Selecione Amazon S3 V2 como o Tipo de origem.
  5. Selecione DomainTools Threat Intelligence como o Tipo de registo.
  6. Clicar em Seguinte.
  7. Especifique valores para os seguintes parâmetros de entrada:
    • URI do S3: s3://domaintools-iris/domaintools/iris/
    • Opções de eliminação de origens: selecione a opção de eliminação de acordo com a sua preferência.
    • Idade máxima do ficheiro: predefinição de 180 dias.
    • ID da chave de acesso: chave de acesso do utilizador com acesso ao contentor do S3.
    • Chave de acesso secreta: chave secreta do utilizador com acesso ao contentor do S3.
    • Espaço de nomes de recursos: domaintools.threat_intel
    • Etiquetas de carregamento: a etiqueta a aplicar aos eventos deste feed.
  8. Clicar em Seguinte.
  9. Reveja a nova configuração do feed no ecrã Finalizar e, de seguida, clique em Enviar.

Tabela de mapeamento da UDM

Campo de registo Mapeamento de UDM Lógica
ativo principal.domain.status Mapeado diretamente a partir do campo active no registo não processado.
additional_whois_email.[].value about.labels.additional_whois_email Extraído da matriz additional_whois_email e adicionado como etiqueta no objeto about.
adsense.value about.labels.adsense Extraído de adsense.value e adicionado como uma etiqueta no objeto about.
admin_contact.city.value principal.domain.admin.office_address.city Mapeado diretamente a partir do campo admin_contact.city.value no registo não processado.
admin_contact.country.value principal.domain.admin.office_address.country_or_region Mapeado diretamente a partir do campo admin_contact.country.value no registo não processado.
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 uma etiqueta com a chave "fax" no atributo admin.
admin_contact.name.value principal.domain.admin.user_display_name Mapeado diretamente a partir do campo admin_contact.name.value no registo não processado.
admin_contact.org.value principal.domain.admin.company_name Mapeado diretamente a partir do campo admin_contact.org.value no registo não processado.
admin_contact.phone.value principal.domain.admin.phone_numbers Mapeado diretamente a partir do campo admin_contact.phone.value no registo não processado.
admin_contact.postal.value principal.domain.admin.attribute.labels.postal Extraído de admin_contact.postal.value e adicionado como uma etiqueta com a chave "postal" no atributo admin.
admin_contact.state.value principal.domain.admin.office_address.state Mapeado diretamente a partir do campo admin_contact.state.value no registo não processado.
admin_contact.street.value principal.domain.admin.office_address.name Mapeado diretamente a partir do campo admin_contact.street.value no registo não processado.
alexa about.labels.alexa Mapeado diretamente a partir do campo alexa no registo não processado e adicionado como uma etiqueta no objeto about.
baidu_codes.[].value about.labels.baidu_codes Extraído da matriz baidu_codes e adicionado como etiqueta no objeto about.
billing_contact.city.value principal.domain.billing.office_address.city Mapeado diretamente a partir do campo billing_contact.city.value no registo não processado.
billing_contact.country.value principal.domain.billing.office_address.country_or_region Mapeado diretamente a partir do campo billing_contact.country.value no registo não processado.
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 uma etiqueta com a chave "fax" no atributo billing.
billing_contact.name.value principal.domain.billing.user_display_name Mapeado diretamente a partir do campo billing_contact.name.value no registo não processado.
billing_contact.org.value principal.domain.billing.company_name Mapeado diretamente a partir do campo billing_contact.org.value no registo não processado.
billing_contact.phone.value principal.domain.billing.phone_numbers Mapeado diretamente a partir do campo billing_contact.phone.value no registo não processado.
billing_contact.postal.value principal.domain.billing.attribute.labels.postal Extraído de billing_contact.postal.value e adicionado como uma etiqueta com a chave "postal" no atributo billing.
billing_contact.state.value principal.domain.billing.office_address.state Mapeado diretamente a partir do campo billing_contact.state.value no registo não processado.
billing_contact.street.value principal.domain.billing.office_address.name Mapeado diretamente a partir do campo billing_contact.street.value no registo não processado.
create_date.value principal.domain.creation_time Convertido para o formato de data/hora a partir do campo create_date.value no registo não processado.
data_updated_timestamp principal.domain.audit_update_time Convertido para o formato de data/hora a partir do campo data_updated_timestamp no registo não processado.
domínio principal.hostname Mapeado diretamente a partir do campo domain no registo não processado.
domain_risk.components.[].evidence security_result.detection_fields.evidence Extraído da matriz domain_risk.components.[].evidence e adicionado como um campo de deteção com a chave "evidence" no objeto security_result.
domain_risk.components.[].name security_result.category_details Mapeado diretamente a partir do campo domain_risk.components.[].name no registo não processado.
domain_risk.components.[].risk_score security_result.risk_score Mapeado diretamente a partir do campo domain_risk.components.[].risk_score no registo não processado.
domain_risk.components.[].threats security_result.threat_name O primeiro elemento da matriz domain_risk.components.[].threats está mapeado para security_result.threat_name.
domain_risk.components.[].threats security_result.detection_fields.threats Os restantes elementos da matriz domain_risk.components.[].threats são adicionados como campos de deteção com a chave "threats" no objeto security_result.
domain_risk.risk_score security_result.risk_score Mapeado diretamente a partir do campo domain_risk.risk_score no registo não processado.
email_domain.[].value about.labels.email_domain Extraído da matriz email_domain e adicionado como etiqueta no objeto about.
expiration_date.value principal.domain.expiration_time Convertido para o formato de data/hora a partir do campo expiration_date.value no registo não processado.
fb_codes.[].value about.labels.fb_codes Extraído da matriz fb_codes e adicionado como etiqueta no objeto about.
first_seen.value principal.domain.first_seen_time Convertido para o formato de data/hora a partir do campo first_seen.value no registo não processado.
ga4.[].value about.labels.ga4 Extraído da matriz ga4 e adicionado como etiqueta no objeto about.
google_analytics.value about.labels.google_analytics Extraído de google_analytics.value e adicionado como uma etiqueta no objeto about.
gtm_codes.[].value about.labels.gtm_codes Extraído da matriz gtm_codes e adicionado como etiqueta no objeto about.
hotjar_codes.[].value about.labels.hotjar_codes Extraído da matriz hotjar_codes e adicionado como etiqueta no objeto about.
ip.[].address.value principal.ip O primeiro elemento da matriz ip está mapeado para principal.ip.
ip.[].address.value about.labels.ip_address Os restantes elementos da matriz ip são adicionados como etiquetas 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 restantes elementos das matrizes ip.asn são adicionados como etiquetas 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 etiqueta no objeto about.
monitor_domain about.labels.monitor_domain Mapeado diretamente a partir do campo monitor_domain no registo não processado e adicionado como uma etiqueta no objeto about.
monitoring_domain_list_name about.labels.monitoring_domain_list_name Mapeado diretamente a partir do campo monitoring_domain_list_name no registo não processado e adicionado como uma etiqueta no objeto about.
mx.[].domain.value about.domain.name Mapeado diretamente a partir do campo mx.[].domain.value no registo não processado.
mx.[].host.value about.hostname Mapeado diretamente a partir do campo mx.[].host.value no registo não processado.
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 a partir do campo mx.[].priority no registo não processado.
name_server.[].domain.value about.labels.name_server_domain Extraído de name_server.[].domain.value e adicionado como uma etiqueta 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 uma etiqueta com a chave "ip" no objeto about.
popularity_rank about.labels.popularity_rank Mapeado diretamente a partir do campo popularity_rank no registo não processado e adicionado como uma etiqueta no objeto about.
redirect.value about.labels.redirect Extraído de redirect.value e adicionado como uma etiqueta no objeto about.
redirect_domain.value about.labels.redirect_domain Extraído de redirect_domain.value e adicionado como uma etiqueta no objeto about.
registrant_contact.city.value principal.domain.registrant.office_address.city Mapeado diretamente a partir do campo registrant_contact.city.value no registo não processado.
registrant_contact.country.value principal.domain.registrant.office_address.country_or_region Mapeado diretamente a partir do campo registrant_contact.country.value no registo não processado.
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 uma etiqueta com a chave "fax" no atributo registrant.
registrant_contact.name.value principal.domain.registrant.user_display_name Mapeado diretamente a partir do campo registrant_contact.name.value no registo não processado.
registrant_contact.org.value principal.domain.registrant.company_name Mapeado diretamente a partir do campo registrant_contact.org.value no registo não processado.
registrant_contact.phone.value principal.domain.registrant.phone_numbers Mapeado diretamente a partir do campo registrant_contact.phone.value no registo não processado.
registrant_contact.postal.value principal.domain.registrant.attribute.labels.postal Extraído de registrant_contact.postal.value e adicionado como uma etiqueta com a chave "postal" no atributo registrant.
registrant_contact.state.value principal.domain.registrant.office_address.state Mapeado diretamente a partir do campo registrant_contact.state.value no registo não processado.
registrant_contact.street.value principal.domain.registrant.office_address.name Mapeado diretamente a partir do campo registrant_contact.street.value no registo não processado.
registrant_name.value about.labels.registrant_name Extraído de registrant_name.value e adicionado como uma etiqueta no objeto about.
registrant_org.value about.labels.registrant_org Extraído de registrant_org.value e adicionado como uma etiqueta no objeto about.
registrar.value principal.domain.registrar Mapeado diretamente a partir do campo registrar.value no registo não processado.
registrar_status about.labels.registrar_status Extraído da matriz registrar_status e adicionado como etiqueta no objeto about.
server_type network.tls.client.server_name Mapeado diretamente a partir do campo server_type no registo não processado.
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 a partir do campo spf_info no registo não processado e adicionado como uma etiqueta no objeto about.
ssl_email.[].value about.labels.ssl_email Extraído da matriz ssl_email e adicionado como etiqueta no objeto about.
ssl_info.[].alt_names.[].value about.labels.alt_names Extraído da matriz ssl_info.[].alt_names e adicionado como etiqueta no objeto about.
ssl_info.[].common_name.value about.labels.common_name Extraído de ssl_info.[].common_name.value e adicionado como uma etiqueta no objeto about.
ssl_info.[].duration.value about.labels.duration Extraído de ssl_info.[].duration.value e adicionado como uma etiqueta no objeto about.
ssl_info.[].email.[].value about.labels.ssl_info_email Extraído da matriz ssl_info.[].email e adicionado como uma etiqueta 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 no formato 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 no formato 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 uma etiqueta no objeto about.
statcounter_project_codes.[].value about.labels.statcounter_project_codes Extraído da matriz statcounter_project_codes e adicionado como etiqueta no objeto about.
statcounter_security_codes.[].value about.labels.statcounter_security_codes Extraído da matriz statcounter_security_codes e adicionado como etiqueta 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 deteçã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 deteção com a chave "tagged_at" no objeto security_result.
technical_contact.city.value principal.domain.tech.office_address.city Mapeado diretamente a partir do campo technical_contact.city.value no registo não processado.
technical_contact.country.value principal.domain.tech.office_address.country_or_region Mapeado diretamente a partir do campo technical_contact.country.value no registo não processado.
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 uma etiqueta com a chave "fax" no atributo tech.
technical_contact.name.value principal.domain.tech.user_display_name Mapeado diretamente a partir do campo technical_contact.name.value no registo não processado.
technical_contact.org.value principal.domain.tech.company_name Mapeado diretamente a partir do campo technical_contact.org.value no registo não processado.
technical_contact.phone.value principal.domain.tech.phone_numbers Mapeado diretamente a partir do campo technical_contact.phone.value no registo não processado.
technical_contact.postal.value principal.domain.tech.attribute.labels.postal Extraído de technical_contact.postal.value e adicionado como uma etiqueta com a chave "postal" no atributo tech.
technical_contact.state.value principal.domain.tech.office_address.state Mapeado diretamente a partir do campo technical_contact.state.value no registo não processado.
technical_contact.street.value principal.domain.tech.office_address.name Mapeado diretamente a partir do campo technical_contact.street.value no registo não processado.
tld about.labels.tld Mapeado diretamente a partir do campo tld no registo não processado e adicionado como uma etiqueta no objeto about.
timestamp about.labels.timestamp Mapeado diretamente a partir do campo timestamp no registo não processado e adicionado como uma etiqueta no objeto about.
website_response principal.network.http.response_code Mapeado diretamente a partir do campo website_response no registo não processado.
website_title about.labels.website_title Mapeado diretamente a partir do campo website_title no registo não processado e adicionado como uma etiqueta no objeto about.
whois_url principal.domain.whois_server Mapeado diretamente a partir do campo whois_url no registo não processado.
yandex_codes.[].value about.labels.yandex_codes Extraído da matriz yandex_codes e adicionado como etiqueta no objeto about.
edr.client.hostname Definido para o valor do campo domain.
edr.client.ip_addresses Definido para 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 registo não processado.
metadata.event_type Definido como "STATUS_UPDATE" se principal.hostname estiver presente. Caso contrário, é definido como "GENERIC_EVENT".
metadata.log_type Definido como "DOMAINTOOLS_THREATINTEL".
metadata.product_name Definido como "DOMAINTOOLS".
metadata.vendor_name Definido como "DOMAINTOOLS".

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