Address space layout randomization (ASLR) is a computer security technique involved in preventing exploitation of memory corruption vulnerabilities. In order to prevent an attacker from reliably jumping to, for example, a particular exploited function in memory, ASLR randomly arranges the address space positions of key data areas of a process, including the base of the executable and the positions of the stackheap and libraries.

Address space randomization hinders some types of security attacks by making it more difficult for an attacker to predict target addresses. For example, attackers trying to execute return-to-libc attacks must locate the code to be executed, while other attackers trying to execute shellcode injected on the stack have to find the stack first. In both cases, the system obscures related memory-addresses from the attackers. These values have to be guessed, and a mistaken guess is not usually recoverable due to the application crashing.

Several mainstream, general-purpose operating systems implement ASLR.

https://en.wikipedia.org/wiki/Address_space_layout_randomization

aslr是一种针对缓冲区溢出安全保护技术,通过对、共享库映射等线性区布局的随机化,通过增加攻击者预测目的地址的难度,防止攻击者直接定位攻击代码位置,达到阻止溢出攻击的目的的一种技术。
ASLR(Address space layout randomization)是一种针对缓冲区溢出安全保护技术,通过对、共享库映射等线性区布局的随机化,通过增加攻击者预测目的地址的难度,防止攻击者直接定位攻击代码位置,达到阻止溢出攻击的目的。据研究表明ASLR可以有效的降低缓冲区溢出攻击的成功率,如今LinuxFreeBSDWindows等主流操作系统都已采用了该技术。
在学术研究上,已经有不少工作对其进行改进。比如进行运行时动态细粒度的随机化(参见论文 Remix: On-demand Live Randomization)。
 

OpenBSD

OpenBSD作为一个主流的操作系统,已在ASLR推出2年后支持,并在默认情况下是打开的。

Linux

Linux已在内核版本2.6.12中添加ASLR。

Windows

Windows Server 2008,Windows 7,Windows Vista,Windows Server 2008 R2,默认情况下启用ASLR,但它仅适用于动态链接库和可执行文件。

Mac OS X

AppleMac OS X Leopard10.5(2007年十月发行)中某些库导入了随机地址偏移,但其实现并没有提供ASLR所定义的完整保护能力。而Mac OS X Lion10.7则对所有的应用程序均提供了ASLR支持。Apple宣称为应用程序改善了这项技术的支持,能让32及64位的应用程序避开更多此类攻击。从OS X Mountain Lion10.8开始,核心及核心扩充(kext)与zones在系统启动时也会随机配置。

iOS(iPhone, iPod touch, iPad)

AppleiOS4.3内导入了ASLR。

Android

Android 4.0提供地址空间配置随机加载(ASLR),以帮助保护系统和第三方应用程序免受由于内存管理问题的攻击,在Android 4.1中加入地址无关代码(position-independent code)的支持。

最新文章

  1. 【Knockout.js 学习体验之旅】(1)ko初体验
  2. Python 【第五章】:线程、进程和协程
  3. 18 行 JS 代码编一个倒时器
  4. tree view
  5. --hdu 1114 Piggy-Bank(完全背包)
  6. 【Implement strStr() 】cpp
  7. ubuntu 安装 rabbitmq-server
  8. PropertyPlaceholderConfigurer的用法(使用spring提供的类读取数据库配置信息.properties)
  9. [Typescript] Function defination
  10. div、span
  11. 如何让eclipse在程序修改后,点击运行可以自动保存。
  12. linux操作系统基础篇(九)
  13. kafka简单回顾
  14. jsp内置对象-config对象
  15. 如何解决Java警告信息:"objc[31336]: Class JavaLaunchHelper is implemented in both places ..."
  16. jquery的$post方法不发送空数组的解决办法
  17. Codeforces 798D Mike and distribution - 贪心
  18. Django Admin实现三级联动(省市区)
  19. smarty-2014-02-28
  20. 10 个优质的 Laravel 扩展推荐

热门文章

  1. Ubuntu下使用Sysvinit实现自定义服务(简单研究)
  2. 非常适合新手的jq/zepto源码分析07---ajax的封装
  3. logout退出功能是怎么实现的?login登陆功能室怎么实现的
  4. Fedora下搭建LAMP开发环境
  5. LeetCode 246. Strobogrammatic Number (可颠倒数字) $
  6. node npm Bower
  7. java 多线程——并发编程模型 学习笔记
  8. 【转】SDK、JDK、JRE、JVM、JDT、CDT等之间的区别与联系 .
  9. 使iframe随内容(target到iframe的内容)改变而自适应高度,完美解决各种获取第一个demo高度后第二个高度不变情况
  10. 如何用css约束一个层不可见