近兩年,熊貓燒香、灰鴿子、磁碟機等不斷衍生,其變種更是呈幾何級數地增長,令傳統安全產品疲于應付;在破壞性方面,從網絡擁堵到感染可執行文件,再到擊破硬盤還原等等,給信息系統帶來了巨大的損失。其中,最具摧毀性的無疑是root kit類攻擊工具,因為它是基于操作系統內核級的,危及面覆蓋信息系統里的所有業務應用及數據,前段時間瘋狂作惡的磁碟機病毒,在侵入系統時就加載了大量root kit組件進行破壞。
Root kit的狠招
系統中病毒時,管理員們通常的做法是查看可疑進程,然后一路追殺到文件目錄進行清除。隨著攻擊技術水平的提升,像制造疑似系統進程名這樣的初級手段已少有人用,攻擊者往往直接將攻擊進程嵌入系統進程,這時候,只有借助專門的進程管理器(如procexp等)才能發現。Root kit則更進一步,這種內核級后門通過自身的偽裝和隱藏,運行時根本沒有進程顯示。
我們知道,程序運行的時候,系統會在內存中寫入一些數據結構,進程管理器就是通過這些數據結構來顯示進程的。Root kit的做法是在內核層修改這些數據結構,用自帶的ps、top等程序替代原有系統程序,從而達到隱藏進程的目的。很顯然,現在再用pslist進程查看工具已經無濟于事了。
在隱藏文件時,root kit也是在系統內核層做手腳。具體做法是修改內核文件系統的代碼,用自己編寫的ls程序來替換,從而使原有的ls文件目錄查看工具形同虛設。
從以上的分析可以看出,通過修改操作系統的核心服務(進程管理、文件系統),root kit可以悄無聲息地實施攻擊行為。此外,root kit還有專門的工具來提升權限,這樣一來,信息系統的控制權隨時面臨著轉手他人的危險。
事實上,黑客們在制作工具時,通常都會考慮到攻擊效率而專門針對操作系統來開發,很少有針對應用程序的。另一方面,操作系統是硬件與軟件之間唯一的交互平臺,擁有硬件設備及應用軟件的唯一控制權。“匹夫無罪,懷璧其罪”的道理在0與1交互的虛擬世界同樣有效,操作系統特別是服務器的操作系統岌岌可危。
就像人為了防止生病而增強肌體免疫力一樣,為了抵御面臨的安全風險,操作系統同樣需要提升自身的免疫力,其中很重要的一項技術就是操作系統安全加固技術,即ROST。
ROST的策略
與root kit一樣,ROST也是系統內核級的攻防技術,其思路是對系統核心服務(文件系統、過程控制、內存控制等)加以控制,在系統用戶層及內核層之間構筑一道關卡,根據事先制定的策略對交互信息進行過濾,從而杜絕了非法用戶對內核資源的訪問(包括進程調用、文件訪問等)。
Windows操作系統分為用戶模式和內核模式。用戶模式包括系統支持進程、服務進程、用戶進程、環境子系統等,在運行時需要調用原始的Windows操作系統服務,其中服務進程及用戶進程通過子系統動態連接庫發起調用。在內核模式中,執行體包含了基本的操作系統服務,比如內存管理、進程和線程管理、I/O、網絡等。Windows內核是一組底層的操作系統功能,比如線程調度、中斷、異常分發等,執行體利用這些例程和對象實現更高層次的功能;設備驅動程序包括硬件設備驅動程序,文件系統和網絡驅動程序,其中硬件設備驅動程序將用戶的I/O函數調用轉換成特定的硬件設備I/O請求;硬件抽象層是一層特殊代碼,把內核、設備驅動程序和Windows執行體跟平臺相關的硬件差異隔離開來。
基于策略的強制訪問控制
ROST技術的實現,是在內核中放置一組安全HOOKS函數來控制對內核對象的訪問。當用戶進程向系統發送調用請求時,系統首先將消息送給相應類別(鼠標、系統、線程等)的HOOKS,后者根據函數內容對消息進判斷,決定是否將其傳送給下一個HOOKS函數,以此類推,直到傳送到目標進程、文件等核心資源。
HOOKS判斷的依據為事先制定的策略,即HOOKS函數對文件、進程等操作系統關鍵客體所做的敏感標記。ROST強制訪問控制過濾程序接收到用戶的調用請求后,將遍歷策略表以對用戶信息(MAC地址、請求內容等)進行校檢,符合策略的請求將立即轉交原服務函數,否則丟棄。在基于策略的強制訪問控制下,攻擊者即使通過root kit或別的工具獲取管理員權限,也無法再像以前一樣為所欲為。
在開源操作系統Linux中,ROST的實現方法是在內核源代碼中放置HOOKS。用戶進程運行時,首先會調用系統接口,然后進行錯誤檢查和Linux的自主訪問控制檢測,在Linux內核試圖對內部對象進行訪問之前,一個Linux安全模塊(LSM)的HOOKS對安全模塊所必須提供的函數進行一個調用,從而對安全模塊提出訪問請求,安全模塊根據其安全策略進行決策,做出回答即允許用戶訪問,或者拒絕進而返回一個錯誤。
ROST的實際應用
目前,我國在ROST技術產品化工作方面已取得了一些進展,浪潮服務器安全加固系統(SSR)就是首款擁有自主產權的ROST具體產品。該產品在部署初期即對服務器系統中的文件、進程等指定敏感標記,并根據用戶級別制定了詳細的強制訪問控制列表,內容包含用戶對進程/文件的調用、進程對文件的調用等等。在用戶訪問服務器時,系統會根據其用戶類型(普通、系統管理員、安全管理員等),遍歷內存中存放的標記表,決定其對系統資源的訪問權限,從而實現了強制訪問控制。