基于相似度判定的嵌入式操作系统内核版本识别方法

文档序号:6371396阅读:247来源:国知局
专利名称:基于相似度判定的嵌入式操作系统内核版本识别方法
技术领域
本发明涉及一种操作系统内核版本识别方法,特别是涉及一种基于相似度判定的嵌入式操作系统内核版本识别方法。背景技术
在当前数字信息技术和网络技术高速发展的后PC时代,嵌入式系统已经广泛地渗透到科学研究、工程设计、军事技术、工业产业以及人们日常生活的方方面面中,如汽车、飞机、武器等行业中的工业控制核心电子设备,以及安全路由器、加密网关、防火墙等网络安全通信设施 的关键嵌入式设备。对嵌入式设备进行逆向分析有助于吸收借鉴其它嵌入式电子设备的技术,提高自我设计制造能力,进而提升产品的核心竞争能力。此外,在军事领域中有利于掌握对手的武器装备技术,提高军事信息对抗能力。嵌入式设备中的固件代码是指存储于设备的ROM、FLASH等存储器中的二进制程序,包含了该设备使用的操作系统代码、文件系统和用户代码。通过对固件进行逆向分析可以理解用户代码的功能模块,组成状况以及运作方式,为嵌入式设备的解剖分析提供有力的支撑。操作系统内核版本识别是嵌入式设备固件逆向分析的重要步骤,在固件代码逆向分析的过程中,明确操作系统的类型是必要的前提和基础,在此基础上才能针对相应的操作系统及用户软件展开解读与分析。由于电子设备应用领域千差万别,不同嵌入式系统所采用的操作系统类型及内核版本也存在相应的差异。如果在分析工作之前能够确定操作系统及其版本,就可以利用公开的内核源码、技术手册等资料辅助分析,使分析工作更具有针对性,从而提高分析工作的准确性和效率,因此操作系统内核版本分析具有重要作用和意义。传统的操作系统内核版本识别方法是对固件中特定的字符串进行匹配,以嵌入式实时操作系统VxWorks为例,其固件中通常会存在“VxWorks”的字符串。然而这种方法存在一定的局限性首先,这种方法通常使用人工分析,缺少一个自动化的识别工具;其次,在某些特殊的嵌入式设备中,操作系统信息是不公开的,开发者会将这些标识系统类型的关键字擦除,以达到隐藏操作系统信息的目的;最后,这种方法只能针对部分操作系统,缺乏通用性。另一种方法是根据固件二进制特征进行识别,但由于二进制内核映像是纯二进制代码,不包含有可执行文件的结构化信息、符号和调试信息,不利于进行逆向分析;其次由于固件开发过程中内核编译阶段采用的编译器版本不对称,导致即使相同版本内核源码编译出的内核映像也可能不同,因此在二进制级别上进行识别非常困难。

