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



       
        
 
        











 





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM