有Android逆向基礎如何學習Android漏洞挖掘?
有ARM彙編和Android逆向方面的基礎,在看一些國內Android CVE方面分析的時候,能明白大概原理,但還是不懂一個漏洞到底如何挖掘出來的,怎麼去一步步調試,由於不懂windows平台的彙編,想入門Android系統漏洞方面的,有什麼好的建議?要學win32、x86彙編,然後去了解堆棧溢出原理嗎? 要從win平台一步步走過來嗎?
謝邀, Andriod平台漏洞也有很多種,分為不同的方向,比如內核漏洞挖掘/利用,用戶態高許可權進程漏洞挖掘/利用,瀏覽器漏洞挖掘/沙箱逃逸和針對Andriod自身結構的漏洞(許可權泄漏、敏感信息泄漏等)。題主應該希望學習的是前兩種。
Android是一個基於Linux的複雜系統,想要熟練挖掘Android漏洞必須要了解Linux系統本身(內核,驅動),以及Android在Linux架構上添加的各式各樣的組件和功能(binder,media/graphics subsystem,zygote, chromium/skia和最上層的四大金剛等)。從問題中的角度來講,對於不熟悉Windows平台的初學者,不建議將大量時間投入到Windows平台上的漏洞利用學習上,因為兩個平台的漏洞雖然核心思想相通,但具體到利用的細節不太相同。這些精力時間投入到Linux平台和Android自身的研究學習上對於Android漏洞挖掘這個目的意義更大。並且從實際的角度出發,業界目前需要更多的也是Mobile系統方向上的人才。
基礎的漏洞類型例如棧溢出、堆溢出、未初始化、OOB、UAF、條件競爭/TOCTOU漏洞等必須要熟練理解掌握,這些在各種CTF平台上在Linux平台下都可以練習到。但是需要注意的一點是CTF還是和實際有些區別。例如CTF上的堆溢出題目絕大部分都基於dlmalloc,而Android早在5.0就切換到了jemalloc。現代軟體中最常見的條件競爭漏洞因為比賽平台的限制也很少在CTF中看到(利用比較耗費資源,很難支撐比賽中的大規模並發需求)。
在了解了基礎知識之後,可以進一步學習Andriod自身的體系結構。- Binder方面可以學習調試幾個經典漏洞(GitHub - flankerhqd/mediacodecoob: Infoleak and PC control poc for CVE-2015-6620 (24445127), I"ll add after conference, https://www.blackhat.com/asia-16/briefings.html#hey-your-parcel-looks-bad-fuzzing-and-exploiting-parcel-ization-vulnerabilities-in-android),
- 文件格式漏洞自然是經典的stagefright,https://www.exploit-db.com/docs/39527.pdf。
- 驅動/內核漏洞3636和1805(https://www.blackhat.com/docs/us-15/materials/us-15-Xu-Ah-Universal-Android-Rooting-Is-Back.pdf)。
- Chrome V8相關:GitHub - 4B5F5F4B/Exploits
- 關注每個月的android security bulletin, 嘗試從diff反推漏洞研究如何觸發和利用。
- 代碼審計:經典書籍 The art of software security assessment
- fuzzing
當然,只要掌握了計算機體系結構,熟悉了程序的運作方式,到達一定境界之後那麼各種漏洞、各種系統之間的界限也就漸漸模糊了。我所知道的業界人士中有不少從Windows大牛跨界為Android大牛,例如Fireeye的王宇王老師,pjf大牛。畢竟觸類旁通,運用之妙,存乎一心,與君共勉。
同意樓上Flanker Edward的,RCE漏洞的話metaphor是一個很好的學習案例,其中包括了堆噴、信息泄露、構建ROP鏈等常用的技術,樓主好好把代碼和文檔看兩遍,自己按照流程把漏洞調試一遍,然後再根據目標設備進行修改代碼移植,metaphor源代碼只是針對nexus5做的,很多東西都是硬編碼在裡邊的。本地提權的漏洞例子就更多了。
樓主還在繼續學習嗎,可以私信一起交流。
推薦閱讀:
※為什麼有些語言可以被反編譯?而有的不能?
※構造函數和析構函數在不在 vftable 裡面?
※如何優雅地做一個使用OS X的黑客?