Volver a libc
Return into libc (también return-to-libc ) es un método para explotar un agujero de seguridad en un programa de computadora.
Principio básico
Los programas informáticos utilizan un área de almacenamiento especial llamada pila para las variables y las direcciones de retorno ( dirección de retorno en inglés ) de las subrutinas para administrar. Si la pila ahora se manipula de tal manera que contiene la dirección de otra función en lugar de la dirección de retorno esperada, el programa está comprometido. En libc es generalmente la biblioteca estándar del lenguaje de programación C . Esto significa que no es necesario incorporar ninguna función nueva al sistema en ejecución, como suele ser necesario con los exploits de shellcode . Esta biblioteca contiene, por ejemplo, B. una función "system ()", que permite la ejecución de cualquier otra aplicación o script. Solo necesita un parámetro, a saber, el comando que se ejecutará.
La manipulación de la pila normalmente se debe a un desbordamiento del búfer . A una variable , que solo puede contener una cierta cantidad de caracteres, se le asigna una cadena de caracteres más larga y determinada con precisión , que luego sobrescribe la dirección de retorno en la pila después de la variable. Los argumentos necesarios también se escriben en la pila, por ejemplo, la dirección de una cadena de caracteres.
Las variables pueden, entre otras cosas, generar tal desbordamiento si son, por ejemplo, B. se pueden transferir como parámetros en una dirección web y estos se pueden transferir a un programa CGI . Sin embargo, un requisito previo para tal ataque es un programa susceptible que, al contrario de las técnicas de programación comunes, no verifica la longitud de las variables de entrada.
Una extensión y generalización de esta técnica describe la Programación Orientada al Retorno , en la que se abandonan tanto el requisito de integración externa como el objetivo de una función, en la medida en que se puede saltar a cualquier instrucción y se puede lograr la funcionalidad requerida por el atacante a través del encadenamiento indirecto.
Opciones de protección
Una pila no ejecutable protegida por medio del bit NX puede evitar que se ingrese de contrabando código malicioso, pero aún así se puede llevar a cabo un ataque de retorno a libc porque se llama al código existente. Se puede lograr una defensa contra tales ataques a través de ASLR . Las direcciones de memoria de las funciones del sistema se asignan aleatoriamente, lo que dificulta volver a estas funciones con precisión. Los mecanismos de protección de la pila , como Stack Smashing Protector, pueden detectar o prevenir más ataques.
El principio se describió por primera vez a fines de la década de 1990 y se mejoró constantemente; fue la base de numerosos exploits, especialmente a principios de la década de 2000. Con la creciente atención a los aspectos de seguridad en los sistemas operativos como compiladores y software del sistema, entre otras cosas a través de dichos mecanismos, el procedimiento clásico aquí descrito perdió su importancia en la práctica.
Ver también
- PaX (mecanismo de protección)
Evidencia individual
- ↑ Solar Designer: lpr LIBC RETURN exploit insecure.org, consultado el 18 de octubre de 2020.