威脅隔離!用SELinux保護虛擬化
虛擬化被認為是計算機技術發展史中的一次技術革命,它在資源分配,系統管理,電力和制冷成本節省,按需擴大或收縮資源等方面表現出極大的優勢,雖然人人都在談虛擬化,人人都準備用上虛擬化,但一直伴隨虛擬化揮之不去的陰影 - 安全問題 - 又讓無數人望而卻步。虛擬化安全性如何?
當攻擊者攻破虛擬機,接管了虛擬機的所有控制權后會發生什么?如果系統管理程序(Hypervisor)存在bug又會發生什么?
在未虛擬化之前,我們隔離了服務器,攻擊者攻破一臺服務器后,他只能控制那一臺服務器,這時攻擊者必須采取網絡攻擊,攻擊網絡內的其它服務器,才有可能拿到其它服務器的控制權。系統管理員有很多工具檢測和保護網絡攻擊,如防火墻,網絡流量分析工具,入侵檢測工具等。
虛擬化后,在同一臺物理主機上運行了多個服務(應用程序),如果虛擬機被攻破,攻擊者只需要破壞系統管理程序,就可以達到破壞所有服務的目的。如果系統管理程序存在漏洞,攻擊者可以接管主機上托管的所有虛擬機,甚至可以向主機能直接訪問的虛擬機鏡像寫入惡意代碼。
聽起來非?植腊桑F在的問題是如果真發生這種情況時該如何處置,攻擊者對系統管理程序的漏洞興趣越來越濃,前不久Xen系統管理程序就已經被攻破了。——51CTO王文文:VMware的產品中同樣出現過類似問題,而現在他們已經在采用RSA的身份認證技術來緩解虛擬數據中心威脅了。那如果不使用身份認證技術的話,我們看看本文中SELinux的保護方式。
現在我們來看看Fedora 11中的libvirtd/qemu/kvm,libvirtd啟動所有虛擬機,所有虛擬機都以獨立的進程運行,虛擬鏡像被保存為一個文件或類似邏輯卷和iSCSI目標的設備。
SELinux真的有用么?
SELinux標記進程,文件和設備,同時負責定義被標記進程,文件和設備之間互操作的規則,通過SELinux可以減小系統管理程序漏洞引起的影響范圍。
如果你閱讀過Xen漏洞文檔,你一定知道如何繞過RHEL 5中SELinux保護機制,攻擊者知道標記為xend_t的xen進程可以讀/寫所有用fixed_disk_device_t標記的固定磁盤,通過寫物理磁盤,攻擊者可以繞過SELinux的限制。我給RHEL 5上的Xen編寫策略時,最初要求管理員將Xen鏡像設備卷標記為xen_image_t,Xen開發人員認為這對管理員的管理來說太困難了,可能會導致許多故障,我們沒有時間制作管理工具使其自動化,大家都認為在這個例子中可用性比安全更重要,我不得不同意他們的意見。
在Fedora 11中,James Morris,Daniel Berrange和我以及其它共事者給libvirt增加了SELinux支持,形成了sVirt,我們給libvirt增加了一個插件架構,默認啟用了SELinux保護,理論上你可以使用其它安全架構。libvirt動態地標記鏡像文件,并用正確的標記啟動虛擬機,管理員不必記住給鏡像文件和設備設置的標記,在F11中,默認所有虛擬機都使用svirt_t type類型標記,所有鏡像文件都使用svirt_image_t類型標記。
SELinux策略規定svirt_t進程可以讀/寫svirt_image_t文件和設備。
這種保護允許我們保護主機不受任何虛擬機的侵害,虛擬機只能與正確標記的文件和設備交互,被攻破的虛擬機不能訪問我的home目錄,即使虛擬機以root權限運行。
但這種類型的保護不能阻止一個虛擬機攻擊另一個虛擬機,我們需要一種方法使用相同的類型標記域和鏡像文件,與此同時,停掉虛擬機1,以svirt_t類型運行,攻擊虛擬機2,虛擬機2也將以svirt_t類型運行。
多類別安全(Multi Category Security,MCS)保護
我們在開發RHEL 5時,我們增加了MCS支持,包括給SELinux上下文增加第四個字段。
最開始在RHEL 4中,SELinux上下文只有三個字段:“用戶:角色:類型”,在RHEL 5中,SELinux上下文字段增加到四個:“用戶:角色:類型:MLS”,例如,home目錄中的文件可能被標記為system_u:system_r:user_home_t:TopSecretRecipe,MLS標記定義了一個敏感級別(s0-s15)和數據分類(c0.c1023),這個例子中的TopSecretRecipe是類似s15:c0.c36這樣的字段的人文翻譯,MLS標記允許MLS機器不僅可以基于它的使用者標記文件,在這個例子中是user_home_t,也可以根據敏感性和內容的本身屬性進行標記,如TopSecretRecipe。
這個字段僅在MLS策略中使用,我們嘗試在默認策略(targeted)中使用它,只定義一個敏感級別(s0),允許管理員定義分類,我們把它叫做多分類安全(MCS),旨在讓管理員和用戶可以基于文件內容的自身屬性進行標記,如system_u:object_r:database_t:PatientRecord可能是一個包含病人記錄的數據庫,遺憾的是,由于種種原因,MCS未被廣泛使用。
但我們在開發sVirt時,我們認識到可以使用MCS隔離兩個相同SELinux類型(svirt_t)的虛擬機,我們設計libvirt分配一個不同的隨機選擇的MCS標記給每個虛擬機及其關聯的虛擬鏡像,libvirt保證<
新文章:
- CentOS7下圖形配置網絡的方法
- CentOS 7如何添加刪除用戶
- 如何解決centos7雙系統后丟失windows啟動項
- CentOS單網卡如何批量添加不同IP段
- CentOS下iconv命令的介紹
- Centos7 SSH密鑰登陸及密碼密鑰雙重驗證詳解
- CentOS 7.1添加刪除用戶的方法
- CentOS查找/掃描局域網打印機IP講解
- CentOS7使用hostapd實現無AP模式的詳解
- su命令不能切換root的解決方法
- 解決VMware下CentOS7網絡重啟出錯
- 解決Centos7雙系統后丟失windows啟動項
- CentOS下如何避免文件覆蓋
- CentOS7和CentOS6系統有什么不同呢
- Centos 6.6默認iptable規則詳解