
Herramienta pasiva de búsqueda de nombres de host, dominios y direcciones IP para no robots
Herramienta de consulta pasiva de hostnames, dominios e IPs para humanos


wtfis es una herramienta de línea de comandos que recopila información sobre un dominio, FQDN o dirección IP utilizando varios servicios OSINT. A diferencia de otras herramientas de su tipo, está construida específicamente para el consumo humano, proporcionando resultados que son bonitos (los resultados pueden variar) y fáciles de leer y entender.
Esta herramienta asume que estás utilizando cuentas de nivel gratuito / comunitario, por lo que realiza la menor cantidad posible de llamadas a la API para minimizar el impacto en cuotas y límites de peticiones.
El nombre del proyecto es un juego de palabras con «whois».
| Servicio | Usado en la consulta | Requerido | Plan gratuito |
|---|---|---|---|
| Virustotal | Todo | No | Sí |
| AbuseIPDB | Dirección IP | No | Sí |
| Greynoise | Dirección IP | No | Sí |
| IP2Location | Dirección IP | No | Sí |
| IP2Whois | Dominio/FQDN | No | Sí |
| IPinfo | Dirección IP | No | Sí (sin registro) |
| IPWhois | Dirección IP | No | Sí (sin registro) |
| Shodan | Dirección IP | No | No |
| URLhaus | Todo | No | Sí |
La fuente principal de información. Obtiene:
AbuseIPDB es una base de datos colaborativa de direcciones IP maliciosas reportadas. A través de su API, wtfis muestra:
Fuente alternativa de consulta de geolocalización y ASN para direcciones IP (la predeterminada es IPWhois). Obtiene:
IP2Whois e IP2Location son funciones diferentes del mismo servicio, por lo que solo necesitas registrarte una vez. La clave de API puede utilizarse entonces para ambas consultas.
Se usa opcionalmente si se proporcionan credenciales. Obtiene:
Se recomienda IP2Whois en lugar de Virustotal para los datos whois por un par de razones:
Otra fuente alternativa de consulta de geolocalización y ASN para direcciones IP. Obtiene:
Fuente de consulta de geolocalización y ASN predeterminada para direcciones IP. Obtiene:
IPWhois no debe confundirse con IP2Whois, que proporciona datos Whois de dominios.
Usando la API comunitaria de Greynoise, wtfis mostrará si una IP está en uno de los conjuntos de datos de Greynoise:
Más información sobre los conjuntos de datos aquí.
Además, la API también devuelve la clasificación que Greynoise hace de una IP (si está disponible). Los valores posibles son benign, malicious y unknown.
Obtiene datos del endpoint /shodan/host/{ip} (consulta la documentación). Para cada IP, obtiene:
URLhaus es una base de datos colaborativa de URLs maliciosas reportadas. Este enriquecimiento proporciona información sobre si el hostname o la IP consultados se están usando o se usaron para la distribución de malware a través de HTTP o HTTPS. Los datos proporcionados incluyen:
$ pip install wtfis
Para instalar vía conda (desde conda-forge), consulta wtfis-feedstock.
Para instalar vía brew:
brew install wtfis
wtfis utiliza estas variables de entorno (todas opcionales):
VT_API_KEY - Clave de API de VirustotalABUSEIPDB_API_KEY - Clave de API de AbuseIPDBIP2LOCATION_API_KEY - Clave de API de IP2LocationIP2WHOIS_API_KEY - Clave de API de IP2WhoisGREYNOISE_API_KEY - Clave de API de GreynoiseSHODAN_API_KEY - Clave de API de ShodanURLHAUS_API_KEY - Clave de API de URLhausWTFIS_DEFAULTS - Argumentos booleanos predeterminadosGEOLOCATION_SERVICE - Servicio de consulta de geolocalización / ASN a utilizarConfigúralas usando tu propio método.
Alternativamente, crea un archivo en tu directorio personal ~/.env.wtfis con las opciones anteriores. Consulta .env.wtfis.example para ver una plantilla. NOTA: ¡No olvides ejecutar chmod 400 en el archivo!
usage: wtfis [-h] [-A] [-s] [-g] [-a] [-u] [-m N] [-n] [-1] [-V] [--geolocation-service {ip2location,ipinfo,ipwhois}] entity
positional arguments:
entity Hostname, domain or IP
options:
-h, --help show this help message and exit
-A, --all Enable all possible enrichments
-s, --use-shodan Use Shodan to enrich IPs
-g, --use-greynoise Enable Greynoise for IPs
-a, --use-abuseipdb Enable AbuseIPDB for IPs
-u, --use-urlhaus Enable URLhaus for IPs and domains
-m N, --max-resolutions N
Maximum number of resolutions to show (default: 3)
-n, --no-color Show output without colors
-1, --one-column Display results in one column
-V, --version Print version number
--geolocation-service {ip2location,ipinfo,ipwhois}
Geolocation service to use (default: ipwhois)
Básicamente:
$ wtfis FQDN_OR_DOMAIN_OR_IP
y obtendrás resultados organizados en paneles, similares a la imagen anterior.
Se aceptan entradas desarmadas (p. ej., api[.]google[.]com).
Si la terminal lo admite, ciertos campos y encabezados son hipervínculos en los que se puede hacer clic y que apuntan a los sitios web de los respectivos servicios.
En lugar de especificar cada opción de enriquecimiento individualmente, puedes usar la opción -A / --all para habilitarlos todos, cuando sea posible. Esta opción es mutuamente excluyente con las opciones --use-*.
Usa la opción -a o --use-abuseipdb para habilitar el enriquecimiento de AbuseIPDB para hostnames, dominios e IPs.

