APP下载

ARM二进制敏感性数据检测方法研究

2015-08-14余凯梁光明杨世德

现代电子技术 2015年15期

余凯+梁光明+杨世德

摘 要: 相对于PC成熟的安全防护而言,嵌入式安全依旧处于薄弱状态。以ARM为研究对象,结合ARM指令体系的结构和特点,为实现对二进制可执行文件BIN中是否存在对硬件模块的操控,展开敏感性信息的匹配,预警恶意操作,并提出半定型建模匹配方式,加快了代码定位分析效率。

关键词: 二进制可执行文件; ARM指令; 敏感信息; 半定型建模

中图分类号: TN702?34 文献标识码: A 文章编号: 1004?373X(2015)15?0050?03

Research on detection method for ARM sensitive binary data

YU Kai, LIANG Guangming, YANG Shide

(School of Electronic Science and Engineering, National University of Defense Technology, Changsha 410073, China)

Abstract: Compared with PC mature security protection, the embedded security remains in weaker state. To achieve whether the control to hardware module exists in BIN of binary executable file, ARM is taken as research object, and sensitive information matching is conducted, and malicious actions are forewarned in combination with the structure and characteristics of ARM instruction system. The matching way of semidefinite form modeling is presented, which speeds up the code positioning analysis efficiency.

Keywords: binary executable file; ARM instruction; sensitive information; semidefinite form modeling

0 引 言

随着现代电子技术的不断发展,信息系统规模和复杂度逐步增加,随之而来的信息安全问题的严重性也在不断提高,软件安全问题显得尤为突出[1]。出于对自身商业利益和知识产权的保护,大部分软件厂商并不会提供源代码,因此对二进制程序进行安全检测是当前研究的一大主流方向[2]。

当前随着恶意代码数量的增多,病毒库越来越庞大,利用传统的模式匹配算法导致耗费的时间不断增大,已经不能满足实际应用。另外,随着恶意代码编写技术的发展,当前的恶意代码大多采用加密等技术对自身进行保护,这样就更进一步降低了传统检测方法的准确性[3]。为了解决这一问题,最有效的方法是归纳总结出一类恶意代码的行为特征,将传统的二进制特征匹配提升到行为特征匹配,才能利用尽可能少的特征检测出尽可能多的恶意代码[4]。常见嵌入式设备控制模块有处理器模式设置、看门狗开关、中断开关、MMU控制、时钟控制等,这些模块的控制入口都是敏感信息,通过对BIN文件这些敏感信息的匹配可以有效地对代码可能存在的恶意操作进行预警。

传统的单模式匹配算法主要有BF,KMP,BM算法及Sunday算法。BF算法实现简单,但匹配效率很低;KMP算法比BF算法有所改进;BM算法则比KMP算法的检测速度快3~5倍[5];在短模式匹配中,Sunday是目前速度最快的算法[6]。这些传统方法不适合于二进制文件的信息匹配[7],也没有重定位功能。因此,本文结合ARM指令架构特点,提出半定型匹配算法,通过实验证明了该算法的可靠性和高效性。

1 半定型建模

源代码可能千差万别,但经过工具编译成汇编语言时,具有极大的相似性。一是主要体现在高级语言指令多样,而且还在不断扩展,但汇编指令有限,单一的高级语言程序经常由多条汇编语言组合而成,这些汇编指令很相似。二是体现在机器编译的过程中会将代码进行优化,使其符合标准编程格式,这样使得编译生成的汇编语言结构相似。ARM数据类指令格式解析,如图1所示。其中,cond表示执行条件;I表示shifter_operand是立即数还是寄存器;Opcode是指令标记码;S表示执行结果是否影响CPRS;Rn表示源寄存器;Rd表示目标寄存器;shifter_operand表示源操作数。

图1 ARM机器码指令格式

由图1明显可以看出,同一型的指令如MOV和MVN的机器码结构几乎一样,不同型的指令如CMP和ADD的指令结构差异较大,所以对于不同指令的匹配应当具有针对性。结合ARM 32/16位指令结构,本文提出半定型建模匹配方式。针对不同的指令进行预匹配,即第一步仅匹配特征区域,对于不关心的区域进行选择性忽视,只有当预匹配成功后对该指令进行深层匹配。以32位指令为例,将单一32位二进制码拆分成若干位段,特征区域所在位段将其称作子串,进行信息匹配时,仅需对子串进行对比。其中数据类处理指令的半建模匹配位段如图2所示。

