TOMOYO Linux
TOMOYO Linux是針對 Linux 的一種強制訪問控制(Mandatory Access Control, MAC)實現。該項目於 2003 年 3 月啟動,並由NTT Data公司資助。TOMOYO Linux 專注於系統行為,允許每個進程聲明實現其目的所需的行為和資源。它既能作為系統分析工具使用,也能作為訪問限制工具使用。
TOMOYO Linux 的安全目標是提供「既能覆蓋絕大多數用戶的實際使用需求,又能保持讓絕大多數管理員易於使用的強制訪問控制(MAC)」。TOMOYO Linux 不僅是面向安全專業人員的工具,也同樣適用於普通用戶和系統管理員。
有關強制訪問控制概念,參見:zhwp:強制訪問控制
簡介
TOMOYO Linux 試圖構建一個讓所有配置都以易於理解的方式預先安排妥當的系統:
- 提前獲取在內核生命周期內至少會發生一次的所有訪問請求。
- 允許管理員編寫僅放行預期內且合規的訪問請求策略。
與AppArmor不同,TOMOYO Linux 旨在保護整個系統免受攻擊者利用應用程式漏洞帶來的威脅。TOMOYO Linux 應對該威脅的方式是:先在測試環境中記錄所有應用的行為,隨後在生產環境中強制所有應用只能在這些已記錄的範圍內運行。
TOMOYO Linux 並不適用於希望直接使用他人提供的現成策略文件的用戶。它需要從零開始構建策略,並通過「學習模式(learning mode)」提供輔助,該模式可以針對特定系統自動生成具備必要且充分權限的策略文件。TOMOYO Linux 能夠報告 Linux 系統內部正在發生的情況,因此也可以作為系統分析工具使用。它類似於 strace,能夠報告每個程序正在執行的操作以及訪問了哪些文件或網絡。
該對比表提供了 TOMOYO Linux與AppArmor、SELinux以及SMACK的全面對比。
開發分支
TOMOYO Linux 1.x是最初的開發分支。TOMOYO Linux 於 2005 年 11 月 11 日首次發布。它以可應用於 Linux 內核的補丁形式實現,目前仍在積極開發中。該分支可以與 SELinux、SMACK 和 AppArmor 等其他安全模塊並存。
TOMOYO Linux 2.x是 Linux 主線內核(Mainline Kernel)的開發分支。2009 年 6 月,TOMOYO 被合併至 Linux 2.6.30 內核版本中,並使用標準的 Linux 安全模塊(LSM)鉤子(Hooks)。然而,若要將 TOMOYO Linux 的完整 MAC 功能移植到 Linux 內核中,則必須進一步擴展 LSM 鉤子。因此,該分支尚未提供與 1.x 開發分支對等的功能。該圖表對比了各分支之間的差異。
AKARI基於 TOMOYO Linux 1.x 分支,並可以加載內核模塊(LKM)的形式實現。因此,在無需針對內核應用補丁並重新編譯的前提下,該分支具有更顯著的使用優勢。該表格提供了 AKARI 與 TOMOYO Linux 1.x 及 2.x 分支的全面對比。
TOMOYO Linux 1.x
通過應用 ccs-patch 補丁的內核來實施 TOMOYO Linux 1.x,以獲取該項目所能提供的完整功能。然而,由於必須使用ccs-patch對內核進行補丁處理並隨後重新編譯,因此在實施該分支時需要克服多重困難。
必須同時安裝打過補丁的內核以及用戶空間工具。AUR 中提供了ccs-toolsAUR軟體包。
初始化配置
首先必須初始化策略:
# /usr/lib/ccs/init_policy
策略文件會保存在/etc/css/目錄中,可以通過運行以下命令進行編輯:
# ccs-editpolicy
AKARI
AKARI 的局限性
在純粹將 TOMOYO Linux 項目用於系統分析的前提下。AKARI 是實現該目標最簡便的方法。而在將其用於系統限制的前提下,這是以最小的工作量獲取 TOMOYO Linux 1.x 分支絕大部分功能的方法。然而,有下述局限性:
- 其取決於發行版提供的內核版本與具體配置:
CONFIG_SECURITY=y [必需] CONFIG_KALLSYMS=y [必需] CONFIG_PROC_FS=y [必需] CONFIG_MODULES=y [必需] CONFIG_SECURITY_PATH=y [可选:用于支持绝对路径名] CONFIG_SECURITY_NETWORK=y [可选:用于提供网络限制]
- 由於缺少所需的 LSM 鉤子,部分高級網絡操作的限制功能會受制約或無法使用。
- 無法限制內核功能(capabilities)的使用。
- 為了保持內核二進制接口(KABI)不發生改變,每個任務的變量(pre-task variables)被管理在struct task_struct之外,這導致其查找速度較慢。不過,由於基於路徑名的權限檢查所帶來的性能下降占主導地位,因此對於典型的最終用戶而言,此項性能損耗應該並不明顯。
該表格提供了 AKARI 與 TOMOYO Linux 1.x 及 2.x 分支的全面對比。
安裝
必需同時安裝 AKARI 以及用戶空間工具。AUR 中提供了akariAUR和ccs-toolsAUR軟體包。
若要激活 AKARI,請設置以下內核參數:
init=/usr/bin/ccs-init
初始化配置
首先必需初始化策略:
# /usr/lib/ccs/init_policy --module_name=akari
策略文件會保存在/etc/css/目錄中,可以通過運行以下命令進行編輯:
# ccs-editpolicy
TOMOYO Linux 2.x
TOMOYO Linux 2.x 的局限性
TOMOYO Linux 2.x 在 Linux 主線內核中的實現尚未完全結束,但自 2.5.x 版本以來已非常接近 1.x 分支。與 1.x 分支相比,仍有少數特性有待實現。該圖表提供了各開發分支之間差異的全面對比。
安裝
所有官方支持的內核均已內置對 TOMOYO 的支持。
針對自定義內核,請確保設置了以下內核選項:
CONFIG_SECURITY=y CONFIG_SECURITYFS=y CONFIG_SECURITY_NETWORK=y CONFIG_SECURITY_PATH=y CONFIG_SECURITY_TOMOYO=y CONFIG_SECURITY_TOMOYO_POLICY_LOADER="/usr/bin/tomoyo-init" CONFIG_SECURITY_TOMOYO_ACTIVATION_TRIGGER="/usr/lib/systemd/systemd" CONFIG_LSM="landlock,lockdown,yama,integrity,tomoyo,bpf"
安裝用戶空間工具包的 2.6 分支軟體包tomoyo-toolsAUR。
激活
若要激活 TOMOYO Linux,請設置以下內核參數以啟用該 Linux 安全模塊(LSM):
lsm=landlock,lockdown,yama,integrity,tomoyo,bpf
lsm=內核參數用於設置 Linux 安全模塊的初始化順序。內核配置的lsm=可以通過zgrep CONFIG_LSM=/proc/config.gz確定,當前生效的值可通過cat /sys/kernel/security/lsm查看。
- 確保
tomoyo放在列表第一個「主要(major)」模塊的位置[1]有關有效值及其順序的示例,可以在security/Kconfig中找到。 - 由於
capability總是會被自動包含,因此應從lsm=中省略
在/usr/lib/systemd/systemd執行時,TOMOYO 將從/etc/tomoyo/policy/current中加載所有已保存的策略。
接下來,檢查激活是否成功。通過dmesg應該會看到如下所示(或類似)的輸出行:
# dmesg | grep -A 1 -B 1 TOMOYO
[ 0.003375] Security Framework initialized [ 0.003387] TOMOYO Linux initialized [ 0.003396] AppArmor: AppArmor disabled by boot time parameter -- [ 6.829798] Calling /usr/bin/tomoyo-init to load policy. Please wait. [ 6.833709] TOMOYO: 2.5.0 [ 6.833712] Mandatory Access Control activated.
首次使用時,如果需要在計算機關機/重啟時將內存中的策略自動保存到文件系統,請創建以下systemd服務單元:
/etc/systemd/system/tomoyo-savepolicy.service
[Unit] Description=Tomoyo savepolicy [Service] Type=oneshot ExecStart=/bin/true ExecStop=/usr/bin/tomoyo-savepolicy StandardInput=tty RemainAfterExit=yes [Install] WantedBy=multi-user.target
隨後,啟用tomoyo-savepolicy.service。
禁用
從lsm=內核參數中移除tomoyo,或者完全移除lsm=參數。
初始化策略
首先必需初始化策略:
# /usr/lib/tomoyo/init_policy
策略文件會保存在/etc/tomoyo目錄中,可以通過運行以下命令進行編輯:
# tomoyo-editpolicy
默認情況下,TOMOYO 啟動時會使用Disabled(已禁用)配置集(參見下方的配置集表格)。如果現在就要為所有實體啟用學習模式,只需要在etc/tomoyo/policy/current/domain_policy.conf中<kernel>命名空間的配置集:
<kernel> use_profile 1 use_group 0
在無法確定是否需要如此廣泛的學習模式的前提下,直接忽略此步驟即可。稍後可以通過tomoyo-editpolicy工具,在Domain transition editor(域遷移編輯器)中對任何選定的域(或多個域)按下S鍵來切換配置集。
完成上述配置後,需要重啟計算機。
日誌守護進程
TOMOYO 擁有專屬的日誌守護進程tomoyo-auditd。它對於監控閉源應用程式的行為非常實用。初始化配置文件中包含詳實的注釋說明,位於/etc/tomoyo/tools/auditd.cconf,而日誌文件則存放在/var/log/tomoyo目錄中
若需配合 Systemd 使用該進程,請按照官方文檔第 4.6 章所述內容創建/etc/systemd/system/tomoyo-auditd.service文件。
使用
為能夠高效使用 TOMOYO Linux 或 AKARI,必需查閱相關文檔:
運行策略編輯器以開始編輯。在運行 TOMOYO Linux 1.x 或 AKARI 的前提下,應使用ccs-tools:
# ccs-editpolicy
如果使用 TOMOYO Linux 2.x,則應使用:
# tomoyo-editpolicy
隨著系統的運行,TOMOYO Linux 將創建域(domains)並將其添加到樹狀結構中。TOMOYO Linux 中的訪問分析/限制是通過域來實現的。每個進程都屬於一個唯一的域,並且每當進程執行一個程序時,就會遷移到一個不同的域。域的名稱是表示進程執行歷史的級聯字符串表達式。例如,內核所屬的域為<kernel>;由內核調用的/sbin/init所屬的域名為<kernel> /sbin/init;如果/sbin/init調用了/etc/rc.d/rc,則其所屬的域名為<kernel> /sbin/init /etc/rc.d/rc。可以根據需要抑制或初始化域遷移。
可以為每個域分配配置集(profiles)。共有四種默認配置集:
| Disabled(已禁用) | 效果與普通內核相同。 |
| Learning(學習) | 即使訪問請求違反了策略,也不予拒絕,而是將該請求追加到策略中。 |
| Permissive(寬容) | 即使訪問請求違反了策略,也不予拒絕,且不將該請求追加到策略中。 |
| Enforcing(強制) | 若請求違反策略,予以拒絕,不將該請求追加到策略中。 |
學習(learning)配置集可用於分析系統或有特定需求的應用程式。一旦確定了某個域的所有預期訪問請求,即可在切換到強制(enforcing)配置集之前,根據需要編輯該域的策略。此操作可以從系統啟動開始,針對任何及所有域進行設置。