APP下载

基于执行路径的嵌入式计量软件后门检测

2014-10-13陈炎明李旺林关静雅

湖北工业大学学报 2014年1期
关键词:命令代码指令

陈炎明,李旺林,陈 希,3,关静雅,3

(1湖北省计量测试技术研究院,湖北 武汉430223;2湖北省产品质量监督检验研究院,湖北 武汉430061;3武汉大学计算机学院,湖北 武汉430072)

现代计量器具仍存在计量作弊现象,并且不仅有一般的硬件设备改装、加装多余脉冲发生设备等作弊手段,有些不法商家更改计量软件的程序代码[1],利用嵌入式计量软件本身存在的设计漏洞修改计量程序,甚至直接更换计量主板以达到作弊的目的。在嵌入式计量软件中,后门程序是指生产厂家预留或者经营者刻意设计的作弊方式,通过遥控器或者设置键盘组合键等方式触发作弊后门来篡改计量程序中的计量参数或其他计量数据[2]。趋于高科技化的作弊方式为人工检测计量软件后门带来了困难,因此急需一种自动检测方法来方便高效地检测嵌入式计量软件中的作弊后门。

本文在研究分析了一般软件的后门检测方法和二进制可执行程序检测方法的基础上,针对其不足,提出了基于执行路径分析的嵌入式计量软件的后门检测方法。该检测方法以二进制可执行程序为检测对象,跟踪和分析二进制程序的执行路径,判断是否存在作弊后门,为嵌入式软件后门的自动化检测提供了新的借鉴。

1 后门检测方法

1.1 静态分析法

静态分析法是在不实际执行程序的条件下,利用分析工具对程序代码进行分析,对可执行程序进行反汇编,在此基础上找出恶意代码的特征值或可疑语义特征[3]。静态分析的优点是可以避免执行恶意代码对被分析系统的破坏;但同时因为不执行代码,所分析的代码不全是最终执行的代码,在无用代码上浪费了分析时间,且对反汇编技术的依赖也使静态分析存在局限性。静态分析方法包括基于代码语义的方法,通过分析恶意代码的行为和代码意义来识别和判定恶意代码[4],和不分析语义而是通过提取恶意行为和代码的特征来标识恶意代码的基于代码特征的分析方法[5]。

1.2 动态分析法

动态检测方法[6]是通过动态跟踪并观察恶意代码的执行情况来理解恶意代码的行为,所研究的代码部分即实际执行到的代码。该方法获得运行时信息,分析过程简单且结果清晰。动态检测方法包括外部观察法,即通过观察恶意代码执行时系统发生的调用函数行为来研究恶意代码的功能,这种方法不对恶意代码本身的语义特性作分析。另一种方法是跟踪调试法,通过跟踪目标程序执行情况,对恶意代码的语义进行分析,进而判别恶意代码的恶意行为。

2 执行路径的相关定义

2.1 执行路径的定义

程序执行路径(execution path)是程序在一次运行中所执行的有序语句序列。跟踪程序执行路径是程序在测试、纠错、排查和理解等方面重要的辅助手段。

对嵌入式计量软件的二进制可执行程序进行分析时,执行路径是程序执行一次命令的指令序列,记录所执行过的指令流。跟踪程序的执行路径,需要监视相关寄存器内容、堆栈信息、状态转移规律及整个地址空间的动态运行状态,通过获取当前二进制可执行程序所执行的指令地址,取出指令并译码后计算下一指令的地址。

关于程序执行路径,有如下几个定义。

1)路径P = {I1,I2,I3,…,Ij…,|j≤N},其中语句I可以是细粒度的指令,或者基本块、函数等。执行语句按照执行顺序组成的语句序列称为路径。在本文的检测方法中,记录执行路径以条件转移指令划分的基本块为记录单位,基本块内为顺序执行的不可分割的指令序列。

2)起始路径。起始于语句I1的执行路径为起始路径。本文检测方法中的起始路径为二进制可执行程序加载执行后的初始化执行过程,每一条执行路径都以程序初始化为起点,由于初始化过程相同,本文从初始化完成后的执行路径开始记录。

3)原子路径。如果执行路径P由连续执行不可分的语句序列P0组成,那么P0为路径P的原子路径。本文检测方法以基本块为路径节点,基本块内的指令流为连续执行不可分割的指令流组成,每一个基本块即原子路径。通过记录基本块的地址可以降低记录的路径节点数量,提高处理速度。

