首页> 中国专利> 传感器网络源代码缓冲区溢出漏洞检测系统和方法

传感器网络源代码缓冲区溢出漏洞检测系统和方法

摘要

一种传感器网络源代码缓冲区溢出漏洞检测系统和方法,系统包括两种装置:溢出漏洞的分析装置和测试装置。前者设有顺序连接的安全威胁定位、污点分析和测试用例生成三个模块;后者设有检测端和被检测端,用于按照来自分析装置的测试用例,对源代码测试是否存在缓冲区溢出漏洞,并将测试结果作出告示,以便对该不安全的代码采取改进措施。本发明能够检测和分析用于传感器网络的基于C或NesC语言的源代码,即定位源代码中的安全威胁,并生成源代码对应的测试用例,对其中可能存在的缓冲区溢出漏洞进行漏洞测试,将测试结果告示网管人员,以便对源代码采取相应措施,从而有效防止缓冲区溢出漏洞引起的蠕虫病毒的蔓延、泛滥,提高传感器网络的安全性。

著录项

  • 公开/公告号CN102129538A

    专利类型发明专利

  • 公开/公告日2011-07-20

    原文格式PDF

  • 申请/专利权人 北京邮电大学;

    申请/专利号CN201110052452.0

  • 发明设计人 张冬梅;黄文;魏更宇;

    申请日2011-03-04

  • 分类号G06F21/22(20060101);G06F21/00(20060101);G06F11/36(20060101);

  • 代理机构11018 北京德琦知识产权代理有限公司;

  • 代理人夏宪富

  • 地址 100876 北京市海淀区西土城路10号

  • 入库时间 2023-12-18 02:56:11

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2015-04-29

    未缴年费专利权终止 IPC(主分类):G06F11/36 授权公告日:20130508 终止日期:20140304 申请日:20110304

    专利权的终止

  • 2013-05-08

    授权

    授权

  • 2011-08-31

    实质审查的生效 IPC(主分类):G06F21/22 申请日:20110304

    实质审查的生效

  • 2011-07-20

    公开

    公开

说明书

技术领域

本发明涉及一种传感器网络源代码缓冲区溢出漏洞检测系统和方法,属于无线自组织网络/物联网系统技术领域。

背景技术

缓冲区溢出漏洞是一种广泛存在于各种操作系统和应用软件中的非常普遍的技术缺陷,它是由于软件开发人员在不同的内存空间移动数据时,没有进行边界检查,导致内存泄漏而引起的。入侵者通过向目标机发送满足缓冲区溢出条件的数据,以破坏程序的堆栈,改变程序的执行流程。入侵者只要成功地利用缓冲区溢出漏洞,就能够使程序运行异常,造成系统死机、重启、甚至执行恶意代码,最终获得系统最高权限。缓冲区溢出漏洞还可以引起蠕虫传播。例如SQL Slammer、RPC漏洞系列蠕虫都是使用缓冲区溢出漏洞。虽然这些蠕虫是针对计算机网络,但是,对于传感器网络,也存在同样的安全威胁:GoodSpeed就发现了基于冯诺依曼体系的传感器节点存在缓冲区漏洞。在2010年BlackHat上,Giannetsos也验证了对传感器网络的各种攻击,包括监听、篡改、缓冲区溢出攻击等。因此,对于传感器网络进行缓冲区溢出检测有很重要的意义。

目前,国内外对缓冲区溢出检测技术进行了大量的研究工作。其检测方法可以分成基于源代码的静态检测与动态检测、基于目标代码的静态检测与动态检测等。但是,这类技术主要针对个人计算机PC上的包括C、C++、Java等的传统编程语言,不一定适用于传感器节点。例如典型的传感器操作系统TinyOS是一种基于组件化的编程语言NesC,因此,对于NesC的源代码进行缓冲区溢出检测时,不能采用传统的基于C、C++、Java等语言的缓冲区溢出检测技术。

无线传感器网络WSN的特点是通信能力、电源能量、计算速度和存储空间都非常有限、而且,传感器节点配置密集等,这些特点直接导致了许多有效的安全协议和算法都不能顺利应用。其次,传感器节点一般都部署在无人值守的恶劣环境或敌对环境中,其工作空间本身就存在大量不安全因素,其节点很容易遭到破坏或被俘,而且,通常还无法对节点进行维护,造成节点很容易失效。再者,WSN中的各节点是以自组织的方式形成网络,以单跳或多跳方式进行通信,由节点相互配合实现路由功能,没有专门的传输设备,无法直接应用传统的端到端的安全机制。因此,如何在无线传感器网络中检测缓冲区溢出漏洞就成为业内科技人员关注的焦点课题。

