Los codificadores conquistan la seguridad: Share & Learn Series - Padding Oracle

Publicado el 24 de enero de 2019
por
ESTUDIO DE CASO

Los codificadores conquistan la seguridad: Share & Learn Series - Padding Oracle

Publicado el 24 de enero de 2019
por
Ver recurso
Ver recurso

Aunque "Padding Oracle" suena como un nombre realmente malo para un grupo de rock alternativo, en realidad es una vulnerabilidad que puede ser utilizada por los atacantes para descifrar información sin conocer la clave de cifrado.

En términos de dificultad general para un atacante, ésta está cerca de la cima de la escala. No estamos hablando de un botón mágico de descifrado, sino de un laborioso proceso en el que los hackers pueden examinar los mensajes de error que se les envían en relación con el relleno de las celdas, y utilizarlo para determinar dónde terminan los datos cifrados y dónde empieza el relleno. A continuación, pueden averiguar varios bits dentro del cifrado y, posiblemente, descifrarlo si disponen de tiempo y datos suficientes para examinarlo.

Afortunadamente, hay varios pasos relativamente sencillos que pueden eliminar la capacidad de un atacante de utilizar el oráculo de relleno para descifrar los datos cifrados. En este episodio, aprenderemos:

  • Cómo funciona
  • Por qué esta vulnerabilidad es tan peligrosa
  • Cómo puede poner defensas para evitarlo.

¿Cómo funciona Padding Oracle?

El encadenamiento de bloques de cifrado (CBC) es una forma de crear un cifrado de bloques en el que toda una secuencia de bits de información, como las celdas almacenadas en una base de datos, se cifran utilizando una clave de cifrado que se aplica a toda la cadena de información. Cuando se utiliza el CBC, el cifrado de un solo bloque de texto cifrado dependerá de todos los bloques anteriores. En teoría, esto hace que el cifrado sea extremadamente fuerte, ya que cualquier cosa, incluso la reordenación de los bloques, corromperá los datos.

El problema de los cifrados CBC (y de cualquier cifrado en bloque, en realidad) es que sólo pueden cifrarse utilizando bloques de tamaños exactos. Normalmente, esto se hace en tamaños de 8 o 16 bytes. Entonces, ¿qué ocurre cuando CBC necesita meter 2 bytes de datos en una unidad de texto cifrado de 16 bytes? Utilizará relleno, básicamente caracteres sin sentido, para rellenar los huecos y hacer que la unidad tenga un tamaño adecuado.

La mayoría de los esquemas de relleno son bien conocidos, siendo PKCS#7 uno de los más populares, por lo que los atacantes podrían saber qué tipo de relleno se está utilizando. Por ejemplo, si el CBC necesita rellenar cinco caracteres en un bloque, el PKCS#7 utilizaría el valor del byte 0x05 repetido cinco veces después del texto plano.

Los atacantes utilizan su conocimiento de los esquemas CBC y de relleno para enviar consultas a un servidor anfitrión, también conocido como oráculo. Si tienen acceso a las herramientas adecuadas, pueden forzar al servidor a decirles si el relleno en su consulta es incorrecto. Para ello, pueden hacer un ciclo de cero a 255 para cada byte del cifrado hasta que el servidor les diga que el relleno es correcto. Entonces, pasan a la siguiente unidad y repiten el proceso, registrando dónde empieza el relleno en cada caso.

Esto no les permite descifrar el mensaje o incluso la celda, pero podría permitirles mapear cada eslabón de la cadena en términos de dónde termina el texto plano y dónde comienza el relleno. También pueden utilizar potencialmente los cálculos XOR para averiguar el valor del último byte del texto plano original.

¿Por qué es tan peligroso el "Padding Oracle"?

La razón por la que un pirata informático se esfuerza tanto en romper la encriptación es por el potencial pago. Pocas personas cifran cosas que no son valiosas. El peligro para la organización anfitriona depende de los datos comprometidos. Eso podría incluir cosas como contraseñas, cuentas de usuario, información financiera, números de tarjetas de crédito, registros de pacientes, comunicaciones sensibles, o cualquier número de piezas de información altamente codiciadas y valiosas.

El uso del oráculo de relleno también podría ser la puerta de entrada a ataques posteriores. Si un atacante puede utilizar el oráculo de relleno para robar contraseñas, por ejemplo, entonces elevar sus privilegios y penetrar más profundamente en una red es una tarea secundaria fácil.

Todo el mundo piensa en la encriptación como la última defensa contra el espionaje o el compromiso. Sin embargo, las idas y venidas entre la ciencia del cifrado y los que quieren descifrarlo se suceden desde hace siglos. El oráculo de relleno es sólo un método que da ventaja a los atacantes.

Dando un duro golpe a los ataques de Oracle Padding

