前言
隨著移動互聯網的發展和智能手機的普及,基于android系統的各類app出現爆發式增長,但在增長的同時,一個不容忽視的問題越來越重要:安全。
漏洞掃描方式主要分為靜態和動態,靜態掃描的漏洞類型主要包含SQL注入風險、webview系列、文件模式配置錯誤、https不校驗證書、database配置錯誤等。動態掃描的漏洞類型主要包含拒絕服務攻擊、文件目錄遍歷漏洞、file跨域訪問等。
本報告選取11類android app中同等數量的熱門app,其活躍用戶量可覆蓋83%的移動端網民,根據阿里巴巴移動安全中心對這些app的漏洞檢測,得到以下結論:
參與檢測的android app中,近97%的app都存在漏洞問題,且平均漏洞量高達40個。
安全類app漏洞問題最多,其漏洞總量499個,占所有類別app漏洞總量的21%。
新聞、旅游類app相對最不安全,其各自漏洞總量約240個,且其中高危漏洞量占比30%。
游戲類app相對最安全,漏洞總量約57個,且其中高危漏洞占比約2%。
從測試結果來看,android app的安全問題不容樂觀,漏洞的存在尤其是高危漏洞,會對app開發者甚至用戶帶來較大影響,如何提前發現潛在風險、保護開發者和用戶的利益是阿里巴巴移動安全團隊一直堅持的責任。
一、Android APP漏洞現狀
為了解android app的總體現狀,報告中將app歸納為11個類別:健康、娛樂、安全、教育、新聞、旅游、游戲、社交、購物、金融、閱讀。選取11類app中等量熱門app,并使用阿里巴巴聚安全的漏洞掃描產品進行靜態和動態檢測,掃描結果如下:
從漏洞類別來看,android app漏洞中排在首位的是sql注入類漏洞,占比38.2%,其次是webview漏洞,占比35.4%,見左圖。
從漏洞風險級別來看,android app中高危漏洞占20.7%,低危漏洞占79.3%,其中高危漏洞主要集中在webview系列和https證書未校驗上。
SQL注入類漏洞占比38.2%,主要是代碼中未過濾用戶輸入,攻擊者可通過提交惡意sql查詢語句達到其作惡目的。Sql注入雖大部分屬于中低危漏洞,但仍可造成敏感數據、系統最高權限被竊取等問題。
Webview的一些高危漏洞,主要由代碼中使用addJavascriptInterface等危險函數、使用不校驗證書等因素導致。這些漏洞可遠程執行代碼,對用戶遠程安裝惡意軟件。
Https相關的高危漏洞,主要由https使用ALLOW_ALL_HOSTNAME_VERIFIER等參數校驗證書,沒有對主機等信息進行校驗導致,這些漏洞會引發攻擊者輕易劫持https會話、嗅探用戶密碼和其他敏感信息等問題。
高危漏洞潛藏著巨大的安全問題,但從測試結果來看,很多android app都存在高危漏洞問題,其安全性令人擔憂。
二、Android APP漏洞問題分析
本章將對app的漏洞掃描結果進一步分析,首先將分析漏洞的靜態和動態檢測結果,其次將總結歸納漏洞產生的原因。
2.1各類別app漏洞情況分析
2.1.1.漏洞的靜態掃描結果分析
使用阿里巴巴聚安全的漏洞掃描產品,對11個類別同等數量的熱門app進行靜態掃描,各類app的安全情況不盡相同:
參與測試的app中近97%的app都有安全漏洞,且平均漏洞量達40個。
安全類app漏洞問題最多。
在檢測到的所有漏洞中,安全類app的漏洞總量多達499個(約占總漏洞量21%),其中高風險漏洞占比約2%,整體而言,即便是安全類app,亦存在較多的安全問題。
新聞、旅游類app相對最不安全
新聞、旅游類app漏洞總量均超230個(約占總漏洞量的10%),且其中高風險漏洞量占比高達30%,在所有app中相對最不安全。
游戲類app相對最安全
游戲類app無論是漏洞總量,或是其中的高風險漏洞占比均較少,在所有app中相對最安全。
2.1.2 漏洞的動態掃描結果分析
使用阿里巴巴聚安全的漏洞掃描產品,對11個類別同等數量的熱門app進行動態掃描,掃描結果幾乎都是拒絕服務攻擊類漏洞,未發現文件目錄遍歷、file跨域訪問等漏洞。
從以下數據圖可以看出,各類別app或多或少都存在拒絕服務攻擊漏洞,尤其以金融類(37個)、娛樂類(35個),購物類(32個),安全類(28個)為重,而游戲類的拒絕服務攻擊漏洞總量相對最少(3個)。
拒絕服務漏洞其實是組件暴露問題,組件一旦被暴露,特定的惡意數據就可寫入組件,從而導致該app崩潰,造成拒絕服務,進而影響app開發者和用戶的利益。
2.1.3 總結
以上分析數據說明android類app的安全問題并不容樂觀,需要進一步探究造成漏洞的原因以及解決方案,以盡量避免漏洞的產生及彌補安全問題帶來的影響。
2.2 App漏洞原因分析
Android app的漏洞類型很多,如SQL注入、webview系列漏洞、文件模式配置錯誤、HTTPS不校驗證書、拒絕服務攻擊等,造成漏洞的原因可以歸結為以下兩類:
2.2.1App開發者自身的問題
a)編碼不規范
很多公司對編碼規范沒有要求,或app開發者沒有按照編碼規范來進行編碼,容易導致敏感信息泄露,比如日志打印問題、在發行版本中沒有關閉日志打印功能等。
b)安全意識不夠
很多android函數的參數需慎用,如常用函數openFileOutput,如果設置mode參數為Context.MODE_WORLD_READABLE或者Context.MODE_WORLD_WRITEABLE,就容易泄露android app的數據。另外,接口處理需要更加嚴謹,例如暴露了一個接口,允許運行用戶輸入的信息,若對信息未做任何處理,就容易引起拒絕服務攻擊等安全問題。
2.2.2Android上0day的發現
Android上0day的發現,可導致android app以前安全的功能變得不安全,在android系統沒有補丁的情況下,需及時在android app上打補丁,但鑒于很多android app開發者對漏洞信息不敏感等原因,并未做到及時修補,從而導致漏洞的存在。
總之,Android app的安全問題,很大程度上可能是開發者犯下的低級錯誤。較為有效的解決辦是能夠在代碼編寫過程中使用SDL編碼流程,同時使用漏洞掃描產品對app進行檢測,不斷修補自身app的安全問題。安全無小事,所有app開發者都應重視。
三、總結
本次檢測采用了11個類別app中同等數量的熱門app,共掃描出近2500個漏洞,平均每個android app有40個安全漏洞,且約97%的測試app或多或少都存在安全漏洞。這些數據反映出android app漏洞問題的嚴峻性,在app市場上,很多android app都存在潛在的安全風險,一旦被利用,會給用戶和開發者帶來很大影響。
從漏洞檢測結果來看,android app的漏洞問題不容樂觀,這些問題是否可以規避?是否有自動化的漏洞掃描產品供app開發者使用?是否可以降低開發者和用戶的利益受損程度? 答案是肯定的,除了加強app開發者的安全意識,在app發布之前利用安全產品進行漏洞掃描檢測可以及早發現隱含的安全問題,保護開發者利益,保護用戶利益。