国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于SM3的Android文件完整性檢測系統(tǒng)

2019-06-27 04:21楊中皇何便便
西安郵電大學(xué)學(xué)報 2019年6期
關(guān)鍵詞:源碼哈希寄存器

楊中皇, 何便便

(1. 高雄師范大學(xué) 軟件工程與管理學(xué)系,臺灣 高雄 824442;2.西安郵電大學(xué) 無線網(wǎng)絡(luò)安全技術(shù)國家工程實(shí)驗(yàn)室, 陜西 西安 710121)

Android是一種基于Linux平臺開放源代碼的操作系統(tǒng),其開源性給Android平臺帶來了各種各樣的風(fēng)險,如黑客通過攻擊智能手機(jī)應(yīng)用軟件提取用戶信息等[1]。根據(jù)安全公司G Date2017年調(diào)查數(shù)據(jù)顯示[2],市場已經(jīng)出現(xiàn)了350萬全新的 Android 惡意軟件,比上一年增長了約7.6%。惡意軟件在攻擊Android系統(tǒng)時會修改系統(tǒng)配置文件,以便再次進(jìn)入運(yùn)行時不被發(fā)現(xiàn),從而盜取敏感信息進(jìn)行非法交易。

目前,采用MD5哈希算法可檢測文件數(shù)據(jù)的完整性,在保證文件完整性的條件下,再進(jìn)行內(nèi)存數(shù)據(jù)完整性檢測,最終獲得數(shù)據(jù)完整性結(jié)果[3];基于模糊哈希的Android變種惡意軟件檢測方法[4]根據(jù)Apk中字符串以及函數(shù)長度分布特征,生成模糊哈希值,使得同類變種的惡意軟件間的哈希值相似。但是,上述兩種檢測都從軟件層面實(shí)現(xiàn)檢測,未從Android系統(tǒng)底層源碼層面實(shí)現(xiàn)檢測功能,而對系統(tǒng)內(nèi)核層實(shí)現(xiàn)文件完整性檢測比較安全且容易檢測。

本文擬設(shè)計一種基于SM3的Android文件完整性檢測系統(tǒng),通過修改Android開放源代碼項(xiàng)目,實(shí)現(xiàn)對設(shè)備的文件完整性檢測。利用SM3密碼雜湊算法[5]計算文件哈希值,將其存儲在內(nèi)存文件中。對文件進(jìn)行完整性檢測時,再次對文件進(jìn)行SM3密碼雜湊算法計算,生成新的哈希值,將其與存儲的哈希值進(jìn)行對比,檢測文件是否完整,以此發(fā)現(xiàn)入侵行為。

1 文件完整性檢測

文件完整性檢測[6]是指對于一個沒有被攻擊數(shù)據(jù)信息完好的系統(tǒng),選取系統(tǒng)中的關(guān)鍵文件,采用哈希算法對關(guān)鍵文件進(jìn)行計算,生成哈希值并保存。檢測時對比關(guān)鍵文件重新生成的哈希值與保存的哈希值,如果不相同,說明該關(guān)鍵文件被篡改,文件完整性被破環(huán)。

2 SM3密碼雜湊算法

SM3密碼雜湊算法采用分組和迭代的方式,將消息經(jīng)過填充、擴(kuò)展和迭代壓縮,最終生成256比特的固定長度哈希值[7]。

2.1 消息填充

對于長度為l的消息m,將比特“1”添加到消息的末尾,再添加k個“0”,k是滿足

l+1+k=448 mod 512

的最小非負(fù)整數(shù),最后再添加一個64位比特串,由長度l的二進(jìn)制表示。填充后的消息m′的比特長度為512的倍數(shù),將消息m′按512比特分組[7],即

m′=M0M1…Mn-1,

其中n=(l+k+65)/512。

2.2 消息擴(kuò)展

分組消息Mi擴(kuò)展生成W0,W1,…,W67,W′0,…,W′63等132個字的具體步驟如下,其中1個字表示32位的比特串。

步驟1將Mi按32比特劃分為16個字W0,W1,…,W15。

步驟2在W0,W1,…,W15的基礎(chǔ)上,擴(kuò)展Mi。根據(jù)前52個字的生成表達(dá)式[8]

Wj=P1[Wj-16?Wj-9?(Wj-5<<<15)]?(Wj-13<<<7)?Wj-6(16≤j≤67),

計算得出W16,W17,…,W67。

步驟3根據(jù)后64個字的生成表達(dá)式[8]