4)路径执行条件。对于执行路径P={Ij|j≤N},其中有k条判断语句(0<k≤N),JD为判断语句的集合,JD = {Ij|Ij为判断语句}。P,Ij,JD对应于一个判断条件Cj,Cj是一个布尔表达式,由若干原子谓词和and,or,not等逻辑连接词组成。集合Var由所有与Cj有关的变量的组成。当且仅当C1,C2,…,Ck为真时,路径P 执行。因此记 <C1,C2,…,Ck,Var> 为真时路径P的执行条件。

2.2 路径节点的定义

本文对执行路径的路径节点定义为条件转移分支点,即以转移语句作为路径节点来组成执行路径。输入一条命令的过程中,每输入一个命令字,在二进制程序中都将对应一个条件分支,即一条控制转移指令,形成一个路径节点。根据不同命令值与命令树中命令值的匹配,跳转到不同的执行指令或入口函数。每一命令字对应的路径节点之间,对应的二进制执行程序中也可能存在其他控制转移指令,不作为路径节点来跟踪和处理。

执行路径跟踪算法记录每一个路径节点的首地址和末地址,记录一条执行路径所执行过的代码的地址。条件转移指令由JZ,JNZ,JB,JC等几种指令组成。执行路径跟踪算法记录以条件转移指令开始的路径节点,首地址即当前跳转指令的跳转目的地址,即跳转指令地址与偏移量的和,末地址为下一跳转指令所在的地址。路径节点用该节点执行代码的首末指令地址来标识,记为 Ni(begini,endi)。执行路径存储为 path{N0(begin0,end0),N1(begin1,end1),…,Ni(begini,endi),…,Nn-1(beginn-1,endn-1)}(i≥0,n≥1)。单片机程序从0000 H 地址开始自动执行,这部分代码对于每次执行都相同,因此执行路径从接收第一个命令字输入后产生的路径节点开始计算,到输入最后一个命令字程序执行相关操作后执行路径截止。

2.3 执行路径的处理

执行路径跟踪分为两个步骤:1)对有关计量参数(如计量系数、计量单价、计量密度等)正常的系统命令做预处理路径跟踪,计量程序逐条执行这些系统命令,路径跟踪模块保存执行路径的节点,得到计量程序执行正常操作指令所执行到的代码地址,此部分地址的代码的功能为计量系数操作,为敏感区域代码,存储为path{N0(begin0,end0),N1(begin1,end1),…,Ni(begini,endi),…,Nn-1(beginn-1,endn-1)}(i≥0,n≥1);2)对计量程序执行测试命令所得的执行路径进行路径跟踪处理,得到计量程序执行测试命令所执行到的代码地址,即该条测试命令所运行的代码部分,存储为pat hk{N0(begin0,end0),N1(begin1,end1),…,Nj(beginj,endj),…,Nm-1(beginm-1,endm-1)}(k,j≥0,m ≥1)。

3 执行路径跟踪

执行路径跟踪是系统检测后门的关键部分,通过执行自动生成的测试命令,逐条跟踪并记录执行被测命令时的执行路径。执行路径由执行结点组成,记录执行路径首先要对执行结点进行处理。

3.1 嵌入式计量软件命令执行原理

嵌入式计量器具通过外部连接设备(如键盘等)输入功能指令、计量命令等,计量软件接受这些指令并且匹配、解析指令并执行相应功能操作。通常在嵌入式软件的指令系统中,对于指令的存储和匹配采用简单的状态转移和命令树法。状态转移适用于简单且指令数量少的嵌入式指令系统,复杂的指令系统采用命令树来存储指令,指令的查找和匹配操作通过遍历命令树来实现。

3.1.1 简单的状态转移 对于指令数少、功能简单的指令系统,采用简单的状态转移来对输入的操作指令进行匹配和执行。其过程可视为有限状态机(FSM)。每输入一个命令字,程序相应地做出反应,跳转到不同的执行指令处。每一个转移的状态都在程序中对应一条控制转移指令。

3.1.2 命令树 计量器具中复杂的指令系统按命令树对命令进行存储。命令格式为树状层次结构,具有多个命令子系统,每个命令子系统又具有多个子命令。

1)命令树存储 命令树结构为多棵二叉树的形式,常见的方法为将命令树存储为多叉树结构,并将多叉树转化为链式二叉树形式,简化了命令树的存储和遍历操作。采用孩子兄弟法用来存储命令树,将每一个命令子系统存储为一棵二叉树,公用命令则是一棵只有根结点的二叉树。一棵完整的命令树由每一个子系统根结点和公用命令结点组成命令树的右链,各个子系统下的孩子结点组成左链。

2)命令树查找 命令查找过程是程序根据用户输入的指令,遍历命令树,跳转到相应的处理指令。具体过程如下:根据用户输入的命令字符串,分离命令字和参数,并将参数保存至参数表。取第一个命令字,从命令树的右分支开始查找,若匹配则在此结点的左分支进行下一等级结点的匹配和查找;若不匹配则在此结点同一等级的右分支查找。对于不匹配的命令,报告输入错误信息,对于匹配的命令,则执行相应地址处的控制转移指令。

