1. 程式人生 > >啟用SEAndroid,手機root後還安全嗎?

啟用SEAndroid,手機root後還安全嗎?

你是否仍在為手機安全感到困擾?是否擔心手機root之後會帶來更大的安全隱患?SEAndroid會幫助你解決困擾!

            SEAndroid基於NSA(美國國家安全域性)開發的SELinux (Security-Enhanced Linux),NSA在Linux社群的幫助下開發了基於Linux的強制訪問控制(MAC),在這種訪問控制體系的限制下,程序只能訪問那些在他的任務中所需要檔案,從而從根源上限制了惡意程式的訪問。

            SEAndroid實現了強制訪問控制,他可以針對特定的程式和檔案資源來進行許可權的控制,我們許可權控制的主體不再是使用者,而變成了程序、應用,並且每個程序不可以改變檔案資源的訪問許可權,因為每個檔案資源很對不同的程序主體設定了不同的訪問許可權。系統在編譯時預設了訪問策略,該策略中包含了很多規則,規則指定了程序主體訪問檔案資源的許可權。在對檔案資源訪問進行控制的同時,Binder IPC、Socket、Properties的訪問同樣納入到SEAndroid的控制中,這使得每個程序的活動空間就變小了,即使你擁有了root許可權,在使用不同程序的時候也並不一定能取得root許可權。

            從下圖我們可以看到,啟動SEAndroid之後的系統,所有檔案都包含了安全context:

# ls -Z

drwxrwx---        system               cache                u:object_r:cache_file:s0                           cache

drwxrwx--x       system               system               u:object_r:system_data_file:s0                  data

drwxr-xr-x        root                    root                   u:object_r:device:s0                                dev

-rwxr-x---         root                    root                   u:object_r:rootfs:s0                                 init.rc

dr-xr-xr-x         root                     root                  u:object_r:proc:s0                                   proc

…………

            同樣的下圖是系統執行後的程序context,可以看出不同的程序可以屬於各自的domain:

# ps -Z

u:r:init:s0                                              root                  1          0     /init

u:r:kernel:s0                              root                  72         2     mmcqd/0

u:r:kernel:s0                              root                  2          0     kthreadd

u:r:servicemanager:s0     system   98         1     /system/bin/servicemanager

u:r:rild:s0                                              radio     104       1     /system/bin/rild

u:r:surfaceflinger:s0        system   105       1     /system/bin/surfaceflinger

…………

            因此,通過規則的設定,可以限制每個domain的許可權,下面列舉了servicemanager的許可權設定TE(type enforcement):

type servicemanager, domain;

type servicemanager_exec, exec_type, file_type;

init_daemon_domain(servicemanager)

allow servicemanager self:binder set_context_mgr;

allow servicemanager domain:binder { receive transfer };

         不僅系統程序進行了強制訪問控制,不同的APP同樣進行了許可權的區分,根據簽名的不同被分到不同的domain中。常見的domain如system_app、platform_app、media_app、untrusted_app等,尤其對於untrusted_app的應用訪問的資源特別有限。

            目前困擾使用者最多的是病毒問題,一種典型的病毒就是通過程序注入關鍵程序(手機銀行客戶端等)的方式實現使用者資訊的監聽、控制,給使用者帶來了極大的威脅。在啟動了SEAndroid的系統中,此種病毒被多層次的攔截:1.root許可權獲取更加困難,shell許可權很難將檔案放入system_file型別目錄下。2.ptrace的許可權受到嚴格的控制,通過adb啟動的程序更是無法實現注入,為了更加安全可以關閉ptrace功能。3.被注入的程序的許可權被限定到規定的範圍內,不能為所欲為。從而徹底的阻止了此類病毒帶來的危害,給使用者使用手機銀行等應用帶來了更高的可靠性。

由此可見,root使用者不再是萬能的,許可權被進行了徹底的隔離,程序的許可權被設定到了最小的範圍內。關於SEAndroid技術的一些細節稍後繼續分析。