博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【论文笔记】缓冲区溢出漏洞研究与进展
阅读量:5143 次
发布时间:2019-06-13

本文共 1130 字,大约阅读时间需要 3 分钟。

今天读了李毅超、刘丹等的《缓冲区溢出漏洞研究与进展》一文,这篇文章发表在计算机科学这个核心期刊上,其实是一篇综述,但是文章写的比较好。现在做一下这篇文章的笔记。

 
一、缓冲区溢出攻击的原理
缓冲区溢出是指当计算机向缓冲区内填充数据位数时超过了缓冲区本身的容量溢出的数据覆盖在合法数据上。
  当调用函数copy()后,参数、返回地址、前一个栈的指针、本地变量被依次压入栈中。箭头知名堆栈和内存的增长方向。
  函数strcpy()将输入复制到buffer()。由于strcpy()不检查输入变量的边界,当它向buffer()赋值的字符多于512个,输入字符就可能覆盖堆栈中的返回地址并使其指向攻击代码。当程序从copy()返回到main()时,攻击代码被执行。
 
 
2、本地指针溢出攻击
  返回地址和栈指针受到了保护,缓冲区溢出仍然可以生成。
  函数copy()有个本地指针p,并两次调用函数strcpy()。在堆栈中,指针p位于buffer[]下面。攻击过程为:
    (1)在执行第一个strcpy()时,攻击代码被注入到缓冲区中,p被覆盖并指向函数printf在全局偏移表GOT(Global Offset Table)中的入口;
    (2)通过第二个strcpy()函数将攻击代码的地址赋值到printf在全局偏移表GOT中的入口中;
    (3)当程序执行copy()函数中的printf("Finished! ")时,激活攻击代码。
  GOT表也是引发溢出攻击的部位,应该得到保护。
 
3、本地函数指针溢出攻击
  
  本地函数指针也可以被利用成为溢出攻击。
  在函数copy()中,strcpy()函数首先被调用,然后fptr所指向的函数被执行。在堆栈中,fptr位于buffer[ ]下,这样fptr就可能被覆盖并指向攻击代码。执行(void)(*fptr)(buffer)时,就会激活攻击代码。
 
4、BSS函数指针溢出攻击
 
  对BSS(Block Stoage Segment)中函数指针的利用。由于利用发生在BSS中,诸如StackGuard、IBM SSP等这样的堆栈溢出防护技术对这类攻击无效。
 
 
二、检测与防护研究
 
1、基于目标代码分析
 
  Fuzz工具。
 
2、基于源码分析
(1)基于源码静态检测
 
(2)基于源码动态检测
 
3、基于编译器的方法
 
4、基于硬件的方法
 
5、改造C语言库函数
 
6、基于操作系统的方法
 
7、其他防护技术
 
 
 
三、发展趋势
 
  从软件走向硬件,从单机制走向多机制。  
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

转载于:https://www.cnblogs.com/mayanit/archive/2013/05/28/3104751.html

你可能感兴趣的文章
【最短路】Vijos P1046 观光旅游
查看>>
Android学习总结——开篇
查看>>
iOS 基础知识
查看>>
PHP 重新格式化var_dump/print_r打印的数组
查看>>
C++11:POD数据类型
查看>>
Delphi中Json格式读写
查看>>
请不要忘记带着梦想时常沐浴阳光
查看>>
交易与风险
查看>>
Hibernate: Could not find a getter for iUserId in class com.Hibernate.pojo.User异常
查看>>
windows环境下搭建RocketMQ
查看>>
CSS--基础
查看>>
基于OpenGL的渲染引擎
查看>>
Android HTTP GET 小文件下载
查看>>
ember.js:使用笔记4 数组数据的分组显示
查看>>
mvc-9测试和调试
查看>>
移植linux-2.6.32.2到qq2440
查看>>
转义字符(\)对JavaScript中JSON.parse的影响概述
查看>>
MySQL学习9 - 单表查询
查看>>
利用kubeadm部署k8s
查看>>
如何在MVC中显示条形码图片(以内存流的方式)
查看>>