歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> 學習Linux

Android root 原理

Android root 原理


Android root 原理


0x00 關於root

linux和類Unix系統的最初設計都是針對多用戶的操作系統,對於用戶權限的管理很非常嚴格的,而root用戶(超級用戶)就是整個系統的唯一管理員,擁有等同於操作系統的所有權限。所以一旦獲取到root權限,就可以對整個系統進行訪問和修改。而在Android下獲取root權限之後就可以自己定制系統,卸載一些預裝軟件,完全掌控自己的設備。

0x01 setUID

在討論root的原理之前,有一個非常重要的概念,就是文件的setUID權限。linux下普通的文件權限大家都很清楚,可讀,可寫,可執行,下圖很清楚的一個普通的可執行文件root的權限,r(可讀),w(可寫),x(可執行)。
Android root 原理Android root 原理

但是,要考慮一種情況,比如說,一個用戶是有權修改自己的密碼的,但是記錄密碼的文件/etc/shadow只有root用戶才是可寫的,那普通用戶如何才能修改自己的密碼呢?這一切都要歸功於setUID的設置,修改密碼時使用的命令passwd對應的二進制程序是/usr/bin/passwd
Android root 原理Android root 原理

可以看到passwd的二進制文件的權限位中不僅僅是rwx了,多了一個s權限,而這個s權限就是我們的主角,setUID權限。

由於passwd有setUID權限,所以linux系統可以臨時把這個文件的所有者(root)身份角色賦給普通用戶,以達到讓普通用戶可以修改自己密碼的目的。

那如何設置setUID權限呢?

平常使用的普通文件權限位是由3、3、3共9位的二進制數字組成 ---|---|---,分別對應文件所有者,文件所有者同一用戶組權限和其他用戶權限。最開始的名為root的可執行文件的權限為rwxrwxr-x,所對應的二進制位就是111 111 101 ,然後每三位對應421換算成16進制,就是775。而新增的setUID權限是在前面新增了三位,分別表示setGID、setUID、stick bit權限,而我們現在只關心setUID權限。因此加上setUID權限之後,文件的權限應該由4位數字組成,例如之前的root文件加上setUID權限就是4755。而修改密碼的passwd文件對應的權限位就是4755。

可以通過一個小例子來直觀的感受一下,平常使用的cat命令對應的二進制文件是沒有setUID權限的:

Android root 原理Android root 原理

可以在普通用戶下嘗試使用cat去讀取/etc/shadow文件的內容:

Android root 原理Android root 原理

提示權限不夠,再給cat加上setUID權限之後再去讀取/etc/shadow的內容:

Android root 原理Android root 原理

是可以讀出來的,但是/etc/shadow中的內容都經過加密處理。

0x02 Linux 下的root

平常使用的linux發行版,需要切換到root用戶時,直接使用su命令,然後輸入su用戶的密碼就可以切換到root用戶了。
Android root 原理Android root 原理

Android root 原理Android root 原理

0x03 Android 的root

但是在未root的Android設備上是沒有su的二進制文件,直接執行su命令會提示"su not found"。
Android root 原理Android root 原理

再進入已經root過的設備上查看,平常在adb shell中用的命令對應的二進制文件都是在/system/bin目錄下,是存在su文件的:
Android root 原理Android root 原理

可以看到這裡的su只是一個指向/system/xbin/的一個鏈接。
Android root 原理Android root 原理

可以看到這裡的su是有setUID權限位的。

而要在系統分區 /system/xbin 中添加文件本身就是需要root權限,而且設置su文件的所有者為root用戶也是需要root權限的,設置setUID權限同樣也需要root權限。

這就進入到了一個死循環當中,要利用su,首先要有root權限。因此這時就需要利用到Android存在的漏洞,Android系統本身存在著很多以root權限運行的原生進程,而這些root進程中如果存在可以利用的漏洞,就可以利用進程的root身份:

  1. 拷貝su文件到/system/xbin系統分區;
  2. 設置su文件所有者為root用戶;
  3. 設置su文件的setUID權限,便於自己的進程執行su命令獲取root權限。

原文來自:http://www.cnblogs.com/lanrenxinxin/p/5572640.html

轉載地址:http://www.linuxprobe.com/android-root-theory.html


http://xxxxxx/Linuxjc/1139894.html TechArticle

Copyright © Linux教程網 All Rights Reserved