SELinux/SEAndroid 實例簡述(一) 基礎概念

  1. /***********************************
  2. * Author:劉江明
  3. * Environment:MTK Android 6.0
  4. * Date:2016年11月04日
  5. ***********************************/
   
一. 前述    
        在Android5.0之前SEAndroid並沒有真正地被啓用。真正比較關注SELinux與SEAndroid是從着手Android6.0開始。網上關於SELinux與SEAndroid的與不算多。概念又新又多,而且沒有一個統一的中文翻譯。剛開始一頭紮下去看了一頭霧水。在這裏,希望能用自己微薄的知識做一下通俗的總結,最關鍵的問題想通過實例如瞭解,這東西怎麼運用到實例裏面去。
        在這裏看了很多文章,下面很多知道都是引用了很多大神的博客,也相當於稍做總結 。感謝這些大神的默默奉獻。
        希望自己在後面能對Android的安全體系有一個完整的瞭解。目前,第一篇文章,先了解一下SELinux/SEAndroid的基礎概念,然後通過實例去分析。然後瞭解一下在Android系統源碼中,SELinux源碼中的簡單分佈,與如何在源碼打開Root權限和如果完全不編譯SEAndroid。最後是希望能進一步深入到源碼裏面去了解SEAndroid機制。這裏面涉及很廣,包括Zygote,packagemanagerservice,dalvik等等等。希望這些願景都能被實現

二. 關於SELinux與SEAndroid的基本概念
        先簡述一下相關概念   
       1. 兩種安全機制DAC(Discretionary Access Control)和MAC(Mandatory Access Control)。通俗地講,這兩個機制的區別是。在DAC裏,如果一個應用獲取了一個用戶權限,如Root,那他的所有操作操作都是基於這個用戶權限。而MAC就簡單霸道好多,無論你是誰,甚至是有Root用戶權限,文件權限爲777,但每個動作都是需要被允許之後可以被執行。這裏可以是在安全策略文件中被允許,與可以是用戶手動允許
       2. MAC機制基於LSM(Linux Security Module)標準實現。
            3. SELinux全稱Security-Enhanced Linux。SELinux在MAC上實現的,所以SELinux也是基於LSM標準。在Linux kernel 2.6後正式直接整合進Linux裏面
            4. 第一條中提到MAC的安全策略文件的作用就是表明了允許幹什麼。學名是TEAC(Type Enforcement Access Control)。簡稱TE。裏面的語言被稱爲強制類型語言。我們的目標就是學會如何何用這個文件
            5. Security Context,安全上下文。Security Context的作用就是相當於這些文件和進程的“身份證”。 
       6. SELinux Mode,SELinux有兩種模塊Permissve Mode(寬容模式)和Enforcing Mode(強制模式)。區別在於Permissive只會打印SELinux Log。而強制模式會進行真正攔截。如果被攔截,kernel log中的關鍵字是"avc:denied"。可以在下面的文件節點查看SELinux是什麼模式,這裏返回了一個1,表示在enforce模式
 
            上述1,2,3,4,5它們的關係是這樣的
             
       上面這個圖沒有提到TE文件的關係。TE文件的規則和一些用戶主動允許的動作等等會存儲在圖中的database裏。
       當有一個進程執行read動作(Event)被Security Server 監測到地時候,DAC會作初步的檢查。然後把動作的傳進LSM,同時,LSM會找到該進程和文件的上下文 
       前面說了SELinux基於LSM實現。SELinux在初始化的時候會實現一些由LSM提供的抽象函數(abstract)和把一些LSM回調(Hook)註冊進LSM。LSM會讀取SELinux裏database的TE規則,或者在AVC(AccessVector cache)裏尋找相應的規則。AVC相當於一個規則的緩存,加快讀取的速度。找到相應的規則後又把它傳回LSM,在LSM裏做出最後的判斷

關於SEAndroid
Android在SELinux的基礎上擴展了SEAndroid,其實兩者在原理上差不多,但是SEAndroid面向的對象就是更豐富了,後面會介紹。需要了解的是google到了Android 5.0之後才完全深度整合了SELinux和SEAndroid。具體進程如下:
 
