Saltar a contenido

En seguridad de la información, una amenaza (threat) es cualquier suceso que afecta al buen funcionamiento del sistema y a nuestros activos. La norma UNE 71504:2008, que define la Metodología de Análisis y Gestión de Riesgos para los Sistemas de Información (MAGERIT), la describe como:

«Causa potencial de un incidente que puede causar daños a un sistema de información o a una organización».

Las amenazas pueden ser involuntarias, como un desastre natural, o deliberadas, como un ataque DDoS. MAGERIT (™ MAGERIT v.3) clasifica las amenazas en los siguientes tipos:

  • De origen natural: terremotos, inundaciones, etc.
  • Del entorno (industrial): cortes de suministro, contaminación, etc.
  • Defectos de las aplicaciones: vulnerabilidades o fallos de diseño.
  • Causadas accidentalmente por personas: errores humanos, facilitación involuntaria de información. Incluye la ingeniería social.
  • Causadas deliberadamente por personas: amenazas intencionales para obtener beneficio o causar daño.

En el ámbito del hacking ético, es crucial conocer las tres últimas categorías.

Tipos de intrusos y motivaciones

Existen distintos tipos de intrusos o ciberdelincuentes según sus motivaciones:

  • Cracker: Busca provocar daños y obtener beneficios de forma ilegal, utilizando ingeniería inversa para evitar restricciones de software propietario.
  • Phreaker: Intenta acceder a Internet de forma gratuita a través de redes telefónicas, motivado por el alto coste de estas conexiones.
  • Spammer: Envía masivamente correos electrónicos para obtener ganancias económicas o colapsar servidores.
  • Lamer: Pretende ser un hacker sin conocimientos técnicos reales, limitándose a copiar y pegar. También conocido como script-kiddie.
  • Insider: Empleado que actúa contra su empresa por motivos económicos o venganza.
  • Exempleado: Antiguo trabajador con motivaciones similares al insider.
  • Hacktivist: Busca relevancia política con acciones contra injusticias o para proteger derechos humanos. Anonymous es un ejemplo.
  • State-Sponsored hacker: Actúa bajo el amparo de un Estado, atacando otras naciones para conseguir información o colapsar infraestructuras críticas.

Códigos dañinos: malware

El malware (malicious software) es un programa diseñado para introducirse en un sistema y causar control o daño, como cifrar información, borrar datos o espiar actividades.

Las técnicas de propagación del malware varían en sofisticación. Un vector común son las tiendas de aplicaciones móviles, donde se infiltran apps maliciosas y el usuario acepta permisos sin cuestionar. También se puede ocultar malware en software sospechoso que activa alertas de antivirus. Otra técnica es la esteganografía, ocultando malware en ficheros legítimos (stegomalware). Más detalles en la charla de Alfonso Muñoz sobre stegomalware.

Un método más complejo es el malware fileless in-memory, que solo existe en la memoria, dificultando el análisis forense.

Clasificación del malware

El malware se clasifica según su funcionamiento o daño:

  • Exploit: Aprovecha vulnerabilidades del software.
  • Virus: Se replica acoplándose a programas legítimos.
  • Ransomware: Encripta información y pide un rescate.
  • Spyware: Espía al usuario y envía la información al atacante.
  • Adware: Muestra publicidad constante.
  • Troyano: Se disfraza de software útil y permite control remoto.
  • Rootkit: Proporciona acceso oculto al sistema.
  • Keylogger: Registra las teclas pulsadas para robar información.
  • Gusano: Se autopropaga a través de redes.
  • Cryptojacking: Usa el sistema para minar criptomonedas.

Estas categorías no son excluyentes, y un malware puede combinar varias características.

Breve historia del malware

Algunos eventos relevantes en la historia del malware:

  • Brain (1986): Primer virus difundido fuera de un laboratorio.
  • Jerusalem (1987): Borraba ficheros en el «Viernes 13».
  • Gusano de Morris (1988): Colapsó la red ARPANET.
  • Michelangelo (1992): Actuaba el 6 de marzo.
  • Chernobyl o CIH (1999): Formateaba discos y dañaba hardware.
  • Melissa (1999): Infectó millones de ordenadores por correo.
  • Loveletter (2000): Infectó 40 millones de ordenadores.
  • Stuxnet (2010): Atacó sistemas críticos, primera arma cibernética.
  • Wannacry (2017): Infectó 200 000 dispositivos, detenido por Marcus Hutchins.

