Canario de pila
¿Qué es Canario de pila?
Canario de pilaUn canario de pila es un valor secreto colocado entre los buffers locales de una funcion y la direccion de retorno guardada para detectar desbordes antes de que secuestren el flujo de control.
Los canarios de pila, introducidos por Crispin Cowan y el equipo de StackGuard en 1998, son valores aleatorios escritos entre las variables locales y la direccion de retorno guardada en la trama de pila. El compilador emite codigo de entrada que coloca el canario y de salida que lo verifica; un valor alterado aborta el programa antes de usar la direccion corrupta. Los toolchains modernos lo activan con -fstack-protector o /GS y usan un valor aleatorio por proceso mas un byte terminador (habitualmente 0x00) para frustrar desbordes que incluyan el canario. Los canarios complementan, pero no sustituyen, ASLR, DEP, CFI y los lenguajes con seguridad de memoria.
● Ejemplos
- 01
GCC con -fstack-protector-strong inserta un canario en funciones con arrays.
- 02
La opcion /GS de MSVC detecta un desborde basado en strcpy.
● Preguntas frecuentes
¿Qué es Canario de pila?
Un canario de pila es un valor secreto colocado entre los buffers locales de una funcion y la direccion de retorno guardada para detectar desbordes antes de que secuestren el flujo de control. Pertenece a la categoría de Seguridad de aplicaciones en ciberseguridad.
¿Qué significa Canario de pila?
Un canario de pila es un valor secreto colocado entre los buffers locales de una funcion y la direccion de retorno guardada para detectar desbordes antes de que secuestren el flujo de control.
¿Cómo funciona Canario de pila?
Los canarios de pila, introducidos por Crispin Cowan y el equipo de StackGuard en 1998, son valores aleatorios escritos entre las variables locales y la direccion de retorno guardada en la trama de pila. El compilador emite codigo de entrada que coloca el canario y de salida que lo verifica; un valor alterado aborta el programa antes de usar la direccion corrupta. Los toolchains modernos lo activan con -fstack-protector o /GS y usan un valor aleatorio por proceso mas un byte terminador (habitualmente 0x00) para frustrar desbordes que incluyan el canario. Los canarios complementan, pero no sustituyen, ASLR, DEP, CFI y los lenguajes con seguridad de memoria.
¿Cómo defenderse de Canario de pila?
Las defensas contra Canario de pila combinan habitualmente controles técnicos y prácticas operativas, como se detalla en la definición.
¿Cuáles son otros nombres para Canario de pila?
Nombres alternativos comunes: StackGuard, Cookie de pila, GS cookie.
● Términos relacionados
- appsec№ 064
ASLR
La aleatorización del espacio de direcciones distribuye al azar la ubicación en memoria de código, pilas, montones y librerías para impedir que un atacante prediga direcciones.
- appsec№ 303
DEP
La prevencion de ejecucion de datos (DEP / NX / W^X) marca paginas de memoria como no ejecutables para impedir que un atacante ejecute shellcode inyectado en pila o monton.
- appsec№ 217
Integridad del flujo de control
La integridad de flujo de control (CFI) restringe las llamadas indirectas y los retornos del programa a un conjunto precomputado de destinos legitimos, bloqueando ROP y JOP.
- appsec№ 1028
Shadow stack
Una shadow stack es una pila protegida y separada que guarda copias de las direcciones de retorno para detectar manipulaciones de la pila normal y bloquear ataques ROP.
- appsec№ 925
Return-Oriented Programming
ROP es una tecnica de explotacion por reutilizacion de codigo que encadena secuencias cortas terminadas en RET para ejecutar computacion arbitraria sin inyectar codigo nuevo.
- appsec№ 670
Seguridad de memoria
La seguridad de memoria es la propiedad de que un programa nunca lee, escribe ni ejecuta memoria que no haya asignado legitimamente, evitando clases enteras de vulnerabilidades.
● Véase también
- № 545Intel CET