阿里聚安全掃描器之本地拒絕服務(wù)檢測詳解

阿里聚安全的Android應(yīng)用漏洞掃描器有一個檢測項是本地拒絕服務(wù)漏洞的檢測,采用的是靜態(tài)分析加動態(tài)模糊測試的方法來檢測,檢測結(jié)果準確全面。本文將講一下應(yīng)用漏洞掃描器在針對本地拒絕服務(wù)的檢測方法。

一、本地拒絕服務(wù)產(chǎn)生原因和影響

Android應(yīng)用使用Intent機制在組件之間傳遞數(shù)據(jù),如果應(yīng)用在使用getIntent(),getAction(),Intent.getXXXExtra()獲取到空數(shù)據(jù)、異?;蛘呋螖?shù)據(jù)時沒有進行異常捕獲,應(yīng)用就會發(fā)生Crash,應(yīng)用不可使用(本地拒絕服務(wù))。惡意應(yīng)用可通過向受害者應(yīng)用發(fā)送此類空數(shù)據(jù)、異常或者畸形數(shù)據(jù)從而使應(yīng)用產(chǎn)生本地拒絕服務(wù)。

阿里聚安全的博客以前有一篇文章《Android應(yīng)用本地拒絕服務(wù)漏洞淺析》,里面詳細講了產(chǎn)生本地拒絕服務(wù)的四種情況:

  1. NullPointerException空數(shù)據(jù)異常:應(yīng)用程序沒有對getAction()等獲取到的數(shù)據(jù)進行空指針判斷,從而導(dǎo)致空指針異常而導(dǎo)致應(yīng)用崩潰。
  2. ClassCastException類型轉(zhuǎn)換異常:程序沒有對getSerializableExtra()等獲取到的數(shù)據(jù)進行類型判斷而進行強制類型轉(zhuǎn)換,從而導(dǎo)致類型轉(zhuǎn)換異常而導(dǎo)致應(yīng)用崩潰。
  3. IndexOutOfBoundsException數(shù)組越界異常:程序沒有對getIntegerArrayListExtra()等獲取到的數(shù)據(jù)數(shù)組元素大小的判斷,從而導(dǎo)致數(shù)組訪問越界而導(dǎo)致應(yīng)用崩潰。
  4. ClassNotFoundException異常:程序沒有無法找到從getSerializableExtra ()獲取到的序列化類對象的類定義,因此發(fā)生類未定義的異常而導(dǎo)致應(yīng)用崩潰。

當應(yīng)用被惡意應(yīng)用攻擊時,本地拒絕服務(wù)一般會導(dǎo)致正在運行的應(yīng)用崩潰,首先影響用戶體驗,其次影響到后臺的Crash統(tǒng)計數(shù)據(jù),另外比較嚴重的后果是應(yīng)用如果是系統(tǒng)級的軟件,可能導(dǎo)致手機重啟。Nexus 5曾經(jīng)出現(xiàn)過這樣的情況,它預(yù)裝了一個用來測試網(wǎng)絡(luò)連通性的系統(tǒng)應(yīng)用,這個應(yīng)用是隱藏狀態(tài),無法在桌面上打開,包名為com.lge.SprintHiddenMenu。在Android 4.4.3之前的版本里,這個應(yīng)用里有大量導(dǎo)出的activity,這些 activity不需要任何權(quán)限就可以被外部調(diào)用。其中一個為com.lge.SprintHiddenMenu.sprintspec.SCRTN的組件是導(dǎo)出的,并且沒有任何權(quán)限限制,給它發(fā)送一個空Intent,可導(dǎo)致Nexus 5手機重啟。

二、阿里聚安全掃描器的進化提升

一個簡單的本地拒絕服務(wù)類漏洞,要想進行大規(guī)模的自動化掃描,掃描器也要做不少的工作,并且隨著對本地拒絕服務(wù)漏洞的認識,阿里聚安全的漏洞掃描器也在不斷進行優(yōu)化提高。

2.1 空Intent階段

網(wǎng)友評論