余凱+梁光明+楊世德
摘 要: 相對(duì)于PC成熟的安全防護(hù)而言,嵌入式安全依舊處于薄弱狀態(tài)。以ARM為研究對(duì)象,結(jié)合ARM指令體系的結(jié)構(gòu)和特點(diǎn),為實(shí)現(xiàn)對(duì)二進(jìn)制可執(zhí)行文件BIN中是否存在對(duì)硬件模塊的操控,展開(kāi)敏感性信息的匹配,預(yù)警惡意操作,并提出半定型建模匹配方式,加快了代碼定位分析效率。
關(guān)鍵詞: 二進(jìn)制可執(zhí)行文件; ARM指令; 敏感信息; 半定型建模
中圖分類(lèi)號(hào): TN702?34 文獻(xiàn)標(biāo)識(shí)碼: A 文章編號(hào): 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 引 言
隨著現(xiàn)代電子技術(shù)的不斷發(fā)展,信息系統(tǒng)規(guī)模和復(fù)雜度逐步增加,隨之而來(lái)的信息安全問(wèn)題的嚴(yán)重性也在不斷提高,軟件安全問(wèn)題顯得尤為突出[1]。出于對(duì)自身商業(yè)利益和知識(shí)產(chǎn)權(quán)的保護(hù),大部分軟件廠商并不會(huì)提供源代碼,因此對(duì)二進(jìn)制程序進(jìn)行安全檢測(cè)是當(dāng)前研究的一大主流方向[2]。
當(dāng)前隨著惡意代碼數(shù)量的增多,病毒庫(kù)越來(lái)越龐大,利用傳統(tǒng)的模式匹配算法導(dǎo)致耗費(fèi)的時(shí)間不斷增大,已經(jīng)不能滿足實(shí)際應(yīng)用。另外,隨著惡意代碼編寫(xiě)技術(shù)的發(fā)展,當(dāng)前的惡意代碼大多采用加密等技術(shù)對(duì)自身進(jìn)行保護(hù),這樣就更進(jìn)一步降低了傳統(tǒng)檢測(cè)方法的準(zhǔn)確性[3]。為了解決這一問(wèn)題,最有效的方法是歸納總結(jié)出一類(lèi)惡意代碼的行為特征,將傳統(tǒng)的二進(jìn)制特征匹配提升到行為特征匹配,才能利用盡可能少的特征檢測(cè)出盡可能多的惡意代碼[4]。常見(jiàn)嵌入式設(shè)備控制模塊有處理器模式設(shè)置、看門(mén)狗開(kāi)關(guān)、中斷開(kāi)關(guān)、MMU控制、時(shí)鐘控制等,這些模塊的控制入口都是敏感信息,通過(guò)對(duì)BIN文件這些敏感信息的匹配可以有效地對(duì)代碼可能存在的惡意操作進(jìn)行預(yù)警。
傳統(tǒng)的單模式匹配算法主要有BF,KMP,BM算法及Sunday算法。BF算法實(shí)現(xiàn)簡(jiǎn)單,但匹配效率很低;KMP算法比BF算法有所改進(jìn);BM算法則比KMP算法的檢測(cè)速度快3~5倍[5];在短模式匹配中,Sunday是目前速度最快的算法[6]。這些傳統(tǒng)方法不適合于二進(jìn)制文件的信息匹配[7],也沒(méi)有重定位功能。因此,本文結(jié)合ARM指令架構(gòu)特點(diǎn),提出半定型匹配算法,通過(guò)實(shí)驗(yàn)證明了該算法的可靠性和高效性。
1 半定型建模
源代碼可能千差萬(wàn)別,但經(jīng)過(guò)工具編譯成匯編語(yǔ)言時(shí),具有極大的相似性。一是主要體現(xiàn)在高級(jí)語(yǔ)言指令多樣,而且還在不斷擴(kuò)展,但匯編指令有限,單一的高級(jí)語(yǔ)言程序經(jīng)常由多條匯編語(yǔ)言組合而成,這些匯編指令很相似。二是體現(xiàn)在機(jī)器編譯的過(guò)程中會(huì)將代碼進(jìn)行優(yōu)化,使其符合標(biāo)準(zhǔn)編程格式,這樣使得編譯生成的匯編語(yǔ)言結(jié)構(gòu)相似。ARM數(shù)據(jù)類(lèi)指令格式解析,如圖1所示。其中,cond表示執(zhí)行條件;I表示shifter_operand是立即數(shù)還是寄存器;Opcode是指令標(biāo)記碼;S表示執(zhí)行結(jié)果是否影響CPRS;Rn表示源寄存器;Rd表示目標(biāo)寄存器;shifter_operand表示源操作數(shù)。
圖1 ARM機(jī)器碼指令格式
由圖1明顯可以看出,同一型的指令如MOV和MVN的機(jī)器碼結(jié)構(gòu)幾乎一樣,不同型的指令如CMP和ADD的指令結(jié)構(gòu)差異較大,所以對(duì)于不同指令的匹配應(yīng)當(dāng)具有針對(duì)性。結(jié)合ARM 32/16位指令結(jié)構(gòu),本文提出半定型建模匹配方式。針對(duì)不同的指令進(jìn)行預(yù)匹配,即第一步僅匹配特征區(qū)域,對(duì)于不關(guān)心的區(qū)域進(jìn)行選擇性忽視,只有當(dāng)預(yù)匹配成功后對(duì)該指令進(jìn)行深層匹配。以32位指令為例,將單一32位二進(jìn)制碼拆分成若干位段,特征區(qū)域所在位段將其稱(chēng)作子串,進(jìn)行信息匹配時(shí),僅需對(duì)子串進(jìn)行對(duì)比。其中數(shù)據(jù)類(lèi)處理指令的半建模匹配位段如圖2所示。
圖2 半定型匹配子串
進(jìn)行二進(jìn)制信息匹配的過(guò)程中,對(duì)于這些機(jī)器碼可以采用半定型建模方式進(jìn)行匹配定位,即針對(duì)需要匹配的指令,只匹配有意義的位段,如第一步只匹配執(zhí)行條件、指令標(biāo)記碼等,而立即數(shù)或寄存器等信息根據(jù)需要進(jìn)行匹配,這樣可以極大地提高匹配效率。
2 半定型匹配算法
傳統(tǒng)的代碼檢測(cè),使用各種模式匹配方法,實(shí)現(xiàn)方法歸結(jié)為字符串匹配問(wèn)題。由BF算法從左向右的逐字節(jié)比較,到Sunday算法從右向左比較的演變,解決了盡可能跳過(guò)更多的字符,加速匹配的問(wèn)題。但這種方式,對(duì)于嵌入式的二進(jìn)制代碼檢測(cè)而言并不高效。以ARM為例,其支持ARM和THUMB兩種指令模式,分別為32位和16位代碼格式。若干字節(jié)的跳轉(zhuǎn),在很多時(shí)候沒(méi)有意義。針對(duì)ARM的代碼檢測(cè),其步長(zhǎng)就應(yīng)當(dāng)固定為32或16,所以本文針對(duì)ARM二進(jìn)制文件的特殊性,提出半定型匹配算法HSM,如圖3所示。
半定型算法分為兩種工作模式。第一種是全匹配模式,即匹配32位字符數(shù)據(jù);第二種是半定型匹配模式,即先匹配Char[0]和Char[1],判斷指令格式,稱(chēng)之為預(yù)匹配,當(dāng)指令類(lèi)型匹配成功后,對(duì)Char[2]和Char[3]進(jìn)行計(jì)算,得出偏移量,稱(chēng)之為二次匹配。
圖3 半定型匹配結(jié)構(gòu)
(1) 全匹配模式
HSM算法的匹配執(zhí)行方式采用自左向右的方式,每32位對(duì)齊,假設(shè)在發(fā)生不匹配時(shí)[S[i]≠T[j],][1≤i≤N,][1≤j≤M,]如圖4所示。
圖4 算法不匹配
① 當(dāng)[S[i+4]=T[j],]移動(dòng)距離為4,即將[T]與下一組32位指令進(jìn)行比對(duì)。
② 當(dāng)[S[i+4]≠T[j]]時(shí),比對(duì)[S[i+8]]是否與[T[j]]相等,相等則移動(dòng)距離為8,不相等則繼續(xù)取下一組32位指令的前8位進(jìn)行對(duì)比。
從Char[0]到Char[3]依次匹配,當(dāng)出現(xiàn)不匹配則繼續(xù)匹配下一組主串的Char[0],直至匹配文件結(jié)束。
(2) 半定型匹配模式
對(duì)于硬件地址的賦值有兩種指令,一種使用MOV指令,另一種使用LDR偽指令。MOV要求立即數(shù)必須可由8位立即數(shù)偏移得到,可使用全匹配方式搜尋定位;LDR指令采用地址調(diào)用方式,對(duì)于所需賦值的立即數(shù)只要滿足32位就可以。假設(shè)在文件某處發(fā)生匹配時(shí)[S[i~i+3]=T[j~j+3],][1≤i≤N,][1≤j≤M。]如圖5所示。
圖5 在文件xxxH處匹配地址成功
硬件地址存儲(chǔ)形式為dword,當(dāng)匹配了硬件地址后,需要進(jìn)行二次匹配,定位出調(diào)用代碼,流程如下所示:
Step1:計(jì)算匹配文件總長(zhǎng)度,記為file_len,匹配處地址P小于file_len一半,進(jìn)入step2,否則進(jìn)入step3。
Step2:向上匹配E5 9F ** **,匹配成功時(shí),取當(dāng)前地址為PU。取出Char[2]第4位記為ror_num,將Char[3]轉(zhuǎn)換成32位無(wú)符號(hào)整形,并向右循環(huán)移位ror_num*2位,得到32位偏移值,記為offset。若offset大于file_len,則offset需改為Char[2]低4位與Char[3]拼接而成。計(jì)算PU+8+offset是否等于P,相等則返回PU并進(jìn)入step4,錯(cuò)誤則繼續(xù)向上匹配,直至文件首。向上匹配失敗,則進(jìn)入step3。
Step3:向下匹配E5 1F ** **,匹配成功時(shí),取當(dāng)前地址為PD。使用step2中方法得出offset。計(jì)算PD+8?offset是否等于P,相等則返回PD并進(jìn)入step4,錯(cuò)誤則繼續(xù)向下匹配,直至文件結(jié)束。
Step4:對(duì)兩處匹配結(jié)果進(jìn)行顯示,標(biāo)記匹配處在文件中的地址。
3 敏感信息檢測(cè)模型
裸機(jī)下的開(kāi)發(fā)過(guò)程中,開(kāi)發(fā)者可以采取匯編代碼與高級(jí)代碼混合編程,基于匯編的代碼在編譯后會(huì)進(jìn)行優(yōu)化,存在代碼結(jié)構(gòu)的微小改變;對(duì)于高級(jí)語(yǔ)言,開(kāi)發(fā)人員只負(fù)責(zé)調(diào)用函數(shù)完成程序編寫(xiě),編譯器會(huì)自動(dòng)生成優(yōu)化后的匯編代碼?;诟呒?jí)語(yǔ)言的源代碼經(jīng)過(guò)工具編譯后首先生成了ELF文件,由于ELF文件中包含了調(diào)試信息,所以可以反匯編成ASM文件。在有OS的嵌入式ARM中,可以直接運(yùn)行ELF文件。但是在無(wú)OS的嵌入式ARM中,當(dāng)處理器取出ELF中包含的調(diào)試信息時(shí),將無(wú)法響應(yīng)。所以為了能在無(wú)OS條件下執(zhí)行,將ELF中的調(diào)試信息去除,生成BIN文件。這時(shí)的BIN文件無(wú)法反匯編,從而不能使用傳統(tǒng)方法進(jìn)行代碼分析。本文提出對(duì)BIN中的敏感信息進(jìn)行匹配定位,主要是針對(duì)硬件底層模塊的定位,其模型如圖6所示。
圖6 敏感信息檢測(cè)模型
4 實(shí)驗(yàn)與分析
4.1 算法性能
測(cè)試環(huán)境為VMware10下的Red Hat Enterprise Linux 6,內(nèi)核版本為2.6.39,內(nèi)存1.3 GB,宿主機(jī)為i5?4200M 2.5 GHz,測(cè)試樣本為U?boot 234 KB Bin文件,實(shí)驗(yàn)平臺(tái)為T(mén)Q2440。選取BM、Sunday算法以及每次移動(dòng)32 b的BF算法,與半定型算法HSM進(jìn)行匹配效率對(duì)比,對(duì)敏感信息,即關(guān)鍵寄存器地址進(jìn)行匹配定位,實(shí)驗(yàn)結(jié)果如表1所示。
表1 匹配算法性能對(duì)比
[算法對(duì)比\&BM\&Sunday\&32 b BF\&HSM\&8位:
4c\&時(shí)間 /ns\&10 629 665\&6 377 799\&1 878 992\&1 253 660\&命中次數(shù)\&10 393\&10 393\&10 323\&10 323\&16位:
4c 00\&時(shí)間 /ns\&5 866 039\&4 512 338\&1 270 442\&908 382\&命中次數(shù)\&70\&70\&11\&11\&24位:
4c 00 00\&時(shí)間 /ns\&4 362 159\&3 231 229\&1 360 407\&786 552\&命中次數(shù)\&60\&60\&9\&9\&32位:
4c 00 00 14\&時(shí)間 /ns\&3 276 683\&2 839 347\&1 955 354\&566 721\&命中次數(shù)\&3\&3\&3\&3\&32位:
4c 00 00 00\&時(shí)間 /ns\&3 789 963\&3 216 407\&1 170 464\&486 563\&命中次數(shù)\&47\&47\&0\&0\&]
由表1可以得出,傳統(tǒng)字符串匹配算法在ARM二進(jìn)制文件中的匹配效率明顯低于后兩種方法,主要原因在于匹配了大量不符合匯編規(guī)范的字符串以及移動(dòng)距離設(shè)置不適合32 b環(huán)境。同時(shí)使用傳統(tǒng)字符串匹配方法,也存在誤判的情況。實(shí)驗(yàn)證明HSM算法可靠,效率表現(xiàn)良好。
4.2 外設(shè)模塊控制定位
對(duì)U?boot代碼解析,僅發(fā)現(xiàn)一處使用MOV指令,為0x56000010 LED控制地址,剩余模塊一律采用LDR格式。MOV格式的外設(shè)模塊具體控制指令基本位于硬件地址之后,定位簡(jiǎn)單;LDR格式涉及偏移,偏移范圍為+/-32 MB,當(dāng)定位到硬件地址或驅(qū)動(dòng)聲明時(shí),只能說(shuō)明有對(duì)此模塊的控制,具體控制指令需要進(jìn)行二次搜索。
以U?boot中時(shí)鐘頻率設(shè)置為例,第一次定位了4c 00 00 04MPLLCON地址,此處相對(duì)地址為814H,文件總長(zhǎng)度為3AD3CH,優(yōu)先選擇向上定位。匹配指令為E5 9F ** **(LDR指令半定型),匹配方式為HSM匹配,具體流程如圖7所示。
圖7 時(shí)鐘配置定位實(shí)例
5 結(jié) 語(yǔ)
本文對(duì)ARM的BIN文件是否存在對(duì)某硬件模塊的操控進(jìn)行信息匹配定位,從基礎(chǔ)信息的定位,到模塊地址入口兩個(gè)層次,實(shí)現(xiàn)對(duì)這些關(guān)鍵信息的定位。在第一時(shí)間就提示了是否存在惡意操作的可能。其次,在完成信息快速定位的基礎(chǔ)上,展開(kāi)代碼局部分析,而不用對(duì)所有代碼全部解析,極大地縮減了代碼分析所耗時(shí)間。將HSM算法與BM、Sunday算法進(jìn)行對(duì)比,針對(duì)ARM的特殊結(jié)構(gòu),通過(guò)實(shí)驗(yàn)證明了該算法的高效可靠,從而驗(yàn)證了敏感信息匹配模型的實(shí)用性。
參考文獻(xiàn)
[1] 藺毅翀.軟件安全漏洞的自動(dòng)化探測(cè)方法研究[D].合肥:中國(guó)科學(xué)技術(shù)大學(xué),2005.
[2] 康凱,郭穎,崔寶江.基于XML的面向二進(jìn)制漏洞模式形式化描述研究[J].信息網(wǎng)絡(luò)安全,2012(12):21?24.
[3] 張顯明.基于網(wǎng)絡(luò)的惡意代碼檢測(cè)技術(shù)探析[J].電腦開(kāi)發(fā)與應(yīng)用,2013(7):27?29.
[4] 雷遲駿.基于啟發(fā)式算法的惡意代碼檢測(cè)系統(tǒng)研究與實(shí)現(xiàn)[D].南京:南京郵電大學(xué),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.