b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

缓冲区溢出攻击方式_缓冲区溢出攻击_缓冲区溢出攻击vs(3)

电脑杂谈  发布时间:2017-01-21 19:10:51  来源:网络整理

1. 攻击者不必为达到此目的而溢出任何缓冲区,可以找到足够的空间来放置攻击代码

2. 缓冲区可以设在任何地方:堆栈(自动变量)、堆(动态分配的)和静态数据区(初始化或者未初始化的数据)

利用已经存在的代码:

有时候,攻击者想要的代码已经在被攻击的程序中了,攻击者所要做的只是对代码传递一些参数,然后使程序跳转到我们的目标。比如,攻击代码要求执行exe("/bin/sh"),而在libc库中的代码执行exec(arg),其中arg使一个指向一个字符串的指针参数,那么攻击者只要把传入的参数指针改向指向"/bin/sh",然后调转到libc库中的相应的指令序列。

3.1 编写正确的代码

编写正确的代码是一件非常有意义但耗时的工作,特别象编写C语言那种具有容易出错倾向的程序(如:字符串的零结尾),这种风格是由于追求性能而忽视正确性的传统引起的。尽管花了很长的时间使得人们知道了如何编写安全的程序,具有安全漏洞的程序依旧出现。因此人们开发了一些工具和技术来帮助经验不足的程序员编写安全正确的程序。

最简单的方法就是用grep来搜索源代码中容易产生漏洞的库的调用,比如对strcpy和sprintf的调用,这两个函数都没有检查输入参数的长度。事实上,各个版本C的标准库均有这样的问题存在。

为了寻找一些常见的诸如缓冲区溢出和操作系统竞争条件等漏洞,代码检查小组检查了很多的代码。然而依然有漏网之鱼存在。尽管采用了strncpy和snprintf这些替代函数来防止缓冲区溢出的发生,但是由于编写代码的问题,仍旧会有这种情况发生。比如lprm程序就是最好的例子,虽然它通过了代码的安全检查,但仍然有缓冲区溢出的问题存在。

为了对付这些问题,人们开发了一些高级的查错工具,如fault injection等。这些工具的目的在于通过人为随机地产生一些缓冲区溢出来寻找代码的安全漏洞。还有一些静态分析工具用于侦测缓冲区溢出的存在。

虽然这些工具帮助程序员开发更安全的程序,但是由于C语言的特点,这些工具不可能找出所有的缓冲区溢出漏洞。所以,侦错技术只能用来减少缓冲区溢出的可能,并不能完全地消除它的存在。除非程序员能保证他的程序万无一失,否则还是要用到以下3.2到3.4部分的内容来保证程序的可靠性能。

3.2 非执行的缓冲区

通过使被攻击程序的数据段地址空间不可执行,从而使得攻击者不可能执行被殖入被攻击程序输入缓冲区的代码,这种技术被称为非执行的缓冲区技术。事实上,很多老的Unix系统都是这样设计的,但是近来的Unix和MS Windows系统由于实现更好的性能和功能,往往在在数据段中动态地放入可执行的代码。所以为了保持程序的兼容性不可能使得所有程序的数据段不可执行。

但是我们可以设定堆栈数据段不可执行,这样就可以最大限度地保证了程序的兼容性。Linux和Solaris都发布了有关这方面的内核补丁。因为几乎没有任何合法的程序会在堆栈中存放代码,这种做法几乎不产生任何兼容性问题,除了在Linux中的两个特例,这时可执行的代码必须被放入堆栈中:

信号传递:

Linux通过向进程堆栈释放代码然后引发中断来执行在堆栈中的代码来实现向进程发送Unix信号。非执行缓冲区的补丁在发送信号的时候是允许缓冲区可执行的。

GCC的重用:

研究发现gcc在堆栈区里放置了可执行的代码作为重用之用。然而,关闭这个功能并不产生任何问题,只有部分功能似乎不能使用。

非执行堆栈的保护可以有效地对付把代码殖入自动变量的缓冲区溢出攻击,而对于其他形式的攻击则没有效果(参见2.1)。通过引用一个驻留的程序的指针,就可以跳过这种保护措施。其他的攻击可以采用把代码殖入堆或者静态数据段中来跳过保护。


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-27871-3.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 卫子君
      卫子君

      按现有利率算放银行一年死期也就200块钱吧

    • 萧雨轩
      萧雨轩

      干嘛不把我大汉帝国虽远必诛的经验也集成进来

    • 张浩哲
      张浩哲

      一缕温暖

    热点图片
    拼命载入中...