发明内容
本发明要解决的技术问题是克服现有技术的缺陷,提供一种基于相似度判定的嵌入式操作系统内核版本识别方法;该方法通过对内核代码进行反汇编和流程分析,将待识别内核与标准内核进行函数比对,通过匹配函数的总数计算两者之间的相似程度,根据相似度的结果判定内核版本,可以有效地识别操作系统的内核版本,提高了操作系统内核版本识别的准确性和通用性。
本发明的技术方案一种基于相似度判定的嵌入式操作系统内核版本识别方法,含有下列步骤步骤I :收集不同类型标准嵌入式操作系统的内核版本,通过正向编译、反汇编处理,得到标准内核函数序列QstZf1, f2…,fn>,从标准内核函数序列中提取N个标准内核的函数结构化特征KernelSigstd,将N个标准内核的函数结构化特征KernelSigstd存入内核结构化特征库,N为大于等于I的自然数;步骤2 :对待识别的嵌入式操作系统内核进行反汇编分析,得到待识别内核函数序列CL <>,从待识别内核函数序列中提取相应的待识别内核的函数结构化特征 KernelSigtar ;步骤3 :使用内核函数结构化匹配算法fmateh(Qto,Qstd),将待识别内核的函数结构
化特征按次序与内核结构化特征库中的一个标准内核的函数结构化特征进行匹配,并根据匹配结果计算出两者的相似度KSim ;步骤4:判断待识别内核的函数结构化特征是否已经与内核结构化特征库中的N个标准内核的函数结构化特征都进行了匹配?如果是,执行步骤5 ;如果不是,执行步骤3 ;步骤5 :待识别内核的函数结构化特征与内核结构化特征库中的N个标准内核的函数结构化特征都进行匹配后,得到N个相似度,对N个相似度进行排序,根据各相似度的排名及分布情况对待识别的嵌入式操作系统内核版本进行识别并做出判定。标准内核的函数结构化特征和待识别内核的函数结构化特征均是根据函数控制流图CFG得到的,标准内核的函数结构化特征和待识别内核的函数结构化特征均由函数结构特征和基本块结构特征组成,记为KernelSig〈FunSig, BlockSig〉;其中,函数结构特征FunSig描述具体函数的结构特征,基本块结构特征BlockSig描述函数内部基本块的结构特征。函数结构特征含有五元组paramF,idegreeF, block, edge, calleeF,其中 paramF 表示函数参数个数,idegreeF表示函数入度,block表示函数控制流图CFG中基本块个数,edge表示函数控制流图CFG中边数,calleeF表示函数的子调用数;所述基本块结构特征也含有五元组idegreeB, odegreeB, bdist, fdist, called,其中,idegreeB 表示该基本块的入度,odegreeB表示该基本块的出度,bdist表示入口基本块到该基本块的最短距离,fdist表示该基本块到出口基本块的最短距离,called表示该基本块中子函数调用数;函数内部基本块中的入口基本块的入度和出口基本块的出度均为O。内核结构化特征库的建立过程如下步骤I. I :标准内核映像的获取标准嵌入式操作系统内核映像有两种来源,对于开源的系统,采用交叉编译的方法编译出不同指令集平台的内核映像,对于非开源的系统,通过对固件的剥离来获取内核映像;步骤I. 2 :使用反汇编引擎对标准内核映像进行反汇编,提取标准内核的函数结构化特征 KernelSigstd ;步骤1.3 :将提取的标准内核的函数结构化特征以XML文档形式存储,按内核所属的处理器平台归类。步骤3中,内核函数结构化匹配算法记作fmat JQtar, Qstd),其中,Qstd为标准内核函数序列,Qtar为待识别内核函数序列,内核函数结构化匹配算法的步骤如下
步骤3. I :给函数队列Q、匹配函数队列Qmateh赋值为空;步骤3. 2 :获取Qto中的待识别内核的函数结构化特征KernelSigto ;步骤3. 3 :如果Qstd非空时,执行步骤3. 4,否则转步骤3. 11 ;步骤3. 4 :从Qstd中按次序取出一个函数& ; N步骤3. 5 :对函数&和待识别内核的函数结构化特征KernelSigto进行函数级结构化匹配,得到匹配成功的函数队列Q ;步骤3. 6 :如果函数队列Q非空,则执行步骤3. 7,否则转步骤3. 3 ;步骤3. 7 :从函数队列Q中按次序取出一个函数q」;步骤3. 8 :对函数q]和函数进行基本块级结构化匹配,如果匹配成功,执行步骤3. 9,否则转步骤3.6 ;步骤3. 9 :将函数q」从Qstd和Qtar中删除;步骤3. 10 :将函数qj加入到匹配函数队列Qmateh中;步骤3. 11 :输出匹配函数队列Qmatc;h。函数级结构化匹配根据两个内核的函数结构特征来计算,两个内核的函数结构特征分别表示如下FunSig' <paramF' ,idegree/ ,block' , edge' ,callee/ >,FunSig;/ <paramF",idegreeF" ,block" , edge",calleeF" >,其中,param/、paramF"表示函数参数个数,idegree/、idegreeF"表示函数入度,block'、block"表示函数控制流图CFG中基本块个数,edge'、edge"表示函数控制流图CFG中边数,calleeF/、callee/表示函数的子调用数;计算公式为
d=^{pamm^. —paramj')2 +(idegtvej —idegr^' )2 +{block' -block")2 +{edge —edge')1 +(calleej-calleej')2当d = 0时,认为两个函数具有相似的结构;一般地,两个内核中结构相同的函数不止一个,在函数级结构化匹配时,得到的是与待匹配内核函数结构相似的标准内核函数队列Q。为了进一步从Q中筛选出结构相同的标准内核函数,需要在基本块级进行结构化匹配。基本块级结构化匹配主要是判定两个函数的所有基本块是否一一对应,为了快速准确地完成匹配过程,采用以下算法来实现首先,定义冲突基本块的概念,设具有m个基本块的函数HMB1, B2, . . .,Bm),其中,基本块Bi G fl,l ^ i <m,若函数fl中存在其它基本块与基本块Bi具有相同的基本块结构特征BlockSig,将这种情况称为结构冲突,具有相同基本块结构特征BlockSig的基本块集合称为冲突基本块;设函数f的函数控制流图CFG中基本块集合为Bf= (B1, B2, . . .,Bn),函数f'的函数控制流图CFG中基本块集合为Bf' =(B/,B2' ,...,B/ ),队列Qb为Bf的基本块队列,队列Qb'为Bf,的基本块队列,Btraip为当前需要匹配的基本块,Qrallsim为冲突基本块队列,Qmatched为匹配成功的基本块队列,ColBloNum为冲突基本块数量,MatBloNum为匹配成功的基本块数量,则函数f和函数f'的基本块级结构化匹配算法如下步骤3. 8. I :给 Qcollsion, Qfflatched 赋值为空;
步骤3.8. 2 :获取 Qb ;步骤3.8.3 :获取 Qb ’ ;步骤3. 8. 4 :当Qb不为空时,执行步骤3. 8. 5,否则转到步骤3. 8. 13 ;步骤3.8.5 :获取Qb的下一个Btemp;步骤3. 8. 6 :获取 Qb 中与 Btemp 冲突的 Qctjllsim ;步骤3. 8. 7 :获取Qrallsim中队列元素的ColBloNum ;步骤3. 8. 8 :获取 Qb’ 与 Btemp 匹配的 Qmatched ;步骤3. 8. 9 :获取Qmatched中队列元素的MatBloNum ; 步骤3. 8. 10 :如果ColBloNum不等于MatBloNum,则匹配失败,执行步骤3. 8. 14,否则继续执行步骤3. 8.11;步骤3. 8. 11 :从Qb中删除Qrallsim中的所有元素;步骤3. 8. 12 :从Qb’中删除Qrallsim中的所有元素;步骤3. 8. 13 :如果QjPQB’均不为空,则匹配成功,否则匹配失败;步骤3. 8. 14:结束。步骤3中的相似度KSim计算方法为相似度=q/m,其中,q为匹配的函数个数,m为目标内核的函数总个数。步骤5中,将与待识别的嵌入式操作系统内核版本的相似度最高的标准嵌入式操作系统内核版本作为版本识别的结果。本发明的有益效果I、本发明针对嵌入式操作系统内核版本的识别问题,在汇编级上定义了内核函数的结构特征,设计了内核结构化特征库的构建方法,给出了针对嵌入式操作系统内核函数的结构化匹配算法,提出了一种基于相似度判定的嵌入式操作系统内核版本识别方法,通过对内核代码进行反汇编和流程分析,将待识别内核与标准内核进行函数结构化匹配,通过匹配函数的总数计算两者之间的相似程度,根据相似度的结果判定内核版本,从而有效地识别操作系统的内核版本。本发明的识别方法系统化程度高、规范性强、可操作性高,有效地解决了传统的嵌入式操作系统内核版本识别方法通用性差、准确性低的缺点。