在计量程序中,对输入的命令进行查找、匹配、执行的过程都伴随着程序指令的转移和执行,通过记录计量程序执行指令流可以得到计量程序的执行轨迹。

3.2 执行路径跟踪算法

执行路径跟踪算法要对程序执行系统级测试命令的匹配和执行过程中的状态转移路径进行跟踪,并记录为执行路径。具体动态跟踪方法为:以8052系列单片机仿真平台执行目标二进制可执行程序为基础,通过在路径跟踪过程中对代码指令进行解码,以基本块为处理单位,判断指令的类型,若指令为条件转移指令,则作为路径节点进行处理。基本块划分示意图如图1所示。

图1 基本块划分示意图

具体实现如下:执行路径跟踪采用记录以条件转移指令为界划分的基本块的首末指令地址。基本块内为顺序执行的指令流,除末尾一条指令为条件转移指令外,块内无多余的条件转移指令。条件转移指令和无条件转移指令共同构成二进制程序中的控制转移指令,其中程序执行无条件转移指令后将自动跳转并执行下一条指令,不会改变基本块内指令流执行顺序;只有执行条件转移指令时,程序根据判定条件会出现不同转移分支,此时基本块发生分割。条件转移指令位于基本块的末尾,将当前条件转移指令归为上一基本块,指令地址为上一基本块的末地址;通过计算条件转移指令的地址可得到将要执行的基本块的首指令地址,按照取得末指令地址的方法,在下一个条件转移指令处可得到该基本块的最后一条指令地址。其中转移地址为入口函数地址的条件转移指令的首指令地址处理同上。执行路径跟踪算法流程如图2所示。

图2 执行路径跟踪算法

在8052系列单片机指令集中,控制转移指令包括条件转移指令JZ,JNZ,JC,JB,JNE,以及无条件转移指令JMP,CALL。单片机仿真平台执行指令时定义一个变量保存当前执行指令的地址,根据地址取出第一个指令字解码判断指令功能,并计算要取的操作数字长。若当前指令判断为控制转移指令,根据取出的操作数可算出跳转指令地址。每执行一条指令都判断是否为控制转移指令,若是条件转移指令,则后门跟踪模块对其做存储基本块首尾指令地址的处理。下面的代码片段以JNZ指令处理为例,说明路径跟踪的方法:

vector<unsigned>copy_PC0;//定义vector变量copy_PC0,记录基本块的首地址

vector<unsigned>copy_PC1;//定义vector变量copy_PC1,记录基本块的首地址

unsigned i8052_PC;//i8052_PC保存仿真平台当前执行的指令地址

……

以上基本块首末指令地址的处理方法以条件跳转指令JNZ指令的处理为例,记录执行路径经过的基本块。本模块采用跟踪条件转移指令为执行路径,不同于全路径跟踪。所跟踪到的路径指令为非连续地址的指令流,将跟踪到的条件转移指令串联起来就是一次执行的一条完整路径。

[1]王林波,沈春磊,赵书展,等.如何治理加油机高科技计量作弊[J].上海计量测试,2007,34(03):47-49.

[2]王凤翔.浅析燃油加油机的防作弊措施[J].科技信息,2012(23):103-103.

[3]Rieck K,Holz T,Willems C,etal.Lear ning and classification of mal ware behavior[M].Detection of Intr usions and Mal ware,and Vulnerability Assessment.Springer Berlin Heidelber g,2008:108-125.

[4]Rieck K,Trinius P,Willems C,etal.Automatic analysis of mal ware behavior using machine lear ning[J].Journal of Computer Security,2011,19(04):639-668.

[5]Roberto B,Matthien C,Roberta G,etal.Sy mbolic Path-Oriented Test Data Generation for Floating-Point Programs[C].Proc of the 6th IEEE Int.Conf.on Soft ware Testing, Verification and Validation(ICST13),2013.

[6]Panchapakesan A,Abiel mona R,Petriu E,etal.Dynamic white-box soft ware testing using a recursive hybrid evolutionary strategy/genetic algorithm[C].Evolutionary Computation (CEC),2013 IEEE Congress on.IEEE,2013:2 525-2 532.

猜你喜欢

命令代码指令
只听主人的命令
ARINC661显控指令快速验证方法
创世代码
创世代码
创世代码
创世代码
移防命令下达后
杀毒软件中指令虚拟机的脆弱性分析
这是人民的命令
中断与跳转操作对指令串的影响