Afortunadamente, hay bastantes maneras de evitar el oráculo de relleno. Una de las mejores es utilizar un modo de operaciones de cifrado más potente, como el modo Galois/Contador (GCM) o el modo Offset Codebook (OCB). Se diferencia del CBC en que utiliza un tamaño de bloque de cifrado de 128 bits. También utiliza un contador para cada bloque de datos, y luego utiliza ese número para crear el texto cifrado. En otras palabras, no es susceptible de ataques de oráculo de relleno.

Implementar buenos controles de gestión de errores también puede perjudicar gravemente las posibilidades de éxito de un atacante. Dado que los ataques de oráculo de relleno se basan en la fuga de información, devuelva mensajes de error genéricos en lugar de errores de relleno específicos en caso de fallo de cifrado/descifrado.

También se puede implementar el Código de Autenticación de Mensajes (MAC). Los valores MAC protegen la integridad de los datos así como su autenticidad, permitiendo a los verificadores detectar cualquier cambio en el contenido del mensaje utilizando una clave secreta.

Por último, todos los ataques de oráculo de relleno requieren consultas repetidas. Puede haber más de 200 peticiones para averiguar el esquema de relleno en una sola celda, multiplicado por el número de unidades de información que se protegen en la cadena. Si se restringe el número de solicitudes que llegan desde la misma fuente, se puede acabar con los ataques de oráculo de relleno negando al atacante el acceso antes de que pueda comenzar realmente su intento.

Estudio adicional sobre el oráculo de relleno

Cualquier método por el que un atacante pueda descifrar información sensible puede convertirse en una auténtica pesadilla. Pero, esperamos que hayas aprendido bastantes buenos métodos para evitar que eso ocurra en primer lugar.

Para más información, puede consultar la definición y la lista de comprobación de la OWASP en padding oracle. También puedes poner a prueba tus nuevos conocimientos defensivos con la demostración gratuita de la plataforma Secure Code Warrior , que forma a los equipos de ciberseguridad para que se conviertan en los mejores ciberguerreros. Para saber más sobre cómo derrotar esta vulnerabilidad, y una galería de pícaros de otras amenazas, visite el blogSecure Code Warrior .

¿Crees que estás a la altura de la tarea de frustrar los ataques de oráculo de relleno ahora mismo? Pruébalo en la plataforma Secure Code Warrior :

Ver recurso
Ver recurso

Autor

¿Quieres más?

Sumérjase en nuestras últimas ideas sobre codificación segura en el blog.

Nuestra amplia biblioteca de recursos tiene como objetivo potenciar el enfoque humano de la mejora de la codificación segura.

Ver blog
¿Quieres más?

Obtenga las últimas investigaciones sobre la seguridad impulsada por los desarrolladores

Nuestra amplia biblioteca de recursos está repleta de recursos útiles, desde libros blancos hasta seminarios web, que le ayudarán a iniciarse en la codificación segura orientada a los desarrolladores. Explórela ahora.

Centro de recursos

Los codificadores conquistan la seguridad: Share & Learn Series - Padding Oracle

Publicado el 24 de enero de 2019
Por

Aunque "Padding Oracle" suena como un nombre realmente malo para un grupo de rock alternativo, en realidad es una vulnerabilidad que puede ser utilizada por los atacantes para descifrar información sin conocer la clave de cifrado.

En términos de dificultad general para un atacante, ésta está cerca de la cima de la escala. No estamos hablando de un botón mágico de descifrado, sino de un laborioso proceso en el que los hackers pueden examinar los mensajes de error que se les envían en relación con el relleno de las celdas, y utilizarlo para determinar dónde terminan los datos cifrados y dónde empieza el relleno. A continuación, pueden averiguar varios bits dentro del cifrado y, posiblemente, descifrarlo si disponen de tiempo y datos suficientes para examinarlo.

Afortunadamente, hay varios pasos relativamente sencillos que pueden eliminar la capacidad de un atacante de utilizar el oráculo de relleno para descifrar los datos cifrados. En este episodio, aprenderemos:

  • Cómo funciona
  • Por qué esta vulnerabilidad es tan peligrosa
  • Cómo puede poner defensas para evitarlo.

¿Cómo funciona Padding Oracle?

El encadenamiento de bloques de cifrado (CBC) es una forma de crear un cifrado de bloques en el que toda una secuencia de bits de información, como las celdas almacenadas en una base de datos, se cifran utilizando una clave de cifrado que se aplica a toda la cadena de información. Cuando se utiliza el CBC, el cifrado de un solo bloque de texto cifrado dependerá de todos los bloques anteriores. En teoría, esto hace que el cifrado sea extremadamente fuerte, ya que cualquier cosa, incluso la reordenación de los bloques, corromperá los datos.

El problema de los cifrados CBC (y de cualquier cifrado en bloque, en realidad) es que sólo pueden cifrarse utilizando bloques de tamaños exactos. Normalmente, esto se hace en tamaños de 8 o 16 bytes. Entonces, ¿qué ocurre cuando CBC necesita meter 2 bytes de datos en una unidad de texto cifrado de 16 bytes? Utilizará relleno, básicamente caracteres sin sentido, para rellenar los huecos y hacer que la unidad tenga un tamaño adecuado.

