当前位置: 首页 > 专利查询>南京大学专利>正文

一种用于漏洞检测的检测对象程序特征提取方法技术

技术编号:4100629 阅读:241 留言:0更新日期:2012-04-11 18:40
一种用于漏洞检测的检测对象程序特征提取方法,包括步骤如下:1)漏洞载入流程,建立漏洞模型的数据结构;漏洞模型由漏洞状态机的状态的集合和操作的集合构成,状态表示状态机的状态,每个状态有状态号、类型和特征属性。2)程序载入特征分析提取流程,对经过gcc编译的软件代码进行抽象,构造用于漏洞模型检测的、基于检测对象的程序特征序列:把程序控制流图中与漏洞状态相关的程序特征信息提取出来,并以函数为单位进行组织;每个函数组织成若干个由检测对象索引的操作序列链表;本发明专利技术克服目前软件漏洞检测方法存在大量重复工作、影响检测速度、以及参数分析不准确的问题,以判断漏洞模型在代码中的存在性。

【技术实现步骤摘要】

本专利技术涉及一种计算机软件的检测方法,尤其是软件漏洞检测的方法。
技术介绍
软件因存在着隐藏的安全漏洞易于受到攻击而遭受损失,其安全威胁有不断增加 的趋势。通过对软件代码进行漏洞检测,发现和消除软件中的安全漏洞是减少安全威胁、降 低安全风险的重要手段之一。漏洞模型检测是一种具有代表性的代码漏洞检测方法。为 进行基于漏洞状态机模型的漏洞检测,我们提出一种用于漏洞模型检测的程序特征提取方 法,以供对待检测程序代码进行抽象、建立用于漏洞检测的程序特征模型。目前的漏洞模型软件漏洞检测方法在检测过程中存在着重复检查、不够准确等缺 点,检测的速度和准确性显得不足,影响着检测方法的适用性。对此,我们提出一种用于漏 洞模型检测的程序特征提取方法,该方法避免采用原有方法模拟程序执行流程的检测顺 序,只提取与漏洞模型检测的程序操作特征,注重对重点参数的检测,以提高软件漏洞检测 的速度和准确性。
技术实现思路
本专利技术目的是面向基于漏洞模型的软件漏洞模型检测的目标,针对目前软件漏 洞检测方法存在大量重复工作、影响检测速度、以及参数分析不准确的问题,基于软件漏洞 的状态机模型,利用控制流图和数据流分析技术,以重点检测对象为中心,提取与软件漏洞 的状态机模型相关的程序特征,对软件代码进行抽象建模,可用于对其进行漏洞静态检测, 以判断漏洞模型在代码中的存在性。为实现本专利技术的所述目的,本专利技术提供一种用于软件漏洞模型检测、基于检测对 象的程序特征提取方法,用于漏洞检测的检测对象程序特征提取方法,包括主要步骤1)漏洞载入流程,建立漏洞模型的数据结构;漏洞模型由漏洞状态机的状态的集合和 操作的集合构成,状态表示状态机的状态,每个状态有状态号、类型和特征属性。操作表示 引起状态发生变化的动作,每个操作具有操作号、动作、特征、检测对象指示、原状态和新状 态属性;操作的动作指具体的程序动作。操作的特征有产生、转移和使用等值;软件漏洞 模型检测对象为程序中漏洞相关操作所涉及的需检测的变量,软件漏洞模型检测对象指示 为操作涉及的参数编号;状态、操作的集合分别存储在数据库中的一个表中状态表和操 作表;为方便模型检测处理,在内存中建立由操作动作进行检索的操作转换表;每个操作 动作对应一个链表,链表的结点为一个操作,表示一个原状态到新状态的转换关系步骤20 起始状态;步骤21 在数据库操作表中取一个操作的记录;步骤22 若取到 转步骤23,否则转步骤26 ;步骤23判断取得该操作动作的操作转换表表头是否已存在;若 已存在转步骤24,否则转步骤25 ;步骤24 创建一个操作结点,结点的操作号、特征和检测 对象指示分别为该操作的操作号、特征和检测对象指示;把此结点连接到对应的操作动作 操作转换表的链表尾部,转步骤21 ;步骤25 创建该操作动作的操作转换表表头,创建一个4操作结点,结点的操作号、特征和检测对象指示分别为该操作的操作号、特征和检测对象指 示;把此结点作为该操作动作的第一个结点,转步骤21 ;步骤26为结束状态,操作转换表建 立完成;2)程序载入特征分析提取流程,对经过gcc编译的软件代码进行抽象,构造用于漏洞 模型检测的、基于检测对象的程序特征序列把程序控制流图中与漏洞状态相关的程序特征信息,即操作序列提取出来,并以函数 为单位进行组织;每个函数组织成若干个由检测对象索引的操作序列链表;链表的每个结 点表示一个与漏洞状态相关的操作或函数;一方面过滤去除与漏洞检测无关的语句,另一 方面,使函数简化控制流到语句级,并使操作序列化,便于检测处理;程序特征提取处理从main函数开始进行,其流程如下,步骤31 起始状态;步骤32 为 初始化处理设置所有函数的访问标记为OFF,值为0 ;置提取处理函数为函数main,函数的 输入检测对象集合和本地检测对象集合都为空;步骤33 对提取处理函数进行函数程序特 征提取;步骤34 存储提取的程序特征到磁盘,将全部函数的程序特征,包括检测对象集合 (含输入检测对象集合和本地检测对象集合)及其操作序列链表写入磁盘保存;步骤36 结 束状态,此时,所有函数的操作序列链表已经建立完成,作为程序操作序列分析之用;步骤33的函数程序特征提取流程的详细步骤是,表示对处理函数进行函数程序特征 提取的过程;步骤40 起始状态,步骤41 在程序控制流图中取出处理函数并构造其数据 结构。步骤41a判断处理函数的访问标记为0N,值为1,是则转步骤4e,否则转步骤42 ;步 骤42 函数处理初始化创建该函数的语句块链表表头,此时表头也是链表表尾,以及操作 序列链表表头;为函数的输入检测对象集合中每个检测对象(为原始对象),建立原始对象 的操作序列,初始无结点,和关系集合(初始化为空);步骤43 语句块链表当前语句块向后 移一次,而首次执行是使当前语句块指向函数的头语句块;步骤44 判断语句块是否为空, 是则转步骤4e,否则转步骤45 ;步骤45 进行当前语句块的分析提取处理;步骤46 判断当 前语句块的后继是否是顺序结构,是则转步骤47,否则转步骤48 ;步骤47 取出顺序结构的 下一后继语句块放入语句块链表表尾,后继语句块置标记DONE(值为1);若后继语句块已标 记DONE,不再放入,转步骤4d ;步骤48 判断当前语句块的后继是否是if结构,是则转步骤 49,否则转步骤4a ;步骤49 取出if语句为真和为假时的后继语句块依次放入语句块链表 表尾,后继语句块置标记DONE ;若后继语句块已标记DONE,不再放入,转步骤4d ;步骤4a 判断当前语句块的后继是否是switch结构,是则转步骤4b,否则转步骤4d ;步骤4b 取出 switch分支语句中的一个语句块放入语句块链表表尾,分支后继语句块置标记DONE ;若后 继语句块已标记DONE,不再放入;步骤4c 对取出的switch分支语句判断是否所有语句块 都已处理完毕,是则转步骤4d,否则转步骤4b ;步骤4d 判断语句块链表当前语句块是否是 链尾(此时函数的操作序列链表已经建成),是则转步骤4e,否则转步骤43 ;步骤4e 设置 处理函数的访问标记为0N(值为1);步骤4f 为函数处理结束状态;此时,提取处理函数的 检测对象集合(包括输入检测对象集合和本地检测对象集合)及其操作序列链表已经建立 完成;步骤45的一个语句块的语句操作提取处理流程的详细步骤是步骤50 起始状态;步 骤51 顺序取出该语句块的一条语句为当前语句;步骤52 判断是否取到,若取到转步骤 53,否则转步骤5e ;步骤53 查操作转换表,判断该语句是否为产生型操作(语句为操作转的特征为产生),是则转步骤54,否则转步骤55 ;步骤53a 该操作的检测 对象指示所指的参数为新产生的检测对象(为原始对象);判断新产生的原始对象是否已在 本地检测对象集合中。是则转步骤55,否则转步骤54 ;步骤54 将该原始对象加入到函数 的本地检测对象集合中;建立该原始对象的操作序列,操作序列的首结点为本语句的操作; 建立该原始对象的关系集合,且初始化为空;步骤55 判断该语句是否为赋值,且右值表达 式中含有检测对象(包括输入检测对象和本地检测对象);是则转步骤56,否则转步骤57 ;步 骤56 被赋值变量为关系检测本文档来自技高网...