Tipos de ataques

En este apartado se clasifican los tipos de ataques más comunes en un sistema informático: ataques a contraseñas, ataques de ingeniería social, ataques a las conexiones, ataques a la cadena de suministro y ataques invisibles en el código fuente.

Ataques a contraseñas

Estos ataques buscan obtener credenciales de acceso. Su éxito aumenta si se reutilizan contraseñas o si estas no son complejas. Usan fuerza bruta o diccionarios de contraseñas filtradas. Have I been pwned? permite comprobar si una cuenta ha sido comprometida. Para protegerse, se recomienda usar autenticación multifactor y un gestor de contraseñas como GuardedBox, que ofrece cifrado End-to-End.

Ataques de ingeniería social

Estos ataques manipulan a los usuarios para que realicen acciones perjudiciales. Algunos ejemplos comunes son:

  • Fraude online: Venta falsa de productos o servicios en plataformas oficiales.
  • Phishing, vishing y smishing: Suplantan la identidad de un emisor legítimo para robar datos mediante correos, llamadas o SMS.
  • Baiting: Usa cebos para que el usuario descargue software malicioso.
  • Shoulder surfing: Observar a un usuario para obtener información confidencial.
  • Dumpster diving: Rebuscar en la basura para obtener información relevante.

Ataques a las conexiones

Estos ataques explotan las redes de comunicación. Los más comunes son:

  • DDoS: Sobrecarga de un servicio con peticiones para colapsarlo.
  • Ataques de intermediario (MitM): Un atacante intercepta y modifica el tráfico entre dos partes.
  • Suplantación (spoofing): Falsificar datos de red para hacerse pasar por otro.
  • Escucha de conexiones (sniffing): Capturar tráfico no cifrado.
  • Redes trampa (Rogue AP): Crear puntos de acceso falsos en lugares públicos para interceptar conexiones.

Ataques a la cadena de suministro

Estos ataques vulneran sistemas de terceros que forman parte de la cadena de suministro del objetivo. Un ejemplo relevante es el ataque a SolarWind, que afectó a miles de organizaciones, incluyendo agencias gubernamentales. Para mitigar estos ataques, se recomienda la adopción de arquitecturas de seguridad Zero Trust, donde el principio es "nunca confiar, siempre comprobar".

Ataques invisibles en el código fuente

En estos ataques, se insertan caracteres Unicode invisibles en el código fuente, alterando su comportamiento sin que sea evidente en revisiones. Descubierto en 2021, este tipo de ataque es especialmente peligroso en la cadena de suministro.

Vulnerabilidades

Una vulnerabilidad o bug es un fallo de diseño de un sistema que pone en riesgo su funcionamiento y su seguridad. El primer fallo informático registrado se produjo el 9 de septiembre de 1947 en el laboratorio de cálculo de la Universidad de Harvard. Grace Murray Hopper, quien trabajaba como programadora del ordenador Mark II, anotó en el libro de registro un fallo provocado por la presencia de una polilla, coloquialmente conocida como un bicho (bug en inglés), en uno de los relés del computador. De ahí surgió el término "bug" para referirse a errores informáticos.

Imagen de la polilla en el diario del ordenador Mark II Figura 1.3. Imagen de la polilla en el diario del ordenador Mark II. (Fuente: Wikipedia).

En los siguientes subapartados se detallan los diferentes tipos de vulnerabilidades, sus causas, y la forma en la que se reportan y documentan.

Causas y Tipos de Vulnerabilidades

Las vulnerabilidades pueden ser de software o hardware. Las de software suelen ser causadas por errores de programación, fallos de configuración, o puertas traseras (backdoors) que permiten el acceso remoto. Un ejemplo de puerta trasera intencionada es cuando agencias gubernamentales han tenido acceso a sistemas sin mucho esfuerzo (Microsoft permitió a la NSA acceder a mensajes cifrados).

