A02: Las fallas criptográficas (by OWASP)

Visión general

Subiendo una posición al n.° 2, anteriormente conocido como Exposición de datos confidenciales , que es más un síntoma amplio que una causa raíz, el enfoque se centra en las fallas relacionadas con la criptografía (o la falta de esta). Lo que a menudo conduce a la exposición de datos confidenciales. Las enumeraciones de debilidades comunes (CWE) notables incluidas son CWE-259: Uso de contraseña codificada , CWE-327: Algoritmo criptográfico roto o riesgoso y CWE-331 Entropía insuficiente .

Descripción

Lo primero es determinar las necesidades de protección de los datos en tránsito y en reposo. Por ejemplo, las contraseñas, los números de tarjetas de crédito, los registros de salud, la información personal y los secretos comerciales requieren protección adicional, principalmente si esos datos están sujetos a las leyes de privacidad, por ejemplo, el Reglamento General de Protección de Datos (GDPR) de la UE, o regulaciones, por ejemplo, la protección de datos financieros. como el estándar de seguridad de datos PCI (PCI DSS). Para todos estos datos:

  • ¿Se transmite algún dato en texto claro? Esto se refiere a protocolos como HTTP, SMTP, FTP que también usan actualizaciones de TLS como STARTTLS. El tráfico de Internet externo es peligroso. Verifique todo el tráfico interno, por ejemplo, entre balanceadores de carga, servidores web o sistemas back-end.

  • ¿Se utilizan protocolos o algoritmos criptográficos antiguos o débiles de forma predeterminada o en código antiguo?

  • ¿Están en uso las claves criptográficas predeterminadas, se generan o reutilizan claves criptográficas débiles, o falta una gestión o rotación de claves adecuada? ¿Se registran las claves criptográficas en los repositorios de código fuente?

  • ¿No se aplica el cifrado, por ejemplo, faltan directivas de seguridad o encabezados de encabezados HTTP (navegador)?

  • ¿El certificado del servidor recibido y la cadena de confianza están debidamente validados?

  • ¿Se ignoran, reutilizan o no se generan los vectores de inicialización lo suficientemente seguros para el modo criptográfico de operación? ¿Se está utilizando un modo de operación inseguro como ECB? ¿Se usa el cifrado cuando el cifrado autenticado es más apropiado?

  • ¿Se utilizan contraseñas como claves criptográficas en ausencia de una función de derivación de clave base de contraseña?

  • ¿Se utiliza la aleatoriedad con fines criptográficos que no fueron diseñados para cumplir con los requisitos criptográficos? Incluso si se elige la función correcta, ¿debe ser sembrada por el desarrollador y, de no ser así, el desarrollador ha sobrescrito la funcionalidad de siembra fuerte integrada con una semilla que carece de suficiente entropía/imprevisibilidad?

  • ¿Se utilizan funciones hash en desuso, como MD5 o SHA1, o se utilizan funciones hash no criptográficas cuando se necesitan funciones hash criptográficas?

  • ¿Están en uso métodos de relleno criptográfico en desuso, como PKCS número 1 v1.5?

  • ¿Son explotables los mensajes de error criptográficos o la información del canal lateral, por ejemplo, en forma de ataques de oráculo de relleno?

Consulte ASVS Crypto (V7), Protección de datos (V9) y SSL/TLS (V10)

Como prevenir