【技术保护点】
用于漏洞检测的检测对象程序特征提取方法,其特征是包括主要步骤如下:1)漏洞载入流程,建立漏洞模型的数据结构;漏洞模型由漏洞状态机的状态的集合和操作的集合构成,状态表示状态机的状态,每个状态有状态号、类型和特征属性;操作表示引起状态发生变化的动作,每个操作具有操作号、动作、特征、检测对象指示、原状态和新状态属性;操作的动作指具体的程序动作;操作的特征有产生、转移和使用等值; 软件漏洞模型检测对象为程序中漏洞相关操作所涉及的需检测的变量,软件漏洞模型检测对象指示为操作涉及的参数编,否则转步骤42;步骤42:函数处理初始化:创建该函数的语句块链表表头,此时表头也是链表表尾,以及操作序列链表表头;为函数的输入检测对象集合中每个检测对象,建立原始对象的操作序列,初始无结点,和关系集合、关系集合的初始化为空;步骤43:语句块链表当前语句块向后移一次,而首次执行是使当前语句块指向函数的头语句块;步骤44:判断语句块是否为空,是则转步骤4e,否则转步骤45;步骤45:进行当前语句块的分析提取处理;步骤46:判断当前语句块的后继是否是顺序结构,是则转步骤47,否则转步骤48;步骤47:取出顺序结构的下一后继语句块放入语句块链表表尾,后继语句块置标记DONE、值为1;若后继语句块已标记DONE,不再放入,转步骤4d;步骤48:判断当前语句块的后继是否是if结构,是则转步骤49,否则转步骤4a;步骤49:取出if语句为真和为假时的后继语句块依次放入语句块链表表尾,后继语句块置标记DONE;若后继语句块已标记DONE,不再放入,转步骤4d;步骤4a:判断当前语句块的后继是否是switch结构,是则转步骤4b,否则转步骤4d;步骤4b:取出switch分支语句中的一个语句块放入语句块链表表尾,分支后继语句块置标记DONE;若后继语句块已标记DONE,不再放入;步骤4c:对取出的switch分支语句判断是否所有语句块都已处理完毕,是则转步骤4d,否则转步骤4b;步骤4d:判断语句块链表当前语句块是否是链尾、此时函数的操作序列链表已经建成,是则转步骤4e,否则转步骤43;步骤4e:设置处理函数的访问标记为ON(值为1);步骤4f:为函数处理结束状态;此时,提取处理函数的检测对象集合、包括输入检测对象集合和本地检测对象集合及其操作序列链表已经建立完成;步骤45的一个语句块的语句操作提取处理流程的详细步骤是:步骤50:起始状态;步骤51:顺序取...

