¿Las protecciones de OpenBSD mitigan el daño causado por Heartbleed?

14

OpenBSD proporciona una lista de protecciones sustanciales contra vulnerabilidades inherentes al sistema operativo. La mayoría de estas funciones no se encuentran en otros sistemas operativos, o al menos no están activadas de forma predeterminada. La lista del sitio web de OpenBSD vinculado anteriormente incluye:

  
  • strlcpy () y strlcat ()
  •   
  • Purificar la protección de la memoria   
    • W ^ X
    •   
    • .rodata segment
    •   
    • Páginas de guardia
    •   
    • Malloc aleatorio ()
    •   
    • mmap aleatorio ()
    •   
    • protección atexit () y stdio
    •   
  •   
  • Separación de privilegios
  •   
  • Revocación de privilegios
  •   
  • jaula chroot
  •   
  • nuevos uids
  •   
  • ProPolice
  •   
  • ... y otros
  •   

¿Alguna de las protecciones de seguridad en OpenBSD mitiga la exposición de datos del ataque de Heartbleed?

En otras palabras, ¿un servidor Apache / nginx https que usa OpenSSL hubiera sido menos vulnerable al ataque de Heartbleed porque se estaba ejecutando en OpenBSD?

    
pregunta Brian M. Hunt 29.04.2014 - 15:28
fuente

2 respuestas

20

No.

OpenBSD tiene medidas (específicamente, páginas de guarda malloc () y borrado de la memoria desasignada) que debió haber convertido Heartbleed en un bloqueo o una fuga de un montón de bytes "0x0d". Sin embargo, como se indica en la publicación del blog aquí , OpenSSL utiliza su propio sistema de gestión de memoria personalizado que Actúa para derrotar esas medidas.

    
respondido por el Mark 29.04.2014 - 21:35
fuente
5

Parece haber algunos conceptos erróneos aquí acerca de cómo funciona la administración de memoria en OpenSSL.

OPENSSL_malloc y OPENSSL_free de forma predeterminada, simplemente llame al sistema malloc y gratis (hay algo de indirección, por lo que una aplicación puede redefinir estas funciones si lo desea, pero OpenSSL no hace eso por sí mismo). Sin embargo, para algunas estructuras de datos, en particular los buffers de entrada, mantiene algunos elementos previamente asignados pero no utilizados en una lista de distribución gratuita, sin liberarlos realmente. Debido a que no desinfecta el contenido del búfer después de su uso, si se toma un búfer de la lista gratuita y se reutiliza, es posible que el contenido anterior aún esté presente (incluso si el sistema gratuito lo hubiera borrado).

Sin embargo, dado que en la mayoría de los otros casos, OpenSSL está de hecho simplemente llamando al sistema malloc y libre, mitigaciones como páginas de guardia (que habrían hecho una lectura más allá del final del bloqueo del búfer de entrada de 16K) y borrar la memoria liberada (que habría detenido algunas de las grandes fugas de datos que la gente ha visto) habría ayudado, incluso con la gestión de memoria actual de OpenSSL. No habrían ayudado con la exposición de los contenidos del búfer de entrada anterior o con datos privados grandes que se encontraban en ubicaciones de pila válidas (sin autorización) (a menos que se usaran páginas de protección para evitar que se produjera la sobreimpresión).

    
respondido por el Matthew 30.04.2014 - 00:50
fuente

Lea otras preguntas en las etiquetas