阿里聚安全掃描器之本地拒絕服務檢測詳解
阿里聚安全的Android應用漏洞掃描器有一個檢測項是本地拒絕服務漏洞的檢測,采用的是靜態(tài)分析加動態(tài)模糊測試的方法來檢測,檢測結果準確全面。本文將講一下應用漏洞掃描器在針對本地拒絕服務的檢測方法。
一、本地拒絕服務產生原因和影響
Android應用使用Intent機制在組件之間傳遞數據,如果應用在使用getIntent(),getAction(),Intent.getXXXExtra()獲取到空數據、異?;蛘呋螖祿r沒有進行異常捕獲,應用就會發(fā)生Crash,應用不可使用(本地拒絕服務)。惡意應用可通過向受害者應用發(fā)送此類空數據、異?;蛘呋螖祿亩箲卯a生本地拒絕服務。
阿里聚安全的博客以前有一篇文章《Android應用本地拒絕服務漏洞淺析》,里面詳細講了產生本地拒絕服務的四種情況:
- NullPointerException空數據異常:應用程序沒有對getAction()等獲取到的數據進行空指針判斷,從而導致空指針異常而導致應用崩潰。
- ClassCastException類型轉換異常:程序沒有對getSerializableExtra()等獲取到的數據進行類型判斷而進行強制類型轉換,從而導致類型轉換異常而導致應用崩潰。
- IndexOutOfBoundsException數組越界異常:程序沒有對getIntegerArrayListExtra()等獲取到的數據數組元素大小的判斷,從而導致數組訪問越界而導致應用崩潰。
- ClassNotFoundException異常:程序沒有無法找到從getSerializableExtra ()獲取到的序列化類對象的類定義,因此發(fā)生類未定義的異常而導致應用崩潰。
當應用被惡意應用攻擊時,本地拒絕服務一般會導致正在運行的應用崩潰,首先影響用戶體驗,其次影響到后臺的Crash統(tǒng)計數據,另外比較嚴重的后果是應用如果是系統(tǒng)級的軟件,可能導致手機重啟。Nexus 5曾經出現過這樣的情況,它預裝了一個用來測試網絡連通性的系統(tǒng)應用,這個應用是隱藏狀態(tài),無法在桌面上打開,包名為com.lge.SprintHiddenMenu。在Android 4.4.3之前的版本里,這個應用里有大量導出的activity,這些 activity不需要任何權限就可以被外部調用。其中一個為com.lge.SprintHiddenMenu.sprintspec.SCRTN的組件是導出的,并且沒有任何權限限制,給它發(fā)送一個空Intent,可導致Nexus 5手機重啟。
二、阿里聚安全掃描器的進化提升
一個簡單的本地拒絕服務類漏洞,要想進行大規(guī)模的自動化掃描,掃描器也要做不少的工作,并且隨著對本地拒絕服務漏洞的認識,阿里聚安全的漏洞掃描器也在不斷進行優(yōu)化提高。