发明内容

有鉴于此,本发明的目的是提供一种传感器网络源代码缓冲区溢出漏洞检测系统和方法,本发明能够对传感器网络基于C或NesC语言的源代码进行检测,即对传感器网络的源代码进行扫描和分析,定位源代码中存在的安全威胁,并生成源代码对应的测试用例,对源代码中可能存在的缓冲区溢出漏洞进行漏洞测试,最终将测试结果告示网络管理人员,以便对传感器网络中不安全的源代码采取相应的改进措施,这样就有效防止缓冲区溢出漏洞引起的蠕虫病毒在网络中的蔓延、泛滥,从而提高传感器网络的安全性。

为了达到上述目的,本发明提供了一种传感器网络源代码缓冲区溢出漏洞检测系统,其特征在于:所述系统设有下述两种装置:

溢出漏洞分析装置,用于对传感器网络中源代码进行缓冲区溢出分析,设有顺序连接的安全威胁定位、污点分析和测试用例生成三个模块;其中,安全威胁定位模块负责扫描源代码和定位源代码中存在的安全威胁函数,并将扫描结果提交给污点分析模块;污点分析模块负责对该安全威胁函数进行污点分析,判断其中是否存在缓冲区溢出安全威胁,以便确定是否需要利用测试用例对缓冲区溢出漏洞进行测试;测试用例生成模块负责构造源代码缓冲区溢出漏洞的触发条件,并根据触发条件求解与生成相应的测试用例,然后提交给缓冲区溢出测试装置进行测试;

溢出漏洞测试装置,用于按照来自分析装置的测试用例,对源代码进行是否存在缓冲区溢出漏洞的测试,并将测试结果作出告示,以便对该不安全的代码采取改进措施;设有检测端和被检测端,检测端是内部安装测试用例的传感器节点,用于向被检测端发送触发缓冲区溢出漏洞的测试数据;被检测端是内部装有待检测的源代码的传感器节点,用于接收检测端发送的测试数据,并根据其接收数据后的现象来判断对应的源代码是否存在缓冲区溢出漏洞,再作出相应的检测结果告示。

为了达到上述目的,本发明还提供了一种传感器网络源代码缓冲区溢出漏洞检测系统的检测方法,其特征在于:所述方法包括下列操作步骤:

(1)将传感器网络中的源代码输入到溢出漏洞分析装置;

(2)溢出漏洞分析装置中的安全威胁定位模块对源代码进行扫描,判断是否存在安全威胁函数;如果不存在,结束该检测方法;如果存在,则定位源代码中的安全威胁函数,并将其提交到污点分析模块;

(3)污点分析模块对定位的安全威胁函数进行污点传播分析,即跟踪污点数据的流向,并运用污点传播理论分析该威胁函数中是否发生污点传播现象,如果未发生,结束该检测方法;如果发生,表示该源代码可能存在缓冲区溢出漏洞的安全威胁,需要利用测试用例对该溢出漏洞进行测试;

(4)测试用例生成模块构造源代码缓冲区溢出漏洞的触发条件,根据触发条件求解与生成测试用例,然后提交给溢出漏洞测试装置进行测试;

(5)溢出漏洞测试装置在被检测端安装被检测的源代码,在检测端安装测试用例,然后,由检测端向被检测端发送测试用例数据,根据被检测端接收测试用例数据后的现象判断该源代码是否存在缓冲区溢出漏洞,并将测试结果作出相应告示。

本发明是传感器网络源代码缓冲区溢出漏洞检测系统和方法,其创新的关键技术是:率先提出基于C语言和NesC语言的传感器网络源代码的缓冲区溢出检测的设备和方法。因传统的污点数据分析没有明确揭示污点数据所依赖的污点源,而本发明结合NesC语言和TinyOS操作系统的特点,应用污点传播思想,明确了污点源为接收的外来数据。另外,还缓冲区溢出漏洞检测基础上,提出了如何进行漏洞验证的方法。采用本发明检测出可能存在缓冲区溢出漏洞,就可以对漏洞进行验证;如果验证确认存在缓冲区溢出漏洞,再分析缓冲区溢出漏洞的产生原因与危害程度,生成漏洞检测报告,以便对源代码中不安全的程序语句进行改进和提出预防措施,有效防止缓冲区溢出漏洞引起的蠕虫病毒在网络中的蔓延、泛滥,增强源代码安全性,提高整个传感器网络系统的安全性。

