前言:想要写出一篇引人入胜的文章?我们特意为您整理了计算机漏洞检测思考范文,希望能给你带来灵感和参考,敬请阅读。
一、计算机安全动态检测方法概述
程序在设计以及执行期内有很多共性的东西,比如有控制流(ControlFlow)和数据流(DataFlow)。一个进程的内存映射会被分为代码段(textsection)、只读数据段(rdatasection)、数据段(datasection)、资源段(rsrcsection)、堆(heap)、栈(stack)等多个部分。当然在不同的操作系统下它们的多少会有所不同,比如在UNIX下通常还会有未初始化的数据段(BSS)等等。动态检测方法就是在不改变源代码甚至是二进制代码的情况下,对程序的弱点进行检测的方法,这类检测主要通过修改进程运行环境来实现。动态检测方法主要有:非执行栈(Non-ExecutableStack)、非执行堆与数据(Non-ExecutableHeap/data)、内存映射(MemoryMapping)、安全共享库(SafeSharedLibraries)、沙箱(Sandbox)和程序解释(ProgramInterpretation)等。
二、计算机安全动态检测技术探讨
1、非执行栈技术
基于栈进行软件攻击的事件最近几年经常发生,原因就是很多操作系统的栈是可以写与执行的,而且内部变量尤其是数组变量都保存在栈中,攻击者向栈中注入恶意代码,然后想方设法来执行这段代码。栈攻击技术的文档也比较全面,这从某种程度上加速了基于栈的攻击。一个最直接的防范栈攻击的方法就是使得栈不能执行代码。该技术的检测不够全面,它仅能检测并阻止摧毁栈攻击。一个攻击者可以通过把恶意代码注入到数据段来绕过该技术的检测,他只需要把栈中返回地址覆盖掉,使得这个返回地址指向数据段中的恶意代码就可以了。该技术可能会造成小量的兼容性问题,因为有个别的应用程序就是依靠栈执行来正确运行的。该技术对性能的消耗可以被忽略,有报告称这项技术仅仅在上下文切换时增加了2到3个CPU的指令周期。
2、非执行堆与数据技术
由于堆是程序运行时动态分配内存的区域,而数据段则是程序编译时就初始化好了的。很长时期以来,由于担心非执行的堆与数据段会破坏软件的正常运行,所以该方法进展缓慢,最近几年才有些进展和文章。如果堆和数据段都不能执行代码,攻击者注入其中的恶意代码将不能被执行。这项技术和前面的非执行栈技术结合能起到更全面的作用,使得恶意代码彻底失去执行机会。使用该技术所付出的代价要比非执行栈技术大一些,因为它对内核的修改要多一些。现在已经有了大量的实例可以使用,这个技术还是可以接受的。
3、内存映射技术
有些攻击者通过使用NULL结尾的字符串来覆盖内存,以达到攻击的目的。通过使用映射代码页方法,将使得攻击者很难通过NULL结尾的字符串来跳转到较低的内存区,而且这些代码本身又可能含有NULL字符。再者,把代码页随机地映射到不同的内存地址,在某种程度上防止了那些靠猜地址来进行攻击的攻击方法。比如对于缓冲区溢出的漏洞,攻击者就是要寻找目标进程在内存中的某些地址,然后构造自己的数据来覆盖这些地址。这些地址在很多操作系统上都是有规律可以计算出的。如果使用内存映射技术,把代码页映射到随机的地址,将给攻击者增加很大的困难,不做大量的尝试是不可能查出所需地址的。使用内存映射技术所付出的最大的代价就是要修改操作系统内核、使得操作系统可以把代码页映射到较低的内存空间。虽然这个技术不需要对代码进行修改,但要重新链接,因为二进制的地址在程序链接阶段就确定了。
4、安全共享库技术
很多软件的安全漏洞来源于使用了不安全的共享库,尤其是C&C++,当中有很多的函数都不够“安全”,比如:strcpy、strcat、gets等等。这些函数使用不好就会带来灾难性的后果。用安全共享库技术,能在一定程度上阻止攻击者的攻击[5,6]。安全共享库技术就是依靠动态链接技术,能在程序运行期间拦截对不安全的函数的调用,并对函数参数等进行检测,这在Windows和UNIX上都被广泛应用。特别的是,这个技术能对当前内存大小的上限给出一个评估值,这在一定程度上阻止了把数据写到评估边界的外面。安全共享库技术从技术的角度很容易开发和配置,而且不需要对已有的应用程序作任何的修改和再编译。
三、计算机安全动态检测技术注意事项
计算机软件设计中的安全漏洞动态检测技术就是在程序执行的情况下,通过对程序的运行环境(环境变量、内存、堆和栈等)进行分析,来检测程序是否存在漏洞的技术。动态检测技术的优点就是不需要修改目标程序源码或其二进制代码,这在一定程度上提高程序的保密性。基于动态检测技术的软件安全漏洞检测过程,需要综合考虑对性能的影响、检测全面性、误报率、使用全面性、便于管理等多方面的因素,以便决定选择最合适的动态检测技术。