En criptografía, un ataque de oráculo de relleno es un ataque que utiliza la validación de relleno de un mensaje criptográfico para descifrar el texto cifrado. En criptografía, los mensajes de texto plano de longitud variable a menudo tienen que rellenarse (expandirse) para que sean compatibles con la primitiva criptográfica subyacente . El ataque se basa en tener un "oráculo de relleno" que responde libremente a las consultas sobre si un mensaje está correctamente rellenado o no. Los ataques de relleno de Oracle se asocian principalmente con el descifrado en modo CBC utilizado dentro de los cifrados de bloque . Los modos de relleno para algoritmos asimétricos como OAEP también pueden ser vulnerables a los ataques de relleno de Oracle. [1]
Criptografía simétrica
En la criptografía simétrica, el ataque de relleno de oráculo se puede aplicar al modo de operación CBC , donde el " oráculo " (normalmente un servidor) filtra datos sobre si el relleno de un mensaje cifrado es correcto o no. Dichos datos pueden permitir a los atacantes descifrar (y, a veces, cifrar) mensajes a través de Oracle utilizando la clave de Oracle, sin conocer la clave de cifrado.
Ataque de relleno de Oracle en el cifrado CBC
La implementación estándar del descifrado CBC en cifrados de bloques es descifrar todos los bloques de texto cifrado, validar el relleno, eliminar el relleno PKCS7 y devolver el texto sin formato del mensaje. Si el servidor devuelve un error de "relleno no válido" en lugar de un error genérico de "error de descifrado", el atacante puede utilizar el servidor como un oráculo de relleno para descifrar (y en ocasiones cifrar) los mensajes.
La fórmula matemática para el descifrado CBC es
Como se muestra arriba, CBC descifra XOR cada bloque de texto plano con el bloque de texto cifrado anterior. Como resultado, una modificación de un solo byte en el bloque hará un cambio correspondiente a un solo byte en .
Supongamos que el atacante tiene dos bloques de texto cifrado y quieren descifrar el segundo bloque para obtener texto sin formato . El atacante cambia el último byte de (creando ) y envía al servidor. A continuación, el servidor devuelve si el relleno del último bloque descifrado () es correcta (igual a 0x01). Si el relleno es correcto, el atacante ahora sabe que el último byte de es . Por lo tanto, el último byte de es igual a . Si el relleno es incorrecto, el atacante puede cambiar el último byte deal siguiente valor posible. Como máximo, el atacante deberá realizar 256 intentos (una suposición por cada byte posible) para encontrar el último byte de. Si el bloque descifrado contiene información de relleno o bytes utilizados para el relleno, será necesario realizar un intento adicional para resolver esta ambigüedad. [2]
Después de determinar el último byte de , el atacante puede utilizar la misma técnica para obtener el penúltimo byte de . El atacante establece el último byte de a configurando el último byte de a . Luego, el atacante usa el mismo enfoque descrito anteriormente, esta vez modificando el penúltimo byte hasta que el relleno sea correcto (0x02, 0x02).
Si un bloque consta de 128 bits ( AES , por ejemplo), que son 16 bytes, el atacante obtendrá texto sin formato.en no más de 255⋅16 = 4080 intentos. Esto es significativamente más rápido que el intentos necesarios para aplicar fuerza bruta a una clave de 128 bits.
Cifrar mensajes con el ataque Padding oracle (CBC-R)
CBC-R [3] convierte un oráculo de descifrado en un oráculo de cifrado, y se demuestra principalmente contra los oráculos de relleno.
El uso de padding oracle attack CBC-R puede crear un vector de inicialización y un bloque de texto cifrado para cualquier texto sin formato:
- descifrar cualquier texto cifrado P i = PODecrypt (C i ) XOR C i − 1 ,
- seleccione el bloque de cifrado anterior C x − 1 libremente,
- producir un par de texto cifrado / texto plano válido C x-1 = P x XOR PODecrypt (C i ) .
Para generar un texto cifrado de N bloques de longitud, el atacante debe realizar N números de ataques de oráculo de relleno. Estos ataques se encadenan entre sí para que el texto sin formato adecuado se construya en orden inverso, desde el final del mensaje ( C N ) hasta el mensaje inicial ( C 0 , IV). En cada paso, el ataque de relleno de oráculo se utiliza para construir el IV al texto cifrado elegido anteriormente.
El ataque CBC-R no funcionará contra un esquema de cifrado que autentique el texto cifrado (utilizando un código de autenticación de mensaje o similar) antes de descifrarlo.
Ataques usando oráculos de relleno
El ataque original fue publicado en 2002 por Serge Vaudenay . [4] Posteriormente se realizaron instancias concretas del ataque contra SSL [5] e IPSec. [6] [7] También se aplicó a varios marcos web , incluidos JavaServer Faces , Ruby on Rails [8] y ASP.NET [9] [10] [11] , así como a otro software, como el cliente de juegos Steam. . [12] En 2012 se demostró que era eficaz contra algunos dispositivos de seguridad reforzados. [13]
Si bien estos ataques anteriores fueron corregidos por la mayoría de los implementadores de TLS luego de su anuncio público, una nueva variante, el ataque Lucky Thirteen , publicado en 2013, utilizó un canal lateral de sincronización para reabrir la vulnerabilidad incluso en implementaciones que se habían solucionado anteriormente. A principios de 2014, el ataque ya no se considera una amenaza en la operación de la vida real, aunque todavía es viable en teoría (consulte la relación señal / ruido ) contra una determinada clase de máquinas. A partir de 2015[actualizar], el área de desarrollo más activa para los ataques a los protocolos criptográficos utilizados para proteger el tráfico de Internet son los ataques de degradación , como los ataques Logjam [14] y Export RSA / FREAK [15] , que engañan a los clientes para que utilicen operaciones criptográficas menos seguras proporcionadas por compatibilidad. con clientes heredados cuando haya otros más seguros disponibles. Un ataque llamado POODLE [16] (finales de 2014) combina un ataque de degradación (a SSL 3.0) con un ataque de relleno de Oracle en el antiguo e inseguro protocolo para permitir el compromiso de los datos transmitidos. En mayo de 2016 se reveló en CVE - 2016-2107 que la corrección contra Lucky Thirteen en OpenSSL introdujo otro oráculo de relleno. [17] [18]
Referencias
- ^ Pesebre, James. "Un ataque de texto cifrado elegido en el relleno de cifrado asimétrico óptimo de RSA (OAEP) como estandarizado en PKCS # 1 v2.0" (PDF) . Laboratorios de investigación Telstra.
- ^ ¿Es el ataque del oráculo de relleno determinista?
- ^ Juliano Rizzo; Thai Duong (25 de mayo de 2010). Ataques de Oracle de relleno práctico (PDF) . USENIX WOOT 2010.
- ^ Serge Vaudenay (2002). Defectos de seguridad inducidos por aplicaciones de relleno CBC a SSL, IPSEC, WTLS ... (PDF) . EUROCRYPT 2002.
- ^ Brice Canvel; Alain Hiltgen; Serge Vaudenay; Martin Vuagnoux (2003), Intercepción de contraseñas en un canal SSL / TLS (PDF).
- ^ Jean Paul Degabriele; Kenneth G. Paterson (2007), Attacking the IPsec Standards in Encryption-only Configurations (PDF) , archivado desde el original el 19 de diciembre de 2018 , consultado el 25 de septiembre de 2018.
- ^ Jean Paul Degabriele; Kenneth G. Paterson (2010), Sobre la (In) seguridad de IPsec en configuraciones MAC-then-Encrypt , CiteSeerX 10.1.1.185.1534.
- ^ Juliano Rizzo; Thai Duong (25 de mayo de 2010). Ataques de Oracle de relleno práctico (PDF) . USENIX WOOT 2010.
- ^ Thai Duong; Juliano Rizzo (2011). Criptografía en la Web: el caso de fallas de diseño criptográfico en ASP.NET (PDF) . Simposio de IEEE sobre seguridad y privacidad 2011.
- ^ Dennis Fisher (13 de septiembre de 2010). " El ataque criptográfico ' Padding Oracle' afecta a millones de aplicaciones ASP.NET" . Publicación de amenazas . Archivado desde el original el 13 de octubre de 2010.
- ^ Vlad Azarkhin (19 de septiembre de 2010). " Explicación de la vulnerabilidad de " Relleno de Oracle "ASP.NET" . Archivado desde el original el 23 de octubre de 2010 . Consultado el 11 de octubre de 2010 .
- ^ "Rompiendo la criptografía del cliente Steam" . Base de datos de Steam . Consultado el 1 de mayo de 2016 .
- ^ Romain Bardou; Riccardo Focardi; Yusuke Kawamoto; Lorenzo Simionato; Graham Steel; Joe-Kai Tsay (2012), Acolchado eficiente de ataques de Oracle en hardware criptográfico (PDF)
- ^ Matthew Green; Nadia Heninger ; Paul Zimmerman; et al. (2015), Secreto imperfecto hacia adelante: cómo falla Diffie-Hellman en la práctica (PDF). Para obtener más información, consulte https://www.weakdh.org Archivado el 22 de diciembre de 2019 en Wayback Machine .
- ^ Matthew Green (3 de marzo de 2015). "Ataque de la semana: FREAK (o 'factorizar la NSA por diversión y ganancias')" .; consulte https://www.freakattack.com Archivado el 5 de marzo de 2015 en Wayback Machine para obtener más información.
- ^ Matthew Green (14 de octubre de 2014). "Ataque de la semana: CANICHE" .; para obtener más información, consulte https://www.poodle.io
- ^ Aviso de seguridad de OpenSSL [3 de mayo de 2016] , 3 de mayo de 2016
- ^ Yet Another Padding Oracle en OpenSSL CBC Ciphersuites , Cloudflare, 4 de mayo de 2016