W′j=Wj?Wj+4, 0≤j≤63,

計算得出W′0,W′1,…,W′63。

將每個分組消息按照上述步驟擴(kuò)展為132個字,用于壓縮函數(shù)的計算。

2.3 消息壓縮與迭代

令A(yù)、B、C、D、E、F、G和H均為32位寄存器;S1,S2,T1和T2為中間變量,分別表示為

S1=[(A<<<12)+E+(Tj<<

利用壓縮函數(shù)

V(i+1)=L(V(i),Mi), 0≤i≤n-1,

分別計算寄存器A、B、C、D、E、F、G和H的值。

1)分別將V(i)值賦給寄存器A、B、C、D、E、F、G和H。先將初始值V(0)賦給寄存器,則寄存器的初始化值可表示為

A=7380166f,B=4914b2b9,
C=172442d7,D=da8a0600,
E=a96f30bc,F(xiàn)=163138aa,
G=e38dee4d,H=b0fb0e4e。

2)計算新一輪寄存器的值。寄存器D的值是上一輪寄存器C的值;寄存器C的值是將上一輪寄存器B的值循環(huán)左移9比特;寄存器B的值是上一輪寄存器A的值;寄存器A的值是中間變量T1賦的值;寄存器H的值是上一輪寄存器G的值;寄存器G值是將上一輪寄存器F的值循環(huán)左移19比特;寄存器F的值是上一輪寄存器E的值;寄存器E的值由置換函數(shù)[8]

P0(X)=X?(X<<<9)?(X<<<17),0≤j≤63,X=T2。

計算得出。將A、B、C、D、E、F、G和H寄存器新一輪的值,用于迭代運(yùn)算。

3)將新一輪A、B、C、D、E、F、G和H寄存器的值與V(i)進(jìn)行異或運(yùn)算得出的值賦給V(i+1),進(jìn)行迭代運(yùn)算。

2.4 輸出

當(dāng)消息的每個512分組處理完成后,最后一個分組的輸出就是消息的哈希值,即

ABCDEFGH←V(n),

哈希值

y=ABCDEFGH。

3 系統(tǒng)設(shè)計與實(shí)現(xiàn)

3.1 系統(tǒng)設(shè)計

基于SM3的Android文件完整性檢測系統(tǒng)主要由創(chuàng)建內(nèi)存文件、計算文件SM3值、檢測、上報文件及更新等5個部分組成。模型如圖1所示。

圖1 Android文件完整性檢測模型

在內(nèi)存中創(chuàng)建一個文件,選擇需要檢測的文件,使用SM3密碼雜湊算法,計算得出文件哈希值并自動保存在內(nèi)存文件中。對文件進(jìn)行檢測時,需要重新對選擇的文件進(jìn)行SM3計算,將重新生成的哈希值與保存的哈希值進(jìn)行對比,若不同,則系統(tǒng)會進(jìn)行提示。第一次檢測時會生成一個上報文件,里面記錄完整性被破壞的文件信息,即文件存儲位置及文件名。檢測完成后,更新內(nèi)存文件哈希值,以免影響下一次檢測。

創(chuàng)建的內(nèi)存文件位于Android的內(nèi)部存儲中,其他應(yīng)用無法訪問這些數(shù)據(jù)。所以,將文件哈希值存儲內(nèi)存文件中,安全性增加。

3.2 系統(tǒng)應(yīng)用實(shí)現(xiàn)

文件完整性檢測系統(tǒng)在Ubuntu平臺上使用Android Studio開發(fā)環(huán)境開發(fā)應(yīng)用程序,利用Android開放源代碼項(xiàng)目(Android Open Source Project,AOSP)平臺[9-10],在Android 9.0源代碼基礎(chǔ)上添加文件完整性檢測應(yīng)用程序,將該應(yīng)用改為系統(tǒng)應(yīng)用,并編譯Android 9.0源代碼。

3.2.1 AOSP下載及編譯

1)下載源碼

考慮到Android官方網(wǎng)站國內(nèi)網(wǎng)站無法直接訪問,系統(tǒng)使用清華鏡像網(wǎng)站下載repo工具獲取Android 9源碼的具體步驟如下。

步驟1在清華鏡像網(wǎng)站下載repo工具并賦予其權(quán)限。將repo工具內(nèi)的REPO_URL地址改為清華鏡像源地址[11]http://mirrors.tuna.tsinghua.edu.cn/git/git-repo/。