【技术特征摘要】
用于漏洞检测的检测对象程序特征提取方法,其特征是包括主要步骤如下1)漏洞载入流程,建立漏洞模型的数据结构;漏洞模型由漏洞状态机的状态的集合和操作的集合构成,状态表示状态机的状态,每个状态有状态号、类型和特征属性;操作表示引起状态发生变化的动作,每个操作具有操作号、动作、特征、检测对象指示、原状态和新状态属性;操作的动作指具体的程序动作;操作的特征有产生、转移和使用等值; 软件漏洞模型检测对象为程序中漏洞相关操作所涉及的需检测的变量,软件漏洞模型检测对象指示为操作涉及的参数编号;状态、操作的集合分别存储在数据库中的一个表中状态表和操作表;为方便模型检测处理,在内存中建立由操作动作进行检索的操作转换表;每个操作动作对应一个链表,链表的结点为一个操作,表示一个原状态到新状态的转换关系步骤20起始状态;步骤21在数据库操作表中取一个操作的记录;步骤22若取到转步骤23,否则转步骤26;步骤23判断取得该操作动作的操作转换表表头是否已存在;若已存在转步骤24,否则转步骤25;步骤24创建一个操作结点,结点的操作号、特征和检测对象指示分别为该操作的操作号、特征和检测对象指示;把此结点连接到对应的操作动作操作转换表的链表尾部,转步骤21;步骤25创建该操作动作的操作转换表表头,创建一个操作结点,结点的操作号、特征和检测对象指示分别为该操作的操作号、特征和检测对象指示;把此结点作为该操作动作的第一个结点,转步骤21;步骤26为结束状态,操作转换表建立完成;2)程序载入特征分析提取流程,对经过gcc编译的软件代码进行抽象,构造用于漏洞模型检测的、基于检测对象的程序特征序列把程序控制流图中与漏洞状态相关的程序特征信息,即操作序列提取出来,并以函数为单位进行组织;每个函数组织成若干个由检测对象索引的操作序列链表;链表的每个结点表示一个与漏洞状态相关的操作或函数;一方面过滤去除与漏洞检测无关的语句,另一方面,使函数简化控制流到语句级,并使操作序列化,便于检测处理;程序特征提取处理从main函数开始进行,其流程如下,步骤31起始状态;步骤32为初始化处理设置所有函数的访问标记为OFF,值为0;置提取处理函数为函数main,函数的输入检测对象集合和本地检测对象集合都为空;步骤33对提取处理函数进行函数程序特征提取;步骤34存储提取的程序特征到磁盘,将全部函数的程序特征,包括检测对象集合、含输入检测对象集合和本地检测对象集合及其操作序列链表写入磁盘保存;步骤36结束状态,此时,所有函数的操作序列链表已经建立完成,作为程序操作序列分析之用;步骤33的函数程序特征提取流程的详细步骤是,表示对处理函数进行函数程序特征提取的过程;步骤40起始状态;步骤41在程序控制流图中取出处理函数并构造其数据结构;步骤41a判断处理函数的访问标记为ON,值为1,是则转步骤4e,否则转步骤42;步骤42函数处理初始化创建该函数的语句块链表表头,此时表头也是链表表尾,以及操作序列链表表头;为函数的输入检测对象集合中每个检测对象,建立原始对象的操作序列,初始无结点,和关系集合、关系集合的初始化为空;步骤43语句块链表当前语句块向后移一次,而首次执行是使当前语句块指向函数的头语句块;步骤44判断语句块是否为空,是则转步骤4e,否则转步骤45;步骤45进行当前语句块的分析提取处理;步骤46判断当前语句块的后继是否是顺序结构,是则转步骤47,否则转步骤48;步骤47取出顺序结构的下一后...

【专利技术属性】
技术研发人员:曾庆凯
申请(专利权)人:南京大学
类型:发明
国别省市:84[中国|南京]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1