Recopilar resultados de DomainTools Iris Investigate
En este documento se explica cómo ingerir resultados de DomainTools Iris Investigate en Google Security Operations mediante Amazon S3. El analizador transforma los datos JSON sin procesar de la API Iris de DomainTools en un formato estructurado que se ajusta al modelo de datos unificado (UDM) de Google SecOps. Extrae información relacionada con los detalles del dominio, la información de contacto, los riesgos de seguridad, los certificados SSL y otros atributos relevantes, y los asigna a los campos de UDM correspondientes para realizar análisis coherentes y obtener información sobre las amenazas.
Antes de empezar
- Instancia de Google SecOps
- Acceso privilegiado a la cuenta de empresa de DomainTools (acceso a la API de Iris Investigate)
- Acceso privilegiado a AWS (S3, IAM, Lambda y EventBridge)
Obtener la clave de API y el endpoint de DomainTools
- Inicia sesión en el panel de control de la API de DomainTools (solo la cuenta del propietario de la API puede restablecer la clave de API).
- En la sección Mi cuenta, seleccione el enlace Ver panel de APIs, situado en la pestaña Resumen de la cuenta.
- Ve a la sección Nombre de usuario de la API para obtener tu nombre de usuario.
- En la misma pestaña, busca tu clave de API.
- Copia y guarda la clave en un lugar seguro.
Si necesitas una nueva clave, selecciona Restablecer clave de API.
Tenga en cuenta el endpoint de Iris Investigate:
https://api.domaintools.com/v1/iris-investigate/
.
Configurar un segmento de AWS S3 y IAM para Google SecOps
- Crea un segmento de Amazon S3 siguiendo esta guía de usuario: Crear un segmento.
- Guarda el nombre y la región del segmento para consultarlos más adelante (por ejemplo,
domaintools-iris
). - Crea un usuario siguiendo esta guía: Crear un usuario de gestión de identidades y accesos.
- Selecciona el Usuario creado.
- Selecciona la pestaña Credenciales de seguridad.
- En la sección Claves de acceso, haz clic en Crear clave de acceso.
- Selecciona Servicio de terceros como Caso práctico.
- Haz clic en Siguiente.
- Opcional: añade una etiqueta de descripción.
- Haz clic en Crear clave de acceso.
- Haz clic en Descargar archivo CSV para guardar la clave de acceso y la clave de acceso secreta para usarlas más adelante.
- Haz clic en Listo.
- Selecciona la pestaña Permisos.
- En la sección Políticas de permisos, haz clic en Añadir permisos.
- Selecciona Añadir permisos.
- Seleccione Adjuntar políticas directamente.
- Busca y selecciona la política AmazonS3FullAccess.
- Haz clic en Siguiente.
- Haz clic en Añadir permisos.
Configurar la política y el rol de gestión de identidades y accesos para las subidas de S3
- En la consola de AWS, ve a IAM > Policies > Create policy > pestaña JSON.
Introduce la siguiente política:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutDomainToolsIrisObjects", "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::domaintools-iris/*" } ] }
- Sustituye
domaintools-iris
si has introducido otro nombre de segmento.
- Sustituye
Haz clic en Siguiente > Crear política.
Ve a IAM > Roles > Crear rol > Servicio de AWS > Lambda.
Adjunte la política que acaba de crear.
Dale el nombre
WriteDomainToolsIrisToS3Role
al rol y haz clic en Crear rol.
Crear la función Lambda
- En la consola de AWS, ve a Lambda > Funciones > Crear función.
- Haz clic en Crear desde cero.
Proporciona los siguientes detalles de configuración:
Ajuste Valor Nombre domaintools_iris_to_s3
Tiempo de ejecución Python 3.13 Arquitectura x86_64 Rol de ejecución WriteDomainToolsIrisToS3Role
Una vez creada la función, abra la pestaña Código, elimine el stub e introduzca el siguiente 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))
Ve a Configuración > Variables de entorno > Editar > Añadir nueva variable de entorno.
Introduce las siguientes variables de entorno y sustituye los valores por los tuyos:
Clave Valor de ejemplo Descripción S3_BUCKET
domaintools-iris
Nombre del segmento de S3 en el que se almacenarán los datos. S3_PREFIX
domaintools/iris/
Prefijo de S3 opcional (subcarpeta) para los objetos. STATE_KEY
domaintools/iris/state.json
Clave de archivo de estado o punto de control opcional. DT_API_KEY
DT-XXXXXXXXXXXXXXXXXXXX
Clave de API de DomainTools. DT_API_SECRET
YYYYYYYYYYYYYYYYYYYYYYYY
Secreto de la API de DomainTools (si procede). USE_MODE
HASH
|DOMAINS
|QUERY
Selecciona el modo que quieras usar (solo puede haber uno activo a la vez). SEARCH_HASHES
hash1;hash2;hash3
Obligatorio si USE_MODE=HASH
. Lista separada por punto y coma de los hashes de las búsquedas guardadas de la interfaz de usuario de Iris.DOMAINS
example.com;domaintools.com
Obligatorio si USE_MODE=DOMAINS
. Lista de dominios separados por punto y coma.QUERY_LIST
ip=1.1.1.1;ip=8.8.8.8;domain=example.org
Obligatorio si USE_MODE=QUERY
. Lista de cadenas de consulta separadas por punto y coma (k=v&k2=v2
).PAGE_SIZE
500
Filas por página (500 de forma predeterminada). MAX_PAGES
20
Número máximo de páginas por solicitud Una vez creada la función, permanece en su página (o abre Lambda > Funciones > tu-función).
Seleccione la pestaña Configuración.
En el panel Configuración general, haz clic en Editar.
Cambia Tiempo de espera a 15 minutos (900 segundos) y haz clic en Guardar.
Crear una programación de EventBridge
- Ve a Amazon EventBridge > Scheduler > Create schedule (Amazon EventBridge > Programador > Crear programación).
- Proporcione los siguientes detalles de configuración:
- Programación periódica: Precio (
1 hour
). - Destino: tu función Lambda.
- Nombre:
domaintools-iris-1h
.
- Programación periódica: Precio (
- Haz clic en Crear programación.
Opcional: Crear un usuario y claves de gestión de identidades y accesos de solo lectura para Google SecOps
- En la consola de AWS, vaya a IAM > Usuarios y, a continuación, haga clic en Añadir usuarios.
- Proporcione los siguientes detalles de configuración:
- Usuario: introduce un nombre único (por ejemplo,
secops-reader
). - Tipo de acceso: selecciona Clave de acceso - Acceso programático.
- Haz clic en Crear usuario.
- Usuario: introduce un nombre único (por ejemplo,
- Asigna una política de lectura mínima (personalizada): Usuarios > selecciona
secops-reader
> Permisos > Añadir permisos > Asignar políticas directamente > Crear política. En el editor de JSON, introduce la siguiente 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>" } ] }
Asigna el nombre
secops-reader-policy
.Ve a Crear política > busca o selecciona > Siguiente > Añadir permisos.
Ve a Credenciales de seguridad > Claves de acceso > Crear clave de acceso.
Descarga el archivo CSV (estos valores se introducen en el feed).
Configurar un feed en Google SecOps para ingerir resultados de DomainTools Iris Investigate
- Ve a Configuración de SIEM > Feeds.
- Haz clic en Añadir feed.
- En el campo Nombre del feed, introduce un nombre para el feed (por ejemplo,
DomainTools Iris Investigate
). - Selecciona Amazon S3 V2 como Tipo de fuente.
- Seleccione DomainTools Threat Intelligence como Tipo de registro.
- Haz clic en Siguiente.
- Especifique los valores de los siguientes parámetros de entrada:
- URI de S3:
s3://domaintools-iris/domaintools/iris/
- Opciones de eliminación de la fuente: selecciona la opción de eliminación que prefieras.
- Antigüedad máxima de los archivos: 180 días de forma predeterminada.
- ID de clave de acceso: clave de acceso de usuario con acceso al bucket de S3.
- Clave de acceso secreta: clave secreta del usuario con acceso al bucket de S3.
- Espacio de nombres del recurso:
domaintools.threat_intel
- Etiquetas de ingestión: etiqueta que se aplicará a los eventos de este feed.
- URI de S3:
- Haz clic en Siguiente.
- Revise la configuración de la nueva fuente en la pantalla Finalizar y, a continuación, haga clic en Enviar.
Tabla de asignación de UDM
Campo de registro | Asignación de UDM | Lógica |
---|---|---|
activa | principal.domain.status | Se asigna directamente desde el campo active del registro sin procesar. |
additional_whois_email.[].value | about.labels.additional_whois_email | Se extrae de la matriz additional_whois_email y se añade como etiqueta en el objeto about . |
adsense.value | about.labels.adsense | Se extrae de adsense.value y se añade como etiqueta en el objeto about . |
admin_contact.city.value | principal.domain.admin.office_address.city | Se asigna directamente desde el campo admin_contact.city.value del registro sin procesar. |
admin_contact.country.value | principal.domain.admin.office_address.country_or_region | Se asigna directamente desde el campo admin_contact.country.value del registro sin procesar. |
admin_contact.email.[].value | principal.domain.admin.email_addresses | Se ha extraído de la matriz admin_contact.email y se ha añadido al campo email_addresses . |
admin_contact.fax.value | principal.domain.admin.attribute.labels.fax | Se ha extraído de admin_contact.fax.value y se ha añadido como etiqueta con la clave "fax" en el atributo admin . |
admin_contact.name.value | principal.domain.admin.user_display_name | Se asigna directamente desde el campo admin_contact.name.value del registro sin procesar. |
admin_contact.org.value | principal.domain.admin.company_name | Se asigna directamente desde el campo admin_contact.org.value del registro sin procesar. |
admin_contact.phone.value | principal.domain.admin.phone_numbers | Se asigna directamente desde el campo admin_contact.phone.value del registro sin procesar. |
admin_contact.postal.value | principal.domain.admin.attribute.labels.postal | Se ha extraído de admin_contact.postal.value y se ha añadido como etiqueta con la clave "postal" en el atributo admin . |
admin_contact.state.value | principal.domain.admin.office_address.state | Se asigna directamente desde el campo admin_contact.state.value del registro sin procesar. |
admin_contact.street.value | principal.domain.admin.office_address.name | Se asigna directamente desde el campo admin_contact.street.value del registro sin procesar. |
alexa | about.labels.alexa | Se asigna directamente desde el campo alexa del registro sin procesar y se añade como etiqueta en el objeto about . |
baidu_codes.[].value | about.labels.baidu_codes | Se extrae de la matriz baidu_codes y se añade como etiqueta en el objeto about . |
billing_contact.city.value | principal.domain.billing.office_address.city | Se asigna directamente desde el campo billing_contact.city.value del registro sin procesar. |
billing_contact.country.value | principal.domain.billing.office_address.country_or_region | Se asigna directamente desde el campo billing_contact.country.value del registro sin procesar. |
billing_contact.email.[].value | principal.domain.billing.email_addresses | Se ha extraído de la matriz billing_contact.email y se ha añadido al campo email_addresses . |
billing_contact.fax.value | principal.domain.billing.attribute.labels.fax | Se ha extraído de billing_contact.fax.value y se ha añadido como etiqueta con la clave "fax" en el atributo billing . |
billing_contact.name.value | principal.domain.billing.user_display_name | Se asigna directamente desde el campo billing_contact.name.value del registro sin procesar. |
billing_contact.org.value | principal.domain.billing.company_name | Se asigna directamente desde el campo billing_contact.org.value del registro sin procesar. |
billing_contact.phone.value | principal.domain.billing.phone_numbers | Se asigna directamente desde el campo billing_contact.phone.value del registro sin procesar. |
billing_contact.postal.value | principal.domain.billing.attribute.labels.postal | Se ha extraído de billing_contact.postal.value y se ha añadido como etiqueta con la clave "postal" en el atributo billing . |
billing_contact.state.value | principal.domain.billing.office_address.state | Se asigna directamente desde el campo billing_contact.state.value del registro sin procesar. |
billing_contact.street.value | principal.domain.billing.office_address.name | Se asigna directamente desde el campo billing_contact.street.value del registro sin procesar. |
create_date.value | principal.domain.creation_time | Se ha convertido al formato de marca de tiempo a partir del campo create_date.value del registro sin procesar. |
data_updated_timestamp | principal.domain.audit_update_time | Se ha convertido al formato de marca de tiempo a partir del campo data_updated_timestamp del registro sin procesar. |
dominio | principal.hostname | Se asigna directamente desde el campo domain del registro sin procesar. |
domain_risk.components.[].evidence | security_result.detection_fields.evidence | Se ha extraído de la matriz domain_risk.components.[].evidence y se ha añadido como campo de detección con la clave "evidence" en el objeto security_result . |
domain_risk.components.[].name | security_result.category_details | Se asigna directamente desde el campo domain_risk.components.[].name del registro sin procesar. |
domain_risk.components.[].risk_score | security_result.risk_score | Se asigna directamente desde el campo domain_risk.components.[].risk_score del registro sin procesar. |
domain_risk.components.[].threats | security_result.threat_name | El primer elemento de la matriz domain_risk.components.[].threats se asigna a security_result.threat_name . |
domain_risk.components.[].threats | security_result.detection_fields.threats | Los elementos restantes de la matriz domain_risk.components.[].threats se añaden como campos de detección con la clave "threats" en el objeto security_result . |
domain_risk.risk_score | security_result.risk_score | Se asigna directamente desde el campo domain_risk.risk_score del registro sin procesar. |
email_domain.[].value | about.labels.email_domain | Se extrae de la matriz email_domain y se añade como etiqueta en el objeto about . |
expiration_date.value | principal.domain.expiration_time | Se ha convertido al formato de marca de tiempo a partir del campo expiration_date.value del registro sin procesar. |
fb_codes.[].value | about.labels.fb_codes | Se extrae de la matriz fb_codes y se añade como etiqueta en el objeto about . |
first_seen.value | principal.domain.first_seen_time | Se ha convertido al formato de marca de tiempo a partir del campo first_seen.value del registro sin procesar. |
ga4.[].value | about.labels.ga4 | Se extrae de la matriz ga4 y se añade como etiqueta en el objeto about . |
google_analytics.value | about.labels.google_analytics | Se extrae de google_analytics.value y se añade como etiqueta en el objeto about . |
gtm_codes.[].value | about.labels.gtm_codes | Se extrae de la matriz gtm_codes y se añade como etiqueta en el objeto about . |
hotjar_codes.[].value | about.labels.hotjar_codes | Se extrae de la matriz hotjar_codes y se añade como etiqueta en el objeto about . |
ip.[].address.value | principal.ip | El primer elemento de la matriz ip se asigna a principal.ip . |
ip.[].address.value | about.labels.ip_address | Los elementos restantes de la matriz ip se añaden como etiquetas con la clave "ip_address" en el objeto about . |
ip.[].asn.[].value | network.asn | El primer elemento del primer array ip.asn se asigna a network.asn . |
ip.[].asn.[].value | about.labels.asn | Los elementos restantes de las matrices ip.asn se añaden como etiquetas con la clave "asn" en el objeto about . |
ip.[].country_code.value | principal.location.country_or_region | El country_code.value del primer elemento de la matriz ip se asigna a principal.location.country_or_region . |
ip.[].country_code.value | about.location.country_or_region | El country_code.value de los elementos restantes de la matriz ip se asigna a about.location.country_or_region . |
ip.[].isp.value | principal.labels.isp | El isp.value del primer elemento de la matriz ip se asigna a principal.labels.isp . |
ip.[].isp.value | about.labels.isp | El isp.value de los elementos restantes de la matriz ip se asigna a about.labels.isp . |
matomo_codes.[].value | about.labels.matomo_codes | Se extrae de la matriz matomo_codes y se añade como etiqueta en el objeto about . |
monitor_domain | about.labels.monitor_domain | Se asigna directamente desde el campo monitor_domain del registro sin procesar y se añade como etiqueta en el objeto about . |
monitoring_domain_list_name | about.labels.monitoring_domain_list_name | Se asigna directamente desde el campo monitoring_domain_list_name del registro sin procesar y se añade como etiqueta en el objeto about . |
mx.[].domain.value | about.domain.name | Se asigna directamente desde el campo mx.[].domain.value del registro sin procesar. |
mx.[].host.value | about.hostname | Se asigna directamente desde el campo mx.[].host.value del registro sin procesar. |
mx.[].ip.[].value | about.ip | Se ha extraído de la matriz mx.[].ip y se ha añadido al campo ip . |
mx.[].priority | about.security_result.priority_details | Se asigna directamente desde el campo mx.[].priority del registro sin procesar. |
name_server.[].domain.value | about.labels.name_server_domain | Se extrae de name_server.[].domain.value y se añade como etiqueta con la clave "name_server_domain" en el objeto about . |
name_server.[].host.value | principal.domain.name_server | Se ha extraído de name_server.[].host.value y se ha añadido al campo name_server . |
name_server.[].host.value | about.domain.name_server | Se ha extraído de name_server.[].host.value y se ha añadido al campo name_server . |
name_server.[].ip.[].value | about.labels.ip | Se extrae de la matriz name_server.[].ip y se añade como una etiqueta con la clave "ip" en el objeto about . |
popularity_rank | about.labels.popularity_rank | Se asigna directamente desde el campo popularity_rank del registro sin procesar y se añade como etiqueta en el objeto about . |
redirect.value | about.labels.redirect | Se extrae de redirect.value y se añade como etiqueta en el objeto about . |
redirect_domain.value | about.labels.redirect_domain | Se extrae de redirect_domain.value y se añade como etiqueta en el objeto about . |
registrant_contact.city.value | principal.domain.registrant.office_address.city | Se asigna directamente desde el campo registrant_contact.city.value del registro sin procesar. |
registrant_contact.country.value | principal.domain.registrant.office_address.country_or_region | Se asigna directamente desde el campo registrant_contact.country.value del registro sin procesar. |
registrant_contact.email.[].value | principal.domain.registrant.email_addresses | Se ha extraído de la matriz registrant_contact.email y se ha añadido al campo email_addresses . |
registrant_contact.fax.value | principal.domain.registrant.attribute.labels.fax | Se ha extraído de registrant_contact.fax.value y se ha añadido como etiqueta con la clave "fax" en el atributo registrant . |
registrant_contact.name.value | principal.domain.registrant.user_display_name | Se asigna directamente desde el campo registrant_contact.name.value del registro sin procesar. |
registrant_contact.org.value | principal.domain.registrant.company_name | Se asigna directamente desde el campo registrant_contact.org.value del registro sin procesar. |
registrant_contact.phone.value | principal.domain.registrant.phone_numbers | Se asigna directamente desde el campo registrant_contact.phone.value del registro sin procesar. |
registrant_contact.postal.value | principal.domain.registrant.attribute.labels.postal | Se ha extraído de registrant_contact.postal.value y se ha añadido como etiqueta con la clave "postal" en el atributo registrant . |
registrant_contact.state.value | principal.domain.registrant.office_address.state | Se asigna directamente desde el campo registrant_contact.state.value del registro sin procesar. |
registrant_contact.street.value | principal.domain.registrant.office_address.name | Se asigna directamente desde el campo registrant_contact.street.value del registro sin procesar. |
registrant_name.value | about.labels.registrant_name | Se extrae de registrant_name.value y se añade como etiqueta en el objeto about . |
registrant_org.value | about.labels.registrant_org | Se extrae de registrant_org.value y se añade como etiqueta en el objeto about . |
registrar.value | principal.domain.registrar | Se asigna directamente desde el campo registrar.value del registro sin procesar. |
registrar_status | about.labels.registrar_status | Se extrae de la matriz registrar_status y se añade como etiqueta en el objeto about . |
server_type | network.tls.client.server_name | Se asigna directamente desde el campo server_type del registro sin procesar. |
soa_email.[].value | principal.user.email_addresses | Se ha extraído de la matriz soa_email y se ha añadido al campo email_addresses . |
spf_info | about.labels.spf_info | Se asigna directamente desde el campo spf_info del registro sin procesar y se añade como etiqueta en el objeto about . |
ssl_email.[].value | about.labels.ssl_email | Se extrae de la matriz ssl_email y se añade como etiqueta en el objeto about . |
ssl_info.[].alt_names.[].value | about.labels.alt_names | Se extrae de la matriz ssl_info.[].alt_names y se añade como etiqueta en el objeto about . |
ssl_info.[].common_name.value | about.labels.common_name | Se extrae de ssl_info.[].common_name.value y se añade como etiqueta en el objeto about . |
ssl_info.[].duration.value | about.labels.duration | Se extrae de ssl_info.[].duration.value y se añade como etiqueta en el objeto about . |
ssl_info.[].email.[].value | about.labels.ssl_info_email | Se ha extraído de la matriz ssl_info.[].email y se ha añadido como etiqueta con la clave "ssl_info_email" en el objeto about . |
ssl_info.[].hash.value | network.tls.server.certificate.sha1 | El hash.value del primer elemento de la matriz ssl_info se asigna a network.tls.server.certificate.sha1 . |
ssl_info.[].hash.value | about.labels.hash | El hash.value de los elementos restantes de la matriz ssl_info se asigna a about.labels.hash . |
ssl_info.[].issuer_common_name.value | network.tls.server.certificate.issuer | El issuer_common_name.value del primer elemento de la matriz ssl_info se asigna a network.tls.server.certificate.issuer . |
ssl_info.[].issuer_common_name.value | about.labels.issuer_common_name | El issuer_common_name.value de los elementos restantes de la matriz ssl_info se asigna a about.labels.issuer_common_name . |
ssl_info.[].not_after.value | network.tls.server.certificate.not_after | El not_after.value del primer elemento de la matriz ssl_info se convierte al formato de marca de tiempo y se asigna a network.tls.server.certificate.not_after . |
ssl_info.[].not_after.value | about.labels.not_after | El not_after.value de los elementos restantes de la matriz ssl_info se asigna a about.labels.not_after . |
ssl_info.[].not_before.value | network.tls.server.certificate.not_before | El not_before.value del primer elemento de la matriz ssl_info se convierte al formato de marca de tiempo y se asigna a network.tls.server.certificate.not_before . |
ssl_info.[].not_before.value | about.labels.not_before | El not_before.value de los elementos restantes de la matriz ssl_info se asigna a about.labels.not_before . |
ssl_info.[].organization.value | network.organization_name | El organization.value del primer elemento de la matriz ssl_info se asigna a network.organization_name . |
ssl_info.[].organization.value | about.labels.organization | El organization.value de los elementos restantes de la matriz ssl_info se asigna a about.labels.organization . |
ssl_info.[].subject.value | about.labels.subject | Se extrae de ssl_info.[].subject.value y se añade como etiqueta en el objeto about . |
statcounter_project_codes.[].value | about.labels.statcounter_project_codes | Se extrae de la matriz statcounter_project_codes y se añade como etiqueta en el objeto about . |
statcounter_security_codes.[].value | about.labels.statcounter_security_codes | Se extrae de la matriz statcounter_security_codes y se añade como etiqueta en el objeto about . |
tags.[].label | about.file.tags | Se ha extraído de tags.[].label y se ha añadido al campo tags . |
tags.[].scope | security_result.detection_fields.scope | Se ha extraído de tags.[].scope y se ha añadido como campo de detección con la clave "scope" en el objeto security_result . |
tags.[].tagged_at | security_result.detection_fields.tagged_at | Se ha extraído de tags.[].tagged_at y se ha añadido como campo de detección con la clave "tagged_at" en el objeto security_result . |
technical_contact.city.value | principal.domain.tech.office_address.city | Se asigna directamente desde el campo technical_contact.city.value del registro sin procesar. |
technical_contact.country.value | principal.domain.tech.office_address.country_or_region | Se asigna directamente desde el campo technical_contact.country.value del registro sin procesar. |
technical_contact.email.[].value | principal.domain.tech.email_addresses | Se ha extraído de la matriz technical_contact.email y se ha añadido al campo email_addresses . |
technical_contact.fax.value | principal.domain.tech.attribute.labels.fax | Se ha extraído de technical_contact.fax.value y se ha añadido como etiqueta con la clave "fax" en el atributo tech . |
technical_contact.name.value | principal.domain.tech.user_display_name | Se asigna directamente desde el campo technical_contact.name.value del registro sin procesar. |
technical_contact.org.value | principal.domain.tech.company_name | Se asigna directamente desde el campo technical_contact.org.value del registro sin procesar. |
technical_contact.phone.value | principal.domain.tech.phone_numbers | Se asigna directamente desde el campo technical_contact.phone.value del registro sin procesar. |
technical_contact.postal.value | principal.domain.tech.attribute.labels.postal | Se ha extraído de technical_contact.postal.value y se ha añadido como etiqueta con la clave "postal" en el atributo tech . |
technical_contact.state.value | principal.domain.tech.office_address.state | Se asigna directamente desde el campo technical_contact.state.value del registro sin procesar. |
technical_contact.street.value | principal.domain.tech.office_address.name | Se asigna directamente desde el campo technical_contact.street.value del registro sin procesar. |
tld | about.labels.tld | Se asigna directamente desde el campo tld del registro sin procesar y se añade como etiqueta en el objeto about . |
timestamp | about.labels.timestamp | Se asigna directamente desde el campo timestamp del registro sin procesar y se añade como etiqueta en el objeto about . |
website_response | principal.network.http.response_code | Se asigna directamente desde el campo website_response del registro sin procesar. |
website_title | about.labels.website_title | Se asigna directamente desde el campo website_title del registro sin procesar y se añade como etiqueta en el objeto about . |
whois_url | principal.domain.whois_server | Se asigna directamente desde el campo whois_url del registro sin procesar. |
yandex_codes.[].value | about.labels.yandex_codes | Se extrae de la matriz yandex_codes y se añade como etiqueta en el objeto about . |
edr.client.hostname | Se asigna el valor del campo domain . |
|
edr.client.ip_addresses | Se asigna el valor del primer elemento de la matriz ip , concretamente ip.[0].address.value . |
|
edr.raw_event_name | Se define como "STATUS_UPDATE" si principal.hostname está presente. De lo contrario, se define como "GENERIC_EVENT". |
|
metadata.event_timestamp | Copiado del campo create_time de nivel superior del registro sin procesar. |
|
metadata.event_type | Se define como "STATUS_UPDATE" si principal.hostname está presente. De lo contrario, se define como "GENERIC_EVENT". |
|
metadata.log_type | Se le asigna el valor "DOMAINTOOLS_THREATINTEL". | |
metadata.product_name | Asigna el valor "DOMAINTOOLS". | |
metadata.vendor_name | Asigna el valor "DOMAINTOOLS". |
¿Necesitas más ayuda? Recibe respuestas de los miembros de la comunidad y de los profesionales de Google SecOps.