La mayoría de los esquemas de relleno son bien conocidos, siendo PKCS#7 uno de los más populares, por lo que los atacantes podrían saber qué tipo de relleno se está utilizando. Por ejemplo, si el CBC necesita rellenar cinco caracteres en un bloque, el PKCS#7 utilizaría el valor del byte 0x05 repetido cinco veces después del texto plano.

Los atacantes utilizan su conocimiento de los esquemas CBC y de relleno para enviar consultas a un servidor anfitrión, también conocido como oráculo. Si tienen acceso a las herramientas adecuadas, pueden forzar al servidor a decirles si el relleno en su consulta es incorrecto. Para ello, pueden hacer un ciclo de cero a 255 para cada byte del cifrado hasta que el servidor les diga que el relleno es correcto. Entonces, pasan a la siguiente unidad y repiten el proceso, registrando dónde empieza el relleno en cada caso.

Esto no les permite descifrar el mensaje o incluso la celda, pero podría permitirles mapear cada eslabón de la cadena en términos de dónde termina el texto plano y dónde comienza el relleno. También pueden utilizar potencialmente los cálculos XOR para averiguar el valor del último byte del texto plano original.

¿Por qué es tan peligroso el "Padding Oracle"?

La razón por la que un pirata informático se esfuerza tanto en romper la encriptación es por el potencial pago. Pocas personas cifran cosas que no son valiosas. El peligro para la organización anfitriona depende de los datos comprometidos. Eso podría incluir cosas como contraseñas, cuentas de usuario, información financiera, números de tarjetas de crédito, registros de pacientes, comunicaciones sensibles, o cualquier número de piezas de información altamente codiciadas y valiosas.

El uso del oráculo de relleno también podría ser la puerta de entrada a ataques posteriores. Si un atacante puede utilizar el oráculo de relleno para robar contraseñas, por ejemplo, entonces elevar sus privilegios y penetrar más profundamente en una red es una tarea secundaria fácil.

Todo el mundo piensa en la encriptación como la última defensa contra el espionaje o el compromiso. Sin embargo, las idas y venidas entre la ciencia del cifrado y los que quieren descifrarlo se suceden desde hace siglos. El oráculo de relleno es sólo un método que da ventaja a los atacantes.

Dando un duro golpe a los ataques de Oracle Padding

Afortunadamente, hay bastantes maneras de evitar el oráculo de relleno. Una de las mejores es utilizar un modo de operaciones de cifrado más potente, como el modo Galois/Contador (GCM) o el modo Offset Codebook (OCB). Se diferencia del CBC en que utiliza un tamaño de bloque de cifrado de 128 bits. También utiliza un contador para cada bloque de datos, y luego utiliza ese número para crear el texto cifrado. En otras palabras, no es susceptible de ataques de oráculo de relleno.

Implementar buenos controles de gestión de errores también puede perjudicar gravemente las posibilidades de éxito de un atacante. Dado que los ataques de oráculo de relleno se basan en la fuga de información, devuelva mensajes de error genéricos en lugar de errores de relleno específicos en caso de fallo de cifrado/descifrado.

También se puede implementar el Código de Autenticación de Mensajes (MAC). Los valores MAC protegen la integridad de los datos así como su autenticidad, permitiendo a los verificadores detectar cualquier cambio en el contenido del mensaje utilizando una clave secreta.

Por último, todos los ataques de oráculo de relleno requieren consultas repetidas. Puede haber más de 200 peticiones para averiguar el esquema de relleno en una sola celda, multiplicado por el número de unidades de información que se protegen en la cadena. Si se restringe el número de solicitudes que llegan desde la misma fuente, se puede acabar con los ataques de oráculo de relleno negando al atacante el acceso antes de que pueda comenzar realmente su intento.

Estudio adicional sobre el oráculo de relleno

Cualquier método por el que un atacante pueda descifrar información sensible puede convertirse en una auténtica pesadilla. Pero, esperamos que hayas aprendido bastantes buenos métodos para evitar que eso ocurra en primer lugar.

Para más información, puede consultar la definición y la lista de comprobación de la OWASP en padding oracle. También puedes poner a prueba tus nuevos conocimientos defensivos con la demostración gratuita de la plataforma Secure Code Warrior , que forma a los equipos de ciberseguridad para que se conviertan en los mejores ciberguerreros. Para saber más sobre cómo derrotar esta vulnerabilidad, y una galería de pícaros de otras amenazas, visite el blogSecure Code Warrior .

¿Crees que estás a la altura de la tarea de frustrar los ataques de oráculo de relleno ahora mismo? Pruébalo en la plataforma Secure Code Warrior :

Nos gustaría contar con su permiso para enviarle información sobre nuestros productos y/o temas relacionados con la codificación segura. Siempre trataremos sus datos personales con el máximo cuidado y nunca los venderemos a otras empresas con fines de marketing.

Para enviar el formulario, habilite las cookies "Analytics". Siéntase libre de desactivarlas de nuevo una vez que haya terminado.