本发明的优点如下:现有的基于源代码的缓冲区溢出检测方法大多是针对C、C++和java等高级语言,不适用于基于NesC的TinyOS传感器网络的检测。本发明首创解决了基于传感器网络的源代码缓冲区检测方法。本发明充分结合传感器网络使用的TinyOS与NesC语言特点,在进行缓冲区溢出检测前,首先定位源代码中存在的安全威胁,极大地缩小检测范围,减少检测的工作量,与基于PC的缓冲区溢出检测方法相比较,明显提供了检测效率。

附图说明

图1是本发明传感器网络源代码缓冲区溢出漏洞检测系统结构示意图。

图2是本发明传感器网络源代码缓冲区溢出漏洞检测系统的检测方法流程图。

图3是安全威胁定位模块的操作流程图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚,下面结合附图和实施例对本发明作进一步的详细描述。

本发明是源代码是采用C语言以及由C语言扩展的基于组件化的NesC语言编写的用于传感器网络的源程序。

参见图1,介绍本发明传感器网络源代码缓冲区溢出漏洞检测系统的结构组成。该系统包括下述两种装置:

溢出漏洞分析装置,用于对传感器网络中源代码进行缓冲区溢出分析,该装置设有顺序连接的安全威胁定位、污点分析和测试用例生成三个模块;其中,

安全威胁定位模块负责扫描源代码和定位源代码中存在的安全威胁函数,并将扫描结果提交给污点分析模块;

污点分析模块负责分析该安全威胁函数的污点,判断其中是否存在缓冲区溢出安全威胁,以便确定是否需要利用测试用例对缓冲区溢出漏洞进行测试;

测试用例生成模块负责构造源代码缓冲区溢出漏洞的触发条件,并根据触发条件求解与生成相应的测试用例,然后提交给缓冲区溢出测试装置进行测试。

溢出漏洞测试装置,用于按照来自分析装置的测试用例,对源代码进行缓冲区溢出漏洞的测试,并告示测试结果,以便对该不安全的代码采取改进措施;设有检测端和被检测端,检测端为内部安装测试用例的传感器节点,用于向被检测端发送触发缓冲区溢出漏洞的测试数据;被检测端为内部装有待检测的源代码的传感器节点,用于接收检测端发送的测试数据,并根据其接收数据后的现象来判断对应的源代码是否存在缓冲区溢出漏洞,再告示相应的检测结果。

参见图2,介绍本发明传感器网络源代码缓冲区溢出漏洞检测系统的检测方法,图中的①、②、③分别表示溢出漏洞分析装置中的安全威胁定位模块、污点分析模块和测试用例生成模块的各自操作流程。④表示溢出漏洞测试装置中的检测端和被检测端的操作流程,即该方法包括下述五个步骤:

步骤1,将传感器网络中的源代码输入到缓冲区溢出漏洞分析装置。

步骤2,缓冲区溢出漏洞分析装置先将源代码提交到安全威胁定位模块进行扫描,判断是否存在安全威胁函数,如果不存在,结束该检测方法;如果存在,定位源代码中的安全威胁函数,并将其提交到污点分析模块。

参见图3,具体说明该步骤2包括的以下操作内容:

(21)定义威胁函数集:在安全威胁定位模块预装由设定的传感器网络通信协议(包括主动消息协议AM(Active Message)、Zigbee协议和IPv6低功率无线个人区域网络协议6LoWPAN(IPv6 over Low power Wireless Personal Area Networks))的接收函数组成威胁函数集:因无线传感器网络中的传感器节点接收的外来“不可信”数据存在安全威胁,故将其所有可能的接收函数都定义为威胁函数,组成威胁函数集。

(22)提取源代码的函数集:安全威胁定位模块对源代码进行扫描,并提取该源代码中定义和调用的所有函数,组成源代码函数集;

(23)对两个函数集进行比较:将源代码函数集中的函数名与威胁函数集的函数名依次进行比较,如果存在相同的函数名,则记录该函数名和该函数在源代码中的行号,再将这些参数送至污点分析模块;反之,结束检测流程。

步骤3,污点分析模块对定位的安全威胁函数进行污点传播分析,即跟踪污点数据(即传感器节点的接收数据和对该接收数据进行处理后的数据)的流向,并运用污点传播理论分析与判断该威胁函数是否发生污点传播现象,如果未发生,结束该检测方法;如果发生,表示该源代码可能存在缓冲区溢出漏洞的安全威胁,需要利用测试用例对该溢出漏洞进行测试。

