缓冲区溢出漏洞攻击及其对策探析
2017-03-11杨国旗
杨国旗
【摘要】 计算机网络技术现在已经得到了广泛的应用,对工作和生活均有着重要影响。但是因为网络环境的特殊性,很容易受到外部攻击影响,安全性较低,尤其是利用网络漏洞进行攻击为最为常见的威胁。缓冲区溢出漏洞攻击作为主要威胁形式,必须要确定其特点,有针对性的采取措施进行处理优化,降低攻击带来的影响,本文对此进行了简要分析。
【关键词】 缓冲区 漏洞攻击 安全性
安全问题一直都是计算机网络运行分析要点,随着计算机技术水平的提高,黑客攻击方式也在不断更新,通过层出不穷的手段和控制方法对网络运行带来巨大的威胁。利用缓冲区溢出漏洞来对计算机系统进行攻击,在日常操作中比较常见,想要有效解决此类问题,必须要确定攻击原理,有的放矢的应用有效手段进行优化。
一、缓冲区溢出漏洞分析
缓冲区即计算机内存块在内存地址的连续分配地址,而缓冲区溢出漏洞则是因为内存边界检查机制在C语言或者C++语言设计时,未设置边界造成。就象现在计算机操作系统,大部分均是选择用C语言或者C++语言编写,如果计算机程度想要将写入地址超出内存边界,便会产生非法操作[1]。如将写入数据保存到临近内存地址内,出现错误运行命令,情况严重甚至会造成系统崩溃。或者是基于漏洞执行操作命令,得到系统最高执行权,并操作干扰机器攻击软件系统。
二、緩冲区溢出漏洞攻击分析
2.1确定溢出点
要对漏洞发现人或者组织原始资料进行全面收集,其根据漏洞描述重现漏洞。其中,漏洞重现时要重点做好操作系统类型、软件环境和补丁版本等选择。同时还要注意对相关出错信息的收集,例如程序出错原因以及出错时EIP值。另外,可以利用Ollydbg、SoftICE等调试工具对溢出情况进行分析,对存在问题的执行流程进行跟踪,最终确定溢出点。
2.2 JMP ESP覆盖
确定溢出点以后,便可以构造攻击语句。JMP ESP覆盖方法,主要是利用strcpy、ssprintf等函数覆盖堆栈,待达到堆栈保存的函数返回地址时,利用Windows系统核心内的JMP DSP指令地址进行覆盖,并在后面紧跟shellcode[2]。此种覆盖方法可以直接进入shellcode,在函数返回时,ESP指向JMP ESP地址,使得JMP ESP地址出栈,使得EIP指针指向该地址。而ESP则会继续下移,只想构造好的shellcode。然后计算机继续向下执行EIP指向的指令JMP ESP,并且ESP此时指向shellcode,最终便会顺利跳转到shellcode位置。
2.3 SEH覆盖
SEH覆盖是一种水平更高的攻击手段,其主要是利用覆盖Windows系统内异常处理链SEH来实现攻击。对于 Windows系统,如果运行过程中出现异常情况,系统会查找异常处理链SEH,并确定可以应对此种异常情况的处理程序,然后将保存的处理程序地址赋给EIP,最终系统会对此处理程序进行执行,以免造成系统的崩溃。对于Windows系统,SEH链会被保存在堆栈中,应用此种覆盖方法进行攻击,即将顶层SEH中指向下一节点值覆盖成JMP 04,且处理程序地址被覆盖成CALL EBX或POP POP RET的地址,后面跟上shellcode[3]。一旦系统运行出现错误,Windows便会跳转到处理程序,执行CALL EBX或者POP POP RET,进入前面的JMP 04并执行,这样便跳过覆盖地址,达到shellcode位置。
三、缓冲区溢出漏洞攻击解决对策
1.检查数组边界。缓冲区溢出漏洞攻击大部分是因为某些语言未设置边界检查机制造成的,为减少此类攻击问题,可以通过检查数组边界的方法进行避免。但是要注意此种方法,边界检查后C语言编译器性能会降低大概15%。或者是应用其他安全性比较高的语言,如JAVA程序,其自身就具有边界检查机制,与其他语言比,其可以有效避免此类攻击。
2.阻止栈执行。基于缓冲区溢出漏洞攻击原理,在研究解决对策时,要避免控制权被转移到执行非法移入到栈中程序,如果栈中程序无法有效运行,无论是通过任何方式均不能执行栈中程序,以此来避免利用漏洞产生的攻击。如果选择应用此种方法,必须要对操作系统内核进行升级或者打补丁,整个过程复杂性较高,实际应用效率较低。因此,在对操作平台进行开发时,需要重视操作系统架构的设计,争取从源头上消除此漏洞。
3.指针完整性检查。此种方法主要是对编译器进行扩展,将1个数据结构“canary”放入局部变量和栈返回地址中间。“canary”是1个占用4个字节空间的数据,由程序运行过程中随机产生。1个函数调用结束后,执行栈中函数返回地址代码前会对“canary”进行检查,确定“canary”内部数据是否发生变化。对于数据发生变化的,便可确定已经发生缓冲区溢出漏洞攻击,需要立即中止执行栈中返回地址的代码。
结束语:缓冲区溢出漏洞攻击对计算机网络系统运行安全具有很大的威胁,想要有效解决此类问题,必须要根据其攻击原理,选择合适的优化对策,避免缓冲区溢出漏洞的攻击,提高系统运行可靠性。
参 考 文 献
[1] 徐欣民.一种缓冲区溢出漏洞自动挖掘及漏洞定位技术[D].华中科技大学,2008.
[2] 刘征.缓冲区溢出漏洞攻击及其对策[J].河南科技,2012,13:57.
[3] 陆开奎.基于动态污点分析的漏洞攻击检测技术研究与实现[D].电子科技大学,2013.