CN101937395B - 一种用于漏洞检测的检测对象程序特征提取方法 - Google Patents
一种用于漏洞检测的检测对象程序特征提取方法 Download PDFInfo
- Publication number
- CN101937395B CN101937395B CN2010102866636A CN201010286663A CN101937395B CN 101937395 B CN101937395 B CN 101937395B CN 2010102866636 A CN2010102866636 A CN 2010102866636A CN 201010286663 A CN201010286663 A CN 201010286663A CN 101937395 B CN101937395 B CN 101937395B
- Authority
- CN
- China
- Prior art keywords
- detected object
- statement
- function
- state
- program
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
- 238000001514 detection method Methods 0.000 title claims abstract description 34
- 238000000605 extraction Methods 0.000 title claims abstract description 21
- 238000000034 method Methods 0.000 claims abstract description 32
- 238000004458 analytical method Methods 0.000 claims abstract description 7
- 230000006870 function Effects 0.000 claims description 120
- 230000008859 change Effects 0.000 claims description 97
- 238000006243 chemical reaction Methods 0.000 claims description 26
- 230000008569 process Effects 0.000 claims description 21
- 239000000284 extract Substances 0.000 claims description 10
- 230000009471 action Effects 0.000 claims description 9
- 230000008520 organization Effects 0.000 claims description 6
- 230000015654 memory Effects 0.000 claims description 4
- 241000208340 Araliaceae Species 0.000 claims description 3
- 235000005035 Panax pseudoginseng ssp. pseudoginseng Nutrition 0.000 claims description 3
- 235000003140 Panax quinquefolius Nutrition 0.000 claims description 3
- 230000006399 behavior Effects 0.000 claims description 3
- 235000008434 ginseng Nutrition 0.000 claims description 3
- 238000012882 sequential analysis Methods 0.000 claims description 3
- 238000004321 preservation Methods 0.000 claims 1
- 238000010586 diagram Methods 0.000 description 5
- 238000005516 engineering process Methods 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000005206 flow analysis Methods 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
Images
Landscapes
- Stored Programmes (AREA)
Abstract
一种用于漏洞检测的检测对象程序特征提取方法,包括步骤如下:1)漏洞载入流程,建立漏洞模型的数据结构;漏洞模型由漏洞状态机的状态的集合和操作的集合构成,状态表示状态机的状态,每个状态有状态号、类型和特征属性。2)程序载入特征分析提取流程,对经过gcc编译的软件代码进行抽象,构造用于漏洞模型检测的、基于检测对象的程序特征序列:把程序控制流图中与漏洞状态相关的程序特征信息提取出来,并以函数为单位进行组织;每个函数组织成若干个由检测对象索引的操作序列链表;本发明克服目前软件漏洞检测方法存在大量重复工作、影响检测速度、以及参数分析不准确的问题,以判断漏洞模型在代码中的存在性。
Description
技术领域
本发明涉及一种计算机软件的检测方法,尤其是软件漏洞检测的方法。
背景技术
软件因存在着隐藏的安全漏洞易于受到攻击而遭受损失,其安全威胁有不断增加的趋势。通过对软件代码进行漏洞检测,发现和消除软件中的安全漏洞是减少安全威胁、降低安全风险的重要手段之一。漏洞模型检测是一种具有代表性的代码漏洞检测方法。为进行基于漏洞状态机模型的漏洞检测,我们提出一种用于漏洞模型检测的程序特征提取方法,以供对待检测程序代码进行抽象、建立用于漏洞检测的程序特征模型。
目前的漏洞模型软件漏洞检测方法在检测过程中存在着重复检查、不够准确等缺点,检测的速度和准确性显得不足,影响着检测方法的适用性。对此,我们提出一种用于漏洞模型检测的程序特征提取方法,该方法避免采用原有方法模拟程序执行流程的检测顺序,只提取与漏洞模型检测的程序操作特征,注重对重点参数的检测,以提高软件漏洞检测的速度和准确性。
发明内容
本发明目的是:面向基于漏洞模型的软件漏洞模型检测的目标,针对目前软件漏洞检测方法存在大量重复工作、影响检测速度、以及参数分析不准确的问题,基于软件漏洞的状态机模型,利用控制流图和数据流分析技术,以重点检测对象为中心,提取与软件漏洞的状态机模型相关的程序特征,对软件代码进行抽象建模,可用于对其进行漏洞静态检测,以判断漏洞模型在代码中的存在性。
为实现本发明的所述目的,本发明提供一种用于软件漏洞模型检测、基于检测对象的程序特征提取方法,用于漏洞检测的检测对象程序特征提取方法,包括主要步骤:
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:取出顺序结构的下一后继语句块放入语句块链表表尾,后继语句块置标记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:顺序取出该语句块的一条语句为当前语句;步骤52:判断是否取到,若取到转步骤53,否则转步骤5e;步骤53:查操作转换表,判断该语句是否为产生型操作(语句为操作转换表中操作且操作的特征为产生),是则转步骤54,否则转步骤55;步骤53a:该操作的检测对象指示所指的参数为新产生的检测对象(为原始对象);判断新产生的原始对象是否已在本地检测对象集合中。是则转步骤55,否则转步骤54;步骤54:将该原始对象加入到函数的本地检测对象集合中;建立该原始对象的操作序列,操作序列的首结点为本语句的操作;建立该原始对象的关系集合,且初始化为空;步骤55:判断该语句是否为赋值,且右值表达式中含有检测对象(包括输入检测对象和本地检测对象);是则转步骤56,否则转步骤57;步骤56:被赋值变量为关系检测对象,右值中检测对象为传递检测对象。找到传递检测对象所属的原始对象(传递检测对象在原始对象的关系集合中),加入关系检测对象到原始对象的关系集合中;步骤57:查操作转换表,判断该语句操作是否在漏洞状态机的操作集合中(语句为操作转换表中操作);是则转步骤58,否则转步骤59;步骤58:创建该语句操作的操作链表结点:置结点的操作为该语句的操作,检测对象为操作的检测对象指示所指的参数;找到该检测对象所属的原始对象(该检测对象在原始对象的关系集合中),将该语句的操作加到原始对象的序列尾部;步骤59:判断该语句是否为函数调用,是则转步骤5a,否则转步骤5b;步骤5a: 函数调用语句处理;步骤5b:转步骤51;步骤5e为结束状态;
步骤5a为函数调用语句处理流程的详细步骤;步骤60是起始状态。步骤61:函数调用检测对象集合初始化为空;步骤62:顺序取调用函数的一个参数;步骤63:判断是否取到,若没取到,则转步骤66;步骤64:判断参数是否为检测对象(在检测对象集合中),若不是则转步骤62,是则转步骤65;步骤65:查找该检测对象的原始对象,将本语句的函数调用加到原始对象的操作序列尾部;将此检测对象对应的形参加入到函数调用检测对象集合,转步骤62;步骤66:若函数调用检测对象集合为空,则转步骤69;步骤67:置提取处理函数为被调用函数,输入检测对象集合为函数调用检测对象集合;步骤68:对提取处理函数进行程序特征抽取,即步骤45一个语句块的语句操作提取处理流程的处理流程;步骤69:结束状态,函数调用处理结束。几次循环后,步骤63总会转向步骤66,跳出循环。
本发明有益效果:这是一种用于软件漏洞模型检测、基于检测对象的程序特征提取方法,克服目前软件漏洞检测方法存在大量重复工作、影响检测速度、以及参数分析不准确的问题,通过提取与软件漏洞的状态机模型相关的程序特征,对软件代码进行抽象建模,用于对其进行漏洞静态检测,以判断漏洞模型在代码中的存在性。
附图说明
图1 用于漏洞模型检测的程序特征提取示意图
图2 漏洞载入流程图
图3 程序载入特征提取流程图
图4 函数程序特征提取流程图
图5 语句块的语句操作提取处理流程图
图6 函数调用语句处理流程图。
具体实施方式
本发明方法工作流程如图1-图6所示。
图1所示为本方法实施的整体结构和工作原理。本方法的目的是根据漏洞模型所涉及的操作对待检测程序进行分析过滤,得到与漏洞检测相关的程序特征。为提高处理速度,需要将漏洞模型从数据库中装入内存,以便在分析程序时,作为参考依据。程序载入和特征分析过程,根据漏洞模型相关操作的信息抽取必要的程序操作,完成对程序的抽象,得到漏洞相关的程序特征,即基于检测对象的操作序列。
图2表示漏洞模型载入流程。漏洞模型由漏洞状态机的状态的集合和操作的集合构成。状态表示状态机的状态。每个状态有状态号、类型和特征等属性。类型是指漏洞的分类,如文件、内存等类别。特征有开始、过渡和漏洞等值。操作表示引起状态发生变化的动作,每个操作具有操作号、动作、特征、检测对象指示、原状态和新状态等属性。操作的动作指具体的程序动作。操作的特征有产生、转移和使用等值。检测对象为程序中漏洞相关操作所涉及的需检测的变量,检测对象指示为操作涉及的参数编号。状态、操作的集合分别存储在数据库中的一个表中:状态表和操作表。为方便模型检测处理,在内存中建立由操作动作进行检索的操作转换表。每个操作动作对应一个链表,链表的结点为一个操作,表示一个原状态到新状态的转换关系。具体步骤如下。
步骤20是起始状态。步骤21在数据库操作表中取一个操作的记录。步骤22若取到转步骤23,否则转步骤26。步骤23判断取得该操作动作的操作转换表表头是否已存在。若已存在转步骤24,否则转步骤25。步骤24创建一个操作结点,结点的操作号、特征和检测对象指示分别为该操作的操作号、特征和检测对象指示。把此结点连接到对应的操作动作操作转换表的链表尾部,转步骤21。步骤25创建该操作动作的操作转换表表头,创建一个操作结点,结点的操作号、特征和检测对象指示分别为该操作的操作号、特征和检测对象指示。把此结点作为该操作动作的第一个结点,转步骤21。步骤26为结束状态,操作转换表建立完成。
图3表示程序载入和特征提取流程。把程序控制流图中与漏洞状态相关的程序特征信息,即操作序列提取出来,并以函数为单位进行组织。每个函数组织成若干个由检测对象索引的操作序列链表。链表的每个结点表示一个与漏洞状态相关的操作或函数。一方面过滤去除与漏洞检测无关的语句,另一方面,使函数简化控制流到语句级,并使操作序列化,便于检测处理。
程序特征提取处理从main函数开始进行,其流程如下。步骤31是起始状态。步骤32为初始化处理:设置所有函数的访问标记为OFF(值为0);置提取处理函数为函数main,函数的输入检测对象集合和本地检测对象集合都为空。步骤33对提取处理函数进行函数程序特征提取。处理流程见图4。步骤34存储提取的程序特征到磁盘。将全部函数的程序特征,包括检测对象集合(含输入检测对象集合和本地检测对象集合)及其操作序列链表写入磁盘保存。步骤36为结束状态。此时,所有函数的操作序列链表已经建立完成,可以作为程序操作序列分析之用。
图4为函数程序特征提取流程图,表示对处理函数进行函数程序特征提取的过程。步骤40是起始状态。步骤41在程序控制流图中取出处理函数并构造其数据结构。步骤41a判断处理函数的访问标记为ON(值为1)。是则转步骤4e;否则转步骤42。步骤42函数处理初始化:创建该函数的语句块链表表头(此时表头也是链表表尾),以及操作序列链表表头。为函数的输入检测对象集合中每个检测对象(为原始对象),建立原始对象的操作序列(初始无结点)和关系集合(初始化为空)。步骤43语句块链表当前语句块向后移一次,而首次执行是使当前语句块指向函数的头语句块。步骤44判断语句块是否为空。是则转步骤4e,否则转步骤45。步骤45进行当前语句块的分析提取处理,处理流程见图5。步骤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为函数处理结束状态。此时,提取处理函数的检测对象集合(包括输入检测对象集合和本地检测对象集合)及其操作序列链表已经建立完成。
图5表示一个语句块的语句操作提取处理流程。步骤50是起始状态。步骤51顺序取出该语句块的一条语句为当前语句。步骤52判断是否取到。若取到转步骤53,否则转步骤5e。步骤53查操作转换表,判断该语句是否为产生型操作(语句为操作转换表中操作且操作的特征为产生)。是则转步骤54,否则转步骤55。步骤53a该操作的检测对象指示所指的参数为新产生的检测对象(为原始对象)。判断新产生的原始对象是否已在本地检测对象集合中。是则转步骤55,否则转步骤54。步骤54将该原始对象加入到函数的本地检测对象集合中;建立该原始对象的操作序列,操作序列的首结点为本语句的操作;建立该原始对象的关系集合,且初始化为空。步骤55判断该语句是否为赋值,且右值表达式中含有检测对象(包括输入检测对象和本地检测对象)。是则转步骤56,否则转步骤57。步骤56被赋值变量为关系检测对象,右值中检测对象为传递检测对象。找到传递检测对象所属的原始对象(传递检测对象在原始对象的关系集合中),加入关系检测对象到原始对象的关系集合中。步骤57查操作转换表,判断该语句操作是否在漏洞状态机的操作集合中(语句为操作转换表中操作)。是则转步骤58,否则转步骤59。步骤58创建该语句操作的操作链表结点:置结点的操作为该语句的操作,检测对象为操作的检测对象指示所指的参数;找到该检测对象所属的原始对象(该检测对象在原始对象的关系集合中),将该语句的操作加到原始对象的序列尾部。步骤59判断该语句是否为函数调用。是则转步骤5a,否则转步骤5b。步骤5a 函数调用语句处理,处理流程见图6。步骤5b转步骤51。步骤5e为结束状态,一个语句块处理结束。
图6 为函数调用语句处理流程,表示函数调用语句操作提取处理的过程。步骤60是起始状态。步骤61函数调用检测对象集合初始化为空。步骤62顺序取调用函数的一个参数。步骤63判断是否取到。若没取到,则转步骤66。步骤64判断参数是否为检测对象(在检测对象集合中)。若不是,则转步骤62,是则转步骤65。 步骤65查找该检测对象的原始对象,将本语句的函数调用加到原始对象的操作序列尾部;将此检测对象对应的形参加入到函数调用检测对象集合。转步骤62。步骤66若函数调用检测对象集合为空,则转步骤69。步骤67置提取处理函数为被调用函数,输入检测对象集合为函数调用检测对象集合。步骤68对提取处理函数进行程序特征抽取,处理流程见图4。步骤69是结束状态,函数调用处理结束。
Claims (1)
1. 用于漏洞检测的检测对象程序特征提取方法,其特征是包括步骤如下:
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:判断语句块是否为空,是则转步骤4d,否则转步骤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:顺序取出该语句块的一条语句为当前语句;
步骤52:判断是否取到,若取到转步骤53,否则转步骤5e;
步骤53:查操作转换表,判断该语句是否为产生型操作、语句为操作转换表中操作且操作的特征为产生型,是则转步骤53a,否则转步骤55;
步骤53a:该操作的检测对象指示所指的参数为新产生的检测对象;判断新产生的原始对象是否已在本地检测对象集合中;是则转步骤55,否则转步骤54;
步骤54:将该原始对象加入到函数的本地检测对象集合中;建立该原始对象的操作序列,操作序列的首结点为本语句的操作;建立该原始对象的关系集合,且初始化为空;
步骤55:判断该语句是否为赋值,且右值表达式中含有检测对象、包括输入检测对象和本地检测对象;是则转步骤56,否则转步骤57;
步骤56:被赋值变量为关系检测对象,右值中检测对象为传递检测对象,找到传递检测对象所属的原始对象、传递检测对象在原始对象的关系集合中,加入关系检测对象到原始对象的关系集合中;
步骤57:查操作转换表,判断该语句操作是否在漏洞状态机的操作集合中;是则转步骤58,否则转步骤59;
步骤58:创建该语句操作的操作链表结点:置结点的操作为该语句的操作,检测对象为操作的检测对象指示所指的参数;找到该检测对象所属的原始对象,将该语句的操作加到原始对象的序列尾部;
步骤59:判断该语句是否为函数调用,是则转步骤5a,否则转步骤5b;
步骤5a: 函数调用语句处理;
步骤5b:转步骤51;步骤5e为结束状态;
步骤5a为函数调用语句处理流程的详细步骤;
步骤60:起始状态;
步骤61:函数调用检测对象集合初始化为空;
步骤62:顺序取调用函数的一个参数;
步骤63:判断是否取到,若没取到,则转步骤66;
步骤64:判断参数是否为检测对象,若不是则转步骤62,是则转步骤65;
步骤65:查找该检测对象的原始对象,将本语句的函数调用加到原始对象的操作序列尾部;将此检测对象对应的形参加入到函数调用检测对象集合,转步骤62;
步骤66:若函数调用检测对象集合为空,则转步骤69;
步骤67:置提取处理函数为被调用函数,输入检测对象集合为函数调用检测对象集合;
步骤68:对提取处理函数进行程序特征抽取,即步骤45一个语句块的语句操作提取处理流程的处理流程;
步骤69:结束状态,函数调用处理结束。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010102866636A CN101937395B (zh) | 2010-09-20 | 2010-09-20 | 一种用于漏洞检测的检测对象程序特征提取方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010102866636A CN101937395B (zh) | 2010-09-20 | 2010-09-20 | 一种用于漏洞检测的检测对象程序特征提取方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101937395A CN101937395A (zh) | 2011-01-05 |
CN101937395B true CN101937395B (zh) | 2012-07-25 |
Family
ID=43390735
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2010102866636A Expired - Fee Related CN101937395B (zh) | 2010-09-20 | 2010-09-20 | 一种用于漏洞检测的检测对象程序特征提取方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101937395B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103164331B (zh) * | 2011-12-15 | 2016-03-30 | 阿里巴巴集团控股有限公司 | 一种应用程序的漏洞检测方法和装置 |
CN102929614A (zh) * | 2012-10-16 | 2013-02-13 | 南京大学 | 一种用于漏洞检测的可调对象程序特征提取方法 |
CN104937558B (zh) * | 2013-01-21 | 2016-11-09 | 日产自动车株式会社 | 变量访问一贯性检查装置、变量访问一贯性检查方法 |
CN103744682B (zh) * | 2014-01-24 | 2017-02-08 | 中国科学院自动化研究所 | 一种分开编译异构混编程序的方法和系统 |
CN105740707B (zh) * | 2016-01-20 | 2019-11-05 | 北京京东尚科信息技术有限公司 | 恶意文件的识别方法和装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101373506A (zh) * | 2008-10-22 | 2009-02-25 | 南京大学 | 一种基于漏洞模型的软件漏洞模型检测方法 |
CN101388055A (zh) * | 2008-10-22 | 2009-03-18 | 南京大学 | 一种用于漏洞模型检测的程序操作特征提取方法 |
-
2010
- 2010-09-20 CN CN2010102866636A patent/CN101937395B/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101373506A (zh) * | 2008-10-22 | 2009-02-25 | 南京大学 | 一种基于漏洞模型的软件漏洞模型检测方法 |
CN101388055A (zh) * | 2008-10-22 | 2009-03-18 | 南京大学 | 一种用于漏洞模型检测的程序操作特征提取方法 |
Non-Patent Citations (1)
Title |
---|
张 林,曾庆凯.软件安全漏洞的静态检测技术.《计 算 机 工 程》.2008,第34 卷(第12 期), * |
Also Published As
Publication number | Publication date |
---|---|
CN101937395A (zh) | 2011-01-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101894065B (zh) | 证明并发处理环境内的执行跟踪的正确性的系统和方法 | |
CN102054149B (zh) | 一种恶意代码行为特征提取方法 | |
CN101937395B (zh) | 一种用于漏洞检测的检测对象程序特征提取方法 | |
CN101388055B (zh) | 一种用于漏洞模型检测的程序操作特征提取方法 | |
CN111475820B (zh) | 基于可执行程序的二进制漏洞检测方法、系统及存储介质 | |
CN113672515A (zh) | 一种基于符号执行的wasm智能合约漏洞检测方法 | |
CN109145534B (zh) | 针对软件虚拟机保护的反混淆系统及方法 | |
CN104063220B (zh) | 基于文件的Linux基础软件依赖关系分析方法 | |
CN107292168A (zh) | 检测程序代码的方法及装置、服务器 | |
CN105446705A (zh) | 用于确定配置文件的特性的方法和装置 | |
CN108491228A (zh) | 一种二进制漏洞代码克隆检测方法及系统 | |
CN109918296A (zh) | 软件自动化测试方法及装置 | |
CN104866764B (zh) | 一种基于对象引用图的Android手机恶意软件检测方法 | |
CN116361810A (zh) | 一种基于符号执行的智能合约漏洞检测方法 | |
Buinevich et al. | Method for partial recovering source code of telecommunication devices for vulnerability search | |
CN105487983A (zh) | 基于智能路径引导的敏感点逼近方法 | |
CN116150757A (zh) | 一种基于cnn-lstm多分类模型的智能合约未知漏洞检测方法 | |
CN101930401B (zh) | 一种基于检测对象的软件漏洞模型检测方法 | |
CN103235757B (zh) | 基于自动化造数对输入域测试对象进行测试的装置和方法 | |
Stephan et al. | Identifying instances of model design patterns and antipatterns using model clone detection | |
CN108469997B (zh) | 一种基于动态特征的自定义堆管理函数的自动识别方法 | |
CN116702157B (zh) | 一种基于神经网络的智能合约漏洞检测方法 | |
CN103793653A (zh) | 一种基于树优化的程序依赖关系分析方法及系统 | |
CN117235745A (zh) | 基于深度学习工控漏洞挖掘方法、系统、设备和存储介质 | |
CN102929614A (zh) | 一种用于漏洞检测的可调对象程序特征提取方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20120725 Termination date: 20150920 |
|
EXPY | Termination of patent right or utility model |