设置linux堆栈权限不可执行,linux的堆栈段为什么要设置执行权限

匿名用户1级2015-01-27 回答如前所述,大多数exploit程序都是通过对堆栈返回地址进行操作,并将其设为想要的值来实现 。返回地址是子程序调用的基本特性,并且不可能被完全替代。所以从逻辑上,首先要做的就是保证程序的返回地址指向可信任的代码而不是恶意的攻击代码。这也正是Execshield,Intel 和AMD提供的NX(Not eXcutable)技术和微软的Data Execution...
摘要由CSDN通过智能技术生成

匿名用户

1级

2015-01-27 回答

如前所述,大多数exploit程序都是通过对堆栈返回地址进行操作,并将其设为想要的值来实现 。

返回地址是子程序调用的基本特性,并且不可能被完全替代。所以从逻辑上,首先

要做的就是保证程序的返回地址指向可信任的代码而不是恶意的攻击代码。这也正是Execshield,

Intel 和AMD提供的NX(Not eXcutable)技术和微软的Data Execution Prevention技术所采取的方式。

偶然关注这个话题的人也许会想,这些技术为何产生,这种行为(not excutable)为什麽不是

本来就有的呢?原因要追溯到x86架构的底层。在x86架构中,CPU对有权限从一段内存中读取或是执行一段代码是不加区分的。出于对8086的兼容性,这种机制被保留下来时,但这显然是我们所不愿接受的。

The Segment Limit Approach(段限制策略)

ExecShield 以及与其类似的技术(PaX) 会估算一个地址,并由此将执行代码和读写

代码分开(一个源自与80386特性相类似的机制 (Ring???)).增加了段边界限定的

效果就是前N兆字节的虚拟地址是可执行的,而剩下的则不可。N的值由操作系统内核

来计算。

因为段边界地址的存在,操作系统必须能够保证执行代码处于段边界的前部。 而数据段

尤其堆栈段(在ELF中对应.date .bss 和.stack段)必须位于高位内存。

当越界执行发生时(violation of the execution permission)程序会触发段错误

(segmentation fault (signal 11???))并且终止程序。这种行为等价于一个应用

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值