【轉載】Android安全研究經驗談 @retme
搜paper時,找到的一篇講的非常好的文章,認同其中相當一部分觀點,特轉載一下。
一、安全研究做什麼
攻擊角度:對某個模組進行漏洞挖掘的方法,對某個漏洞進行利用的技術,通過逆向工程破解程式、解密資料,對系統或應用進行感染、劫持等破壞安全性的攻擊技術等。
防禦角度:查殺惡意應用的方法,檢測和防範漏洞利用,為增強系統和第三方應用的安全性提供解決方案等。
通常,攻與防是相對模糊的,一種安全技術往往兩端都適用,也許更值得留意的是一種技術背後的思路和意識。
二、需要具備的知識
安全涉及的知識範疇是無限的,但大多數時候可以遇到問題再去了解相關知識。
三、要掌握的理論知識
作業系統原理,非常重要,是認識某一個具體系統的前提。
微軟開源的Windows Research Kernel(WRK)同樣也非常棒的學習資料。
動手編譯系統核心,用偵錯程式一步步分析除錯核心比單純閱讀原始碼和分析文章更有幫助。
嘗試編寫核心驅動模組或分析已有的核心Rootkit來深入理解作業系統。
就移動平臺而言,理解作業系統有助於進一步理解Android系統本身,而在理解Android系統之後,才能開始討論Android系統的安全問題。
四、幾門需要掌握的語言
不需要特別強的軟體開發能力,需要關注某種語言的內部實現過程。
掌握C/C++,能理解該語言被編譯器處理後彙編層面的實現原理。
瞭解Java,需要理解Dalvik/ART虛擬機器內部的實現過程。
對x86/ARM彙編,能讀懂即可,遇到不會的指令可以從指令集中查詢。
掌握一門指令碼語言,用來快速編寫小工具或POC,推薦Python,因為開源社群中大部分Android安全分析類工具都是用Python編寫的,例如,知名的Androguard和Drozer。
五、逆向工程
逆向工程絕對是一項必備技能。分析惡意軟體行為還是分析閉源軟體,都要逆向工程。
六、理解Android系統
Android原始碼非常龐大,只看元件也要好幾年,何況還有Linux核心、基帶、bootloader、TrustZone等底層模組。
我們只需瞭解支撐Android系統運轉的核心服務,以及Android系統的安全機制設計即可,其餘內容用到時再去分析。
1.元件
(1)Zygote:Android應用的孵化器,一切Android程式由此程序fork而來。
(2)Binder:Android的程序間的通訊機制,它是Android平臺最核心的功能元件。
(3)Package Manager Service:應用安裝包管理服務,不僅負責包的安裝和解除安裝,更重要的是負責Android應用資訊的查詢和控制,例如Android許可權管理。
(4)Activity Manager Service:管理Android框架層的程序,也包含了Android應用四大元件的邏輯實現。
(5)Dalvik虛擬機器:雖然即將被ART取代,但Dalvik依然是幫助我們理解虛擬機器和Android可執行程式檔案格式的好教材。
2.安全機制
(1)沙箱隔離:沙箱是基於不同應用之間User ID的不同而實現的,其本質是Linux對於不同使用者間訪問許可權的隔離。
(2)應用許可權控制:Android系統應用需要申請相應的許可權才能訪問系統的資源和資訊,大多數許可權由Android框架層的API進行控制,另一部分許可權對映到應用所在的Group ID上,由Linux核心做出控制。
(3)SELinux:Linux核心層的安全增強,是一套獨立於傳統Linux許可權訪問控制的強制性許可權控制機制。Google已經將這套機制移植到Android核心,給核心漏洞利用帶來了一些挑戰。
七、Android安全研究的熱點方向與現狀
1.手機Root與核心漏洞挖掘利用
Android2.x時代,往往利用一些使用者層程式的漏洞即可將手機root,現在則主要依賴核心漏洞。
Android為Linux核心引入了新的核心模組,以及不同廠商的驅動方案。這就為系統核心引入了新的安全隱患,無論是高通、MTK還是三星獵戶座,或者華為海思的晶片,多少都出現過一些核心漏洞,這是Android平臺核心的一個主要攻擊點。隨著Google將SELinux引入Android,攻擊面有所減小,但不能完全解決核心漏洞利用問題。
防禦角度講,同樣面臨挑戰:一些APT攻擊如果利用核心漏洞,將能拿到系統的完全控制權。Android平臺核心漏洞長期以來一直都在持續曝光,漏洞利用與防範依然是持續的熱點。
從這個方向入手,首先需要了解Linux核心,然後不斷對目前已經公開的CVE漏洞進行分析,理解漏洞的成因和各個型別。
在漏洞利用方面,由開源專案run_root_shell可作為參考,該專案包含了多個經典漏洞的利用實現,入門的好材料。
此外,還可以關注國外的POC程式或對一鍵root類產品做分析。
2.Android應用與系統框架才呢過漏洞挖掘
Android應用本身的問題主要集中在4大元件上,通常是一些邏輯處理問題導致資訊洩露、身份認證繞過等。
得益於Android沙箱機制,應用本身的攻擊面相對較小。
此外,圍繞WebView或者SSL漏洞所引發的安全問題也比較常見。
框架層漏洞也是邏輯漏洞居多,但危害往往比應用更大。著名的高危漏洞有Master Key簽名繞過、WebView遠端程式碼執行等。
目前已有的一些開源漏洞挖掘工具,如Drozer和Intent Fuzzer。可以再此基礎上進行改進。
3.惡意軟體攻防
數量上看,隱私竊取和釣魚軟體是目前Android平臺主要的惡意軟體型別。
若使用者對應用申請的許可權毫不知情,一款應用便能輕鬆獲取使用者的簡訊、通訊錄、地理位置、錄用等私密資訊。
Android平臺需要有主動防禦程式控制應用獲取隱私的行為,目前有2種方法實現:一種是整合到ROM程式碼中,另一種是利用API Hook實現。無論使用哪種方式,目前面臨的問題都是如何更智慧地為使用者管理許可權,以減少防禦軟體頻繁彈窗打來的打擾。
市面上還充斥著大量的仿冒支付類應用,它們看起來可能與正版應用沒有區別,因為這些仿冒軟體是由正版應用篡改而來的。通常都會有使用者名稱和密碼竊取的惡意程式碼。安全軟體需要通過簽名、程式碼特徵等方法對此進行識別。
從趨勢上看,惡意軟體再也不侷限在Android安裝包(APK)的形式進行分發,而往往會帶有Linux可執行檔案(ELF),對系統進行深層次的攻擊。目前市面上的安全產品對APK檔案的查殺已比較成熟,但對於系統原生層的惡意軟體查殺還沒有特別完善的實現,對於一些APT級別的新型威脅防禦也仍在探索階段。
知名惡意軟體Oldboot就是惡意程式使用底層技術對抗查殺的典型案例,完整的分析已經公開。
4.支付安全
手機支付一般通過簡訊驗證碼和獨立支付密碼解決支付者身份認證問題,但仍然存在簡訊遭人竊聽或密碼被竊取的風險,一些廠商模仿PC上的U盾方案,推出音訊盾或藍芽盾解決認證問題。而利用ARM架構下的TrustZone將支付認證過程獨立於作業系統之外也是一個方向。
5.應用加固(加殼)與逆向工程
國內知名的加固方案有:梆梆加固、360加固保、愛加密等。
6.企業安全BYOD
僅就終端裝置來說,BYOD方案是將手機系統隔離出兩個環境:一個公用,一個私用,兩者互不影響。
八、例項:Android4.4.2系統vold漏洞
1.如何第一時間得知漏洞
不是所有的漏洞都會被CVE收錄,很多事祕密修補的。一種方法是,看版本升級時Android原始碼中的Change Log,運氣好的話,可以從AOSP的git commit資訊中注意到下面的話:
Project:platform/system/vold
0de7c61:Validate asec names
點選相關連結,就能看到Google祕密修補了該漏洞的資訊。、
2.如何掌握漏洞細節
3.如何利用這個漏洞獲取root
by retme