Imagen que ilustra el uso de homógrafos en ataques de phishing, junto con el código CWE-1007.
Homógrafos: Una herramienta para el phishing y la seguridad online.

CWE-1007: Por qué los Homógrafos se han Convertido en Arma para Hackers y Cómo Protegerse

¿Qué se esconde detrás de las siglas CWE-1007? Analizaremos cómo se utilizan los homógrafos para el phishing, el envenenamiento de código y la creación de dominios falsos. El artículo explica cómo los atacantes utilizan símbolos visualmente similares para engañar a los usuarios.

Muchas ciberamenazas se caracterizan por su sutileza y la dificultad de detectarlas. Uno de estos problemas son los llamados homógrafos. En CWE-1007 (Insufficient Visual Distinction of Homoglyphs Presented to User), se describe dicha vulnerabilidad. Los atacantes la utilizan a menudo para engañar a usuarios y desarrolladores con el fin de comprometer sistemas o datos.

El artículo proporciona un análisis profundo de CWE-1007, explicando sus mecanismos y métodos de protección contra este tipo de ataques. Los ejemplos, los desafíos técnicos y las prácticas recomendadas ayudarán a los desarrolladores no solo a comprender esta amenaza, sino también a implementar medidas de protección eficaces.

¿Qué son los homógrafos y por qué son peligrosos?

Ilustración que muestra un ejemplo de homografía en una URL sospechosa, indicando un posible intento de phishing.
Prevención del phishing: Reconocimiento de URLs fraudulentas.

Antes de profundizar en CWE-1007, es importante comprender qué son los homógrafos. Los homógrafos son símbolos que se parecen visualmente, pero tienen diferentes códigos Unicode. Esto puede referirse a letras, números y símbolos. Por ejemplo, la letra mayúscula latina “O” y el número “0” pueden parecer prácticamente iguales. También existen otros ejemplos, como “l” (letra minúscula L latina) e “I” (letra mayúscula I latina), o letras cirílicas que se parecen a las latinas.

La similitud visual de los homógrafos se utiliza a menudo para el engaño. Los atacantes utilizan intencionadamente estos símbolos para crear sitios de phishing, imitar URLs o distorsionar el código para que el usuario crea que está tratando con un recurso fiable. Esto es especialmente peligroso porque las personas están acostumbradas a utilizar patrones visuales para tomar decisiones rápidas, lo que hace que las víctimas sean vulnerables a estas manipulaciones.

CWE-1007 denota una distinción visual insuficiente de los homógrafos cuando se presentan intencionadamente a los usuarios. Si el sistema no puede distinguir entre símbolos similares o no notifica al usuario de su presencia, esto puede provocar, por ejemplo, un acceso accidental a un enlace malicioso, la visita a un dominio falso o la ejecución de un comando fraudulento.

Esta vulnerabilidad se encuentra con frecuencia en la visualización de URLs, nombres de usuario o comandos. Los hackers suelen dirigirse a contraseñas, datos de tarjetas bancarias u otra información confidencial utilizando homógrafos para redirigir al usuario a un sitio falso, pero visualmente creíble.

Ejemplos de escenarios de ataque

Uno de los ejemplos típicos es el uso de dominios falsos con homógrafos. Por ejemplo, el usuario recibe un correo electrónico con un enlace a paypa1.com (donde el número “1” se utiliza en lugar de la letra “l”). A primera vista, el enlace puede parecer real. Técnicas similares funcionan también con nombres de usuario en redes sociales o comandos importantes en la consola.

Otro ejemplo es el uso de homógrafos en el código fuente. Los ciberdelincuentes pueden insertar símbolos falsos en el código que parecen legítimos, pero que dan lugar a una funcionalidad diferente. Esto es especialmente peligroso en proyectos de código abierto o en equipos donde varios desarrolladores trabajan en un mismo proyecto y pueden no detectar estas manipulaciones. Estas vulnerabilidades crean riesgos para la integridad del código y pueden utilizarse para ataques.

Otro ejemplo cotidiano es un nombre de usuario falso en una red social. Para hacerse pasar por una cuenta oficial de atención al cliente, un atacante puede crear el nombre “facеbook_support“, donde la letra latina “e” se sustituye por una letra cirílica similar “е“. Los usuarios desprevenidos pueden revelar información confidencial a esta cuenta.