图2 半定型匹配子串

进行二进制信息匹配的过程中,对于这些机器码可以采用半定型建模方式进行匹配定位,即针对需要匹配的指令,只匹配有意义的位段,如第一步只匹配执行条件、指令标记码等,而立即数或寄存器等信息根据需要进行匹配,这样可以极大地提高匹配效率。

2 半定型匹配算法

传统的代码检测,使用各种模式匹配方法,实现方法归结为字符串匹配问题。由BF算法从左向右的逐字节比较,到Sunday算法从右向左比较的演变,解决了尽可能跳过更多的字符,加速匹配的问题。但这种方式,对于嵌入式的二进制代码检测而言并不高效。以ARM为例,其支持ARM和THUMB两种指令模式,分别为32位和16位代码格式。若干字节的跳转,在很多时候没有意义。针对ARM的代码检测,其步长就应当固定为32或16,所以本文针对ARM二进制文件的特殊性,提出半定型匹配算法HSM,如图3所示。

半定型算法分为两种工作模式。第一种是全匹配模式,即匹配32位字符数据;第二种是半定型匹配模式,即先匹配Char[0]和Char[1],判断指令格式,称之为预匹配,当指令类型匹配成功后,对Char[2]和Char[3]进行计算,得出偏移量,称之为二次匹配。

图3 半定型匹配结构

(1) 全匹配模式

HSM算法的匹配执行方式采用自左向右的方式,每32位对齐,假设在发生不匹配时[S[i]≠T[j],][1≤i≤N,][1≤j≤M,]如图4所示。

图4 算法不匹配

① 当[S[i+4]=T[j],]移动距离为4,即将[T]与下一组32位指令进行比对。

② 当[S[i+4]≠T[j]]时,比对[S[i+8]]是否与[T[j]]相等,相等则移动距离为8,不相等则继续取下一组32位指令的前8位进行对比。

从Char[0]到Char[3]依次匹配,当出现不匹配则继续匹配下一组主串的Char[0],直至匹配文件结束。

(2) 半定型匹配模式

对于硬件地址的赋值有两种指令,一种使用MOV指令,另一种使用LDR伪指令。MOV要求立即数必须可由8位立即数偏移得到,可使用全匹配方式搜寻定位;LDR指令采用地址调用方式,对于所需赋值的立即数只要满足32位就可以。假设在文件某处发生匹配时[S[i~i+3]=T[j~j+3],][1≤i≤N,][1≤j≤M。]如图5所示。

图5 在文件xxxH处匹配地址成功

硬件地址存储形式为dword,当匹配了硬件地址后,需要进行二次匹配,定位出调用代码,流程如下所示:

Step1:计算匹配文件总长度,记为file_len,匹配处地址P小于file_len一半,进入step2,否则进入step3。

Step2:向上匹配E5 9F ** **,匹配成功时,取当前地址为PU。取出Char[2]第4位记为ror_num,将Char[3]转换成32位无符号整形,并向右循环移位ror_num*2位,得到32位偏移值,记为offset。若offset大于file_len,则offset需改为Char[2]低4位与Char[3]拼接而成。计算PU+8+offset是否等于P,相等则返回PU并进入step4,错误则继续向上匹配,直至文件首。向上匹配失败,则进入step3。

Step3:向下匹配E5 1F ** **,匹配成功时,取当前地址为PD。使用step2中方法得出offset。计算PD+8?offset是否等于P,相等则返回PD并进入step4,错误则继续向下匹配,直至文件结束。

Step4:对两处匹配结果进行显示,标记匹配处在文件中的地址。

3 敏感信息检测模型

裸机下的开发过程中,开发者可以采取汇编代码与高级代码混合编程,基于汇编的代码在编译后会进行优化,存在代码结构的微小改变;对于高级语言,开发人员只负责调用函数完成程序编写,编译器会自动生成优化后的汇编代码。基于高级语言的源代码经过工具编译后首先生成了ELF文件,由于ELF文件中包含了调试信息,所以可以反汇编成ASM文件。在有OS的嵌入式ARM中,可以直接运行ELF文件。但是在无OS的嵌入式ARM中,当处理器取出ELF中包含的调试信息时,将无法响应。所以为了能在无OS条件下执行,将ELF中的调试信息去除,生成BIN文件。这时的BIN文件无法反汇编,从而不能使用传统方法进行代码分析。本文提出对BIN中的敏感信息进行匹配定位,主要是针对硬件底层模块的定位,其模型如图6所示。