Haga lo siguiente, como mínimo, y consulte las referencias:

  • Clasificar los datos procesados, almacenados o transmitidos por una aplicación. Identifique qué datos son confidenciales de acuerdo con las leyes de privacidad, los requisitos reglamentarios o las necesidades comerciales.

  • No almacene datos confidenciales innecesariamente. Deséchelo lo antes posible o use tokenización compatible con PCI DSS o incluso truncamiento. Los datos que no se retienen no se pueden robar.

  • Asegúrese de cifrar todos los datos confidenciales en reposo.

  • Asegúrese de que se implementen algoritmos, protocolos y claves estándar sólidos y actualizados; utilizar una gestión de claves adecuada.

  • Cifre todos los datos en tránsito con protocolos seguros como TLS con cifrado de confidencialidad directa (FS), priorización de cifrado por parte del servidor y parámetros seguros. Aplique el cifrado mediante directivas como HTTP Strict Transport Security (HSTS).

  • Deshabilite el almacenamiento en caché para las respuestas que contienen datos confidenciales.

  • Aplicar los controles de seguridad requeridos según la clasificación de datos.

  • No utilice protocolos heredados como FTP y SMTP para transportar datos confidenciales.

  • Almacene contraseñas utilizando funciones de hashing saladas y adaptables sólidas con un factor de trabajo (factor de demora), como Argon2, scrypt, bcrypt o PBKDF2.

  • Los vectores de inicialización deben elegirse de forma adecuada para el modo de operación. Para muchos modos, esto significa usar un CSPRNG (generador de números pseudoaleatorios criptográficamente seguro). Para los modos que requieren un nonce, el vector de inicialización (IV) no necesita un CSPRNG. En todos los casos, el IV nunca debe usarse dos veces para una clave fija.

  • Utilice siempre cifrado autenticado en lugar de solo cifrado.

  • Las claves deben generarse criptográficamente al azar y almacenarse en la memoria como matrices de bytes. Si se utiliza una contraseña, debe convertirse en una clave a través de una función de derivación de clave base de contraseña adecuada.

  • Asegúrese de que se utilice la aleatoriedad criptográfica cuando corresponda y de que no se haya sembrado de forma predecible o con baja entropía. La mayoría de las API modernas no requieren que el desarrollador genere CSPRNG para obtener seguridad.

  • Evite las funciones criptográficas obsoletas y los esquemas de relleno, como MD5, SHA1, PKCS número 1 v1.5.

  • Verifique de forma independiente la eficacia de la configuración y los ajustes.

Ejemplos de escenarios de ataque

Escenario n.º 1 : una aplicación cifra los números de tarjetas de crédito en una base de datos mediante el cifrado automático de la base de datos. Sin embargo, estos datos se descifran automáticamente cuando se recuperan, lo que permite que una falla de inyección SQL recupere números de tarjetas de crédito en texto claro.

Escenario n.º 2 : un sitio no usa ni impone TLS para todas las páginas o admite un cifrado débil. Un atacante supervisa el tráfico de la red (por ejemplo, en una red inalámbrica insegura), degrada las conexiones de HTTPS a HTTP, intercepta solicitudes y roba la cookie de sesión del usuario. Luego, el atacante reproduce esta cookie y secuestra la sesión del usuario (autenticado), accediendo o modificando los datos privados del usuario. En lugar de lo anterior, podrían alterar todos los datos transportados, por ejemplo, el destinatario de una transferencia de dinero.

Escenario n.º 3 : la base de datos de contraseñas utiliza hashes simples o sin sal para almacenar las contraseñas de todos. Una falla en la carga de archivos permite que un atacante recupere la base de datos de contraseñas. Todos los hashes sin sal se pueden exponer con una tabla de arcoíris de hashes precalculados. Los hashes generados por funciones hash simples o rápidas pueden ser descifrados por GPU, incluso si estuvieran salados.

Referencias

Lista de CWE mapeados

CWE-261 Codificación débil para contraseña

CWE-296 Seguimiento inadecuado de la cadena de confianza de un certificado

Problemas criptográficos CWE-310

CWE-319 Transmisión de texto sin cifrar de información confidencial

CWE-321 Uso de clave criptográfica codificada de forma rígida

CWE-322 Intercambio de claves sin autenticación de entidad

CWE-323 Reutilización de un Nonce, par de claves en el cifrado

CWE-324 Uso de una clave después de su fecha de vencimiento

CWE-325 Falta el paso criptográfico requerido

CWE-326 Fuerza de cifrado inadecuada

CWE-327 Uso de un algoritmo criptográfico roto o riesgoso

Hash unidireccional reversible CWE-328

CWE-329 sin usar un IV aleatorio con modo CBC

CWE-330 Uso de valores aleatorios insuficientes

CWE-331 Entropía insuficiente

CWE-335 Uso incorrecto de semillas en el generador de números pseudoaleatorios (PRNG)

CWE-336 Misma semilla en generador de números pseudoaleatorios (PRNG)

