Las fallas criptográficas ocupan el segundo lugar en el OWASP Top 10 (2021) debido a la combinación de su amplia utilización en aplicaciones, redes y sistemas computacionales, junto con la proliferación de fallas relacionadas. Esta situación genera una superficie de ataque extensa y vulnerable, la cual permite a los atacantes acceder a información confidencial, manipular firmas digitales o incluso interrumpir comunicaciones protegidas.
Antes de adentrarnos en el análisis de las fallas criptográficas, vale la pena definir qué es la criptografía y enlistar cuáles son sus principales usos.
Criptografía, Criptología y sus usos
De acuerdo a la RAE la criptografía es el arte o la técnica de escribir o descifrar mensajes en clave. Aquí vale la pena recalcar que la criptografía y el criptoanálisis forman parte de la Criptología, la cual estudia los sistemas y lenguajes ocultos.
Desde el contexto de la ciberseguridad, la Criptología es una disciplina que se ocupa del desarrollo y la aplicación de técnicas matemáticas para asegurar la comunicación en presencia de terceros adversarios. Su principal objetivo es proteger la información digital, garantizando su confidencialidad, integridad, disponibilidad, autenticación y no repudio durante su almacenamiento y transmisión a través de sistemas digitales.
Existen cinco pilares de la criptología, los cuales comienzan con los tres elementos de la tríada de la CIA, estos son: Confidencialidad, Integridad, Disponibilidad, Autenticación, y No Repudio. Al analizar cada uno podemos ver que la Criptología va más allá de la mera codificación de datos, involucrándose en cada aspecto para robustecer el entorno digital.
Confidencialidad: Por medio de la criptografía, la información se transforma utilizando algoritmos y claves criptográficas de tal manera que solo puede ser descifrada e interpretada por quienes posean la clave adecuada. Este proceso asegura que la información permanezca inaccesible e incomprensible para usuarios no autorizados, garantizando así su privacidad y confidencialidad.
Integridad: La criptografía contribuye a la integridad de la información mediante el uso de sumas de verificación y firmas digitales que validan que los datos no han sido alterados durante su transmisión o almacenamiento. Esta característica es esencial para preservar la exactitud y completitud de la información.
Disponibilidad: Aunque la contribución de la criptografía a la disponibilidad no es tan directa como en los otros pilares, juega un rol crucial en la protección contra ataques que buscan comprometer el acceso a la información, como el ransomware. A través de la implementación adecuada de protocolos criptográficos, se pueden establecer sistemas de recuperación de datos y autenticación que garantizan el acceso a la información a usuarios autorizados cuando se necesita.
Autenticación: La criptografía es clave para verificar la identidad de los usuarios y los dispositivos, utilizando procesos criptográficos que confirman la autenticidad de las partes involucradas en una comunicación. Esto asegura que solo las entidades verificadas puedan acceder o intercambiar información, manteniendo la seguridad de la comunicación.
No Repudio: Por último, la criptografía provee mecanismos para garantizar el no repudio, asegurando que una vez que un mensaje ha sido enviado, el emisor no puede negar su autoría. Esto se logra a través de firmas digitales y certificados que vinculan inequívocamente un mensaje a su originador, ofreciendo una prueba irrefutable de su participación en la comunicación.
La siguiente tabla muestra algunos casos en donde se utilizan la criptografía.
Casos de uso | Aplicaciones | Descripción |
Seguridad en las comunicaciones | Navegación web segura | Asegurar las comunicaciones entre servidores web y navegadores web mediante HTTPS y TLS. |
Correo electrónico seguro | Los protocolos como S/MIME y PGP cifran los correos electrónicos y sus adjuntos. | |
Mensajería instantánea segura | Las aplicaciones de mensajería como WhatsApp y Signal utilizan cifrado de extremo a extremo. | |
Redes privadas virtuales (VPNs) | Las VPNs cifran el tráfico de internet que pasa por ellas, lo que permite a los usuarios navegar de forma segura en redes públicas y eludir la censura. | |
Protección de datos | Cifrado de disco duro | Cifrar discos duros completos para proteger la información almacenada en caso de robo o pérdida del dispositivo. |
Cifrado de archivos | Cifrar archivos confidenciales para evitar accesos no autorizados, incluso si el dispositivo está en manos de otras personas. | |
Gestión de derechos digitales (DRM) | La DRM se utiliza para proteger el contenido digital, como música, películas y libros electrónicos, contra la copia no autorizada y la distribución. | |
Autenticación e identificación | Firmas digitales | Verificar la identidad del firmante de un documento electrónico y garantizar su integridad mediante firmas digitales. |
Certificados digitales | Los certificados digitales se utilizan para autenticar la identidad de sitios web, usuarios y dispositivos en las comunicaciones en línea. | |
Autenticación de dos factores (2FA): | La 2FA agrega una capa adicional de seguridad al proceso de inicio de sesión al requerir un segundo factor de autenticación, como un código enviado por SMS o una huella digital, además de una contraseña. | |
Monedas y cadenas de bloques | Criptomonedas | Las criptomonedas como Bitcoin utilizan criptografía para proteger la integridad y la propiedad de las unidades de moneda digital. |
Cadenas de bloques | Las cadenas de bloques utilizan criptografía para asegurar la inmutabilidad y la transparencia de los registros de transacciones. | |
Otros ejemplos | Software de seguridad | Los programas antivirus y anti-malware utilizan criptografía para detectar y neutralizar amenazas. |
Votos electrónicos | La criptografía se puede utilizar para garantizar la seguridad y el secreto del voto electrónico. | |
Salud electrónica | La criptografía se puede utilizar para proteger la privacidad de los registros médicos electrónicos. |
Criptografía de NO repudio
La criptografía de no repudio merece un espacio especial porque su uso está en boga con la proliferación de las criptomonedas, las firmas digitales y las transacciones en línea.
Como hemos dicho, la criptografía de no repudio tiene como objetivo principal evitar que una de las partes involucradas pueda negar la recepción o la aceptación de un mensaje o transacción. Esto se logra mediante la creación de pruebas irrefutables que demuestran la participación de las partes en la interacción.
En otras palabras, la criptografía de no repudio busca prevenir las siguientes situaciones:
- Un emisor niega haber enviado un mensaje.
- Un receptor niega haber recibido un mensaje.
- Una parte niega haber firmado un contrato o acuerdo.
- Una parte niega haber realizado una transacción.
Para lograrlo, la criptografía de no repudio se basa en dos mecanismos principales:
- Firmas digitales: Las firmas digitales son una herramienta fundamental para verificar la autenticidad e integridad de mensajes o documentos electrónicos. Dichas firmas se generan utilizando una clave criptográfica privada y permiten establecer un vínculo irrefutable entre el mensaje y su firmante.
Las firmas digitales funcionan de la siguiente manera: el remitente del mensaje utiliza su clave privada para generar una firma digital única y específica para ese mensaje. Esta firma es anexada al mensaje y puede ser verificada por cualquier receptor utilizando la clave pública correspondiente, asegurando así que el mensaje no ha sido alterado y que proviene del firmante original.
- Marcas de tiempo: Las marcas de tiempo son registros que vinculan un mensaje o documento electrónico a un momento específico en el tiempo. Su función radica en demostrar que el mensaje o documento fue creado antes de un evento en particular. Esto es de gran utilidad para establecer la secuencia de eventos o evitar reclamaciones de acciones posteriores.
Las marcas de tiempo son generadas por una entidad de confianza, conocida como Autoridad de Sellado de Tiempo (TSA, por sus siglas en inglés). Esta entidad certifica que el mensaje o documento existía en un momento específico y proporciona un sello de tiempo, lo que brinda una evidencia sólida y verificable de la existencia del contenido en ese momento.
Fallas más frecuentes en el uso de claves criptográficas
Volvamos con las Fallas Criptográficas a las que se refiere el OWASP TOP 10. Este tipo de fallas eran etiquetadas anteriormente como “Exposición de Datos Sensibles” pero en palabras de OWASP, esta etiqueta se refería más al síntoma que a la causa. Al cambiar el nombre a Fallas Criptográficas, entendemos rápidamente que se refiere a las vulnerabilidades que surgen por la implementación o uso incorrecto de técnicas criptográficas.
A continuación, se enumerarán algunas de las fallas más frecuentes en el uso de claves criptográficas, incluyendo claves débiles, almacenamiento inadecuado de claves y reutilización de claves.
- Uso de algoritmos débiles o inapropiados: Es importante considerar que al seleccionar los algoritmos criptográficos, se deben elegir aquellos lo suficientemente fuertes para proteger los datos contra ataques conocidos. Usar algoritmos débiles o inapropiados puede dejar los datos expuestos a ataques de fuerza bruta o criptoanálisis.
- Implementación incorrecta de algoritmos: Incluso los algoritmos fuertes pueden ser vulnerables si se implementan de manera incorrecta. Los errores comunes incluyen errores de codificación, problemas de gestión de claves y configuraciones incorrectas.
- Uso incorrecto de claves criptográficas: Las claves criptográficas son esenciales para la seguridad de los datos. Su uso indebido puede exponer los datos a un acceso no autorizado. Los errores comunes incluyen el uso de claves débiles, el almacenamiento inadecuado de claves y la reutilización de claves.
- Fallos en la autenticación y autorización: Los sistemas de autenticación y autorización deben ser robustos para evitar el acceso no autorizado a los recursos. Las fallas en estos sistemas pueden permitir a los atacantes hacerse pasar por usuarios legítimos o acceder a recursos sin autorización.
Sobra decir que este tipo de fallas pueden causar el robo de datos confidenciales, como contraseñas, números de tarjetas de crédito e información personal, por atacantes.
¿Qué se considera un algoritmo débil o inapropiado?
Es completamente cierto e irrefutable. ¿Pero a qué se refiere exactamente?
- Los Algoritmos obsoletos no se consideran seguros debido a la aparición de nuevos métodos de ataque. Un ejemplo es el algoritmo MD5, que ha sido reemplazado por SHA-256.
- Algoritmos con longitudes de clave cortas: La longitud de la clave determina la dificultad de descifrar un mensaje cifrado. Las longitudes de clave cortas son más fáciles de descifrar que las largas. Se recomienda utilizar claves de al menos 256 bits para la mayoría de las aplicaciones.
- Algoritmos no adecuados para el uso previsto: Diferentes algoritmos criptográficos son adecuados para diferentes propósitos. Por ejemplo, el cifrado simétrico se utiliza para proteger la confidencialidad de los datos, mientras que la firma digital se utiliza para garantizar la integridad de los datos. Es importante elegir el algoritmo correcto para el caso de uso específico.
¿Por qué las empresas utilizarían algoritmos débiles u obsoletos?
La utilización de algoritmos criptográficos débiles u obsoletos por parte de las empresas puede atribuirse a varias causas, cada una derivada de distintos aspectos técnicos o de gestión. Analicemos en detalle los escenarios más comunes en los que esto sucede y sus implicaciones para la seguridad de la información.
1. Desconocimiento de la Evolución Criptográfica
La base de la criptografía es fundamentalmente matemática y, por ende, evoluciona constantemente. Algoritmos considerados robustos en el pasado pueden volverse vulnerables con los avances en la computación, como el incremento significativo en la capacidad de procesamiento o el desarrollo de nueva criptoanálisis. Las Empresas que no se mantienen al día con estas evoluciones pueden encontrarse involuntariamente dependiendo de algoritmos debilitados.
2. Legado y Compatibilidad
Una gran cantidad de infraestructuras de TI en empresas se construyen sobre sistemas heredados que, en su momento, implementaron los estándares criptográficos de esa época. Actualizar estos sistemas para soportar algoritmos modernos puede suponer un desafío técnico considerable, así como una inversión económica significativa. La necesidad de mantener la compatibilidad con sistemas antiguos o con socios comerciales que aún utilizan tecnologías obsoletas conlleva, a menudo, la decisión de mantener estos algoritmos desfasados.
3. Falta de Políticas de Actualización y Revisión
La ausencia de políticas empresariales específicas, que exijan revisiones periódicas y actualizaciones de los sistemas criptográficos, puede llevar a que las organizaciones continúen utilizando algoritmos anticuados. Sin un proceso formal que garantice la evaluación continua de la seguridad criptográfica, la adopción de soluciones más recientes y eficaces queda relegada.
4. Restricciones Económicas
El costo asociado a la sustitución de sistemas criptográficos puede ser prohibitivo para algunas empresas, especialmente para pequeñas y medianas. Actualizar infraestructuras, software y formar al personal en nuevas tecnologías criptográficas conlleva un gasto que algunas organizaciones podrían optar por evitar, a menos que se vean forzadas por circunstancias externas, como requisitos legales o clientales.
¿Cómo prevenir el uso de algoritmos débiles o inapropiados?
Debido a la naturaleza cambiante de este tipo de fallas en las que la eficiencia de los algoritmos es perecedera, se requiere adoptar un enfoque proactivo de revisión periódica, como:
- Mantenerse actualizado sobre las últimas amenazas criptográficas para poder tomar las medidas adecuadas para proteger los datos.
- Utilizar una biblioteca criptográfica de confianza contribuye a garantizar que se utilicen algoritmos fuertes y que se implementen correctamente.
- Realizar pruebas de seguridad regulares puede ayudar a identificar y solucionar las debilidades criptográficas en los sistemas y aplicaciones .
Escaneo de vulnerabilidades para detectar algoritmos débiles o inapropiados
Para la detección del uso de algoritmos débiles o inapropiados podemos contar con un enfoque que combine revisiones manuales, automáticas y pruebas de seguridad específicas para su detección efectiva. Comencemos con las herramientas automatizadas, como el análisis de código estático.
- Un escáner de vulnerabilidades como Nessus de Tenable es una herramienta poderosa que puede detectar el uso de algoritmos criptográficos débiles en diversas aplicaciones web, servidores y sistemas operativos. Esta herramienta es ideal para identificar posibles puntos débiles en la seguridad y proteger los datos confidenciales.
- Otro escáner popular es Nmap, una alternativa de código abierto y gratuita que se enfoca en el análisis de red. Nmap tiene la capacidad de detectar el uso de protocolos criptográficos inseguros en dispositivos de red, lo que ayuda a fortalecer la seguridad y prevenir posibles ataques.
Es importante tener en cuenta que estas herramientas de escaneo de vulnerabilidades no analizan el código fuente de las aplicaciones. En contraste, el análisis de código estático se adentra en el código de la aplicación, revisando el código fuente en busca de errores de programación, debilidades de seguridad y vulnerabilidades potenciales. Esta técnica proporciona una visión más profunda y completa de las vulnerabilidades presentes en el código, permitiendo una solución más precisa y eficiente.
En resumen, los escáneres de vulnerabilidades como Nessus y Nmap son herramientas valiosas, cada una con su enfoque específico. Sin embargo, para un análisis exhaustivo de la seguridad de una aplicación, es recomendable combinar el uso de estas herramientas con el análisis de código estático para maximizar la protección de los sistemas y datos sensibles.
Análisis de código estático para detectar el uso de algoritmos débiles o inapropiados
Las herramientas de análisis de código estático escanean el código fuente de una aplicación en busca de patrones y prácticas que puedan indicar el uso de algoritmos débiles o inapropiados. Algunos ejemplos de lo que estas herramientas pueden detectar incluyen:
- Identificadores de algoritmos: Las herramientas pueden buscar nombres de algoritmos específicos que se consideran débiles o inapropiados, como MD5 o SHA-1.
- Patrones de código: Pueden identificar patrones de código que sugieren el uso de algoritmos débiles, como la implementación manual de cifrado o la generación de claves inseguras.
- Dependencias de bibliotecas: Pueden analizar las bibliotecas externas utilizadas en la aplicación para detectar si alguna de ellas contiene algoritmos débiles o implementaciones inseguras.
El análisis de código estático ofrece diversas ventajas importantes. En primer lugar, automatiza el proceso de revisión del código, lo que aumenta la eficiencia y reduce los errores humanos. Además, las herramientas de análisis de código estático son altamente escalables, lo que les permite analizar grandes cantidades de código de manera rápida, convirtiéndolas en la opción ideal para aplicaciones de gran tamaño. Asimismo, estas herramientas modernas son altamente precisas en la detección de patrones que indican el uso de algoritmos débiles.
Sin embargo, el análisis de código estático presenta ciertas limitaciones que deben tenerse en cuenta. Por ejemplo, las herramientas pueden generar falsos positivos, identificando erróneamente un algoritmo como débil cuando en realidad no lo es. Así, es crucial revisar manualmente los resultados para confirmar su precisión. Además, estas herramientas a menudo carecen de contexto, lo que significa que pueden no comprender en qué contexto se utiliza un algoritmo en particular. Por último, con la evolución constante de las amenazas y vulnerabilidades, es vital mantener actualizadas las herramientas de análisis de código estático para garantizar una protección efectiva.
Debido a lo anterior es necesario son necesarias las revisiones manuales, realizadas por especialistas, que ejecutan tareas como:
- Revisión de código fuente: Busca referencias a algoritmos criptográficos específicos dentro del código fuente de tu aplicación. Investiga si los algoritmos utilizados se encuentran en la lista de algoritmos débiles o tienen recomendaciones de desuso por parte de entidades reconocidas como NIST (National Institute of Standards and Technology) o criptográfos reputados.
- Revisión de configuración: Analiza los archivos de configuración de seguridad de servidores y aplicaciones para identificar qué algoritmos criptográficos están habilitados o deshabilitados.
- Documentación y revisiones de diseño: Revisa la documentación de diseño y las políticas de seguridad de la aplicación para asegurarte de que se especifique el uso de algoritmos criptográficos fuertes y adecuados.
Implementación adecuada de algoritmos criptográficos
La implementación adecuada de algoritmos criptográficos va más allá de la elección de algoritmos robustos ya que una implementación inadecuada puede resultar en vulnerabilidades importantes. Entre los errores más comunes encontramos fallas en la codificación, tales como errores lógicos que abren brechas para el ataque, una gestión deficiente de errores que puede revelar datos críticos o incluso facilitar la ejecución de código no deseado, y la posibilidad de ataques mediante la inyección de código malicioso, lo cual puede otorgar al atacante el control total sobre el sistema.
En cuanto a la gestión de claves criptográficas y configuraciones de seguridad, varios factores pueden minar la efectividad de los algoritmos. El almacenamiento inseguro de claves, la ausencia de una política de rotación de las mismas, y el uso de claves consideradas débiles o su reutilización, son prácticas que hacen vulnerables a los sistemas de seguridad. Por otro lado, la elección de parámetros subóptimos para los algoritmos, emplear modos de cifrado inseguros, y no mantener actualizadas las implementaciones criptográficas ante las últimas amenazas conocidas, son configuraciones erróneas que debilitan las defensas ante atacantes. La atención minuciosa a estos aspectos es crucial para reforzar la postura de seguridad de cualquier sistema que maneje datos sensibles.