网络技术具有资源共享、信息传输与集中处理、负载均衡与分布处理和综合信息服务等功能,给我们的工作和生活提供了极大的方便。网络技术丰富多彩,吸引着越来越多的人使用它,其正在改变我们长久以来形成的思维模式和生活模式。但是其在使用过程中也存在着一些漏洞,诸如带宽短缺、IP地址资源匮乏、数据驱动型漏洞等。而这些漏洞的存在也影响着我们的正常安全使用,随着科学技术的不断进步,相信网络技术所存在的漏洞都能够逐一得到解决。
这里我们将对基于网络技术的两种数据驱动型漏洞形成原理进行介绍。攻击者希望利用数据驱动型漏洞对网络技术进行攻击,进而得到自己想要的东西。为避免数据驱动型漏洞的出现,我们应当了解其基本的形成原理,这样才能够从源头上保证信息安全。
其一是缓冲区溢出漏洞。其攻击原理是向程序中的缓冲区写入超出其边界的数据,造成溢出。攻击者所想的到的效果是溢出所产生的错误程序能够执行攻击者预设的代码,进而顺利打开远程连接的 She11,以得到自己想得到的信息。而栈溢出是最为常见的缓冲区溢出方式。程序编码都有固定的函数表达方式,如果更改了函数的表达方式就会导致栈溢出。攻击者通常会对某个函数进行调用,并在栈顶为调用的函数分配一个固定的栈帧结构,这样就可以实现益处。攻击者如果想要实现对程序的控制和信息的获取,就可以将返回地址值覆盖,这样一来就可以使函数在返回程序的时候就会转向新的地址继续执行,就可以实现对程序的控制和信息的获取。
其二是格式化字符串漏洞。其形成原理是,当 Printf()系列函数被调用的时候,会从字符串里面读取字符,如果遇到格式化的字符的时候,函数会按照控制字符从输出表项对应的变量中读取数据,然后按照控制字符的规定格式输出数据,这样就可以实现对系统程序的控制。程序的运行是依托于代码的,如果更改了代码内的函数编排顺序,就可以改变程序的运行方向,达到攻击者的目的。而格式化字符串漏洞则是通过改变字符串的运行方式实现对系统的控制的。
网络技术是从1990年左右逐渐发展起来的一项新技术,而从那个时候开始,针对数据驱动型漏洞的研究就已经开始了,发展到现在,对基于数据驱动漏洞的攻击行为和方式的研究已经比较成熟。数据驱动型漏洞的攻击行为,从不同的角度观察有着不同的结果。例如从程序员的角度观察,基于网络技术的数据驱动型漏洞的缓冲区溢出应当是不可避免的。从网络技术开始应用的时候,国内外就开始对基于数据驱动型漏洞的攻击行为进行研究了。比较典型的有2000年的时候,在acm sigsoft会议上,CERT的Richard Pethia认为数据驱动型漏洞是唯一最重要的安全问题。而从我们现在的角度来看,他的这句话是及其正确的。目前我们在网络技术的应用中,数据驱动型漏洞确实是唯一最重要的安全问题。而国内对基于网络技术的数据驱动型攻击技术的研究起步较晚,没有形成相应的体系,只有部分黑客和安全人员在这一方方面有着深入的研究。另外,国内的一些比较知名的杀毒软件,在进行软件开发的时候,也对基于网络技术的数据驱动型漏洞检测技术有所研究。
目前针对数据驱动型漏洞的检测主要有两种,即动态监测和静态检测。动态监测技术主要是从操作系统的底层出发,针对C语言编辑器本身的特征,对运行中的程序进行动态追踪和保护。动态监测顾名思义,需要编码程序在运行过程中进行检测工作,在程序运行过程中,如果收到恶意攻击或者非法篡改代码的情况,就会自动发出警告信息或者直接将程序停止运行,避免危险的侵入。这种技术主要包含增强编译器技术、黑盒测试技术和安全链接技术等。而静态检测技术则依托于源代码,并不需要程序运行。静态检测技术在应用过程中需要得到编译理论的支持和对源代码进行分析和模式匹配等,这样才能够保证静态检测技术的正常运行。静态检测技术在工作过程中,如果识别到漏洞信息,就会对其进行准确的定位,并发出警告和进行自动修复。在具体的应用过程中,可以结合这两种技术进行使用,以最大程度的避免漏洞对网络技术的损害。
数据驱动型漏洞的检测系统依托的是语义分析的原型检测系统,是以编译原理中的词法分析和语法分析作为基础的,采用的是Wagner对缓冲区的数学描述方法,实现语义方面的检测。而原型系统主要包括四个模块,即语法分析模块、缓冲区预先搜索模块、创建程序执行流程模块及综合处理模块。四个模块分别具有自己的作用,通过四个模块的协调配合,及时的监测出与源代码所不同的地方,并发出预警和尽可能的进行自我修复。语法分析模块负责的事读入源代码文件及源代码文件的关键字等部分,而缓冲区预先搜索模块则是在源代码系统中进行准确的缓冲区定位,而创建程序执行流程模块则是遍历源代码,生成程序执行流程的有向图,而综合处理模块则是采用语法分析、语义分析的手段对源代码进行检测,并及时的得出检测的结果。
缓冲区溢出漏洞的检测。针对缓冲区益处漏洞的检测,采用的是缓冲区搜索的方法,对缓冲区进行全面的搜索,对溢出位置进行及时的警告,通过停止程序运行等方式对益处问题进行解决,从而保证信息安全。数据驱动型漏洞的形成与源代码中缓冲区的开辟有着不可分割的关系,所以需要对源代码的缓冲区进行搜索和预判,这样才能够及时的发现溢出位置,并进行解决,避免信息安全问题的出现。
格式化字符串漏洞的检测。不同于其他漏洞的形成原理,格式化字符串漏洞是通过对格式化字符串实现的系统漏洞,通常是由 Printf()以及同一类的函数形成的,所以对其的漏洞检测工作也比较简单。针对格式化字符串攻击的局限性,可以采用对源代码进行检测的方式实现对格式化字符串漏统的检测。具体的检测方式通常会采用模式匹配算法。这样可以对字符串中的函数进行逐一的对比,对于出现错误或者出现缺少的参数,会及时的提出字符串缺失或错误的信号,引起检测者的注意。
数据驱动型漏洞是现有阶段唯一最重要的安全问题,必须着手解决数据驱动型漏洞,才能够保证信息安全。当软件出现漏洞的时候,极其容易被木马、病毒等利用,而产生信息安全问题,所以解决漏洞问题势在必行。而数据驱动型漏洞又是漏洞问题中出现最多的一种形式。所以有必要加强数据驱动型漏洞的系统检测工作,这样才能够从根本上保证网络技术安全和网络信息安全。