El nombre de campo AbuseIPDB es un hipervínculo (si la terminal lo admite) que te lleva a la página específica de la base de datos de AbuseIPDB para tu consulta.
Para habilitar Greynoise, invoca con la opción -g o --use-greynoise. Debido a que la cuota de la API es bastante baja (50 solicitudes por semana a partir de marzo de 2023), esta consulta está desactivada por defecto.

El nombre de campo GreyNoise también es un hipervínculo (si la terminal lo admite) que apunta a la entrada de la IP en la interfaz web de Greynoise, donde se muestra más contexto.
Shodan se puede usar para mostrar los puertos o servicios abiertos de una IP y, en algunos resultados, el sistema operativo. Invoca con la opción -s o --use-shodan.

Si la terminal lo admite, el campo Services es un hipervínculo en el que se puede hacer clic y que te lleva a la interfaz web de Shodan.
Usa la opción -u o --use-urlhaus para habilitar el enriquecimiento de URLhaus para hostnames, dominios e IPs.

El nombre de campo Malware URLs es un hipervínculo (si la terminal lo admite) que te lleva a la página específica de la base de datos de URLhaus para tu consulta.
Para consultas de FQDN y dominio, puedes aumentar o disminuir el número máximo de resoluciones de IP mostradas con -m NUMBER o --max-resolutions=NUMBER. El límite superior es 10. Si no necesitas resoluciones en absoluto, establece el número en 0.
Para mostrar todos los paneles en una sola columna, usa la opción -1 o --one-column.

Los paneles se pueden mostrar sin color con -n o --no-color.

Los argumentos predeterminados se pueden definir estableciendo la variable de entorno WTFIS_DEFAULTS. Por ejemplo, para usar Shodan y mostrar los resultados en una sola columna por defecto:
WTFIS_DEFAULTS=-s -1
Si un argumento está en WTFIS_DEFAULTS, especificar el mismo argumento durante la invocación del comando niega ese argumento. Entonces, en el ejemplo anterior, si luego ejecutas:
$ wtfis example.com -s
entonces Shodan NO se usará.
Ten en cuenta que las resoluciones máximas (-m N, --max-resolutions N) no se pueden definir en los valores predeterminados de momento.
La forma recomendada de cambiar esto es estableciendo la variable GEOLOCATION_SERVICE. Por ejemplo, para usar IPinfo:
GEOLOCATION_SERVICE=ipinfo
Alternativamente, establece --geolocation-service al invocar el comando:
$ wtfis --geolocation-service=ipinfo 1.1.1.1
Si se establecen ambos, la opción de línea de comandos tiene prioridad.
wtfis se puede ejecutar desde una imagen de Docker. Primero, construye la imagen (usando el Dockerfile incluido) ejecutando:
$ make docker-image
La imagen tendrá la versión etiquetada más reciente (no necesariamente la del último commit) de wtfis. Esto asegura que obtienes una versión estable.
Hay dos formas de ejecutar la imagen:
Asegúrate de que .env.wtfis esté en tu directorio personal y configurado con las variables de entorno necesarias. Luego simplemente ejecuta:
$ make docker-run
Esto es un alias de
$ docker run --env-file=${HOME}/.env.wtfis -it wtfis
Ten en cuenta que cada definición NO debe tener espacios antes y después del signo igual (FOO=bar, no FOO = bar).
Alternativamente, puedes establecer las variables de entorno tú mismo y luego ejecutar, por ejemplo:
$ docker run -e VT_API_KEY -e SHODAN_API_KEY -it wtfis