Saltar a contenido

Búsqueda avanzada en el inventario

Descripción general

El lenguaje avanzado ofrece a los usuarios una sintaxis flexible similar a Python para consultar y filtrar activos con precisión y eficacia. El lenguaje utiliza una estructura de campo operador valor para construir expresiones de búsqueda, lo que permite capacidades avanzadas de descubrimiento de activos. advanced_search_syntax_example.png

Ejemplos de consultas

  • Consulta básica: type="android"
  • Coincidencia Regex: asset~=".*@mywebdomain\.com"
  • Consulta AND/OR: type="android" OR type="ios"
  • Consulta combinada: (type="android" OR type="ios") AND (owner="jhon.doe" OR owner~="prod-.*")

Sintaxis

Estructura Campo-Operador-Valor

Cada consulta se construye utilizando los siguientes componentes:

  • Campo: La propiedad por la cual filtrar (por ejemplo, type, owner, service.port).
  • Operador: Especifica la condición (por ejemplo, =, !=, <, >).
  • Valor: El valor a coincidir (por ejemplo, android, 443).

Operadores compatibles

  • = : Igual a.
  • != : Distinto de.
  • < : Menor que (para campos de fecha y numéricos).
  • > : Mayor que (para campos de fecha y numéricos).
  • ~= : Búsqueda por expresión regular (Regex).

Campos compatibles

A continuación se muestra una lista de los campos compatibles, junto con sus descripciones y valores disponibles:

Campo Descripción Operadores compatibles Valores posibles Ejemplo
ownership Diferenciar entre activos internos, de adquisiciones y servicios de terceros =, != internal, third_party_service,acquisition,rejected ownership="internal"
type Filtrar por tipo de activo =, != android, ios, subdomain, domain, ip, org, asn, tld, email, address, person, certificate, coordinates type="android"
owner Filtrar por nombre del propietario del activo =, !=, ~= Cualquier cadena o regex owner="john.doe" or owner~="prod-.*"
asset Buscar por contenido del activo, como dirección IP, nombre del paquete de la aplicación móvil o valor del nombre de dominio. =, !=, ~= Cualquier cadena o regex asset="example.com" or asset~=".*@domain\.com"
service.port Filtrar por puerto del servicio =, !=, <, > Cualquier número de puerto service.port=443 or service.port>80
service.protocol Filtrar por protocolo del servicio =, !=, ~= Cualquier cadena o regex service.protocol="https"
whois.address Filtrar por dirección WHOIS =, !=, ~= Cualquier cadena o regex whois.address="123 Main St"
whois.email Filtrar por correo electrónico WHOIS =, !=, ~= Cualquier cadena o regex whois.email="admin@example.com"
whois.org Filtrar por nombre de la organización WHOIS =, !=, ~= Cualquier cadena o regex whois.org="Example Corp"
dns.record Filtrar por tipo de registro DNS =, != Cualquier cadena o regex dns.record="MX"
dns.value Filtrar por valor DNS =, !=, ~= Cualquier cadena o regex dns.value="mail.example.com"
dns.date Filtrar activos con registros DNS modificados en una fecha específica <, >, = Una cadena de fecha válida debe tener el formato YYYY-MM-DD. dns.date="2023-02-04" or dns.date>2023-01-01
fingerprint.name Filtrar por nombre de la huella digital (fingerprint) =, !=, ~= Cualquier cadena o regex fingerprint.name="Apache"
fingerprint.detail Filtrar por detalles de la huella digital =, !=, ~= Cualquier cadena o regex fingerprint.detail="2.4.41"
fingerprint.version Filtrar por versión de la huella digital =, !=, ~= Cualquier cadena o regex fingerprint.version="1.0.0"
fingerprint.date Filtrar activos con huellas digitales modificadas en una fecha específica <, >, = Una cadena de fecha válida debe tener el formato YYYY-MM-DD. fingerprint.date="2023-02-04"
certificate.serial Filtrar por número de serie del certificado =, !=, ~= Cualquier cadena o regex certificate.serial="123456"
certificate.issuer Filtrar por emisor del certificado =, !=, ~= Cualquier cadena o regex certificate.issuer="Let's Encrypt"
certificate.subject Filtrar por sujeto del certificado =, !=, ~= Cualquier cadena o regex certificate.subject="example.com"
certificate.date Filtrar por fecha del certificado <, >, = Una cadena de fecha válida debe tener el formato YYYY-MM-DD. certificate.date="2023-02-04"
tag Filtrar por nombre de la etiqueta (tag) =, != Cualquier cadena o regex tag="production"
value Filtrar por valor de la etiqueta =, != Cualquier cadena o regex value="critical"

Consultas combinadas

Operadores lógicos

Las consultas combinadas aprovechan dos operadores lógicos principales:

  • AND: Combina condiciones en las que ambas deben ser verdaderas
  • OR: Combina condiciones en las que al menos una debe ser verdadera

Agrupación con paréntesis

Los paréntesis () se utilizan para crear agrupaciones lógicas y controlar el orden de las operaciones en consultas complejas.

Ejemplos de composición de consultas

  1. Filtrado de múltiples condiciones

    type="android" AND owner="john.doe"
    
    Encuentra activos Android propiedad de John Doe.
  2. Agrupación de condiciones complejas

    (type="android" OR type="ios") AND (owner="john.doe" OR owner~="prod-.*")
    
    Encuentra activos móviles (Android o iOS) propiedad de John Doe o que coincidan con un patrón de propietario de producción.
  3. Filtrado de condiciones anidadas

    type="domain" AND (service.port="443" OR service.port=80)
    
    Encuentra activos de dominio con puertos HTTP o HTTPS.

Estrategias de filtrado avanzado

  1. Consultas de exclusión

    type="domain" AND owner!="test" AND owner!="dev"
    
    Encuentra activos de dominio que no son propiedad de equipos de prueba o desarrollo.
  2. Coincidencia compleja basada en Regex

    (asset~=".*internal\.com" OR asset~=".*external\.org") AND type="subdomain"
    
    Encuentra subdominios que coincidan con múltiples patrones regex.
  3. Filtrado basado en fechas

    certificate.date>"2023-01-01" AND certificate.issuer="Let\'s Encrypt"
    
    Encuentra certificados emitidos después del 1 de enero de 2023 por Let's Encrypt.