通俗易懂!一文看懂手機Root的操作與防護
Root,對於任何手機發燒友、玩機客、從事移動裝置研發的人員來說,並不陌生,它代表絕大部分移動裝置的使用者能夠掌握到的最高許可權。
從技術層次來講,使用者擁有了修改系統檔案的許可權,甚至可以控制賬戶、增加或刪除硬體等,但對普通使用者來說,最大的一個用處就是解除安裝“Root之前無法解除安裝的軟體”,部分品牌商在手機出廠之前內建安裝了一些無法解除安裝的軟體,這些軟體在手機Root之後,都可以被解除安裝掉,Root相當於讓使用者擁有了自由增減軟體的許可權。
Root的前世今生
Root一詞起源於Linux/Unix系統,眾所周知,Linux/Unix系統的檔案系統以根“/”出發向下形成一個倒置的樹型檔案系統結構,Root即根的英文釋義,那麼Linux/Unix系統就以Root賬號所擁有的許可權作為系統管理員的許可權,口口相傳,Root就代表了Linux/Unix上最高的許可權。
在移動裝置發展的初期,各種移動裝置所使用的作業系統各不相同,比較出眾的有塞班、Windows Phone、iOS、安卓。隨著市場的選擇,只有安卓與iOS留存下來,成為普及的手機作業系統。按照POSIX標準協議和開源協議的規定,安卓與iOS都應該保留了Linux/Uinx上的相應的功能。
其中,安卓就是以Linux作為基礎進行構建的系統,而iOS則是使用了以xnu為核心的Darwin(Darwin來自於BSD)。按照開源作業系統而言,安卓和iOS都理應保留所有使用者使用Root賬戶去掌控自己裝置的許可權。
但現實情況是,安卓與iOS不允許使用者使用Root許可權,尤其是iOS對於Root許可權的監控與封鎖達到了前所未有的地步,以至於對iOS的Root被稱作“越獄”。iOS上的Root過程相對於安卓更為複雜與困難,所以本文主要以安卓系統的Root為主,詳細介紹Root的前世今生。
安卓系統的三大Root方式
相較於封閉生態的iOS系統,安卓的Root方式可謂是從百花齊放到萬物歸一。不同安卓系統版本,獲取Root許可權主流方式不同。
在安卓手機上,獲取Root許可權主要有三種方式:漏洞、OEM官方解鎖、工廠方式。其中透過漏洞方式獲取Root,是開發者最早的探索;工廠模式獲取Root則是透過如驍龍9008模式透過底層串列埠將特殊的ROM刷寫入手機進而獲取Root;官方解鎖的方式則是OEM產商提供給一些發燒友的“通道”,透過解鎖Bootloader鎖獲取刷寫ROM獲取Root。
第一階段:百家漏洞齊爭鳴,先驅CVE-2009-2692漏洞
在安卓系統早期時忽略了安全性問題,許多在Linux中產生的安全問題,都能在安卓得以復現,其中最早有公開記錄並可追溯的是Znix利用Linux漏洞CVE-2009-2692編寫的安卓版本提權程式,程式碼如下:
利用藍芽協議觸發sendpage漏洞
許可權提升攻擊載荷
該漏洞的產生主要是sock_sendpage沒有對socket_file_ops資料結構的snedpage欄位欄位做指標檢查,有些模組不具有sendpage功能,將指標初始化為NULL,此時直接呼叫sendpage會導致直接呼叫空指標導致報錯並進而進行許可權提升。Znix直接將現有有效使用者id(euig)與有效使用者組(egid)的指標賦值為0即Root使用者與Root使用者組,再將有效使用者與有效使用者組指標賦給真實的使用者指標與真實的使用者組指標,從而達到許可權提升的目的。然後利用藍芽協議與send_page的漏洞觸發這一攻擊載荷。
Znix釋出該exploit的時間點在安卓_ndk_r1版本釋出後的兩個月。在該exploit釋出後,人們發現在安卓上透過漏洞的形式獲取Root許可權方式大為可行,隨即越來越多的安全人員與發燒友開始在安卓上挖掘系統漏洞,導致安卓的安全問題呈現井噴式的爆發。不過這場鬧劇隨著Google不斷的修復與SElinux的引入,鬧劇在安卓4.4戛然而止,安卓系統進入了一個穩定的時期,安卓的Root也進入了一個新的探索時代。
使用Linux系統的人都知道,在Linux上有一個程式叫/usr/bin/su,使用者可以透過su命令來切換身份,安卓的基礎是Linux,在安卓版本1.0-4.4中,安卓預設安裝了su程式,使用者可以透過使用su進行獲取Root,只需要su程式的許可權為Access: (4755/-rwsr-xr-x) Uid: ( 0/ Root) Gid: ( 0/ Root)。
第二階段:混亂中的探索,supersu與superuser
Google在安卓4.4版本,基本上將Linux中可提權的漏洞修復並限制利用漏洞進行提權的方式。安卓4.4及以上,Anroid也不預裝su程式,並且加入SElinux,就算擁有4755許可權的su也無法達到完美Root。開發者們就嘗試將改造後的su寫入到安卓的/system下,讓需要Root許可權的程式透過/system下的su程式進行執行。
而向/system下寫入su需要提前解鎖(unlock)安卓手機,該方式比利用漏洞提權穩定性更高。許多大神都開始編寫不同的su程式,其中比較有名的就是chainsDD的su與chainfire的suspersu,而單有獲取Root許可權的方式仍然不夠,還需要一個分發Root許可權的管理工具,koush的superuser恰好補齊了這一缺點,讓這一體系得以完善。
不過好景不長,該方法引起了Google的關注,Google在後續釋出的版本中對/system等分割槽進行完整性校驗,使得修改system分割槽變得不可行,在2018年10月,chainfire宣佈不再維護supersu。而另一位開發者則以巧妙的方式,讓Root又變為可能。
第三階段:從混亂中受到啟發,走向歸一的Magisk
一個名叫topjohnwu的開發者,從supersu中受到啟發,他仍然使用supersu的原理獲得Root許可權,但是他並不對/system等分割槽做額外的修改,他透過嘗試發現,雖然/system等分割槽無法修改,但是可以在/system分割槽下進行新增掛載點,於是他用了一種overlay的方法,讓使用者刷寫特殊的boot.img,修改啟動時的掛載操作,做出了一個overlay版本的system,所有的操作都在這個system上進行,這樣就避開了對原有system的修改,完成原有supersu的功能,而這款軟體就是現在大部分人熟知的Magisk。Magisk不僅完成了獲取Root,並且整合了Root許可權的管理器。
隨著topjohnwu加入谷歌,magisk的程式碼需要google安全團隊進行審計,magisk某種程度上擁有了官方背書,是目前最穩定的Root方式。
小白該如何Root安卓的手機
本文將使用TWRP方式教大家如何使用Magisk獲得Root許可權。在獲取Root前,需要解除BootLoader鎖,請讀者自行聯絡OEM廠商解除Bootloader鎖。
頂象特別提醒:Root有一定的風險,或造成手機無法使用,請謹慎操作,本文不對任何後果承擔相應責任。
1、準備adb fastboot命令工具、magisk以及對應的twrp.img(不同廠商需要的twrp映象不同,請讀者自行查詢所需的twrp映象)
2、使用adb命令將Magisk放入到sdcard中,命令如下:
3、進入bootloader介面,輸入對應的fastboot命令,進入twrp介面。
4、選擇Install,然後選擇Magisk.zip。
5、進入安裝Magisk的介面,將滑動條從左滑到頂端。如果出現如下介面,則證明安裝Magisk成功。
6、重啟手機後,使用將maigsk.zip改回magisk.apk,使用如下命令安裝Magisk管理器。
隨後可以在手機中開啟Magisk,發現Magisk已經正常工作。
如何檢測裝置的Root操作
對於安全從業者與一些需要風控的企業,需要得知使用者的手機是否處於風險狀態,是否被Root。
1、包名檢測。
由於Magisk是透過Maigsk.apk進行管理它的su許可權分發的,所以可以使用獲取包名的方式檢查使用者手機是否存在Magisk App來得知使用者是否使用了Magisk Root,具體程式碼如下:
嘗試執行程式,得到如下結果。
在上述方法中,雖然能檢測到使用者安裝了Magisk,但是由於法律對使用者隱私的保護,獲取包名的方式會觸及隱私合規紅線,所以這種方法需要一定的許可權,在使用該方法時要慎之又慎。
2、專業安全產品。
頂象裝置指紋、頂象業務感知防禦平臺能夠實時有效識別Root風險。
頂象裝置指紋:能精準識別模擬器、root、越獄、除錯、程式碼注入、多開、VPN代理等風險。包含,iOS平臺hook、越獄行為,安卓root、debug、記憶體dump、注入、多開、模擬器、漏洞攻擊等風險行為,WEB平臺下瀏覽器顏色深度、解析度,瀏覽器與系統、UA的匹配性和一致性、cookie是否禁用等行為。
頂象業務安全感知防禦平臺:基於威脅探針、流計算、機器學習等先進技術,集裝置風險分析、執行攻擊識別、異常行為檢測、預警、防護處置為一體的主動安全防禦平臺,能夠實時發現攝像頭遭劫持、裝置偽造、裝置Root等惡意行為,有效防控各類人臉識別系統風險。它具有威脅視覺化、威脅可追溯、裝置關聯分析、多賬戶管理、跨平臺支援、主動防禦、開放資料接入、防禦自定義和全流程防控等特點。
寫在最後
本文從Root的歷史出發,講述了獲取Root的發展歷史以及軼事,教大家從0到1完成對自己安卓手機的Root,提出了一些有效的檢測Root的方式。Root與HOOK一樣,是一把雙刃劍,在普通人手裡,它可以讓系統不再受到約束,可以帶來更好的手機使用體驗,但在黑灰產手裡,會變成非法牟利的工具,作為安全從業者,我們要辯證地看待每項技術,對非法行為我們要重拳出擊,為安全事業添磚加瓦。
在上一篇文章《欲知己之所防,先知彼之所攻——論Hook 技術的攻防對抗》我們提到Hook的攻擊,Hook一定需要Root嗎?答案是否定的。如果開發者有能力修改art原始碼、劫持Zygote,是可以完成Rootless HOOK操作的,Root是為了讓HOOK及HOOK模組管理工具的使用降低成本,讓HOOK操作者的重心不再放在HOOK的前置條件,而是更專注於HOOK模組的開發。
相關文章
- 一文看懂Java鎖機制2021-09-09Java
- Linux網路安全與主機防護2017-05-01Linux
- 小米手機 root 教程2024-04-04
- 一文看懂FSSC與RPA的關係2019-09-20
- 一文看懂RPA與Excel宏的區別2019-07-24Excel
- CentOS 停止維護,一文看懂升級遷移路徑2022-04-21CentOS
- 一文看懂 Github2018-06-11Github
- 病毒預防與硬碟使用與維護2016-08-10硬碟
- 如何解決 oppo 手機 root 的問題2024-03-07
- PaloAltoNetworks與普華永道共同建立漏洞防護安全機制2017-09-01
- 一文看懂虛擬機器中Java物件的生死判別2021-01-05虛擬機Java物件
- 安卓手機不能ROOT怎麼辦?2016-10-10安卓
- android判斷手機是否root2014-08-12Android
- 一文看懂Redis的持久化原理2019-03-03Redis持久化
- 一文看懂——SimSolid的優勢2024-10-17Solid
- ? 一文看懂 JS 繼承2019-03-17JS繼承
- 一文看懂 PHP 7.3 更新2019-02-16PHP
- android手機root後的安全問題 (一)2014-08-24Android
- 一文看懂Vue3.0的優化2020-10-16Vue優化
- 一文看懂AI的 Transformer 架構!2024-07-22AIORM架構
- 淺談中介軟體漏洞與防護2018-06-23
- 一文看懂分散式事務2019-12-27分散式
- 一文看懂java io系統2019-07-02Java
- 一文看懂Java集合(詳細)2020-12-09Java
- 一文看懂socket程式設計2021-11-15程式設計
- 一文看懂YOLO v32020-10-11YOLO
- 託底與防範:谷歌為何有意併購HTC的手機業務?2017-09-11谷歌
- 通俗易懂的TCP“三次握手”與“四次揮手”2021-03-09TCP
- Android手機獲取Root許可權2020-03-14Android
- 如何從手機中提取apk,無需root2015-03-18APK
- 一文看懂RPA的3種部署模式2019-09-02模式
- 雲端計算資料與資訊保安防護2012-03-21
- onethink手機後臺,純手機操作2019-05-11
- 一文看懂 PostgreSQL 分散式架構2021-06-07SQL分散式架構
- 一文看懂golang單元測試2019-01-25Golang
- 一文看懂 C 語言 I/O2022-03-25
- 一文看懂什麼是架構2024-09-11架構
- Android程式碼判斷手機是否已root2014-08-12Android