Top 1 millón Alexa con “Dominios con caracteres homógrafos”

Esta entrada tiene el objetivo de entender los conceptos básicos relacionados con los mencionados ataques homograficos, así como reforzar los conceptos con un ejercicio practico o (proof of concept) relacionado al tema.

Antes de iniciar con el concepto de ataques homograficos debemos comprender unos conceptos:

IDN (Nombre de dominio internacionalizado), es un nombre de dominio de internet que contiene caracteres no-ASCII, sin embargo el estándar para nombres de dominio no permite tales caracteres, entonces surge la necesidad de hallar una propuesta para utilizar caracteres no-ASCII, a su tiempo se propone “IDNA”.

IDNA (Internationalizing Domain Names in Applications) Nombre de Dominio de Aplicaciones es un mecanismo para manejar nombres de dominio IDN que contiene caracteres no-ASCII, estos dominios no podían ser manejador por la infraestructura de resolución de nombre y DNS, ya que solo se manejan dominio y nombres de host con caracteres ASCII . Para solucionar este inconveniente y permitir el uso de caracteres no-ASCII en dominios, se decidió estos dominios no-ASCII deben ser convertidos a una forma basada en ASCII por las aplicaciones.

La conversión entre las formas ASCII a no-ASCII de un nombre de dominio se realiza utilizando los métodos ToASCII() y ToUnicode(), estos algoritmos son detallados en el RFC 3490 (IDNA)

Resumiendo:

  • ToASCII(): en caso alguna etiqueta no sea valida para el DNS por contener algún carácter no-ASCII, se aplica un algoritmo Nameprep (el detalle del mismo en el RFC 3491) el resultado obtenido es traducido a ASCII usando Punycode no antes anteponiéndole el prefijo ACE es decir “xn--” que se utiliza para distinguir las etiquetas codificadas en Punycode de las etiquetas ASCII ordinarias)
  • ToUnicode(): revierte la acción de ToASCII quita el prefijo ACE y utiliza el algoritmo de descodificacion de Punycode.

Ejemplo:

  • (UTF8) España
  • (PunyCode) xn--espaa-rta

Punycode es una sintaxis de codificación para codificar/descodificar dominios internacionalizados de manera que los nombre de dominios y host puedan crearse utilizando caracteres del idioma nativo del usuario pero aun así pueden traducirse en algo que el sistema DNS puede utilizar.

Hemos escuchado estos días de los ataques homógrafos, que en realidad no son actuales sino años atrás varios investigadores y expertos en seguridad han presentado la alerta de estos ante la comunidad de Internet.

Un homógrafo es un símbolo que parece ser el mismo o muy parecido a otro símbolo, un ataque homográfico sucede cuando un atacante registra un nombre de dominio que se parezca al de un sitio legitimo, pero en el algunos de los caracteres han sido sustituidos por homógrafos en otros alfabetos

Ejemplo:

Los ataques homográfico son utilizados para phishing, distribución de malware, reclutamiento de bot dentro de una botnet, etc.

Actualmente se conoce que navegadores de internet son vulnerables a estos ataques, entre ellos algunos han presentado soluciones ante el problema.

Pues que les diré me ha interesado el tema, IDN, IDNA, PunyCode, ASCII, no-ASCII, Unicode…, pues decidí seleccionar una muestra de dominios en internet como fuente de dominio he utilizado el Top 1 millón de Alexa.

Buscar dentro de la muestra:

  1. ¿Existen dominios IDNA codificado con PunyCode?
  2. ¿Como decodifico un dominio IDNA codificado con Punycode?
  3. ¿Existen dominios homógrafos?

1.¿Existen dominios IDNA codificado con PunyCode?

Primeramente conseguí la muestra en http://aws.amazon.com/alexatopsites/, te registras y tienes acceso a un zip con lista de “Top 1 millón de dominios del ranking de Alexa”

Con la muestra en mano si descomprimes el “.zip”, te extrae un archivo “.txt” en la lista del ranking con el formato “posición , dominio” pues para saber primeramente si habían dominios Punycode, los extraje a un archivo nuevo sabiendo que los dominios codificado en Punycode inicia con “xn--” o el prefijo ACE(ASCII Compatible Encoding).

Comando Ejecutado:

grep -o “xn--.*” top-1m.csv > top_1m_alexa_filtrado_punycode.txt

Pues si que existen 2560 dominios entre un millón, interesante.

2.¿Como descodifico un dominio IDNA codificado con Punycode?

Seguidamente usaremos el archivo generado en la pregunta anterio: “top_1m_alexa_filtrado_punycode.txt” a partir del filtrado con dominios codificado con punycode.

Haciendo un pequeño script de python 3.6, usando la librería “idna2.5” que pues conseguir descargándola en este link: http://pypi.python.org/pypi/idna#downloads, es importante aclarar que esta librería esta refería a IDNA 2008

Les muestro el Script:


import sys

import idna

try:

d=0

fb = open(“top_1m_alexa_filtrado_punycode.txt”,”rb”)

listA = list(fb)

fb.close()

for element in listA:

try:

word = str(element).split(‘,’)[1].replace(‘\\n\”,”).replace(‘\\r’,”)

decoded = idna.decode(word)

print(word + ” == ” + decoded)

except:

d=d+1

print(‘error’,word)

print(‘error’,sys.exc_info()[1])

except:

print(“error “,sys.exc_info())

finally:

print(“Errores detectado: “, repr(d))


En resumen se hace una iteración de las lineas del archivo, por cada linea extraes el dominio codificado en Punycode y luego lo descodificas por medio del método “idna.decode()”, también es importante proveer un medio para detectar/mostrar errores ya que algunos símbolos codificados podrían no ser reconocido por el formato idna 2008 o podría no estar actualizada la librería idna 2.5 con todas los caracteres… por la experiencia mejor detectarlos, ya como verán en mi experiencia mi script detecto 2 errores:

1.png

Ambos errores son caracteres que no son admitidos en IDNA 2008, estos dominios a largo plazo podrían verse como ilegales para estándar IDNA 2008:

error Codepoint U+00A7 at position 1 of ‘§’ not allowed. Es el “Section Sign” un carácter de tipografía referirse a una sección de un documento, en el IDNA 2008 No es valido se considera un dominio ilegal.

error Codepoint U+2764 at position 1 of ‘❤❤❤’ not allowed. Es el “Heavy Black Heart” Los Emojis en el IDNA 2008 No son validos se considera un dominio ilegal.

Como muestra la imagen se descodificaron los dominios.

2.png

3.¿Existen dominios con caracteres homógrafos?

Haciendo una búsqueda manual, no he podido automatizar este proceso, pues miren que encontré:

La prueba de concepto del investigador de seguridad Xudong Zheng en la posición #34742,xn--80ak6aa92e.com dentro del ranking “top 1millon de Alexa”.

3.png

Interesante se encuentran dominios con caracteres homógrafos de:

4.png

Creo que este tema y la fuente de datos “top 1 millón de Alexa” da para mucho mas… pero por el momento me despido los invito que hagan el ejercicio y encuentren mas dominios con caracteres homógrafos dentro de este TOP!!!!!… De igual manera podría realizar el mismo ejercicio con otras fuentes top de ranking de internet.