OpenBSD está implementando KARL. ¿Cómo mejora esto la seguridad?

5

De acuerdo con esto article , OpenBSD está implementando una función que creará un kernel único cada vez que un usuario reinicia o actualiza su computadora.

Se llama KARL, "Enlace aleatorio de la dirección del kernel". Esto funciona volviendo a vincular los archivos internos del kernel en un orden aleatorio para que genere un blob binario único del kernel cada vez.

La explicación técnica dice;

  

Un kernel único está vinculado de tal manera que el código de ensamblaje de inicio se mantiene en el mismo lugar, seguido de un espaciado de tamaño aleatorio, seguido de todos los otros archivos .o reorganizados aleatoriamente. Como resultado, las distancias entre funciones y variables son completamente nuevas. Una fuga de información de un puntero no revelará otros punteros u objetos. Esto también puede ayudar a reducir los dispositivos en las arquitecturas de tamaño variable, porque el polimorfismo en el flujo de instrucciones está dañado por el cambio de las compensaciones anidadas.

  • ¿Cómo mejora esto la seguridad?
  • ¿Qué tipo de ataques se mitigaría con esta nueva característica?
  • ¿En qué se diferencia esto de la aleatorización de la distribución del espacio de direcciones del kernel?
pregunta Digital fire 07.07.2017 - 05:10
fuente

1 respuesta

4

Por lo que entiendo, este es un paso más allá de KASLR. Para inferencias de ubicación de memoria a una granularidad más fina que lo que protege KASLR.

Con KASLR, hace más difícil que los gadgets ROP sobrescriban (por ejemplo, el almacenamiento dinámico) las áreas de memoria que finalmente cederán el control al código inyectado / conocido. Sin embargo, al tratarse de una carrera de armamentos, los movimientos de contraataque como el spray JIT han evolucionado.

  

Una fuga de información de un puntero no revelará otros punteros o   objetos.

Al igual que con ASLR, que aleatoriza y, por lo tanto, hace que sea más difícil "encontrar" puntos de entrada de la función de usuario a manipulación, y KASLR hace lo mismo, ambos siguen siendo vulnerables, si un atacante puede

  1. estudie la forma en que los componentes del kernel se vinculan y se cargan en la memoria entre sí
  2. luego "encuentra un punto de referencia" (en este caso, por una filtración de información de un puntero ") y luego
  3. aplique el conocimiento anterior para inferir las ubicaciones de otros objetos / funciones sensibles a los que podrían orientarse los gadgets.
  

¿Cómo mejora esto la seguridad?

Al parecer, KARL hace esta inferencia mucho más difícil porque necesitará estudiar (1) de nuevo después de cada reinicio. Esto eleva significativamente el costo de la explotación (excepto en una situación en la que el atacante ni siquiera necesita reiniciarse, incluso cuando se meten con el kernel en una técnica de gran éxito) y hace que el sistema operativo sea más seguro.

  

¿Qué tipo de ataques se mitigaría con esta nueva característica?

Gadgets que dependen de inferir las ubicaciones de los objetos del kernel en base a un "conocimiento de" un punto de referencia por separado.

  

¿En qué se diferencia esto de la aleatorización del diseño del espacio de direcciones del kernel?

Esta es una defensa adicional sobre KASLR. Para defenderse contra el uso de dispositivos que funcionan en una granularidad más fina que KASLR defiende.

    
respondido por el Sas3 07.07.2017 - 07:10
fuente

Lea otras preguntas en las etiquetas