步驟2建立工作目錄“Android_9”,倉庫初始化命令后,出現(xiàn)Android源碼版本信息。

步驟3選擇需要的Android版本,并進(jìn)行同步源碼樹。當(dāng)源碼同步結(jié)束后,工作目錄里就是源碼文件。

2)編譯Android 9.0源碼

編譯Android 9.0源碼時,需要在Ubuntu平臺配置編譯環(huán)境,如安裝OpenJDK8軟件和Android官方網(wǎng)站提供的依賴包[12-14]。具體編譯源碼步驟如下。

步驟1配置好編譯環(huán)境后,執(zhí)行#source build/envsetup.sh命令編譯源碼文件。

步驟2執(zhí)行l(wèi)unch選擇需要編譯設(shè)備的對應(yīng)編號,Pixel2手機(jī)是46。

步驟3設(shè)備對應(yīng)編號選擇完后,使用make命令即源碼開始編譯。

3.2.2 刷機(jī)

源碼編譯成功后在源碼目錄下會有/out目錄,此目錄下有系統(tǒng)鏡像文件,可以將這些鏡像文件“刷入”設(shè)備中。

刷機(jī)時需要打開“開發(fā)者選項(xiàng)”中的設(shè)備“USB調(diào)試”,將設(shè)備數(shù)據(jù)線連接計算機(jī)后,執(zhí)行以下操作。

1)設(shè)備處于Bootloader模式,使用命令#fastboot oem unlock對Bootloader進(jìn)行解鎖。

2)解鎖后使用命令#fastboot flashall -w將編譯好的鏡像文件一起刷入設(shè)備。

3.2.3 系統(tǒng)應(yīng)用的實(shí)現(xiàn)

文件檢測應(yīng)用開發(fā)完成后,需要將應(yīng)用置于Android源碼中再次編譯出新的鏡像文件,在刷機(jī)之后,文件檢測應(yīng)用將成為系統(tǒng)應(yīng)用,具體方法如下。

1)將“FileDetection” 代碼加入到Android_9/packages/apps中。

2)在FileDetection代碼的根目錄下,新建Android.mk文件,內(nèi)容為

LOCAL_PATH:=

$(call my-dir) include $(CLEAR_VARS)

LOCAL_MODULE_TAGS:=user

LOCAL_SRC_FILES:=

$(call all-java-files-under,src)/

LOCAL_PACKAGE_NAME:=

FileDetectioninclude $(BUILD_PACKAGE)

3)在Android_9/build/target/product目錄中,修改core.mk、min_dev.mk和sdk.mk文件,將工具代碼加入其中。

4)進(jìn)入Android源碼根目錄,重新編譯源碼,最后使用“make snod”命令,重新編譯系統(tǒng)鏡像。編譯完成后重新刷機(jī),文件完整性檢測應(yīng)用成為系統(tǒng)應(yīng)用程序。

4 系統(tǒng)功能測試

系統(tǒng)功能測試環(huán)境由Android 9.0系統(tǒng)和Pixel2設(shè)備組成。Android 9.0系統(tǒng)內(nèi)置文件完整性檢測應(yīng)用程序,在Pixel2設(shè)備中運(yùn)行并測試。

系統(tǒng)應(yīng)用程序使用SM3密碼雜湊算法對初次登陸密鑰進(jìn)行哈希運(yùn)算并保存,再一次登陸時,將輸入密鑰進(jìn)行SM3計算,生成的哈希值和初始登陸保存的哈希值進(jìn)行對比,如果哈希值一致,則登陸成功。進(jìn)入系統(tǒng)主界面,進(jìn)行創(chuàng)建文件、文件選擇、檢測和更新等4個功能。選取名為aaa、bbb、ccc、ddd和eee 等5個文件對系統(tǒng)功能進(jìn)行測試。

1)創(chuàng)建文件

在Android設(shè)備內(nèi)存中,創(chuàng)建名為Hash的內(nèi)存文件,具體操作如圖2所示。

圖2 創(chuàng)建文件

2)文件選擇

通過“文件選擇”按鈕進(jìn)入文件管理器,選取5個測試文件進(jìn)行SM3計算,生成的哈希值自動保存在Hash文件中。具體實(shí)現(xiàn)的界面分別如圖3和圖4所示,生成的哈希值如表1所示。

圖3 選取測試文件

圖4 SM3計算

表1 文件的哈希值

3)檢測

