開發者曝安卓系統重大漏洞:可致手機程序被監視
新酷產品第一時間免費試玩,還有眾多優質達人分享獨到生活經驗,快來新浪眾測,體驗各領域最前沿、最有趣、最好玩的產品吧~!下載客戶端還能獲得專享福利哦!
IT之家11月23日訊息 稍早之前,Magisk的開發者topjohnwu宣佈推出了新版的Magisk工具,繞過一些安卓的SafetyNet Attestation API,讓手機在獲取Root的情況下也能玩具有該API的手遊(如《FGO》)。
但是在這之後他發現,這一解決方案對自己的一加6手機無效。之後,他在一則Medium帖子中表示發現了一個安全漏洞,《Fate/Grand Order》(通常稱《FGO》)似乎在濫用這一漏洞,用來監測他一加手機上的Root訪問權。
XDA釋出了一篇文章,根據他的發現梳理了這一漏洞的資訊。以下為該文主要內容翻譯。
Procfs和安卓
在基於Unix的作業系統上,有一個名為“procfs”的特殊檔案系統,其中包含有關程序(可以聯想應用程式)的資訊,例如記憶體使用情況(可以聯想RAM)、狀態(程序是否正在執行,休眠等)。在大多數基於Unix的作業系統上,使用者和應用程式可以輕鬆訪問procfs,來檢視系統上正在執行的應用程式和服務型別(參考Windows的工作管理員)。然而從安卓7.0“牛軋糖”系統開始,Google鎖定了對procfs的訪問許可權。在Android Nougat(安卓7.x)系統之前,像SystemPanel這樣的應用程式能夠收集有關正在執行的應用程式的資料,而無需任何特殊許可權。安卓7.x系統之後,應用程式需要通過UsageStats或AccessibilityService等API才可以做到這一點,這兩個API都由必須通過使用者授予的許可權來把關。
Google通過使用“hidepid = 2”標誌掛載/proc,來阻止應用程式通過procfs讀取其他應用程式的狀態。通過這一手段,應用程式只能看到自己程序的狀態。因此,應用程式需要通過可被接受的API(如UsageStats或AccessibilityService)來獲取當前裝置上正在執行的應用程式和服務的資訊。
漏洞
如果procfs沒有用“hidepid = 2”掛載怎麼辦?那麼,應用程式可以自由地讀取系統上執行的其他應用程式(和掛載點)的狀態,而無需任何額外的許可權 (注) 。Google在自家的裝置上通過“hidepid = 2”掛載了的procfs,但並未強制其他OEM對裝置強制執行此要求。來自LG、一加、華為/榮耀、小米等公司的幾款裝置尚未通過“hidepid = 2”掛載procfs。由此,《Fate/Grand Order》等應用程式就能利用它來檢測裝置上是否存在Magisk(或是否Root)。
注:安卓9 Pie中的一個安全性改動會阻止應用程式在自己的“SELinux上下文(context,可大致理解為“環境”)”之外讀取資訊,因為每個應用程式現在都是單獨隔離的。SELinux是一個核心模組,充當各種“守衛”,阻止應用程式和服務訪問它們不應該訪問的檔案。SELinux上下文如同一個檔案的標籤,其中包含使用者和角色等資訊。如果沒有為procfs啟用“hidepid = 2”標誌,則處於相同SELinux上下文的應用程式可以讀取同一上下文中有關其他應用程式的資訊。在執行安卓9 Pie的裝置上,只有針對安卓9 Pie構建的應用才會將這一新的SELinux更改應用在它們身上。只要安裝時沒有通過“hidepid = 2”掛載procfs,針對Android 8.1 Oreo或更低版本的應用程式將仍使用舊的SELinux規則,也就可以訪問相同SELinux上下文中的程序資訊。應Google+Play/">Google Play的新要求,你的裝置上執行多數應用程式目標API應對應安卓8.0“奧利奧”,但是,很多應用程式尚未針對安卓Pie進行更新。
procfs漏洞演示:
▲左為通過“hidepid = 2”掛載了procfs的Google Pixel 3 XL,右為未通過“hidepid = 2”掛載procfs的華為Mate 20 X
▲在Google Pixel 3 XL上,“Material Terminal”應用程式只能看到自己的程序;在華為Mate 20 X上,“Material Terminal”應用程式可以看到其他程序。
我的裝置是否受影響?
以下是XDA發現的未使用“hidepid = 2”掛載procfs的裝置(專案從左至右對應為:OEM廠商、裝置、安卓版本、是否存在procfs洩密)。
後果有多糟糕?
如果我們將這個系統漏洞與FuséeGelée、Blueborne、KRACK、Meltdown(熔斷)Spectre(幽靈)等漏洞進行比較,這個bug就相形見絀了。應用無法通過這一漏洞獲取root許可權,或竊取你的密碼。你的銀行賬戶、信用卡都是安全的。最壞的情況是,應用程式可以判斷你的裝置上是否有另一個應用程式正在執行,因此用途非常有限。請記住,這是許多GNU / Linux發行版的規範行為,另外,Google最近才開始通過安卓7.x系統阻止procfs訪問。這一bug能讓應用程式繞過所需的某些許可權來監視其他程序,但無法破壞安卓系統的沙箱並從其他應用程式中竊取資料。可無論如何,這是非預期的行為,且已經打破了安卓的隱私功能,因此bug必須得到修復。
如何檢測裝置是否受影響
若要檢查裝置是否會向其他應用程式洩漏程序資訊(即procfs未使用“hidepid = 2”掛載), 你可以使用shell命令(參考上文對比圖),也可以使用topjohnwu開發的應用程式 (從GitHub獲取:https://github.com/topjohnwu/ProcGate/releases)進行檢查。如果你的手機已經獲取Root許可權,topjohnwu的應用還能讓你使用“hidepid = 2”重新掛載procfs。
會有修復嗎?
是的,這一定會得到修復。谷歌現在會要求所有裝置使用“hidepid = 2”掛載procfs。谷歌將通過更新相容性測試套件(CTS)來強制執行。這裡的CTS是一組測試,所有裝置必須通過測試,才能使用Google Play應用和服務。想要銷售預裝了Google Play商店的所有OEM,最後都必須推出更新,以便在不久的將來使用“hidepid = 2”重新掛載procfs。這一問題最先在一加裝置上發現,一加方面已經知悉此問題並正在進行修復。如果其他OEM對此錯誤發表評論,我們將就在此文進行更新。但是,你大可不必懷疑所使用的裝置的OEM是否會發布更新,如果他們希望更新通過CTS測試,就必須修復此bug。