¿Por qué es peligrosa CWE-1007?

CWE-1007 es peligrosa porque las personas dependen en gran medida de las señales visuales para tomar decisiones. Nuestra vista está configurada para reconocer patrones y percibir información rápidamente, pero a menudo se omite la verificación cuidadosa de cada símbolo. Los atacantes se aprovechan de esto.

El peligro de la vulnerabilidad no se limita a los ataques de phishing: CWE-1007 también puede provocar manipulaciones de software o la inserción de código malicioso en proyectos. Además, estos ataques pueden provocar pérdidas financieras si los datos de pago llegan a manos de los atacantes.

Otro aspecto son los riesgos de reputación para las empresas. Los hackers utilizan intencionadamente la confianza de los usuarios en marcas conocidas y los redirigen a versiones falsas. Si los usuarios tienen una experiencia negativa, esto puede dañar la confianza en la marca, lo que a largo plazo causa un daño grave a la empresa.

Posibles escenarios de ataque

Imagen de un portátil mostrando un correo electrónico de phishing, con un aviso de alerta.
Ejemplo de correo electrónico de phishing y sus peligros.
  • Ataques de phishing con URLs falsas: Los atacantes crean URLs que son casi idénticas a las de sitios conocidos. Un usuario desprevenido puede hacer clic en el enlace sin darse cuenta de que en el dominio se utiliza, por ejemplo, un símbolo cirílico en lugar de uno latino. Cuando el usuario deja sus datos en dicho sitio, los atacantes obtienen acceso a la información introducida, que puede incluir contraseñas o datos de tarjetas bancarias.
  • Inyección de código mediante símbolos falsos: En proyectos de software complejos, los homógrafos pueden utilizarse para modificar el comportamiento del código. Los ciberdelincuentes pueden introducir funciones maliciosas que solo se manifiestan en el entorno de trabajo. Estas vulnerabilidades son difíciles de detectar, ya que los símbolos similares son fáciles de pasar por alto.
  • Ingeniería social en redes sociales: El atacante puede crear un nombre de usuario prácticamente idéntico al de un contacto de confianza para engañar a los usuarios. Por ejemplo, el uso del nombre “LinkedIn-Support” con una pequeña modificación de un símbolo puede ser eficaz sin comprobaciones de seguridad adicionales.

Estrategias de protección contra CWE-1007

Para protegerse de las amenazas relacionadas con CWE-1007, se necesitan medidas tanto técnicas como organizativas. Estas son algunas estrategias que ayudarán a minimizar los riesgos:

  • Unificación Unicode: Una de las formas más eficaces de reconocer los homógrafos es la unificación Unicode. El proceso lleva los símbolos similares a una forma estándar, simplificando su identificación.

Por ejemplo, se puede evitar el uso de diferentes sistemas de escritura para el engaño.

import java.text.Normalizer;

public class UnicodeNormalizationExample {
    public static void main(String[] args) {
        String suspiciousString = "päypäl.com";
        String normalizedString = Normalizer.normalize(suspiciousString, Normalizer.Form.NFKC);
        System.out.println("Normalized String: " + normalizedString);
    }
}

Este código Java usa la librería java.text.Normalizer para normalizar la cadena, convirtiendo formas equivalentes de caracteres en una forma canónica.

  • Formación de los usuarios: Los usuarios deben estar capacitados para reconocer correos electrónicos, enlaces y nombres de dominio sospechosos. Es importante realizar formaciones periódicas y proporcionar ejemplos para aumentar la concienciación y mejorar las habilidades para detectar este tipo de ataques.
  • Advertencias en los navegadores: Los navegadores modernos están equipados con mecanismos que advierten sobre dominios o símbolos sospechosos de diferentes sistemas Unicode. Estas advertencias deben estar activadas.
  • Revisión y herramientas de análisis de código: Las revisiones periódicas del código por parte de los desarrolladores ayudan a detectar símbolos sospechosos. Las herramientas de análisis estático también pueden detectar homógrafos en el código y reducir los riesgos.

Aquí hay un ejemplo de una simple función en Java que busca caracteres sospechosos:

