Address Space Layout Randomization (ASLR) es una técnica de seguridad computacional que consiste en aleatorizar las ubicaciones de memoria de áreas clave de un proceso, como la base del ejecutable, la pila (stack), el heap y las librerías compartidas (shared libraries). Al introducir esta imprevisibilidad en el layout del espacio de direcciones, ASLR dificulta significativamente la explotación de vulnerabilidades como los buffer overflows, los use-after-free o los retornos a libc, ya que los atacantes no pueden predecir las direcciones de memoria de las funciones o datos que desean manipular para ejecutar código arbitrario.

ASLR es una característica fundamental de seguridad implementada en la mayoría de los sistemas operativos modernos. Por ejemplo, Linux lo soporta desde el kernel 2.6.12, Windows lo introdujo con Windows Vista y Server 2008, y macOS lo ha incorporado en sus versiones recientes. Herramientas de compilación como GCC y Clang, junto con los linkers, generan ejecutables que pueden aprovechar ASLR. Las aplicaciones y servicios críticos, desde navegadores web como Chrome y Firefox hasta bases de datos y servidores de aplicaciones, se benefician de ASLR para mitigar ataques que buscan comprometer su integridad y confidencialidad.

Para un arquitecto de sistemas, ASLR es una consideración estratégica clave en el diseño de sistemas seguros. Su activación por defecto en la mayoría de los entornos modernos reduce la superficie de ataque, pero es crucial verificar que las aplicaciones no deshabiliten ASLR explícitamente y que las dependencias (librerías, frameworks) sean compatibles. Aunque ASLR no es una panacea y puede ser parcialmente eludido con técnicas como la fuga de información (information leakage), su combinación con otras medidas de seguridad como DEP (Data Execution Prevention) y la compilación con PIE (Position-Independent Executable) forma una defensa en profundidad robusta. Los trade-offs son mínimos; el impacto en el rendimiento es generalmente insignificante, y el valor de seguridad supera con creces cualquier complejidad adicional en la cadena de herramientas de desarrollo.