Acabo de comenzar a investigar sobre seguridad a nivel de sistemas y desafíos, especialmente con respecto a lenguajes de bajo nivel como C / C ++ y Objective-C. He entendido el desbordamiento de búfer y cómo funciona. Estaba jugando con eso en OS X y Ubuntu. Por supuesto, estos sistemas tienen ASLR y protecciones de pila implementadas, que podemos deshabilitar en el momento de la compilación. Así que tengo un par de preguntas con respecto a esto:
-
¿Cómo detecta un compilador un desbordamiento en el momento de la compilación? Entiendo que al compilarlo se agregará un canario y si alguna instrucción intenta sobrescribir esto, se generará un error. Pero, ¿cuál es el algoritmo exacto? Si alguien puede señalar las funciones del código gcc para esto, sería genial.
-
¿Desactivar la protección de pila y hacer que la pila / pila sea ejecutable en Ubuntu es suficiente? ¿O puede ASLR hacer que sea difícil de explotar?
-
Si tengo un binario (sin código fuente) y sé que se bloquea debido al desbordamiento del búfer, ¿cómo lo detecto?