图I为嵌入式操作系统内核版本识别流程示意图;图2为内核结构化特征库的建立流程示意图。
具体实施例方式参见图I 图2,图中,基于相似度判定的嵌入式操作系统内核版本识别方法含有下列步骤步骤I :收集不同类型标准嵌入式操作系统的内核版本,通过正向编译、反汇编处理,得到标准内核函数序列QstZf1, f2…,fn>,从标准内核函数序列中提取N个标准内核的函数结构化特征KernelSigstd,将N个标准内核的函数结构化特征KernelSigstd存入内核结构化特征库,N为大于等于I的自然数;
步骤2 :对待识别的嵌入式操作系统内核进行反汇编分析,得到待识别内核函数序列Oar <//,/& ,/;>,从待识别内核函数序列中提取相应的待识别内核的函数结构化特征 KernelSigtar ;步骤3 :使用内核函数结构化匹配算法fmatc;h(Qto,Qstd),将待识别内核的函数结构化特征按次序与内核结构化特征库中的一个标准内核的函数结构化特征进行匹配,并根据匹配结果计算出两者的相似度KSim ;步骤4:判断待识别内核的函数结构化特征是否已经与内核结构化特征库中的N个标准内核的函数结构化特征都进行了匹配?如果是,执行步骤5 ;如果不是,执行步骤3 ;步骤5 :待识别内核的函数结构化特征与内 核结构化特征库中的N个标准内核的函数结构化特征都进行匹配后,得到N个相似度,对N个相似度进行排序,根据各相似度的排名及分布情况对待识别的嵌入式操作系统内核版本进行识别并做出判定。标准内核的函数结构化特征和待识别内核的函数结构化特征均是根据函数控制流图CFG得到的,标准内核的函数结构化特征和待识别内核的函数结构化特征均由函数结构特征和基本块结构特征组成,记为KernelSig〈FunSig, BlockSig〉;其中,函数结构特征FunSig描述具体函数的结构特征,基本块结构特征BlockSig描述函数内部基本块的结构特征。函数结构特征含有五元组paramF,idegreeF, block, edge, calleeF,其中 paramF 表示函数参数个数,idegreeF表示函数入度,block表示函数控制流图CFG中基本块个数,edge表示函数控制流图CFG中边数,calleeF表示函数的子调用数;所述基本块结构特征也含有五元组idegreeB, odegreeB, bdist, fdist, called,其中,idegreeB 表示该基本块的入度,odegreeB表示该基本块的出度,bdist表示入口基本块到该基本块的最短距离,fdist表示该基本块到出口基本块的最短距离,called表示该基本块中子函数调用数;函数内部基本块中的入口基本块的入度和出口基本块的出度均为O。内核结构化特征库的建立过程如下步骤I. I :标准内核映像的获取标准嵌入式操作系统内核映像有两种来源,对于开源的系统,采用交叉编译的方法编译出不同指令集平台的内核映像,对于非开源的系统,通过对固件的剥离来获取内核映像;步骤I. 2 :使用反汇编引擎对标准内核映像进行反汇编,提取标准内核的函数结构化特征 KernelSigstd ;步骤1.3 :将提取的标准内核的函数结构化特征以XML文档形式存储,按内核所属的处理器平台归类。下面为标准内核的函数结构化特征的XML存储格式示例
权利要求
1.一种基于相似度判定的嵌入式操作系统内核版本识别方法,其特征是含有下列步骤 步骤I:收集不同类型标准嵌入式操作系统的内核版本,通过正向编译、反汇编处理,得到标准内核函数序列,从标准内核函数序列中提取N个标准内核的函数结构化特征,将N个标准内核的函数结构化特征存入内核结构化特征库,N为大于等于I的自然数; 步骤2 :对待识别的嵌入式操作系统内核进行反汇编分析,得到待识别内核函数序列,从待识别内核函数序列中提取相应的待识别内核的函数结构化特征; 步骤3:使用内核函数结构化匹配算法,将待识别内核的函数结构化特征按次序与内核结构化特征库中的一个标准内核的函数结构化特征进行匹配,并根据匹配结果计算出两者的相似度; 步骤4:判断待识别内核的函数结构化特征是否已经与内核结构化特征库中的N个标准内核的函数结构化特征都进行了匹配?如果是,执行步骤5 ;如果不是,执行步骤3 ; 步骤5 :待识别内核的函数结构化特征与内核结构化特征库中的N个标准内核的函数结构化特征都进行匹配后,得到N个相似度,对N个相似度进行排序,根据各相似度的排名及分布情况对待识别的嵌入式操作系统内核版本进行识别并做出判定。
2.根据权利要求I所述的基于相似度判定的嵌入式操作系统内核版本识别方法,其特征是所述标准内核的函数结构化特征和待识别内核的函数结构化特征均是根据函数控制流图CFG得到的,标准内核的函数结构化特征和待识别内核的函数结构化特征均由函数结构特征和基本块结构特征组成,其中,函数结构特征描述具体函数的结构特征,基本块结构特征描述函数内部基本块的结构特征。
3.根据权利要求2所述的基于相似度判定的嵌入式操作系统内核版本识别方法,其特征是所述函数结构特征含有五元组paramF, idegreeF, block, edge, calleeF,其中paramF表示函数参数个数,idegreeF表示函数入度,block表示函数控制流图CFG中基本块个数,edge表示函数控制流图CFG中边数,calleeF表示函数的子调用数;所述基本块结构特征也含有五元组idegreeB, odegreeB, bdist, fdist, called,其中,idegreeB 表示该基本块的入度,odegreeB表示该基本块的出度,bdist表示入口基本块到该基本块的最短距离,fdist表示该基本块到出口基本块的最短距离,called表示该基本块中子函数调用数;函数内部基本块中的入口基本块的入度和出口基本块的出度均为O。
4.根据权利要求I所述的基于相似度判定的嵌入式操作系统内核版本识别方法,其特征是所述内核结构化特征库的建立过程如下 步骤I. I :标准内核映像的获取标准嵌入式操作系统内核映像有两种来源,对于开源的系统,采用交叉编译的方法编译出不同指令集平台的内核映像,对于非开源的系统,通过对固件的剥离来获取内核映像; 步骤I. 2 :使用反汇编引擎对标准内核映像进行反汇编,提取标准内核的函数结构化特征; 步骤I. 3:将提取的标准内核的函数结构化特征以XML文档形式存储,按内核所属的处理器平台归类。
5.根据权利要求I所述的基于相似度判定的嵌入式操作系统内核版本识别方法,其特征是所述步骤3中,内核函数结构化匹配算法记作fmatc;h(Qta,,Qstd),其中,Qstd为标准内核函数序列,Qtar为待识别内核函数序列,内核函数结构化匹配算法的步骤如下 步骤3. I :给函数队列Q、匹配函数队列Qmatdl赋值为空; 步骤3. 2 :获取Qtm中的待识别内核的函数结构化特征; 步骤3.3 :如果Qstd非空时,执行步骤3. 4,否则转步骤3. 11 ; 步骤3. 4 :从Qstd中按次序取出一个函数A ; 步骤3. 5 :对函数&和待识别内核的函数结构化特征进行函数级结构化匹配,得到匹配成功的函数队列Q ; 步骤3. 6 :如果函数队列Q非空,则执行步骤3. 7,否则转步骤3. 3 ; 步骤3. 7 :从函数队列Q中按次序取出一个函数qj ; 步骤3. 8 :对函数%和函数A进行基本块级结构化匹配,如果匹配成功,执行步骤3. 9,否则转步骤3. 6 ; 步骤3. 9 :将函数q」从Qstd和Qtm中删除; 步骤3. 10 :将函数加入到匹配函数队列Qmatdl中; 步骤3. 11 :输出匹配函数队列Qmatc;h。
6.根据权利要求5所述的基于相似度判定的嵌入式操作系统内核版本识别方法,其特征是所述函数级结构化匹配根据两个内核的函数结构特征来计算,两个内核的函数结构特征分别表示如下 FunSig' 〈param/ ,idegree/ ,block' , edge' ,callee/ >,FunSig;/ <paramF",idegreeF" ,block" , edge",calleeF" >, 其中,param/、paramF"表示函数参数个数,idegree/、idegree/表示函数入度,block'、block"表示函数控制流图CFG中基本块个数,edge'、edge"表示函数控制流图CFG中边数,callee/、callee/表示函数的子调用数; 计算公式为
7.根据权利要求5所述的基于相似度判定的嵌入式操作系统内核版本识别方法,其特征是所述基本块级结构化匹配采用以下算法来实现 首先,定义冲突基本块的概念,设具有m个基本块的函数HMB1, B2,…,Bm),其中,基本块Bi G fl,I < i Sm,若函数fI中存在其它基本块与基本块Bi具有相同的基本块结构特征,将这种情况称为结构冲突,具有相同基本块结构特征的基本块集合称为冲突基本块;设函数f的函数控制流图CFG中基本块集合为Bf= (B1, B2,..., Bn),函数f'的函数控制流图CFG中基本块集合为Bf' = (B1 /,B2',. . .,Bn'),队列Qb为Bf的基本块队列,队列Qb'为Bf'的基本块队列,Btanp为当前需要匹配的基本块,Qrallsim为冲突基本块队列,Qmatcted为匹配成功的基本块队列,ColBloNum为冲突基本块数量,MatBloNum为匹配成功的基本块数量,则函数f和函数f'的基本块级结构化匹配算法如下步骤 3. 8. I :给 Qcollsion, Qfflatched 赋值为空;步骤3. 8. 2 :获取Qb ;步骤3. 8. 3 :获取Qb’ ; 步骤3. 8. 4 :当Qb不为空时,执行步骤3. 8. 5,否则转到步骤3. 8. 13 ;步骤3. 8. 5 :获取Qb的下一个Btraip ; 步骤3. 8. 6 :获取Qb中与Btraip冲突的Qrallsim ; 步骤3. 8. 7 :获取Q。—中队列元素的ColBloNum ; 步骤3. 8. 8 :获取Qb’与Btraip匹配的Qmatcted ; 步骤3. 8. 9 :获取Qmatehed中队列元素的MatBloNum ; 步骤3. 8. 10 :如果ColBloNum不等于MatBloNum,则匹配失败,执行步骤3. 8. 14,否则继续执行步骤3. 8. 11 ;步骤3. 8. 11 :从Qb中删除Qrallsim中的所有元素; 步骤3. 8. 12 :从Qb’中删除Qrallsim中的所有元素; 步骤3. 8. 13 :如果Qb和Qb’均不为空,则匹配成功,否则匹配失败; 步骤3. 8. 14 :结束。
8.根据权利要求I所述的基于相似度判定的嵌入式操作系统内核版本识别方法,其特征是所述步骤3中的相似度计算方法为 相似度=q/m, 其中,q为匹配的函数个数,m为目标内核的函数总个数。
9.根据权利要求I所述的基于相似度判定的嵌入式操作系统内核版本识别方法,其特征是所述步骤5中,将与待识别的嵌入式操作系统内核版本的相似度最高的标准嵌入式操作系统内核版本作为版本识别的结果。
全文摘要
本发明涉及一种基于相似度判定的嵌入式操作系统内核版本识别方法,含有下列步骤步骤1收集不同类型标准嵌入式操作系统的内核版本,得到标准内核的函数结构化特征,并将其存入内核结构化特征库;步骤2对待识别的嵌入式操作系统内核进行分析,得到待识别内核的函数结构化特征;步骤3将待识别内核的函数结构化特征按次序与内核结构化特征库中的一个标准内核的函数结构化特征进行匹配;步骤4待识别内核的函数结构化特征是否已经与标准内核的函数结构化特征都进行了匹配?如是,执行步骤5;如不是,执行步骤3;步骤5对待识别的嵌入式操作系统内核版本进行识别并做出判定;本发明提高了操作系统内核版本识别的准确性和通用性。
文档编号G06F9/44GK102810062SQ20121019445
公开日2012年12月5日 申请日期2012年6月14日 优先权日2012年6月14日
发明者蒋烈辉, 尹青, 谢耀滨, 何红旗, 刘铁铭, 常瑞, 张平, 李继中 申请人:中国人民解放军信息工程大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1