一種Apk安全風險自動化靜態審計系統以及方法與流程
2023-05-09 21:25:16

本發明涉及移動信息安全技術領域,特別涉及一種apk安全風險自動化靜態審計系統以及方法。
背景技術:
隨著移動網際網路的發展,移動終端安全也越來越受到關注。特別是android系統的快速發展,使得android平臺逐漸成為了世界上第一大的移動終端平臺,產品覆蓋了機頂盒、手機、平板,以及各種智能終端,從各個角度影響著人們的生活。而且這些智能終端的功能越發的強大,包括了語音通話、數據業務、nfc近場通訊等。android智能終端已經深入的進入到了我們每個人的生活中,支付類服務、生活類服務、地圖類服務、娛樂類服務、個人信息類服務等等。在這種情況下,app應用程式的使用者日益增加,與此同時,app開發者運營商和android手機用戶所面臨的安全問題日益增加。一方面由於android應用程式開發者水平參差不齊,開發者並沒有統一的編碼規範要求,開發者本身的安全意識相對薄弱,以及開發者會有意無意濫用權限;另一方面,由於一些不法分子故意利用、製造不安全的app應用程式,部分惡意代碼還會通過利用廠商開發的系統應用的漏洞獲取高權限,進一步危害用戶的隱私安全,因此對android源碼和app應用程式等這些應用程式的安全審計行為越來越重要。
現有技術中,主要有以下兩種方式來對基於android的應用程式進行審計:
一種是通過人工審計,主要基於有經驗的開發人員的代碼走讀和單元測試來發現原始碼邏輯安全性、審計違反程序規範的原始碼,測試人員人工的滲透測試來發現程序錯誤,安全漏洞。人工代碼審計的方法人工成本高、效率低,而且依賴於開發和測試人員水平的高低,應用程式的質量難以把控。
另一種是收集系統日誌和app應用程式的運行日誌,或者對反編譯日誌信息進行還原,得到原始日誌信息;將原始日誌信息和運行日誌信息統一輸出,得到最終日誌信息;根據審計日誌信息白名單對最終日誌信息進行過濾,確定待審計的日誌信息;利用所述待審計的日誌信息進行android應用的審計。例如,公開號為cn105653943a的專利提供的一種android應用的日誌審計方法。這種審查方式一方面需要依賴作業系統日誌模塊和app運行日誌,日誌信息量大,冗餘信息過多,因此還需對日誌進行大量且複雜的分析工作,才能正確地分析出app的惡意行為,該方法也對代碼的規範性無法審計。另一方面需要先運行或者模擬運行app一段相對較長的時間,收集足夠多的日誌才能更全面的審計app的行為,在運行階段才能發現app的安全問題,存在著審計系統審計粒度不夠精細,審計的安全性和靈活性等方面存在不足的問題。
技術實現要素:
針對以上問題,本發明專利目的在於設計了一種apk安全風險自動化靜態審計系統以及方法,可以快速、有效地對應用程式進行安全審計分析,具有很強的實用性。
本發明具體的技術方案如下:
一種apk安全風險自動化靜態審計方法,包括如下步驟:
步驟s101,反編譯出apk的androidmanifest.xml、classes.dex和資源文件,讀取其dalvik字節碼和androidmanifest.xml文件,以所述androidmanifest.xml文件作為函數入口解析所有的函數調用指令並生成基本函數調用圖;
步驟s102,將apk中使用到的具有異步性質的調用函數、生命周期相關的函數的android庫都加入所述基本函數調用圖中,得到擴展函數調用圖;
步驟s103,對所述擴展函數調用圖中的代碼路徑進行過濾,得到包含可能汙點數據傳播行為的可疑路徑集合;
步驟s104,汙點分析器對可疑路徑集合中每條可疑路徑函數的字節碼指令進行模擬執行,基於內存對象模型進行汙點分析,並準確的檢測汙點數據信息以及汙點數據傳播行為。
具體的,本發明所述基於內存對象模型進行汙點分析,進一步包括:
當汙點分析器遇到包含未知值的未知條件分支時,引入模糊規則來進行控制流的決策,將未知條件分支分為未知值分支、無限循環分支和無限遞歸分支三種模式並分別進行處理。
具體的,本發明所述將未知條件分支分為未知值分支、無限循環分支和無限遞歸分支三種模式並分別進行處理,具體包括:
未知值分支重建上下文環境,恢復到已知分支狀態;
無限循環分支設定循環最大次數閥值p,當計數達到p時,跳出循環,繼續執行後續字節碼;
無限遞歸設定遞歸最大深度閥值q,當計數達到最大深度q時,中止遞歸,恢復後續字節碼執行。
具體的,本發明所述方法還包括:
步驟s105,根據檢測的汙點數據信息以及汙點數據傳播行為結果,輸出檢測報告。
一種apk安全風險自動化靜態審計系統,包括web應用伺服器、文件伺服器和審計伺服器;其中:
所述web應用伺服器用於用戶登錄以及將待測應用程式的apk文件發送給審計伺服器;
所述文件伺服器用於存儲所述待測應用程式的apk文件;
所述審計伺服器用於將所述web應用伺服器發送來的apk文件進行解析,反編譯出dalvik字節碼和androidmanifest.xml文件,並以androidmanifest.xml文件作為函數入口解析所有的函數調用指令生成基本函數調用圖;同時,將apk中使用到的具有異步性質的調用函數、生命周期相關的函數的android庫都加入所述基本函數調用圖中,得到擴展函數調用圖;對所述擴展函數調用圖中的代碼路徑進行過濾,得到包含可能汙點數據傳播行為的可疑路徑集合;以及對所述可疑路徑集合中每條可疑路徑函數的字節碼指令進行模擬執行,基於內存對象模型進行汙點分析,並準確的檢測汙點數據信息以及汙點數據傳播行為。
具體的,本發明所述擴展函數調用圖包含dalvik字節碼執行中遇到的所有的顯式和隱式的控制流以及所有的代碼路徑。
具體的,本發明所述審計伺服器包括:
解析模塊,用於對所述待測應用程式的apk文件進行解析,反編譯出dalvik字節碼和androidmanifest.xml文件;
函數調用圖生成模塊,用於以androidmanifest.xml文件作為函數入口解析所有函數調用指令生成基本函數調用圖;同時,將apk中使用到的具有異步性質的調用函數、生命周期相關的函數的android庫都加入所述基本函數調用圖中,得到擴展函數調用圖;
過濾模塊,用於對所述擴展函數調用圖中的代碼路徑進行過濾,得到包含可能汙點數據傳播行為的可疑路徑集合;
汙點分析模塊,用於對所述可疑路徑集合中每條可疑路徑函數的字節碼指令進行模擬執行,基於內存對象模型進行汙點分析,並準確的檢測汙點數據信息以及汙點數據傳播行為。
具體的,本發明所述汙點分析模塊進一步包括:
當遇到包含未知值的未知條件分支時,引入模糊規則來進行控制流的決策,將未知條件分支分為未知值分支、無限循環分支和無限遞歸分支三種模式並分別進行處理。
具體的,本發明所述審計伺服器還包括:
安全風險審計報告模塊,用於根據檢測的汙點數據信息以及汙點數據傳播行為結果,輸出檢測報告。
本發明提供的應用程式自動化靜態審計系統及方法與現有技術相比,可以快速、有效地對應用程式進行安全審計分析,一方面能夠審計應用程式代碼編寫規範性、組件暴露漏洞、組件權限濫用、代碼執行漏洞、密碼算法誤用、ssl繞過、弱加密、混淆代碼、硬編碼的密碼、危險api的不當使用、sql注入、敏感信息/個人信息洩露、不安全的文件存儲多方面的安全問題;另一方面,該系統能對應用程式代碼進行深度掃描,審計發現程式設計師編寫程序的不規範代碼和對上述應用程式安全問題進行自審查,不僅能降低應用程式安全檢測的工作量,還能更快更早的發現漏洞,並且不需要動態審計系統或者方法那樣耗時,審查效率高,可以減輕工作量。
附圖說明
以下參照附圖對本發明實施例作進一步說明,其中:
圖1是本發明一種apk安全風險自動化靜態審計方法的流程圖;
圖2是本發明一種apk安全風險自動化靜態審計系統的模塊圖;
圖3是本發明一種apk安全風險自動化靜態審計系統審計伺服器的模塊圖。
具體實施方式
下面結合附圖和具體實施例對本發明作進一步的詳細說明。
本發明提出了一種apk安全風險自動化靜態審計系統以及方法,該方法在flowdroid靜態汙點分析的基礎上,flowdroid汙點分析在處理對象域或數組的訪問時,通過反向別名分析來處理對象和數組引用問題,時間複雜度上升到o(n2)。本方法在此基礎上引入了內存對象模型和模糊分支分析,內存對象模型的引入,將處理對象域或數組的時間複雜度降為o(n),並且將異步調用函數、android應用程式生命周期相關的函數納入審計範圍,擴大對app的審計覆蓋範圍;模糊分支分析的引入解決了在汙點路徑過濾過程中遇到的未知值分支、無限循環分支和無限遞歸分支檢測問題,提高了檢測速度以及準確率。
請參閱圖1,本實施例具體包括如下步驟:
步驟s101,反編譯出apk的androidmanifest.xml、classes.dex和資源文件,讀取其dalvik字節碼和androidmanifest.xml文件,以所述androidmanifest.xml文件作為函數入口解析所有的函數調用指令並生成基本函數調用圖。
具體的,首先註冊用戶登錄到審計系統,上傳待審計應用程式的apk文件或者zip文件,然後審計系統將根據各審計伺服器的任務量動態分配審計任務,在任務多時,以便負載均衡各審計伺服器的任務。
審計伺服器接收到審計任務後,將自動開始審計apk文件或者zip文件。伺服器獲取待測應用程式的apk文件或者zip文件並進行解析,調用解析模塊,反編譯出dalvik字節碼androidmanifest.xml文件、classes.dex文件和資源文件,然後從中提取出權限列表和組件信息、smali文件和java文件等。由於開發人員使用的android應用開發工具不同,資源文件的目錄結構略有不同,但不影響本系統對android應用程式的審計結果。
然後,讀取應用程式的dalvik字節碼和androidmanifest.xml文件,以androidmanifest.xml作為函數入口,根據其中每個函數中包含的調用指令生成一個基本函數調用圖。
步驟s102,將apk中使用到的具有異步性質的調用函數、生命周期相關的函數的android庫都加入所述基本函數調用圖中,得到擴展函數調用圖。
具體的,將android庫提供的具有異步函數調用性質的函數、生命周期相關的函數,都加入了基本函數調用圖,得到擴展函數調用圖。在擴展函數調用圖中包含了dalvik字節碼執行中遇到的所有顯式和隱式的控制流,從而擴展了敏感信息洩漏行為(即汙點數據傳播行為)審計檢測覆蓋範圍。
汙點數據傳播行為包含一個源api(src)、一個目標api(target)和一個將src返回的信息傳入target的代碼路徑path,這種可能包含汙點數據傳播行為的代碼路徑就是可疑路徑。本方法針對android應用程式的安全審計,就是分析出汙點數據傳播行為中的代碼路徑。
擴展函數調用圖中包含了所有的代碼路徑,當然包括可疑路徑,在實際的android應用程式中,存在安全問題相關的代碼路徑一般只佔整個程序的很小一部分,只需著重審計分析與汙點數據傳播行為相關的代碼路徑。
步驟s103,對所述擴展函數調用圖中的代碼路徑進行過濾,得到包含可能汙點數據傳播行為的可疑路徑集合。
具體的,採用輕量級的api分析進行可疑路徑集的選取。汙點數據傳播行為就是對擴展函數調用圖中的代碼路徑過濾,先選取一個包含可疑路徑的集合,每條可疑路徑都由一個或多個函數組成,每個函數中都包含一組dalvik字節碼指令。每條可疑路徑包含了所有直接或間接地調用了源api(src)到目標api(target)的代碼路徑path,輕量級的api分析可以大幅減少代碼路徑分析而不改變分析結果。可疑路徑的集合還需進一步分析得到準確的汙點數據傳播路徑。
步驟s104,汙點分析器對可疑路徑集合中每條可疑路徑函數的字節碼指令進行模擬執行,構造出每條可疑路徑函數的字節碼指令的內存對象模型,基於內存對象模型進行汙點分析,並準確的檢測汙點數據信息以及汙點數據傳播行為。
具體的,基於內存對象模型進行汙點分析。汙點分析器對可疑路徑集合中每條可疑路徑函數的字節碼指令進行模擬執行。在執行過程中,先為每一條可疑的代碼路徑創建上下文,並將對象的類型信息加入到內存中,這樣能對目標代碼路徑中的全局狀態和局部狀態中的內存對象的信息進行有效的表示,從而構造出每條可疑路徑函數的字節碼指令的內存對象模型。內存對象中的汙點狀態可以進行傳播,任何對包含汙點狀態的對象進行運算所派生出的對象也將包含同樣的汙點狀態。
基於內存對象模型進行汙點分析具體過程如下:
(a)首先,將內存對象模型加載到汙點分析器中,對目標代碼路徑中的全局狀態和局部狀態中的內存對象的信息進行有效的表示;然後,汙點分析器基於一系列執行規則對目標函數中的字節碼進行執行,當遇到未知值而無法分析時,進入模糊分析模式。
(b)汙點分析器遇到包含未知值的未知條件分支時,引入模糊規則來進行控制流的決策,由軟體安全代碼分析器遍歷ast語法樹,尋找並獲取其中包括if-else、while、do-while、for、switch的控制語句。將未知條件分支分為三種:未知值分支、無限循環和無限遞歸。
(c)對未知條件分支的3種情況分別處理:未知值分支重建上下文環境,恢復到已知分支狀態;無限循環分支設定循環最大次數閥值p,當計數達到p時,跳出循環,繼續執行後續字節碼;無限遞歸設定遞歸最大深度閥值q,當計數達到最大深度q時,中止遞歸,恢復後續字節碼執行。
(d)汙點分析器有效地表示已知值、未知值和內存對象的汙點數據信息,並準確檢測汙點數據以及汙點數據傳播行為。
步驟s105,根據檢測的汙點數據信息以及汙點數據傳播行為結果,輸出檢測報告。
具體的,汙點分析器在檢測汙點數據以及汙點數據傳播行為後,調用安全風險審計模塊(xhtml2pdf)生成pdf檢測報告。
基於上述方法,本發明一種apk安全風險自動化靜態審計系統,由於審計系統在應用程式安裝之前進行靜態審計分析,不會引入運行時的開銷或影響用戶在應用程式安裝後的使用。該系統單個樣本的平均審計分析時間為數十秒,由於該系統可以配置多臺審計分析伺服器,能同時對多個樣本進行審計分析。
請參閱圖2,包括web應用伺服器、文件伺服器和審計伺服器;
首先,用戶登錄到靜態審計web應用服務系統,並通過web應用服務系統將apk文件或者zip壓縮文件上傳到文件伺服器。其次,web應用服務系統自動將審計任務和該任務所需的apk文件或者zip壓縮文件均衡分發到審計伺服器,因為審計伺服器可以部署多臺,可以實現審計任務的負載均衡。最後,審計伺服器自動執行審計任務,並將結果返回到web應用服務系統。其中:
所述web應用伺服器用於用戶登錄以及將待測應用程式的apk文件或者zip文件發送給審計伺服器;所述文件伺服器用於存儲所述待測應用程式的apk文件或者zip文件;
所述審計伺服器用於將所述web應用伺服器發送來的apk文件進行解析,反編譯出dalvik字節碼和androidmanifest.xml文件,並以androidmanifest.xml文件作為函數入口解析所有的函數調用指令生成基本函數調用圖;同時,將apk中使用到的具有異步性質的調用函數、生命周期相關的函數的android庫都加入所述基本函數調用圖中,得到擴展函數調用圖;對所述擴展函數調用圖中的代碼路徑進行過濾,得到包含可能汙點數據傳播行為的可疑路徑集合;以及對所述可疑路徑集合中每條可疑路徑函數的字節碼指令進行模擬執行,基於內存對象模型進行汙點分析,並準確的檢測汙點數據信息以及汙點數據傳播行為。
具體的,本發明所述擴展函數調用圖包含dalvik字節碼執行中遇到的所有的顯式和隱式的控制流以及所有的代碼路徑。
具體的,請參閱圖3,本發明所述審計伺服器包括:
解析模塊,用於對所述待測應用程式的apk文件或者zip文件進行解析,反編譯出dalvik字節碼和androidmanifest.xml文件;
函數調用圖生成模塊,用於以androidmanifest.xml文件作為函數入口解析所有函數調用指令生成基本函數調用圖;同時,將apk中使用到的具有異步性質的調用函數、生命周期相關的函數的android庫都加入所述基本函數調用圖中,得到擴展函數調用圖;
過濾模塊,用於對所述擴展函數調用圖中的代碼路徑進行過濾,得到包含可能汙點數據傳播行為的可疑路徑集合;
汙點分析模塊,用於對所述可疑路徑集合中每條可疑路徑函數的字節碼指令進行模擬執行,構造出每條可疑路徑函數的字節碼指令的內存對象模型,並準確的檢測汙點數據信息以及汙點數據傳播行為。
具體的,本發明所述汙點分析模塊進一步包括:
當遇到包含未知值的未知條件分支時,引入模糊規則來進行控制流的決策,將未知條件分支分為未知值分支、無限循環分支和無限遞歸分支三種模式並分別進行處理。
具體的,本發明所述審計伺服器還包括:
安全風險審計報告模塊,用於根據檢測的汙點數據信息以及汙點數據傳播行為結果,輸出檢測報告。
以上所述本發明的具體實施方式,並不構成對本發明保護範圍的限定。任何根據本發明的技術構思所做出的各種其他相應的改變與變形,均應包含在本發明權利要求的保護範圍內。