免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 5545 | 回复: 29
打印 上一主题 下一主题

*如果把堆栈分为代码堆栈和数据堆栈, 是不是就能解决"缓冲区溢出"问题? [复制链接]

论坛徽章:
1
技术图书徽章
日期:2013-09-10 08:57:55
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-03-16 21:12 |只看该作者 |倒序浏览
本帖最后由 pprpg 于 2012-03-16 21:20 编辑

目前是: 调用call指令时, 把call指令的下一个指令放入堆栈, 然后, ret时, 用堆栈保存的地址返回.
但如果有人通过"缓冲区溢出"的手法, 把堆栈中的地址覆盖掉, 就可以执行一些恶意代码了.
如果intel把call,ret之类的指令实现改一下:
把堆栈分为代码堆栈和数据堆栈, call,ret在代码堆栈保存和读取地址, 这样"缓冲区溢出"的方法不就失效了?


大家看看这个方法的可行性.

论坛徽章:
0
2 [报告]
发表于 2012-03-17 04:45 |只看该作者
简单的问题复杂化了,你需要另外的指令去读你的代码栈的数据,不必要的把问题复杂化。实际上只需要在编译器中改一下,在函数调用时把栈上的返回地址另外保存一份,返回的时候检查一下两份是否一致就可以了。

论坛徽章:
1
技术图书徽章
日期:2013-09-10 08:57:55
3 [报告]
发表于 2012-03-17 10:04 |只看该作者
oooooxxxxx 发表于 2012-03-17 04:45
简单的问题复杂化了,你需要另外的指令去读你的代码栈的数据,不必要的把问题复杂化。实际上只需要在编译器中改一下,在函数调用时把栈上的返回地址另外保存一份,返回的时候检查一下两份是否一致就可以了。


还是用原来的call/ret, 对于程序和编译器都是不变的, 改变的是CPU指令的实现: 地址出入堆栈时, 改为用代码栈.

"返回地址另外保存一份", 一个是是否会给人找到这个备份地址, 另一个是比较慢.

论坛徽章:
0
4 [报告]
发表于 2012-03-20 03:56 |只看该作者
pprpg 发表于 2012-03-17 10:04
还是用原来的call/ret, 对于程序和编译器都是不变的, 改变的是CPU指令的实现: 地址出入堆栈时, 改为用代 ...

用户想故意读写栈上的返回地址怎么办?对CPU而言是没有能力判定用户对返回地址的读写是不是恶意的。

论坛徽章:
1
技术图书徽章
日期:2013-09-10 08:57:55
5 [报告]
发表于 2012-03-20 09:00 |只看该作者
改写返回地址应该是非法的吧? 有这种需求吗?
如果确实需要读, 可以考虑增加指令.

论坛徽章:
0
6 [报告]
发表于 2012-03-20 12:17 |只看该作者
pprpg 发表于 2012-03-20 09:00
改写返回地址应该是非法的吧? 有这种需求吗?
如果确实需要读, 可以考虑增加指令.

这在汇编中是再正常没有的行为了,怎么能算非法呢,
原来用sp可以直接寻址的返回地址被给成其他指令,这是显然的兼容性问题了。

论坛徽章:
1
技术图书徽章
日期:2013-09-10 08:57:55
7 [报告]
发表于 2012-03-20 14:09 |只看该作者
为了读取, 那就把返回地址在数据堆栈上也保存一份.

改写返回地址"在汇编中是再正常没有"? 能否举个例子说明下这种需求?

论坛徽章:
0
8 [报告]
发表于 2012-03-21 00:42 |只看该作者
pprpg 发表于 2012-03-20 14:09
为了读取, 那就把返回地址在数据堆栈上也保存一份.

改写返回地址"在汇编中是再正常没有"? 能否举个例子说 ...

对兼容性来说,没禁止的就是正常的。
自己多写点汇编而不是在这里遐想自然就知道了。

论坛徽章:
1
技术图书徽章
日期:2013-09-10 08:57:55
9 [报告]
发表于 2012-03-27 14:09 |只看该作者
oooooxxxxx 发表于 2012-03-21 00:42
对兼容性来说,没禁止的就是正常的。
自己多写点汇编而不是在这里遐想自然就知道了。


可能是这样,我没写过汇编。可能汇编的写法和高级语言差别较大吧。

论坛徽章:
0
10 [报告]
发表于 2012-04-03 05:08 |只看该作者
pprpg 发表于 2012-03-27 14:09
可能是这样,我没写过汇编。可能汇编的写法和高级语言差别较大吧。

……
创新的前提是承前,想处理这些问题先要想一想,某些道理很简单为什么别人想不到,真的是他们太傻吗
我不是想指责你什么,只不过你这样连汇编都不熟悉就想修正体系结构并不是好的学习方法,所谓思而不学。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP