一.什么是LSM
LSM全稱為Linux Security Modules,Linux安全模塊,是一個在內核模塊的基礎上提出的輕量級的安全訪問控制框架。
下圖為包含LSM的Linux內核模塊結構,可以看出來LSM框架只是提供一個支持安全模塊的接口,本身不能增強系統安全性。通過LSM框架,安全模塊層的安全模塊們可以非常自由地在內核里加載和卸載,不需要對內核進行重新編譯。
*(圖源:曲坤,周蓮英-基於 LSM 的安全審計機制研究與實現。侵刪)
框架結構:
1)在內核數據結構中加入安全域(存放安全屬性)
2)在內核代碼中不同的關鍵點插入對hook函數的調用
LSM框架在安全域涉及的內核對象的數據結構體中加入void *類型的security指針,指向的數據類型由安全模塊定義,通常為結構體指針。然后在該結構體中記錄當前內核對象的上下文參數和相關的安全信息。
二.hook機制
LSM框架通過提供一系列的hook,用來控制對內核對象的操作。
下圖為hook函數的訪問示意圖,首先用戶訪問系統調用時,先通過原有的內存接口進行功能性的錯誤檢查,然后再進行自主訪問控制DAC檢查。在訪問內核的內部對象之前,通過安全模塊的hook函數調用LSM,LSM查看操作上下文和主客體安全域的相關信息決定是否允許請求,覺得訪問的合法性,返回信息。在內核即將進行實際操作之前調用安全模塊中的hook函數,並通過hook函數訪問安全策略來決定是否允許該操作的執行。
其中自主訪問控制(Discretionary Access Control,DAC)是指對某個客體具有擁有權(或控制權)的主體能夠將對該客體的一種或多種訪問權自主地授予其它主體,並在隨后的任何時刻將這些權限回收。這種控制是自主的,也就是指具有授予某種訪問權力的主體(用戶)/能夠自己決定/是否將訪問控制權限的某個子集授予其他的主體/或從其他主體那里收回他所授予的訪問權限。
與DAC有一個相關的概念是強制訪問控制(Mandatory access control,MAC),也是一種由操作系統約束的訪問控制,目標是限制主體或發起者訪問 或 對對象/目標執行某種操作的能力。主體通常是一個進程或線程,對象可能是文件、目錄、TCP/UDP端口、共享內存段、I/O設備等。每當主體嘗試訪問對象時,都會由操作系統內核強制執行授權規則--檢查安全屬性並決定是否可進行訪問。同樣,任何主體對任何對象的任何操作都將根據一組授權規則(策略)進行測試,決定操作是否被允許。
也就是在MAC下,用戶不能覆蓋或修改策略,策略由安全管理員集中控制。相比而言,DAC也具有控制主體訪問對象的能力,但允許用戶進行策略決策/分配安全屬性。最近的MAC實現有諸如面向Linux的SELinux和AppArmor,以及面向Windows的強制完整性控制。
目前有許多針對Linux的MAC實現(如SELinux/AppArmor),其中大多數基於Linux安全模塊(LSM)框架
(圖源:張浩-基於LSM的安全審計系統的設計與實現,侵刪)
LSM提供的hook機制,可以實現一定的安全審計功能。其中提供兩類安全hook函數:用來對內核對象的安全域進行管理的&用來管理對內核對象的訪問控制。
每個安全hook函數可以實現針對指定操作訪問(如mkdir)的安全審計策略。
三.審計機制
審計機制對系統中有關安全的活動進行記錄、檢查及審核,同時為入侵檢測等其它安全措施提供可靠的數據源。審計的結果定時報告給管理層,並被用來更新安全策略。