En seguridad informática , una pila de sombra es un mecanismo para proteger la dirección de retorno almacenada de un procedimiento , [ 1 ] por ejemplo, contra un desbordamiento de búfer de pila o la suplantación de pila de llamadas . La pila de sombra es una segunda pila independiente que " oculta " la pila de llamadas del programa . En el prólogo de la función , esta almacena su dirección de retorno tanto en la pila de llamadas como en la pila de sombra. En el epílogo de la función , esta carga la dirección de retorno de ambas y las compara. Si los dos registros de la dirección de retorno difieren, se detecta un ataque; la acción típica consiste simplemente en finalizar el programa o alertar a los administradores del sistema sobre un posible intento de intrusión. Una pila de sombra es similar a los canarios de pila, ya que ambos mecanismos buscan mantener la integridad del flujo de control del programa protegido mediante la detección de ataques que manipulan la dirección de retorno almacenada por parte de un atacante durante un intento de explotación .
Las pilas de sombra se pueden implementar recompilando programas con prólogos y epílogos modificados, [ 2 ] mediante técnicas de reescritura binaria dinámica para lograr el mismo efecto, [ 3 ] o con soporte de hardware. [ 4 ] A diferencia de la pila de llamadas, que también almacena variables de programa locales, argumentos pasados, registros volcados y otros datos, la pila de sombra normalmente solo almacena una segunda copia de la dirección de retorno de una función.
Las pilas de sombra ofrecen mayor protección para las direcciones de retorno que los canarios de pila, que dependen del secreto del valor del canario y son vulnerables a ataques de escritura no contigua. [ 5 ] Las propias pilas de sombra pueden protegerse con páginas de protección [ 6 ] o con ocultación de información, de modo que un atacante también necesitaría localizar la pila de sombra para sobrescribir una dirección de retorno almacenada allí.
Al igual que los canarios de pila, las pilas en la sombra no protegen los datos de la pila, salvo las direcciones de retorno, por lo que ofrecen una protección incompleta contra las vulnerabilidades de seguridad derivadas de errores de seguridad de la memoria .
En 2016, Intel anunció el soporte de hardware para pilas en la sombra con su tecnología de aplicación de flujo de control. [ 7 ]
Las pilas de sombra presentan algunos problemas de compatibilidad. Después de que un programa lanza una excepción o se produce un salto largo (longjmp) , la dirección de retorno en la parte superior de la pila de sombra no coincidirá con la dirección de retorno extraída de la pila de llamadas. La solución típica para este problema consiste en extraer entradas de la pila de sombra hasta encontrar una dirección de retorno coincidente, y solo finalizar el programa cuando no se encuentre ninguna coincidencia en la pila de sombra. [ 3 ]
Un programa multihilo , que tendría una pila de llamadas para cada hilo en ejecución, también tendría una pila de sombra que enmascararía cada una de las pilas de llamadas.
Véase también
Referencias
- ↑ Delshadtehrani, Leila; Eldridge, Schuyler; Canakci, Sadullah; Egele, Manuel; Joshi, Ajay (2018-01-01). "Nile: Un coprocesador de monitorización programable" . IEEE Computer Architecture Letters . 17 (1): 92– 95. doi : 10.1109/LCA.2017.2784416 . ISSN 1556-6056 .
- ↑ "StackShield: Una herramienta de protección contra técnicas de "aplastamiento de pila" para Linux" . Vendicator.
- 1 2 Sinnadurai, Saravanan; Zhao, Qin; Wong, Weng Fai (2008). "Pila de sombra de tiempo de ejecución transparente: protección contra modificaciones maliciosas de la dirección de retorno" (PDF) .
- ↑ Ozdoganoglu, H.; Brodley, C. ; Vijaykumar, T.; Kuperman, B. (2006). "SmashGuard: Una solución de hardware para prevenir ataques a la dirección de retorno de la función" (PDF) . IEEE Transactions on Computers . 55 (10): 1271– 1285. doi : 10.1109/TC.2006.166 .
- ↑ Szekeres, Laszlo; Payer, Mathias ; Wei, Tao; Song, Dawn (2003). "SoK: Guerra eterna en la memoria" (PDF) . Simposio IEEE sobre seguridad y privacidad : 48–63 .
- ↑ Chieuh, Tzi-cker; Hsu, Fu-Hau (2001). "RAD: Una solución en tiempo de compilación para ataques de desbordamiento de búfer". Actas de la 21.ª Conferencia Internacional sobre Sistemas de Computación Distribuida . págs. 409–417 . doi : 10.1109/ICDSC.2001.918971 . ISBN 0-7695-1077-9. S2CID 32026510 .
- ↑ "Vista previa de la tecnología de aplicación del flujo de control" (PDF) . Intel Corporation .
- Integridad del flujo de control
- Ingeniería de ciberseguridad