Sobre punycode y otras yerbas…

Marvin G. Soto
4 min readSep 7, 2021

--

Punycode es una sintaxis de codificación de transferencia simple y eficiente diseñada para su uso con nombres de dominio internacionalizados en aplicaciones (IDNA). Lo que hace Punycode es transformar de forma única y reversible una cadena Unicode en una cadena ASCII.

Como sabemos los caracteres ASCII en la cadena Unicode se representan literalmente y los caracteres que no son ASCII están representados por caracteres ASCII que están permitidos en las etiquetas de nombre de host (letras, dígitos y guiones).

El RFC-3492 define un algoritmo general llamado Bootstring que permite que una cadena de puntos de código básicos, represente de forma única cualquier cadena de puntos de código extraídos de un conjunto más grande. Osea, Punycode es una instancia de Bootstring que usa valores de parámetros particulares, apropiados para IDNA. La sintaxis está publicada en Internet en el documento RFC 3492.

Ok, hasta acá todo bien… pero,

Punycode permite registrar dominios con caracteres extranjeros. Para ilustrar, no es lo mismo el nombre de dominio Apple en español, que en alfabeto Cirilo (Ruso) o Chino Mandarín. Lo que permite que Punycode funcione como convertidor de la etiqueta de dominio individual, a un formato alternativo utilizando solo caracteres ASCII. Por ejemplo, el dominio “xn–s7y.co” es equivalente a “短 .co”. Otro ejemplo… Es posible además registrar dominios como “xn–pple-43d.com”, que es equivalente a “аpple.com”.

Desde una perspectiva de seguridad, los dominios Unicode pueden ser problemáticos porque muchos caracteres Unicode son difíciles de distinguir de los caracteres ASCII comunes. Y bueno, puede que no sea obvio a primera vista, pero “аpple.com” usa el cirílico “a” (U + 0430) en lugar del ASCII “a” (U + 0061). Esto se conoce como ataque homógrafo.

Afortunadamente, los navegadores modernos tienen mecanismos para limitar los ataques homógrafos de IDN. En términos generales, el formulario Unicode estará oculto si una etiqueta de dominio contiene caracteres de varios idiomas diferentes. El dominio “аpple.com” como se describe arriba aparecerá en su forma de Punycode como “xn–pple-43d.com” para limitar la confusión con el verdadero “apple.com”.

De esto hablo Xudong Zheng en un artículo que usamos como base para esta ponencia al idioma español.

Para este caso, el mecanismo de protección homógrafo en Chrome, Firefox y Opera falla si todos los caracteres se reemplazan con un carácter similar de un solo idioma extranjero. El dominio “аррӏе.com”, registrado como “xn–80ak6aa92e.com”, omite el filtro utilizando únicamente caracteres cirílicos. Puede comprobarlo usted mismo en la prueba de concepto con Chrome, Firefox u Opera para el dominio “аррӏе.com”.

Visualmente, los dos dominios son indistinguibles debido a la fuente utilizada por Chrome y Firefox. Como resultado, resulta imposible identificar el sitio como fraudulento sin inspeccionar cuidadosamente la URL del sitio o el certificado SSL. Ahora bien, en el caso de Internet Explorer, si nos muestra los caracteres nativos en dominios solo si pertenece a uno de los idiomas del sistema de la computadora. Como resultado, sufre la misma vulnerabilidad si el sistema tiene habilitado el ruso (y otros idiomas cirílicos). La documentación de Internet Explorer reconoce que los usuarios están “aumentando el riesgo de ataques de suplantación de identidad” cuando su sistema admite idiomas adicionales.

Los usuarios de Firefox pueden limitar su exposición yendo a about: config y configurando network.IDN_show_punycode en true. Esto obligará a Firefox a mostrar siempre los dominios IDN en su forma Punycode, lo que hará posible identificar dominios maliciosos.

Una forma sencilla de limitar el daño de errores como este, es utilizar siempre un administrador de contraseñas. En general, los usuarios deben tener mucho cuidado y prestar atención a la URL al ingresar información personal.

Nuestra recomendación es que escriba usted mismo la URL desde su teclado en el idioma que usa, también puede usar un administrador de contraseñas como se citó supra o bien, verificar los certificados de los sitios.

Por ejemplo, para esta prueba de concepto desarrollada por Xudong Zheng, se utiliza un certificado de seguridad de Let’s Encrypt, tal como se muestra supra.

Aque que esto, los usuarios preocupados deben escribir manualmente la URL o navegar a sitios a través de un motor de búsqueda en caso de duda, revisar certificados o usar administradores de contraseñas.

Esta es una vulnerabilidad grave que aún persiste y que incluso puede engañar a quienes son extremadamente conscientes del phishing.

--

--

Marvin G. Soto
Marvin G. Soto

Written by Marvin G. Soto

Pensador, innovador, luchador, enamorado de su profesión, apasionado por las letras… de dificil renunciar y lejano a rendirse…

No responses yet