在Linux作業系統裡,SELinux是不少管理者會採用的存取控制機制,然而究竟要如何使用這種功能強大且複雜的工具,便成為管理者頭痛的問題。對此,工業技術研究院資通所在臺灣資安大會上,介紹他們從資訊安全的角度出發,打造能夠容易套用,且能通用於大部分Linux作業系統的SELinux白名單政策(Whitelist Policy)樣板的過程。

為何需要製作這種專門針對資安打造的SELinux政策?工業技術研究院資通所技術副理趙翊廷表示,SELinux雖然是Linux作業系統常見的存取控制措施,但管理者想要掌握SELinux的功能,學習門檻可能令不少人卻步。因此,許多系統管理者就會套用由社群維護的參考政策(Reference Policy)樣板,再微調存取政策。

然而,一旦這種樣板政策被導入後,很可能因為管理者調整的過程中,不慎開啟不必要的權限,而可能衍生資安風險。趙翊廷說,一般而言,一旦管理者套用這種參考政策後,大都是透過嘗試錯誤的方式,來進行調整:像是使用audit2allow功能來消除運作過程受到阻擋的訊息,或者是利用chcon來修改subject與object的標籤名稱。這種嘗試錯誤的做法,再加上同時很可能缺乏熟悉SELinux的人員檢視,管理者有可能根本不曉得自己開啟了不必要的權限。

對此,趙翊廷說,他們決定從許多管理者較能接受的方式下手:以類似應用程式白名單的機制下手,製作大部分Linux系統能夠通用的SELinux白名單政策。因為,光是原本SELinux內建的政策,就有4,413個角色,其產生的檔案原始碼約36萬行,並不是每個使用者都能分析程式碼的資源存取行為,以便撰寫合適的SELinux政策組態。

另一方面,對於管理者而言,可運用於不同Linux版本的SELinux政策,有可能存在顯著的差異,甚至面臨無法通用的情況,導致管理者將製作完成的SELinux政策套用到第2款Linux作業系統時,就可能會使得電腦無法開機。因此,工研院試圖製作一款SELinux政策範本,能夠跨不同Linux版本,且具備相當程度的資安防禦強度、容易操作,以及支援新軟體安裝及系統更新。

而對於要如何著手製作這種通用的政策範本?首先,工業技術研究院資通所副工程師王禹軒表示,他們從420個關鍵的權限著手,像是Exe、read、write等,藉由減少資源的角色數量,來降低原本SELinux政策的複雜程度,王禹軒說,經過實做後,他們將角色數量降低至5個以內。而這樣的實做內容,是將放寬管控的粗細程度,從原來程式對於資源操作的開放權限與否,予以擴張,改以處理程序或應用程式為開放單位,而且鎖定執行權限來控管,使得新的通用政策可以大幅降低複雜程度。

然而,王禹軒說,在他們測試製作的SELinux政策過程中,也遇到一些難題。例如,有些程式在執行的過程中,會產生執行檔,但因為這個新的執行檔不在應用程式白名單裡面,一旦開啟就會遭到阻擋。對此,王禹軒表示,由於在SELinux政策的系統裡,無法直接辨識新執行檔案的行為合法與否,他們將這類會在執行過程中產生執行檔案的程式,視為特例處理。

再者,則是時下常出現的腳本(Script)程式碼攻擊,他們要如何透過這個SELinux白名單政策來防範?也成為工研院面臨的難題。王禹軒說,他們不光從應用程式、程式庫、核心模組下手,限制執行或是載入的權限,而針對腳本的管制,則是從限制讀取的權限著手。

但在限制讀取腳本的策略上,王禹軒說,他們測試的過程發現,如果單純從檔案的角度來著手管制,會面臨限制太多的情況,重點是執行腳本的使用者為何。因此,工研院為這些執行腳本的程式,設置專屬的使用者讀取權限。

管理者一旦套用了這種SELinux的白名單,基本上,外部引入的程式都無法執行。王禹軒表示,這次實驗他們確實在不修改SELinux程式碼的前提下,針對一般程式、執行過程會產生執行檔的程式,以及透過腳本執行的情境下,達到允許程式執行或阻擋的目的,也能搭配套件管理員,將應用程式自動納入白名單來放行。美中不足的是,對於跨平臺支援的部分,還是會多少面臨到要調整的地方,很難一體適用。而對於日後這個白名單的發展及應用的方向為何?王禹軒說,他們打算結合檔案完整性的防護措施,讓這個SELinux政策樣板的保護能力更加完整。

熱門新聞

Advertisement