余凯,梁光明,杨世德
(国防科学技术大学电子科学与工程学院,湖南长沙410073)
摘要:相对于PC成熟的安全防护而言,嵌入式安全依旧处于薄弱状态。以ARM为研究对象,结合ARM指令体系的结构和特点,为实现对二进制可执行文件BIN中是否存在对硬件模块的操控,展开敏感性信息的匹配,预警恶意操作,并提出半定型建模匹配方式,加快了代码定位分析效率。
教育期刊网 http://www.jyqkw.com
关键词 :二进制可执行文件;ARM指令;敏感信息;半定型建模
中图分类号:TN702?34 文献标识码:A 文章编号:1004?373X(2015)15?0050?03
收稿日期:2015?01?29
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 明显可以看出,同一型的指令如MOV 和MVN 的机器码结构几乎一样,不同型的指令如CMP和ADD 的指令结构差异较大,所以对于不同指令的匹配应当具有针对性。结合ARM 32/16位指令结构,本文提出半定型建模匹配方式。针对不同的指令进行预匹配,即第一步仅匹配特征区域,对于不关心的区域进行选择性忽视,只有当预匹配成功后对该指令进行深层匹配。以32位指令为例,将单一32位二进制码拆分成若干位段,特征区域所在位段将其称作子串,进行信息匹配时,仅需对子串进行对比。其中数据类处理指令的半建模匹配位段如图2所示。
进行二进制信息匹配的过程中,对于这些机器码可以采用半定型建模方式进行匹配定位,即针对需要匹配的指令,只匹配有意义的位段,如第一步只匹配执行条件、指令标记码等,而立即数或寄存器等信息根据需要进行匹配,这样可以极大地提高匹配效率。
2 半定型匹配算法
传统的代码检测,使用各种模式匹配方法,实现方法归结为字符串匹配问题。由BF算法从左向右的逐字节比较,到Sunday算法从右向左比较的演变,解决了尽可能跳过更多的字符,加速匹配的问题。但这种方式,对于嵌入式的二进制代码检测而言并不高效。以ARM为例,其支持ARM和THUMB两种指令模式,分别为32位和16位代码格式。若干字节的跳转,在很多时候没有意义。针对ARM 的代码检测,其步长就应当固定为32或16,所以本文针对ARM二进制文件的特殊性,提出半定型匹配算法HSM,如图3所示。
半定型算法分为两种工作模式。第一种是全匹配模式,即匹配32 位字符数据;第二种是半定型匹配模式,即先匹配Char[0]和Char[1],判断指令格式,称之为预匹配,当指令类型匹配成功后,对Char[2]和Char[3]进行计算,得出偏移量,称之为二次匹配。
(1)全匹配模式
HSM 算法的匹配执行方式采用自左向右的方式,每32位对齐,假设在发生不匹配时S[i]≠ T[ j],1 ? i ? N,1 ? j ? M,如图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所示。
硬件地址存储形式为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所示。
4 实验与分析
4.1 算法性能
测试环境为VMware10 下的Red Hat EnterpriseLinux 6,内核版本为2.6.39,内存1.3 GB,宿主机为i5?4200M2.5 GHz,测试样本为U?boot 234 KB Bin文件,实验平台为TQ2440。选取BM、Sunday 算法以及每次移动32 b的BF 算法,与半定型算法HSM 进行匹配效率对比,对敏感信息,即关键寄存器地址进行匹配定位,实验结果如表1所示。
由表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所示。
5 结语
本文对ARM的BIN文件是否存在对某硬件模块的操控进行信息匹配定位,从基础信息的定位,到模块地址入口两个层次,实现对这些关键信息的定位。在第一时间就提示了是否存在恶意操作的可能。其次,在完成信息快速定位的基础上,展开代码局部分析,而不用对所有代码全部解析,极大地缩减了代码分析所耗时间。将HSM 算法与BM、Sunday算法进行对比,针对ARM 的特殊结构,通过实验证明了该算法的高效可靠,从而验证了敏感信息匹配模型的实用性。
教育期刊网 http://www.jyqkw.com
参考文献
[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]. Commu?nications of the ACM,1990,33(8):132?142.
[7] MU Yongmin,Ll Meigui,LIANG Qi. The survey of the pat?tern matching algorithm in intrusion detection system [J]. Aeta Electronica Sinica,2006,34(12A):2488?2490.
作者简介:余凯(1990—),男,安徽安庆人,硕士研究生。主要研究方向为通信与信息安全。
梁光明(1970—),男,湖南涟源人,博士,硕士生导师,副教授。主要研究方向为通信网信息安全。
杨世德(1991—),男,内蒙古鄂托克前旗人,硕士研究生。主要研究方向为通信网信息安全。