2012-10-30 29 views
14

我正在編寫一個應用程序,它將使用su在Linux內核中執行一些命令。我想知道超級用戶如何知道應用程序要求root權限?此外,是否有任何已知的方式(通過模糊處理)可以繞過此檢查?Android SuperUser應用程序如何檢測應用程序請求root?

換句話說: Android /(超級用戶)如何知道應用程序需要root權限,儘管在android清單文件中沒有明確要求的權限。

我從安全的角度提出這個問題。我想知道這是如何工作的細節,以確保惡意應用程序無法繞過超級用戶。

回答

14

當你運行這個:

Process p = Runtime.getRuntime().exec("su"); 

您嘗試執行「蘇」,這只是一個應用程序有超級用戶權限的用戶可以做到!因此,無論何時Android檢測到您嘗試運行「su」,它都會得到該應用程序需要超級用戶權限。

此外,Android有一些區域保留,只有Android系統可以訪問。如果您的應用試圖訪問那裏,Android會明白需要超級用戶。

例如,假設您試圖修改主機文件或修改某些網絡配置,如DHCP。或者您嘗試訪問系統區域的文件,例如/data Android將檢查該應用是否具有超級用戶權限,然後纔會授予其訪問權限。

關於惡意軟件,無論何時應用程序需要超級用戶訪問,系統都會提示用戶授予或拒絕超級用戶對應用程序的權限。只有這樣,應用才能獲得root訪問權限。因此,用戶可以決定是否接受或拒絕任何應用程序的根訪問權限。 (系統會一個應用程序試圖訪問的東西,需要root權限,除非你告訴系統記住您接受或拒絕的選擇特定的應用程序每次提示用戶

PS:你可以考慮檢出website for Superuser app

+1

+1好解釋 –

+2

以及爲什麼'超級用戶'應用程序只能作爲** Su **權利提供者?是什麼讓它成爲負責人? – waqaslam

+0

@Waqas這可能會回答你的問題http://androidsu.com/superuser/只是探索網站。我會更新答案中的鏈接。可能有助於他人。 :) –

6

其實這很簡單。 Vanilla Android甚至沒有susuperuser。當你根設備時,你以root身份運行一個shell。然後你安裝su二進制和superuser.apk。安裝完成後,將shell設置回正常的權限。所有這些僅限根申請的應用程序現在可以撥打su以請求root訪問權限。

su運行時,它會調用superuser.apk,並顯示一條消息,詢問您是否要提升權限。 su二進制文件和superuser.apk通過Android的常規沙箱保護。請注意,一旦您給予應用程序root權限,就可以自由執行任何操作,包括用自己的版本覆蓋su。

17

超級用戶系統有兩個部分 - superuser binary(su在終端上)和SuperUser.apk(Android應用程序使用su管理應用程序)。縱觀su binary的源代碼,當你請求通過

Process p = Runtime.getRuntime().exec("su"); 

其發佈通過Android消息管理員應用程序已請求超級用戶訪問的意圖蘇訪問。

sprintf(command, "/system/bin/am broadcast -a '%s' --es socket '%s' --ei caller_uid '%d' --ei allow '%d' --ei version_code '%d' > /dev/null",action, socket_path, ctx->from.uid, allow, VERSION_CODE); 

管理者應用偵聽此意圖,並要求用戶來處理該請求(允許/拒絕)。

+0

根據你的解釋,似乎'su'廣播了一條消息,要求Superuser.apk告訴它它應該允許root訪問或不允許。所以我想知道,什麼阻止另一個應用程序響應該請求而不是Superuser.apk? (如果可能的話,這將是一個巨大的漏洞,所以我猜測它不是;只是好奇)另外,有什麼保護措施可以防止應用程序以虛假名稱請求root? (即以awesome-root-only-app.apk的名義請求root的惡意.apk來欺騙用戶進行訪問) – youen