
Motor de permutación de nombres de dominio para detectar ataques de phishing homógrafos, typosquatting y suplantación de marca.

Descubre en qué tipo de problemas pueden meterse los usuarios al intentar escribir tu nombre de dominio. Encuentra dominios similares que los adversarios pueden usar para atacarte. Puede detectar typosquatters, ataques de phishing, fraude y suplantación de marca. Útil como fuente adicional de inteligencia de amenazas dirigida.

El fuzzing de DNS es un flujo de trabajo automatizado que tiene como objetivo descubrir dominios potencialmente maliciosos que apuntan a tu organización. Esta herramienta genera una lista exhaustiva de permutaciones basada en un nombre de dominio proporcionado y, posteriormente, verifica si alguna de estas permutaciones está en uso. Además, puede generar hashes difusos de páginas web para detectar ataques de phishing en curso o suplantación de marca, ¡y mucho más!
¿Tienes prisa? Pruébalo en tu navegador web: dnstwist.it
Python PIP
$ pip install dnstwist[full]
Alternativamente, instala el mínimo indispensable y añade otros requisitos manualmente según tus necesidades:
$ pip install dnstwist
Git
Si quieres ejecutar la versión más reciente del código, puedes instalarla desde Git:
$ git clone https://github.com/elceef/dnstwist.git
$ cd dnstwist
$ pip install .
Debian/Ubuntu/Kali Linux
Ejecuta el siguiente comando para instalar la herramienta con todos los paquetes adicionales:
$ sudo apt install dnstwist
Fedora Linux
$ sudo dnf install dnstwist
Arch Linux User Repository (yay)
$ yay -S dnstwist
macOS
Esto instalará dnstwist junto con todas las dependencias, y el binario se añadirá a $PATH.
$ brew install dnstwist
Docker
Descarga y ejecuta la imagen oficial desde Docker Hub:
$ docker run -it elceef/dnstwist
Alternativamente, puedes crear tus propias imágenes locales:
$ docker build -t dnstwist .
$ docker build -t dnstwist:phash --build-arg phash=1 .
La herramienta procesará el nombre de dominio proporcionado mediante sus algoritmos de fuzzing y generará una lista de posibles dominios de phishing junto con los registros DNS.
Normalmente se generan miles de permutaciones de dominios, especialmente para dominios de entrada más largos. En tales casos, puede ser práctico mostrar solo aquellos que están registrados:
$ dnstwist --registered domain.name
Asegúrate de que tu servidor DNS pueda manejar miles de solicitudes en un período corto de tiempo. De lo contrario, puedes especificar un servidor DNS externo o DNS sobre HTTPS con el argumento --nameservers.
Si las permutaciones de dominios generadas por los algoritmos de fuzzing son insuficientes, proporciona a dnstwist un archivo de diccionario. Se incluyen algunas muestras de diccionarios con una lista de las palabras más comunes utilizadas en campañas de phishing.
$ dnstwist --dictionary dictionaries/english.dict domain.name
Si necesitas comprobar si existen dominios con diferentes TLD, simplemente proporciona un archivo de diccionario con la lista de TLD.
$ dnstwist --tld dictionaries/common_tlds.dict domain.name
Por otro lado, si solo se necesitan utilizar algoritmos seleccionados, está disponible el argumento --fuzzers, que acepta una lista separada por comas.
$ dnstwist --fuzzers "homoglyph,hyphenation" domain.name
Además de la colorida salida en terminal, la herramienta permite exportar resultados a CSV y JSON:
$ dnstwist --format csv domain.name | column -t -s,
$ dnstwist --format json domain.name | jq
En caso de que necesites solo las permutaciones básicas sin realizar ninguna consulta DNS, usa el argumento --format list:
$ dnstwist --format list domain.name
La herramienta puede realizar consultas en tiempo real para devolver la ubicación geográfica (aproximada al país) de las direcciones IPv4.
$ dnstwist --geoip domain.name
La librería GeoIP2 se utiliza por defecto. La ubicación de la base de datos de países debe especificarse con la variable de entorno $GEOLITE2_MMDB. Si la librería o la base de datos no están presentes, la herramienta recurrirá a la versión anterior GeoIP Legacy.
Para mostrar todas las opciones disponibles con breves descripciones, simplemente ejecuta la herramienta sin ningún argumento.
Verificar manualmente cada nombre de dominio para determinar si sirve un sitio de phishing puede llevar mucho tiempo. Para abordar esto, dnstwist utiliza los llamados hashes difusos (hash de sensibilidad local, LSH) y hashes perceptuales (pHash). El hashing difuso es un concepto que implica la capacidad de comparar dos entradas (código HTML) y determinar un nivel fundamental de similitud, mientras que el hash perceptual es una huella digital derivada de las características visuales de una imagen (captura de pantalla de una página web).
Hashing difuso
La característica única de detectar código fuente HTML similar se puede activar con el argumento --lsh. Para cada dominio generado, dnstwist obtendrá el contenido del servidor HTTP que responda (siguiendo posibles redirecciones), normalizará el código HTML y comparará su hash difuso con el del dominio original (inicial). El nivel de similitud se expresa como un porcentaje.
En los casos en que la URL efectiva es la misma que la del dominio original, el hash difuso no se calcula en absoluto para rechazar indicaciones de falsos positivos.
Nota: Ten en cuenta que es bastante improbable obtener una coincidencia del 100%, incluso con frameworks de ataques MITM, y que un sitio de phishing puede tener un código fuente HTML completamente diferente.
$ dnstwist --lsh domain.name
En algunos casos, los sitios de phishing se sirven desde una URL específica. Si proporcionas una dirección URL completa o parcial como argumento, dnstwist la analizará y la aplicará a cada variante de nombre de dominio generada. Usa --lsh-url para sobrescribir la URL desde la que se obtiene la página web original.
$ dnstwist --lsh https://domain.name/owa/
$ dnstwist --lsh --lsh-url https://different.domain/owa/ domain.name
Por defecto, ssdeep se utiliza como algoritmo LSH, pero TLSH también está disponible y se puede activar de la siguiente manera:
$ dnstwist --lsh tlsh domain.name
Hashing perceptual
Si el navegador Chromium está instalado, dnstwist puede utilizar su modo headless, que opera sin interfaz gráfica de usuario, para capturar capturas de pantalla de páginas web, renderizarlas y calcular los valores de pHash. Estos valores de pHash se comparan luego para evaluar la similitud visual, expresada como un porcentaje.
$ dnstwist --phash domain.name
Además, es posible guardar las capturas de pantalla en formato PNG en la ubicación que elijas:
$ dnstwist --phash --screenshots /tmp/domain domain.name
Nota: Debido al uso de múltiples hilos de un navegador web completamente funcional, se debe disponer de una cantidad adecuada de recursos libres (principalmente memoria).
Soporte de proxy
Para todas las conexiones HTTP, los proxies se utilizan automáticamente cuando se detecta la presencia de variables de entorno llamadas $<scheme>_proxy, de forma insensible a mayúsculas y minúsculas. Si existen tanto variables de entorno en minúsculas como en mayúsculas, se prefiere la versión en minúsculas.
En caso de que necesites consumir los datos producidos por la herramienta dentro de tu código, la forma más conveniente y eficiente es pasar la entrada de la siguiente manera.
>>> import dnstwist
>>> data = dnstwist.run(domain='domain.name', registered=True, format='null')
Para trabajar en un modo operativo completamente pasivo y producir solo permutaciones de dominios, es necesario combinar el formato de lista con la redirección de salida al dispositivo nulo.
>>> dnstwist.run(domain='domain.name', format='list', output=dnstwist.devnull)
Los argumentos para dnstwist.run() se traducen internamente, por lo que el uso es muy similar al de la línea de comandos. La estructura de datos devuelta es una lista de diccionarios fácil de procesar. Ten en cuenta que dnstwist.run() lanza varios hilos daemon.
Cuando se trata de probar miles de permutaciones de dominios, la velocidad y la eficiencia son prioridades evidentes. Por otro lado, la herramienta fue diseñada para "funcionar sin configuración adicional", evitando abrumar a los resolvers DNS y conservando recursos valiosos. Dicho esto, la configuración predeterminada logra un equilibrio prudente, pero siempre hay margen de mejora.
Se recomienda experimentar con el número de hilos. Inicialmente, este número se calcula en función de los núcleos de CPU disponibles, pero en la mayoría de los casos elevar este valor proporciona un aumento sustancial del rendimiento. Otra sugerencia es seleccionar resolvers DNS rápidos con el menor tiempo de ida y vuelta (RTT) de red. Aunque unos pocos milisegundos pueden no parecer una gran diferencia, al multiplicarse entre miles de permutaciones de dominios, se traduce en ahorros de tiempo notables.
A medida que aumenta la longitud del dominio de entrada, el número de variantes generadas por los algoritmos aumenta significativamente, lo que resulta en un incremento sustancial del tiempo y los recursos necesarios para verificarlas. Comprobar cada permutación posible de dominios es poco práctico, especialmente para dominios de entrada más largos, lo que requeriría millones de consultas DNS. Por lo tanto, esta herramienta genera y verifica dominios que son muy similares al original. Teóricamente, estos dominios son los más atractivos desde el punto de vista de un atacante. Sin embargo, es esencial tener en cuenta que la imaginación de los atacantes es ilimitada.
Las tablas Unicode comprenden miles de caracteres, muchos de ellos visualmente similares entre sí. Sin embargo, a pesar de que ciertos caracteres se pueden codificar usando punycode, la mayoría de las autoridades de TLD los rechazarán durante el proceso de registro de dominios. En general, las autoridades de TLD no permiten mezclar caracteres de diferentes escrituras Unicode o mantienen sus propios conjuntos de caracteres aceptables. Dicho esto, el fuzzer de homoglifos se construyó sobre un rango cuidadosamente investigado de caracteres Unicode (homoglifos) para garantizar que los dominios generados puedan registrarse en la práctica.
El escáner es utilizado por decenas de equipos de SOC y respuesta a incidentes en todo el mundo, así como por analistas e investigadores independientes de seguridad de la información. Además, está integrado en los productos y servicios de muchos proveedores de seguridad, en particular pero no exclusivamente:
Splunk add-on, RecordedFuture, SpiderFoot, DigitalShadows, SecurityRisk, SmartFense, ThreatPipes, PaloAlto Cortex XSOAR, Rapid7 InsightConnect SOAR, Mimecast, Watcher, Intel Owl, PatrOwl, VDA Labs, Appsecco, Maltego, Conscia ThreatInsights, Fortinet FortiSOAR, ThreatConnect, CISA Crossfeed.
Para enviar preguntas, ideas o una tableta de chocolate, simplemente escribe un correo electrónico a [email protected]. Cualquier comentario es apreciado. Si has encontrado algunos dominios de phishing confirmados o simplemente te gusta esta herramienta, no dudes en enviar un mensaje. Gracias.