一種Android軟件用戶登錄界面安全性檢測方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及移動(dòng)終端應(yīng)用安全領(lǐng)域,更具體地涉及一種用于Android軟件上檢測 登錄界面安全性的方法。
【背景技術(shù)】
[0002] 目前,隨著移動(dòng)終端和移動(dòng)操作系統(tǒng)的日益普及,移動(dòng)終端應(yīng)用數(shù)量呈爆發(fā)式增 長,然而移動(dòng)應(yīng)用的安全問題也隨之愈發(fā)嚴(yán)重,發(fā)生在移動(dòng)終端應(yīng)用上的密碼賬戶等敏感 數(shù)據(jù)泄露事件時(shí)有發(fā)生,給廣大用戶的財(cái)產(chǎn)和隱私安全帶來了極大的威脅。Android平臺(tái)是 目前最流行的智能移動(dòng)終端平臺(tái),針對(duì)Android系統(tǒng)的開發(fā)的應(yīng)用更是占了大多數(shù),所以 Android軟件的安全性對(duì)移動(dòng)互聯(lián)網(wǎng)的安全發(fā)展以及移動(dòng)終端用戶的隱私安全至關(guān)重要。
[0003] 當(dāng)前很多Android應(yīng)用程序都需要服務(wù)器端的支持,通過客戶端與服務(wù)器的通信 來達(dá)到更新和保存數(shù)據(jù)的目的。為了實(shí)現(xiàn)安全通信和區(qū)分用戶,很多開發(fā)者在自己的應(yīng)用 中加入了登錄界面,用戶在身份驗(yàn)證通過后方可使用軟件。然而,即使一個(gè)簡單的登錄機(jī) 制,也會(huì)涉及到很多安全問題,開發(fā)者一旦沒有考慮全面,就有可能會(huì)給用戶帶來嚴(yán)重的損 失。
[0004] 傳統(tǒng)的Android應(yīng)用檢測方法都是對(duì)apk文件(安卓軟件安裝包)進(jìn)行整體性的 檢測,其速度和效率都會(huì)因?yàn)楦采w范圍廣和檢測任務(wù)量大等問題受到影響。登錄機(jī)制作為 一個(gè)大多數(shù)Android應(yīng)用普遍采用的方法,從保護(hù)用戶隱私和賬戶安全的角度,都非常有 必要設(shè)計(jì)出一種更加專一和高效的針對(duì)Android應(yīng)用登錄頁面的安全性檢測方法。
【發(fā)明內(nèi)容】
[0005] 針對(duì)上述問題,本發(fā)明的目的在于檢測Android軟件中登錄頁面設(shè)計(jì)及相關(guān)登錄 機(jī)制存在的安全問題,它可以檢測出多種登錄機(jī)制相關(guān)的的漏洞,包括登錄繞過漏洞,密碼 明文傳輸,賬戶密碼暴力破解等。本發(fā)明將整個(gè)登錄過程分為登錄前處理、數(shù)據(jù)包傳輸和登 錄后處理三個(gè)階段,結(jié)合這三個(gè)過程可能出現(xiàn)的安全漏洞,提出了一套檢測模型,并將整個(gè) 檢測流程模塊化,通過對(duì)代碼分析以及登錄的反饋結(jié)果進(jìn)行記錄,進(jìn)而對(duì)可能出現(xiàn)的安全 問題進(jìn)行定位,最后得出檢測結(jié)果。
[0006] 根據(jù)以上目的,實(shí)現(xiàn)本發(fā)明的技術(shù)方案是:
[0007] 一種Android軟件用戶登錄界面安全性檢測方法,其步驟為:
[0008] 1)用靜態(tài)分析方法反編譯apk安裝包,得到軟件的布局文件(xml格式)和smali 代碼(其中布局文件是安卓軟件安裝包中用來描述用戶界面的文件,smali代碼是Android 代碼反編譯后的中間代碼),通過分析布局文件和smali代碼,可以得到登錄頁面相關(guān)的布 局文件和代碼,其具體方法在后文中會(huì)有詳細(xì)描述。
[0009] 2)分析和跟蹤登錄相關(guān)代碼段,將整個(gè)登錄檢測過程分為登錄前檢測,數(shù)據(jù)包傳 輸檢測以及登錄后檢測三個(gè)階段,根據(jù)每個(gè)階段的特點(diǎn)進(jìn)行對(duì)應(yīng)的漏洞檢測,記錄代碼執(zhí) 行的結(jié)果,最后根據(jù)每個(gè)階段的執(zhí)行結(jié)果來判斷是否存在相關(guān)漏洞。
[0010] 具體來說,上述三個(gè)檢測階段的主要內(nèi)容為:
[0011] a)登錄前檢測:這一階段主要檢測當(dāng)前的登錄環(huán)境是否安全,其內(nèi)容包括用戶輸 入的密碼是否明文顯示,是否采用https協(xié)議,是否存在登錄繞過漏洞等。其中,密碼是否 明文顯示可通過檢測EditText的屬性來判斷,是否采用https協(xié)議可通過跟蹤代碼中是否 包含HttpsURLConnection以及X509TrustManager等實(shí)現(xiàn)https協(xié)議的必要對(duì)象來判斷, 是否存在登錄繞過漏洞可通過跟蹤登錄代碼塊中代碼的執(zhí)行路徑來判斷(詳細(xì)步驟參見 后文)。
[0012] b)數(shù)據(jù)包傳輸檢測:這一階段通過跟蹤HttpURLConnection或HttpClient對(duì)象 的調(diào)用來獲取登錄時(shí)要發(fā)送的http數(shù)據(jù)包,根據(jù)數(shù)據(jù)包發(fā)送前后密碼字段的變化以及服 務(wù)器端返回的字段來檢測是否存在相應(yīng)漏洞。通過對(duì)比用戶輸入的密碼和數(shù)據(jù)包中的密 碼字段來判斷是否實(shí)現(xiàn)加密傳輸,然后多次重放不同密碼的數(shù)據(jù)包,根據(jù)服務(wù)器端返回的 字段來判斷是否存在密碼暴力破解問題,通過構(gòu)造特殊密碼發(fā)包來判斷是否存在注入漏洞 等。
[0013] c)登錄后檢測:這一階段主要用來檢測登錄完成后密碼的處理是否安全。如果登 錄完成后密碼未做任何處理可跳過這一階段,如果密碼保存在本地文件,可通過檢測密碼 是否明文保存以及保存密碼的文件權(quán)限來判斷其安全性。
[0014] 與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果為:
[0015] 本發(fā)明通過對(duì)Android軟件登錄機(jī)制的剖析,將檢測過程對(duì)應(yīng)的分為登錄前檢 測,數(shù)據(jù)包傳輸檢測以及登錄后檢測三個(gè)階段,其覆蓋的檢測點(diǎn)多,檢測較為全面。另外,本 發(fā)明是專門針對(duì)Android軟件登錄頁面的安全性進(jìn)行檢測,其檢測效率和準(zhǔn)確性較高。
【附圖說明】
[0016] 圖1為Android軟件登錄界面整體檢測流程圖;
[0017] 圖2為登錄前安全性檢測流程圖。
[0018] 圖3為數(shù)據(jù)包傳輸過程中的安全性檢測流程圖。
[0019] 圖4為登錄完成后的安全性檢測流程圖。
【具體實(shí)施方式】
[0020] 下面通過具體實(shí)施例和附圖,對(duì)本發(fā)明做進(jìn)一步詳細(xì)說明。
[0021] 圖1是本發(fā)明方法的總體流程圖。首先分析apk安裝包,得到登錄頁面相關(guān)的布 局文件和代碼,然后分析和跟蹤登錄相關(guān)代碼段,將將整個(gè)登錄檢測過程分為登錄前檢測, 數(shù)據(jù)包傳輸檢測以及登錄后檢測三個(gè)階段,根據(jù)每個(gè)階段的特點(diǎn)進(jìn)行對(duì)應(yīng)的漏洞檢測,記 錄代碼執(zhí)行的結(jié)果,最后根據(jù)每個(gè)階段的執(zhí)行結(jié)果來判斷是否存在相關(guān)漏洞。下面具體說 明各個(gè)步驟。
[0022] 1)首先反編譯apk文件,得到所有的布局文件和smali代碼,遍歷所有的布局文 件,根據(jù)登錄界面的一些共性特征,例如a)通常的登錄界面有用戶名和密碼兩個(gè)EditText 元素(輸入框),b)界面通常有"login"或"登錄"Button(按鈕),c)其他特征等,進(jìn)行匹 配,從而找到登錄頁面對(duì)應(yīng)的布局文件。根據(jù)EditText和Button的ID,搜索所有的smali 代碼,可進(jìn)一步定位到登錄相關(guān)代碼片段。
[0023] 例如,常見的登錄頁面一般都包含三個(gè)元素:賬號(hào)輸入框,密碼輸入框以及登錄按 鈕,可根據(jù)這一特征對(duì)APK中的布局文件進(jìn)行遍歷,直至找到設(shè)計(jì)登錄界面的布局文件(例 如login,xml)為止。假設(shè)login,xml中密碼框的ID值為0x7f040001,那么在smali代碼 中搜索此ID,其中包含這個(gè)ID且由findViewByld這個(gè)函數(shù)開始的代碼段,即為對(duì)用戶輸入 的密碼進(jìn)行處理的代碼段,同樣方法,通過跟蹤登錄Button的ID以及OnClick事件可以定 位處理登錄過程的相關(guān)代碼。若這些代碼段中調(diào)用了其他方法(非API函數(shù)),那么這些方 法也包含在登錄相關(guān)代碼中,可采用遞歸的方法來獲取到。
[0024] 2)進(jìn)一步進(jìn)入登錄前檢測階段,其具體過程如圖2所示。
[0025] 首先檢測密碼是否明文顯示。利用上述方法找到登錄界面的布局文件,對(duì)布局文 件中密碼框的屬性進(jìn)行檢測,如果其android:pas