Los errores en el software pueden suceder en cualquier nivel del sistema informático. Por ejemplo, una aplicación web puede tener vulnerabilidades en el servidor web, la aplicación misma, el entorno de ejecución, o las librerías de terceros. Incluso si se corrigen todos los errores en la aplicación, si los componentes externos no se mantienen actualizados, el sistema seguirá siendo vulnerable.

Vulnerabilidades de Software

Las vulnerabilidades de software afectan a los programas informáticos y suelen ocurrir por errores en el código fuente o fallos de configuración. Ejemplos notables incluyen:

  • Log4shell (CVE-2021-44228): Una vulnerabilidad en la librería log4j, ampliamente utilizada para registrar eventos en aplicaciones Java (Análisis de Log4Shell).
  • Spring4shell (CVE-2022-22965): Afecta al núcleo del framework Spring, permitiendo la ejecución remota de código (RCE).

También existen vulnerabilidades que afectan a sistemas operativos. Estos errores pueden permitir a los atacantes ejecutar código con privilegios elevados. Ejemplos:

Otro error común en el software es el mal uso de la criptografía. Por ejemplo, Zerologon (CVE-2020-1472) permite a un atacante convertirse en administrador de un dominio debido a un fallo en el protocolo Netlogon Remote Protocol.

Vulnerabilidades de Hardware

Las vulnerabilidades de hardware permiten a los atacantes evadir las protecciones del sistema operativo y obtener información valiosa. Ejemplos:

  • Meltdown (CVE-2017-5754) y Spectre (CVE-2017-5753, CVE-2017-5715): Aprovechan fallos en la ejecución especulativa de los procesadores para leer datos a los que no deberían tener acceso.
  • Retbleed (CVE-2022-29900) y Zenbleed (CVE-2023-20593): Afectan a la ejecución especulativa y a la serie de procesadores Zen de AMD, respectivamente.

Otro tipo de vulnerabilidad destacada es Rowhammer, que afecta a las memorias DDR DRAM y permite modificar bits tras accesos repetidos.

Las vulnerabilidades también pueden afectar a dispositivos específicos, como consolas de videojuegos. Ejemplos incluyen FreeHDBoot y FreeDVDBoot, utilizadas para evitar sistemas anticopia en consolas PlayStation (Exploit en discos Blu-ray para PS4/PS5).

Vulnerabilidades de Día Cero (Zero-Day)

Una vulnerabilidad de día cero es aquella que no ha sido reportada oficialmente o para la cual aún no existe un parche. Existen plataformas como Zerodium, que ofrecen grandes sumas de dinero por la venta de estas vulnerabilidades, a diferencia de las plataformas de recompensas (bug bounty), donde los fabricantes pagan por el reporte responsable para corregirlas antes de que se hagan públicas.

Cuantías por vulnerabilidades en plataformas móviles Figura 1.4. Cuantías por diferentes tipos de vulnerabilidades en plataformas móviles. (Fuente: Zerodium).

Documentación de Vulnerabilidades

Las vulnerabilidades se documentan usando el sistema CVE (Common Vulnerabilities and Exposures), que asigna un identificador único. El identificador se compone de tres elementos: CVE-año-identificador, donde el año indica cuándo se hizo pública la vulnerabilidad. El listado completo se encuentra en la web de MITRE.

Las vulnerabilidades se evalúan según su gravedad usando el CVSS (Common Vulnerability Scoring System), cuya versión más reciente es la 4. El CVSS asigna una puntuación entre 0 y 10 para categorizar la severidad de la vulnerabilidad.

GRAVEDAD RANGO DE CVSS
Baja 0.0 - 3.9
Media 4.0 - 6.9
Alta 7.0 - 8.9
Crítica 9.0 - 10.0

Las vulnerabilidades también se clasifican por tipo utilizando el sistema CWE (Common Weakness Enumeration), que ofrece una lista exhaustiva de vulnerabilidades de software y hardware. Algunas de las vulnerabilidades más comunes incluyen CWE-79 (Cross-site Scripting), CWE-89 (SQL Injection) y CWE-20 (Improper Input Validation).

Para los hackers éticos, conocer esta información es esencial al realizar auditorías de seguridad, ya que estas vulnerabilidades tienden a presentarse con cierta frecuencia.