避免缓冲区溢出攻击的方法

来源:互联网 发布:勇敢一点 薛之谦 知乎 编辑:程序博客网 时间:2024/05/29 19:01

Linux上最新GCC版本提供了三种对抗缓冲区溢出攻击的机制


--1. 栈随机化

       攻击者对系统攻击时不但需要插入代码,还需要插入指向这段代码的指针,这个指针也是攻击字符串的一部分,而产生指针需要知道这个字符串的栈地址,在过去,不同的机器上栈的位置是相当固定的,栈随机化可以解决这种问题,它使得栈的位置在程序每次运行时都发生变化。 

        实现方式:在程序开始执行时,在栈上分配一段0-n字节的随机大小的空间,比如:用alloca函数在栈上分配指定字节数量的空间。程序不使用这段空间,但它会导致程序每次执行时后续的栈位置发生变化,分配的范围n必须足够大,才能得到足够多得栈地址变化,但也不能太大,否则会浪费程序太多空间。



--2. 栈破坏检测

       栈的破坏一般发生在局部缓冲区越界的时候,最新的GCC版本在产生的代码虫加入了一种栈保护者(stack protector)机制,用来检测缓冲区是否越界。

       实现方式:在栈帧中任何局部缓冲区与栈状态之间存储一个特殊的金丝雀(canary)值,也称为哨兵值(guard value),随机产生于程序每次运行时。因此,在恢复寄存器状态和从函数返回之前,程序检查这个值是否被函数的某个操作篡改了,如果是,那么程序会异常终止。



--3. 限制可执行代码区域

       用来消除攻击者向系统宏插入可执行代码的能力,基本思想是限制那些能够存放可执行代码的存储器区域。

        实现方式:令只有保存编译器产生的代码的那部分存储器才能够执行,其他部分只允许读和写。







参考资料:CSAPP




0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 腿又粗又弯怎么办 假发发量太多了怎么办 剃了发际线后悔怎么办 在外面遇到坏人抢劫怎么办 请事假单位不批怎么办 捷普请假不批怎么办 钉钉请假不审批怎么办 钉钉请假未审批怎么办 员工事假+工作履责怎么办 员工请事假不批怎么办 哺乳起员工一直请事假怎么办 请公休公司不批怎么办 辞职信交了不批怎么办 辞职年假没有休完怎么办 病假算旷工我该怎么办 辞职信领导不批怎么办 软顶帽子踏顶了怎么办 戴草帽总往下掉怎么办 白鞋子低帮发黄怎么办 跳伞的时候降落伞打不开怎么办 收腹裤穿着总是往下卷怎么办? 结婚打了黑伞怎么办 酷派x7开不了机怎么办 脸书账号被禁用怎么办 文档变成了d盘怎么办? 派派背包满了怎么办 黑裤子掉颜色了怎么办 快递被别人领走怎么办 绒面靴子长霉了怎么办 新买的鞋子开胶怎么办 白色的皮鞋边发黄怎么办 新鞋大拇指顶脚怎么办 耐克标志开胶了怎么办 鞋开胶了怎么办不用胶 gta按home没反应怎么办 gta5线上车没了怎么办 吃了粘壳的鸡蛋怎么办 gta5短信删错了怎么办 电风扇2档3档开好关不管用怎么办 gta5把车替换了怎么办 gta5任务完成后卡了怎么办