CWE-337 Semilla predecible en generador de números pseudoaleatorios (PRNG)

CWE-338 Uso de generador de números pseudoaleatorios criptográficamente débiles (PRNG)

CWE-340 Generación de Números Predecibles o Identificadores

CWE-347 Verificación incorrecta de la firma criptográfica

CWE-523 Transporte de credenciales sin protección

CWE-720 OWASP Top Ten 2007 Categoría A9 – Comunicaciones inseguras

CWE-757 Selección de algoritmo menos seguro durante la negociación (‘Rebaja del algoritmo’)

CWE-759 Uso de un hash unidireccional sin sal

CWE-760 Uso de un hash unidireccional con una sal predecible

CWE-780 Uso del algoritmo RSA sin OAEP

CWE-818 Protección insuficiente de la capa de transporte

CWE-916 Uso de hash de contraseña con esfuerzo computacional insuficiente

Relacionado

❌ React Native, crear aplicación como Netflix con Mario Díez

[no_toc] [expand title="Índice del Vídeotutorial"] 1. FlatList Horizontal 2. Componente Swiper 3. Menú Animado y Header 4. FlatList Grid 5. Más Flexbox, Tabs y Linear gradiantes 6. Reproductor de Vídeo 7. Share API 8. Animatable Header y NativeEvents 9. React Navigation 10. Header Múltiple con Animated 11. Modal con React Navigation 12. React Navigation con Redux 13. Servidor NodeJS con MongoDB para React Native 14. Conectando ¡SEGUIR LEYENDO!

❌ React Native con Mario Díez

[no_toc] [expand title="Índice del Vídeotutorial"] 1. Instalación 2. Introducción 3. Props y State 4. Fetch Data 5. ListView 6. Fech Data 2 7. Navigator IOS 8. Navigator 9. Flexbox 10. PropTypes 11. TabBarIOS 12. Formularios 13. AsyncStorage 14. Recorriendo Arrays con Map 15. Notificaciones Push 16. Notificaciones Push desde NodeJS 17. Barra de Búsqueda en ListView 18. Utilización de CameraRoll 19. Children o Props 20. Diferenciar ¡SEGUIR LEYENDO!

❌ React Native con Iván B. Trujillo

[no_toc] [expand title="Índice del Vídeotutorial"] 1. Primeros Pasos 2. Componentes, Botones y Alertas 3. Pantalla de Login, Navegador y Vistas 4. Navegación por Pestañas 5. Peticiones a API y ListView 6. Vista Detalles y Paso de Propiedades a Componente Hijo [/expand] [yotuwp type="playlist" id="PLuzQ5Ac_9_cI-ukaElfIFKXyhLsADBiJe" ] [expand title="Creador"] Editor del blog de Medium: Canarias JS [/expand]

❌ Javascript con Píldoras Informáticas

[no_toc] [expand title="Índice del Vídeotutorial"] 1. Presentación. Vídeo 1 2. Introducción. Vídeo 2 3. Sintaxis Básica I. Ubicación del código. Vídeo 3 4. Sintaxis Básica II. Estructuras Básicas. Vídeo 4 5. Sintaxis Básica III. Operadores Básicos. Vídeo 5 6. Sintaxis Básica IV. Operadores y prompt. Vídeo 6 7. Sintaxis Básica V Arrays, Matrices, Arreglos. Vídeo 7 8. Sintaxis Básica V. Arrays, Matrices, Arreglos II. Vídeo 8 ¡SEGUIR LEYENDO!

❌ Javascript con Falcon Masters

[no_toc] [expand title="Índice del Vídeotutorial"] 1. Introducción 2. Variables 3. Tipos de Dato 4. Arreglos 5. Metodos y propiedades para los Arreglos 6. Condicionales 7. Ciclo Fo 8. Ciclo While 9. Funciones 10. Ejercicio con Funciones y Formularios 11. Scope de Javascript (ámbito de las variables) 12. Metodos y propiedades para Cadenas de Texto 13. Introducción al DOM (Document Object Model) 14. Creando Nodos del DOM ¡SEGUIR LEYENDO!

Deja un comentario

Salir de la versión móvil