Un ataque homográfico (Homograph Attack) es una forma de engaño visual que hace creer al usuario que está visitando un sitio web legítimo cuando en realidad está siendo dirigido a una página fraudulenta controlada por un atacante.
Se basa en el concepto de homógrafo: caracteres que parecen idénticos visualmente pero son completamente diferentes en su representación digital (distinto codepoint Unicode).
El atacante registra un dominio visualmente casi idéntico al objetivo y espera que el usuario no note la diferencia.
1. Ataques Homográficos Unicode / Punycode (IDN)
Usan caracteres de otros alfabetos (cirílico, griego, armenio) visualmente idénticos a letras latinas. El dominio se codifica como Punycode: xn--...
2. Ataques ASCII look-alike (tipográficos)
No usan Unicode. Usan combinaciones de caracteres ASCII visualmente parecidos: rn → m, l → I, 0 → O. Son 100% ASCII válidos, más difíciles de detectar.
| URL Legítima | URL Maliciosa | Carácter sustituido | Tipo |
|---|---|---|---|
| amazon.com | amaz0n.com | 'o' → '0' (zero) | ASCII look-alike |
| paypal.com | paypal.com | 'a' latina → 'а' cirílica (U+0430) | IDN Homograph |
| microsoft.com | rnicrosoft.com | 'm' → 'rn' (dos chars ASCII) | ASCII tipográfico |
| google.com | googlе.com | 'e' latina → 'е' cirílica (U+0435) | IDN Homograph |
| paypal.com | paypaI.com | 'l' → 'I' mayúscula | ASCII look-alike |
Punycode es un estándar de codificación (RFC 3492) que permite representar nombres de dominio con caracteres no-ASCII usando únicamente caracteres ASCII válidos. Es la tecnología que hace posibles los Nombres de Dominio Internacionalizados (IDN).
El DNS solo puede procesar caracteres ASCII. Cuando alguien registra un dominio como españa.com, el sistema lo convierte a Punycode: xn--espaa-rta.com. Todos los dominios Punycode comienzan con el prefijo xn--.
| Dominio visible | Punycode real (DNS) |
|---|---|
| español.com | xn--espaol-zwa.com |
| münchen.de | xn--mnchen-3ya.de |
| 中文.com | xn--fiq228c.com |
| 日本語.jp | xn--wgv71a309e.jp |
| الإنترنت | xn--4gbrim.com |
| Dominio visual | Dominio legítimo | Punycode |
|---|---|---|
| аррӏе.com | apple.com | xn--80ak6aa92e.com |
| googlе.com | google.com | xn--googl-r7a.com |
| microsоft.com | microsoft.com | xn--microsft-n0g.com |
| раypal.com | paypal.com | xn--ypal-43d.com |
| Char visual | Unicode | Alfabeto | Sustituye a | Riesgo | Ejemplo de dominio |
|---|---|---|---|---|---|
| а | U+0430 | Cirílico | a (U+0061) | 🔴 CRÍTICO | аmazon.com |
| е | U+0435 | Cirílico | e (U+0065) | 🔴 CRÍTICO | googlе.com |
| о | U+043E | Cirílico | o (U+006F) | 🔴 CRÍTICO | micrоsoft.com |
| р | U+0440 | Cirílico | p (U+0070) | 🔴 CRÍTICO | раypal.com |
| с | U+0441 | Cirílico | c (U+0063) | 🟡 ALTO | faсebook.com |
| т | U+0442 | Cirílico | t (U+0074) | 🟡 ALTO | youтube.com |
| х | U+0445 | Cirílico | x (U+0078) | 🟡 ALTO | eхample.com |
| ω | U+03C9 | Griego | w (U+0077) | 🟡 ALTO | tωitter.com |
| ν | U+03BD | Griego | v (U+0076) | 🟡 ALTO | νisa.com |
| ạ | U+1EA1 | Latin ext. | a (U+0061) | 🔵 MEDIO | gmạil.com |
| ι | U+03B9 | Griego | i (U+0069) | 🔵 MEDIO | linkedιn.com |
| ․ | U+2024 | Puntuación | . (U+002E) | 🟡 ALTO | linkedin․com |
| Dominio visual (Unicode) | Dominio legítimo | Char engañoso | Unicode | Punycode | Sector |
|---|---|---|---|---|---|
| аррӏе.com | apple.com | а р р ӏ е (cirílico) | U+0430 U+0440 U+0440 U+04CF U+0435 | xn--80ak6aa92e.com | Tech |
| аpple.com | apple.com | а (cirílico) | U+0430 | xn--pple-43d.com | Tech |
| googlе.com | google.com | е (cirílico) | U+0435 | xn--googl-r7a.com | Tech |
| microsоft.com | microsoft.com | о (cirílico) | U+043E | xn--microsft-n0g.com | Corporate |
| раypal.com | paypal.com | р а (cirílico) | U+0440 U+0430 | xn--ypal-43d.com | Banca |
| tωitter.com | twitter.com | ω (griego) | U+03C9 | xn--titter-i2e.com | Social |
| fаcebook.com | facebook.com | а (cirílico) | U+0430 | xn--fcebook-43d.com | Social |
| instаgram.com | instagram.com | а (cirílico) | U+0430 | xn--instgram-43d.com | Social |
| gmạil.com | gmail.com | ạ (diacrítico) | U+1EA1 | xn--gmil-6q5a.com | |
| аmazon.com | amazon.com | а (cirílico) | U+0430 | xn--mazon-43d.com | E-Commerce |
| youтube.com | youtube.com | т (cirílico) | U+0442 | xn--youube-4fg.com | Media |
| linkedin․com | linkedin.com | ․ (punto Unicode) | U+2024 | xn--linkedin-m2f.com | Corporate |
| Característica | Valor |
|---|---|
| Tipo | Phishing ASCII (no Unicode) |
| Técnica | Homoglifo tipográfico rn→m |
| ¿Aplica Punycode? | ❌ NO — es 100% ASCII |
| ¿Puede tener HTTPS? | ✅ SÍ — certificado válido |
| ¿Dispara alerta IDN? | ❌ NO |
| Riesgo | 🔥 MUY ALTO |
¿Por qué funciona?
- En muchas tipografías sans-serif, rn y m son visualmente muy similares
- El cerebro humano lee las primeras y últimas letras de las palabras, no cada carácter individualmente
- En pantallas pequeñas (móvil), la diferencia es prácticamente nula
- No hay ningún mecanismo técnico que alerte de este ataque — depende 100% de la atención del usuario
| Dominio falso | Dominio real | Engaño visual | Tipo | Sector |
|---|---|---|---|---|
| rnicrosoft.com | microsoft.com | rn → m | Tipográfico | Corporate |
| paypaI.com | paypal.com | I mayúscula → l minúscula | Look-alike | Banca |
| faceb00k.com | facebook.com | 00 → oo | Numérico | Social |
| gmaiI.com | gmail.com | I mayúscula → l | Look-alike | |
| micros0ft.com | microsoft.com | 0 → o | Numérico | Corporate |
| arnazon.com | amazon.com | rn → m | Tipográfico | E-Commerce |
| l1nkedin.com | linkedin.com | l1 → li | Mixto | Corporate |
| rnybank.com | mybank.com | rn → m | Tipográfico | Banca |
| lnstagram.com | instagram.com | l → I (confusión) | Look-alike | Social |
| nnetflix.com | netflix.com | n doble → n single | Omisión | Media |
Uno de los ejemplos más documentados. El dominio xn--80ak6aa92e.com usaba caracteres completamente cirílicos que se mostraban como аррӏе.com en Chrome y Firefox de la época.
El atacante obtuvo un certificado SSL válido para el dominio Punycode, lo que añadía el candado verde y eliminaba cualquier señal visual de alerta.
Respuesta: Chrome y Firefox actualizaron sus heurísticas para mostrar la versión Punycode (xn--...) cuando detectan mezcla de alfabetos.
La plataforma de videojuegos Steam fue objetivo de un esquema de phishing Punycode a gran escala. Los atacantes creaban URLs que parecían pertenecer a la comunidad oficial de Steam o a intercambios de items.
Los usuarios recibían ofertas de intercambio con links a steаmcommunity.com (con la 'а' cirílica).
Escenario típico: Item de alto valor → oferta de intercambio → link de login falso → credenciales robadas → cuenta vaciada.
| Factor | Por qué funciona |
|---|---|
| 📖 Lectura rápida | El cerebro autocorrige y lee "microsoft" aunque sea "rnicrosoft" |
| 🖋️ Tipografías sans-serif | Las usadas en email ocultan la diferencia entre rn y m |
| 📱 Pantalla pequeña | En móvil, la URL es más difícil de leer con atención |
| 🔒 HTTPS | El candado genera falsa sensación de seguridad |
| 😩 Fatiga del usuario | Múltiples emails diarios → menos tiempo para verificar |
| 😱 Urgencia artificial | "Tu cuenta ha sido comprometida" presiona a actuar rápido |
| Herramienta | Tipo | Función | Uso |
|---|---|---|---|
| dnstwist | CLI | Genera variantes de un dominio y comprueba cuáles están registradas | Monitorización proactiva |
| URLcrazy | CLI | Genera variantes typosquatting y look-alike | Red team / Blue team |
| confusables (Python) | Librería | Detecta caracteres Unicode confusables según Unicode.org | Validación en código |
| unidecode (Python) | Librería | Convierte Unicode a ASCII equivalente detectando substituciones | Normalización |
| PhishTank | Web | Base de datos colaborativa de URLs de phishing verificadas | Consulta de URLs |
| VirusTotal | Web/API | Análisis de URLs y dominios contra múltiples motores | Verificación URL |
| Whois + crt.sh | Web | Verificar datos de registro y certificados de un dominio | Investigación OSINT |
| Punycode Converter | Web | Convertir entre Punycode y Unicode visualmente | Verificación manual |