一、安全研究做什么
攻擊角度:對某個模塊進行漏洞挖掘的方法,對某個漏洞進行利用的技術,通過逆向工程破解程序、解密數據,對系統或應用進行感染、劫持等破壞安全性的攻擊技術等。
防御角度:查殺惡意應用的方法,檢測和防范漏洞利用,為增強系統和第三方應用的安全性提供解決方案等。
通常,攻與防是相對模糊的,一種安全技術往往兩端都適用,也許更值得留意的是一種技術背后的思路和意識。
二、需要具備的知識
安全涉及的知識范疇是無限的,但大多數時候可以遇到問題再去了解相關知識。
三、要掌握的理論知識
操作系統原理,非常重要,是認識某一個具體系統的前提。
微軟開源的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
