Evitar explotaciones como ROP y Return-to-libc en los sistemas operativos modernos

1

Mientras leía acerca de las vulnerabilidades avanzadas como Programación Orientada por Devolución (ROP) , Volver a Libc , etc., encontré muchas defensas para estas ataques que incluyen técnicas como ASLR , kBouncer , ROP Defender , etc. Pero cuando entré en detalles de cada una de estas técnicas, descubrí que Cada una de estas defensas se puede superar haciendo algunos cambios en nuestro enfoque.

Tengo mucha curiosidad por saber cómo en realidad los sistemas operativos modernos se están encargando de este tipo de ataques avanzados. ¿Alguien con conocimientos expertos sobre este tema?

    
pregunta Rahil Arora 20.10.2013 - 19:14
fuente

2 respuestas

2

Creo que la configuración estándar anti-exploit es (al menos en Windows y Linux): DEP, Stack Guard, hardened heap y ASLR (lo siento, no tengo una referencia para esto). Como señala, todas estas técnicas pueden ser evitadas, con diferentes grados de dificultad, y la ROP es una de las principales técnicas. ASLR proporciona cierta defensa contra ROP, pero creo que todas las otras defensas ROP que mencionas son experimentales y no se utilizan como estándar. Pueden existir en ciertos productos antivirus y de endurecimiento del host.

Trabajo con un desarrollador de exploits muy hábil, y él generalmente puede crear un exploit confiable para una falla de corrupción de memoria, incluso con estas defensas en su lugar. Tenga en cuenta que muchos de los ataques en estos días son escapes de la zona de pruebas de Java / JavaScript en los que se expone una gran superficie de ataque en comparación con un exceso de búfer de red. Además, muchas de las vulnerabilidades son fallas de uso después de la liberación que evitan a Stack Guard y al montón endurecido.

    
respondido por el paj28 20.10.2013 - 23:14
fuente
2

Usted tiene razón al decir que las técnicas como DEP o ASLR pueden ser evitadas con suficiente esfuerzo.

Sin embargo, le falta el punto de que estas técnicas sirven para mitigar cualquier daño que ya haya ocurrido. Lo hace dificultando que un atacante logre la ejecución del código. La causa raíz de los problemas enumerados es el código incorrecto . Por ejemplo, un desbordamiento de búfer es causado por un fragmento de código que intenta escribir más datos en un búfer de lo que se ha asignado. La forma correcta de resolver estos problemas es asegurarse de que tales eventos nunca ocurran. Obviamente, esto es bastante difícil de hacer en una base de código grande. Sin embargo, puede solucionar este problema codificando en idiomas que lo protejan de problemas de memoria como Java, Python o Ruby. No utilice C o C ++ a menos que sepa absolutamente lo que está haciendo.

    
respondido por el Ayrx 21.10.2013 - 01:21
fuente

Lea otras preguntas en las etiquetas