本发明应用的是下述传统的污点传播理论:对于设定源代码中的程序指令i、变量x、污点集合T,有:x∈dstsi,该dstsi为程序指令i的目的操作数集合,src[x]i为对于程序指令i和目的操作数为x的源操作数集合;若满足x∈dstsiΛ(y∈src[x]i|y∈T)≠Φ,即对于程序指令i、源操作数集合非空(即存在源操作数)且属于污点集合T时,就将目的操作数x添加到污点集合T中。这种添加操作被称为污点传播;若满足x∈dstsiΛ(y∈src[x]i|y∈T)=Φ,就将目的操作数x从污点集合T中移除。

该步骤3包括以下具体操作内容:

(31)初始化污点数据集:污点分析模块根据安全威胁函数及其位置,采集传感器节点的接收数据组成初始的污点数据集;其中的污点数据的注入点是威胁函数的所在位置;

(32)跟踪污点数据并运用污点传播理论分析:污点分析模块从每个污点数据的注入点开始,依次提取各程序指令的源操作数和目的操作数,利用污点传播理论对污点数据集中的元素进行添加或删除,判断是否发生污点传播现象,如果发生,表示源代码可能存在缓冲区溢出安全威胁,记录污点传播的指令位置;否则,结束该检测方法。

步骤4,测试用例生成模块构造源代码缓冲区溢出漏洞的触发条件,根据触发条件求解与生成测试用例,然后提交给缓冲区溢出测试端进行测试;

该步骤4包括以下操作内容:

(41)构造路径约束条件:为了生成威胁函数的程序流程图,测试用例生成模块计算从污点数据注入点到污点传播位置的路径条件;先在源代码中威胁函数的起始位置标记程序指令的行号,再将该程序中包括顺序结构、选择结构、循环结构的各种分支用基本单元结构表示,生成程序控制流程图;并在该流程图中统计从污点注入点到污点传播位置的所有路径,计算路径约束条件;

(42)构造缓冲区溢出的必要条件:为了测试缓冲区溢出漏洞,构造一段超长的包含跳转地址和shellcode的污点数据,其中的跳转地址用来覆盖威胁函数的返回地址,当威胁函数执行完毕,就自动返回到新的跳转地址,即跳转到shellcode地址处执行;shellcode是待注入的一段可执行的数据代码;

(43)求解约束条件:根据上述两个步骤得到的路径约束条件和缓冲区溢出的必要条件,求解与生成满足源代码缓冲区溢出条件的测试用例。

步骤5,溢出漏洞测试装置在被检测端安装被检测的源代码,在检测端安装测试用例,然后,由检测端向被检测端发送测试用例数据,在被检测端接收测试用例数据后,根据被检测端接收测试用例数据后的现象,判断该源代码是否存在缓冲区溢出漏洞,并将测试结果作出相应告示。

本发明已经进行了多次实施仿真试验,仿真试验的参数如下表所示。

 操作系统  TinyOS 系统语言  NesC 硬件条件  2个传感器节点(检测端A和被检测端B) 检测对象  基于NesC语言的传感器网络源代码 Shellcode功能  亮灯

本发明传感器网络缓冲区溢出检测方法实施例的操作步骤如下:

(1)溢出漏洞分析:应用本发明缓冲区溢出检测方法,对传感器网络中的节点的NesC源代码进行检测。对存在污点传播现象的NesC源代码求解与生成满足缓冲区溢出条件的测试用例。

(2)溢出漏洞测试:在检测端节点A安装测试用例,在被检测端节点B安装被检测的NesC源代码。由节点A向节点B发送测试用例数据。在节点B接收测试数据后,根据节点B的测试现象判断是否存在缓冲区溢出漏洞。如果B亮灯,说明节点B对应的NesC源代码存在缓冲区溢出漏洞;反之,不存在缓冲区溢出漏洞。

(3)告示测试结果:网管人员获知测试结果,对源代码采取改进措施。

(4)改进源代码措施:从检测出存在缓冲区溢出漏洞的NesC源代码中抽取某个源代码样本进行分析,分析已定位的安全威胁函数以及污点传播的程序指令,该指令功能是进行字符串拷贝,漏洞产生的原因是由于调用了不安全的字符串拷贝函数,对污点数据进行拷贝时没有进行边界检查,从而触发了缓冲区溢出漏洞。因此通过对这些字符串拷贝函数进行改进,或者替换成其它安全的函数,以提高NesC源代码的安全性。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号