對5個文件進(jìn)行刪除、修改和增添,通過修改文件內(nèi)容進(jìn)行文件完整性檢測。重新對5個文件進(jìn)行SM3計算,生成新的哈希值如表2所示。檢測時,將新的哈希值和保存在Hash文件中哈希值進(jìn)行比較。系統(tǒng)第一次進(jìn)行檢測,生成上報文件,如圖5所示,再將比較結(jié)果記錄上報文件中,上報文件內(nèi)容如圖6所示。

表2 文件的新哈希值

圖5 生成的上報文件

圖6 上報文件內(nèi)容

4)更新

檢測完成后,將內(nèi)存中的哈希值進(jìn)行更新,以便下次檢測時不再報告上次檢測結(jié)果。

綜上系統(tǒng)功能測試結(jié)果,應(yīng)用程序中的創(chuàng)建文件、文件選擇、檢測和更新的功能都可實(shí)現(xiàn)并使用。從表1和表2可以看出,哈希值發(fā)生變化的文件有aaa、bbb、ccc、ddd和eee,上報文件記錄結(jié)果也是aaa、bbb、ccc、 ddd和eee,表明系統(tǒng)應(yīng)用在Android系統(tǒng)上運(yùn)行良好且功能均可實(shí)現(xiàn)。

5 系統(tǒng)性能測試及分析

基于SM3的文件完成性檢測系統(tǒng)在Android Studio環(huán)境下使用C語言開發(fā)。服務(wù)器使用Ubuntu操作系統(tǒng),修改和編譯Android 9.0源碼,將應(yīng)用改為系統(tǒng)應(yīng)用。在Pixel2設(shè)備上對系統(tǒng)應(yīng)用進(jìn)行功能測試和效能測試。

5.1 測試環(huán)境

設(shè)備CPU的頻率隨著功耗時刻變化,將會對測試結(jié)果造成影響,因此在測試前,盡可能清除設(shè)備中的應(yīng)用進(jìn)程并關(guān)閉WiFi和藍(lán)牙服務(wù)等設(shè)置[15]。測試環(huán)境如表3所示。

表3 測試環(huán)境

Pixel2設(shè)備為高通驍龍835處理器、4 G 運(yùn)行內(nèi)存和128 GB內(nèi)置存儲。

5.2 測試結(jié)果

基于SM3的文件完整性檢測系統(tǒng)在Android 9.0系統(tǒng)上運(yùn)行,使用Pixel 2手機(jī)的測試結(jié)果為系統(tǒng)每秒可以計算43.73 MB的文件,即C語言實(shí)現(xiàn)的SM3算法對文件Hash計算的速率為43.73 M/s。在相同環(huán)境下,使用Java語言實(shí)現(xiàn)的SM3算法對文件Hash計算的速率為5.89 M/s,即每秒可計算大小為5.89 MB的文件。

從測試結(jié)果中可以得出,使用C語言實(shí)現(xiàn)的SM3算法對文件Hash計算速率高于Java語言實(shí)現(xiàn)的速率。因此,文件完整性檢測系統(tǒng)使用C語言實(shí)現(xiàn)比較高效,可以提高文件檢測速率。

6 結(jié)語

基于SM3的Android文件完整性檢測系統(tǒng),利用SM3密碼雜湊算法計算文件的哈希值并保存,通過對比保存的哈希值和新生成的哈希值,判斷文件的完整性。通過修改Android開放源代碼項(xiàng)目,從Android系統(tǒng)內(nèi)核進(jìn)行文件完整性檢測。測試結(jié)果表明,該系統(tǒng)應(yīng)用內(nèi)置Android 9.0系統(tǒng)上運(yùn)行良好,文件完整性檢測功能可實(shí)現(xiàn),使用C語言實(shí)現(xiàn)的SM3算法對文件Hash計算的速率優(yōu)于Java語言。

猜你喜歡
源碼哈希寄存器
面向數(shù)據(jù)可靠傳輸?shù)母咦g碼率帶反饋的LT碼
STM32和51單片機(jī)寄存器映射原理異同分析
基于特征選擇的局部敏感哈希位選擇算法
國內(nèi)一站式工程設(shè)備租賃平臺眾能聯(lián)合完成C2、C3兩輪融資
哈希值處理 功能全面更易用
淺談開源操作系統(tǒng)的歷史
文件哈希值處理一條龍
企業(yè)如何保護(hù)源碼
Lite寄存器模型的設(shè)計與實(shí)現(xiàn)
移位寄存器及算術(shù)運(yùn)算應(yīng)用