图6 敏感信息检测模型

4 实验与分析

4.1 算法性能

测试环境为VMware10下的Red Hat Enterprise Linux 6,内核版本为2.6.39,内存1.3 GB,宿主机为i5?4200M 2.5 GHz,测试样本为U?boot 234 KB Bin文件,实验平台为TQ2440。选取BM、Sunday算法以及每次移动32 b的BF算法,与半定型算法HSM进行匹配效率对比,对敏感信息,即关键寄存器地址进行匹配定位,实验结果如表1所示。

表1 匹配算法性能对比

[算法对比\&BM\&Sunday\&32 b BF\&HSM\&8位:

4c\&时间 /ns\&10 629 665\&6 377 799\&1 878 992\&1 253 660\&命中次数\&10 393\&10 393\&10 323\&10 323\&16位:

4c 00\&时间 /ns\&5 866 039\&4 512 338\&1 270 442\&908 382\&命中次数\&70\&70\&11\&11\&24位:

4c 00 00\&时间 /ns\&4 362 159\&3 231 229\&1 360 407\&786 552\&命中次数\&60\&60\&9\&9\&32位:

4c 00 00 14\&时间 /ns\&3 276 683\&2 839 347\&1 955 354\&566 721\&命中次数\&3\&3\&3\&3\&32位:

4c 00 00 00\&时间 /ns\&3 789 963\&3 216 407\&1 170 464\&486 563\&命中次数\&47\&47\&0\&0\&]

由表1可以得出,传统字符串匹配算法在ARM二进制文件中的匹配效率明显低于后两种方法,主要原因在于匹配了大量不符合汇编规范的字符串以及移动距离设置不适合32 b环境。同时使用传统字符串匹配方法,也存在误判的情况。实验证明HSM算法可靠,效率表现良好。

4.2 外设模块控制定位

对U?boot代码解析,仅发现一处使用MOV指令,为0x56000010 LED控制地址,剩余模块一律采用LDR格式。MOV格式的外设模块具体控制指令基本位于硬件地址之后,定位简单;LDR格式涉及偏移,偏移范围为+/-32 MB,当定位到硬件地址或驱动声明时,只能说明有对此模块的控制,具体控制指令需要进行二次搜索。

以U?boot中时钟频率设置为例,第一次定位了4c 00 00 04MPLLCON地址,此处相对地址为814H,文件总长度为3AD3CH,优先选择向上定位。匹配指令为E5 9F ** **(LDR指令半定型),匹配方式为HSM匹配,具体流程如图7所示。

图7 时钟配置定位实例

5 结 语

本文对ARM的BIN文件是否存在对某硬件模块的操控进行信息匹配定位,从基础信息的定位,到模块地址入口两个层次,实现对这些关键信息的定位。在第一时间就提示了是否存在恶意操作的可能。其次,在完成信息快速定位的基础上,展开代码局部分析,而不用对所有代码全部解析,极大地缩减了代码分析所耗时间。将HSM算法与BM、Sunday算法进行对比,针对ARM的特殊结构,通过实验证明了该算法的高效可靠,从而验证了敏感信息匹配模型的实用性。

参考文献

[1] 蔺毅翀.软件安全漏洞的自动化探测方法研究[D].合肥:中国科学技术大学,2005.

[2] 康凯,郭颖,崔宝江.基于XML的面向二进制漏洞模式形式化描述研究[J].信息网络安全,2012(12):21?24.

[3] 张显明.基于网络的恶意代码检测技术探析[J].电脑开发与应用,2013(7):27?29.

[4] 雷迟骏.基于启发式算法的恶意代码检测系统研究与实现[D].南京:南京邮电大学,2012.

[5] BOYER R S,MOORE J S.A fast string searching algorithm [J]. Communications of the ACM, 1977, 20(10): 762?772.

[6] DANIEL M. A very fast substring search algorithm [J]. Communications of the ACM, 1990, 33(8): 132?142.

[7] MU Yongmin, Ll Meigui, LIANG Qi.The survey of the pattern matching algorithm in intrusion detection system [J]. Aeta Electronica Sinica, 2006,34(12A): 2488?2490.