三. SELinux與SEAndroid的基礎知識
1. SELinux兩個最基本的對象是主體(Subject)和客體(Object)。主體和客體分別對應的是“進程”和“文件”。這裏的文件並不單指的是實際存在的文件,而是指Linux裏“一切皆文件”裏指的文件。如Socket,系統屬性等。
        2. 在SEAndroid,對主體和客體進行了進一步形式上的封裝和擴展,其實差不多。SEAndroid裏細分爲:系統文件,服務,系統屬性,Bindert和Socket。這裏的系統屬性指的是build.prop裏的屬性,也是getprop命令查詢出來的屬性。我們後面就是針對這幾個對象進行實例分析

        3. 在adb裏執行下面的命令可以查看主體和客體的安全上下文。
        查看客休(文件)的安全上下文 ls -Z
        
             查看主體(進程)的安全上下文ps -Z
            
            其中文件的安全上下文 “u:object_r:rootfs:s0”具體表示如下
U:一個名爲U的SELinux用戶
        object_r:這個標誌位在進程裏表示的是一個用戶角色(role)但是文件無扮演任何角色,這僅是一個文件的標識
        rootfs:這是一個type的標誌位,也是TE裏最重要的一個標示位。不然怎麼稱爲TE(Type Enforcement)
        s0:LSM的級別
        進程的安全上下文“u:r:init:s0”。就第二位與文件的不同,r 全稱role,表示的是一個用戶角色。第三位同樣表示類型(type)也是最重要的
        
         從上面可以看出,Linux用於安全機制的元素有好幾種,用戶,角色,類型,安全等級。這幾種元素在某些場合,還是會被用到,但對於LSM和SELinux最重要的還是type。所以後面的關注點在於主體和客體的type。

    關於角色的一點介紹
  1. //通過external/sepolicy/users和external/sepolicy/roles文件的內容,我們就可以看到SEAndroid所定義的SELinux用戶和SELinux角色。
  2. //文件external/sepolicy/users的內容如下所示:
  3. user u roles{ r} level s0 range s0- mls_systemhigh;
  4. //上述語句聲明瞭一個SELinux用戶u,它可用的SELinux角色爲r,它的默認安全級別爲s0,可用的安全級別範圍爲s0~mls_systemhigh,其中,mls_systemhigh爲系統定義的最高安全級別。
  5. //文件external/sepolicy/roles的內容如下所示:
  6. role r;
  7. role r types domain;
  8. //第一個語句聲明瞭一個SELinux角色r;第二個語句允許SELinux角色r與類型domain關聯。

                                                                                                  ---------摘自《SEAndroid安全機制框架分析》
        關於安全等級,只要知道兩個原則“read down”和"write up"。即低安全級可以往高安全級的寫東西,高安全級的可以往低安全級的讀東西,反過來則不可以,同級的可以相互讀寫。《深入理解SELinux SEAndroid之二》一文中對安全級有很詳細的介紹。

以下的薦書摘自“阿拉丁神農”和“羅昇陽”大神的博客
  1. 1 SELinux NSAs Open Source Security Enhanced Linux
  2. 下載地址:http://download.csdn.Net/detail/innost/6947063
  3. 評價:講得SELinux版本比較老,不包括MLS相關內容。但是它是極好的入門資料。如果你完全沒看懂本文,則建議讀本文。
  4. 2 SELinux by Example Using Security Enhanced Linux
  5. 下載地址:http://download.csdn.net/detail/innost/6947093
  6. 評價:這本書比第1本書講得SELinux版本新,包括MLS等很多內容,幾乎涵蓋了目前SELinux相關的所有知識。讀者可跳過1直接看這本書。
  7. 3 The_SELinux_Notebook_The_Foundations_3rd_Edition
  8. 下載地址:http://download.csdn.net/detail/innost/6947077
  9. 評價:這是官方網站上下的文檔,但它卻是最不適合初學者讀的。該書更像一個彙總,解釋,手冊文檔。所以,請務必看完12的基礎上再來看它。
  10. 4 Security Enhanced (SE) Android: Bringing Flexible MAC to Android




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章