首页
社区
课程
招聘
[求助]堆溢出可跳跃?
发表于: 2013-3-26 17:59 4481

[求助]堆溢出可跳跃?

2013-3-26 17:59
4481
学生一枚,作业中需要实现一个堆溢出检测器,HOOK了内存分配函数,用虚拟堆的方法,在申请的时候多申请了几个空间,大概如下:

头部哨兵+用户缓冲区+尾部哨兵

用户缓冲区是返回给用户的,而头尾哨兵则是通过某个key和每个堆的首地址进行简单异或加密,每次监控的时候则计算尾部哨兵是否正确从而判断是否溢出。

老师说这样不安全,检测器本身会被绕过,首先是尾部哨兵是否是不可预知的,其次是尾部哨兵长度确定(4个byte)能被跳过。

针对第一个问题,我改进后就是key是在检测器每次运行时通过rand随机获得,然后因为尾部哨兵会根据堆首地址不同而不同,所以这样异或下去,布置到是否算是不可预知?

另一个问题比较纠结,老师说如果知道尾部哨兵的长度能直接跳过去溢出,不理解。求前辈指教(不理解,堆溢出就是堆缓冲区溢出吧,然后是通过strcpy之类的不安全函数导致的,而这些函数貌似没看到可以跳过拷贝数据的,真心怀疑自己智商余额不足……郁闷)

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 2105
活跃值: (424)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
溢出肯定是连续覆盖啊,在你所谓的随机尾部哨兵的情况下,不可能跳过的。
除非遇到不是连续覆盖的溢出
2013-3-26 18:08
0
雪    币: 35
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
请问前辈所谓的不是连续的覆盖溢出是指?任意地址写漏洞之类的么?
2013-3-26 18:46
0
雪    币: 822
活跃值: (380)
能力值: ( LV12,RANK:310 )
在线值:
发帖
回帖
粉丝
4
不连续的堆溢出也很多的,不一定要通过内存连续拷贝函数溢出,比如数组下标越界造成的溢出
2013-3-26 19:51
0
雪    币: 35
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
确实如前辈所说的,这种防护确实无法避免指针越界造成的不连续溢出……又不能每次写操作都中断过来检查,效率会大打则扣;静态检测的话,引用计数,或者扩充C指针,有点乱……

还是谢谢两位前辈
2013-3-26 23:11
0
游客
登录 | 注册 方可回帖
返回
//