public class CodeReviewExample {
    public static boolean containsSuspiciousCharacters(String input) {
        return !input.matches("^[\\ -\\~]*$");
    }

    public static void main(String[] args) {
        String input = "paypaı.com"; // contiene homógrafo "ı" (i minúscula sin punto)
        if (containsSuspiciousCharacters(input)) {
            System.out.println("Caracteres sospechosos encontrados: " + input);
        }
    }
}

Esta función Java comprueba si la cadena contiene caracteres fuera de un rango básico. No es una detección perfecta de homógrafos, pero es un ejemplo básico. Como antes, se necesitaría un equivalente en Python para su uso en ese entorno.

  • Limitación de los símbolos permitidos: Las aplicaciones pueden definir conjuntos de símbolos permitidos para minimizar el uso de homógrafos. Por ejemplo, permitir solo símbolos latinos en los nombres de usuario o URLs.
public class CharacterWhitelistExample {
    public static boolean isValidInput(String input) {
        return input.matches("^[a-zA-Z0-9]*$");
    }

    public static void main(String[] args) {
        String username = "usernäme"; // contiene un símbolo no latino
        if (isValidInput(username)) {
            System.out.println("Nombre de usuario válido.");
        } else {
            System.out.println("Nombre de usuario contiene caracteres inválidos.");
        }
    }
}

Esta función Java solo permite letras alfanuméricas. De nuevo, se necesitaría código Python para utilizarse en ese lenguaje.

Problemas técnicos

El reconocimiento de homógrafos es una tarea técnicamente compleja debido a la gran cantidad de símbolos en el estándar Unicode. El algoritmo debe distinguir entre la similitud visual y el significado real de los símbolos. Además, algunos sistemas muestran diferentes símbolos de la misma manera, lo que complica la tarea.

Los desarrolladores deben seguir una serie de recomendaciones para prevenir las amenazas de CWE-1007, como la validación de los datos de entrada, la aplicación de escaping y encoding, así como el uso de fuentes que distingan mejor los símbolos. La implementación de estas medidas ayudará a minimizar los riesgos y a proteger a los usuarios.

Herramientas para la detección de homógrafos

Existen varias herramientas y bibliotecas específicamente diseñadas para el reconocimiento de homógrafos. Ayudan a los desarrolladores y a los especialistas en seguridad a identificar posibles vulnerabilidades en sus sistemas. Entre las herramientas más conocidas se encuentran:

  • DNSTwist: Se utiliza para generar y comprobar nombres de dominio similares en busca de su registro para ataques de phishing.
  • Bibliotecas de detección de homógrafos: Diversas bibliotecas de software que se integran en las aplicaciones y ayudan a reconocer símbolos sospechosos.
  • Herramientas de análisis Unicode: Estas herramientas permiten comprobar la singularidad de los símbolos y excluir símbolos similares.

CWE relacionadas

CWE-1007 se utiliza a menudo en combinación con otras vulnerabilidades que socavan la seguridad de las aplicaciones. Entre ellas se encuentran:

  • CWE-601 (Open Redirect): Permite redirigir a los usuarios a URLs maliciosas.
  • CWE-643 (Improper Neutralization of Data within XPath Expressions): Vulnerabilidad relacionada con la comprobación insuficiente de datos en las consultas XPath.
  • CWE-79 (Cross-Site Scripting, XSS): Vulnerabilidad en la que los scripts maliciosos pueden insertarse en las aplicaciones mediante homógrafos.
  • CWE-20 (Improper Input Validation): Vulnerabilidad general relacionada con la comprobación insuficiente de los datos de entrada.
  • CWE-77 (Command Injection): Posibilidad de ejecutar comandos del sistema mediante la introducción de datos que contienen homógrafos.

Conclusión

CWE-1007, relacionada con la distinción visual insuficiente de los homógrafos, representa una seria amenaza a la que deben prestar atención tanto los desarrolladores como los usuarios finales. La implementación de medidas técnicas, la formación del personal y el cumplimiento de las mejores prácticas ayudarán a reducir considerablemente los riesgos asociados a la vulnerabilidad. La implementación cuidadosa de medidas de protección garantizará la seguridad de los datos y los sistemas en un entorno de ciberamenazas en constante crecimiento.

My Cart Close (×)

Tu carrito está vacío
Ver tienda