地址空间随机化技术主要对用户进程或系统内核的程序代码段、栈、堆、共享库(shared library)等关键内存区段所在地址进行一定程度上的随机部署,以增加恶意攻击者利用内存漏洞(如控制流劫持攻击)的难度。
1997年,S.弗斯特(Stephanie Forrest)等人首次提出了地址随机化的概念,她指出当时的计算机系统缺乏多样性,类似于自然界中结构单一的生态系统的稳定性差,高度一致性的计算机系统也存在着严重的脆弱性。若攻击者发现某个软件漏洞可用于越权获取管理员权限,他便能够直接利用该漏洞来直接侵入相同配置的所有计算机。因此,S.弗斯特等人指出通过向计算机系统的内存布局引入随机化,不仅能够以较低成本增强系统的健壮性,且对系统的可用性、便利性等方面的影响较小。
在地址随机化概念提出并完善后,各个主流操作系统开始逐渐实际部署该防御机制。2001年7月,Linux Pax项目首次创建了地址空间随机化的术语,并为Linux内核提供具体实现的补丁。2003年11月,OpenBSD的3.4版本将ASLR作为默认机制,是首个采用该技术的主流操作系统。2005年6月,Linux在2.6.12版本的内核中首次为用户程序提供进程级地址空间随机化技术,并首次在2014年3月发布的3.14版本的内核中部署了内核级地址空间随机化技术。而Windows操作系统则是首次于2007年1月发布的Vista系统中提供对用户程序和动态链接库进行地址空间随机化的支持。截至2021年,地址空间布局随机化技术已成为主流操作系统(Linux、Windows、macOS、Android、iOS等)的默认安全机制。
但随着侧信道攻击(如Spectre和Meltdown)等新型技术的出现,攻击者已经能够成功绕过地址空间布局随机化技术这一防御机制。因此,为保护用户免于遭受软件漏洞被利用的威胁,还需要和其他防御技术(如控制流完整性保护)相结合。