從藍瘦“想哭”到 SELinux 看操作系統安全何在

最近一週,來自網絡的“想哭”勒索病毒(Wannacry Ransomware)在世界各地同時上演了一部綁匪大片,臺詞華麗,演技出色,當仁不讓地新晉世界第一網紅。全球各國除了默默忙於兩彈一星足不出戶的朝鮮外,無不爲之動容。一時間,包括“想哭”病毒在內的各種病毒的各種傳聞也火爆網絡,我們並不準備跟風刷屏,只是打算本着實事求是的精神,科學的探討一下如何與它們和睦相處、談笑風生。


1.“想哭”病毒的前世今生

首先,讓我們先簡要回顧一下主角“想哭”病毒的前世今生。


“想哭”病毒是基於網絡***框架二次開發的結果,它利用了 NSA(美國國家安全局)的前輩們留下的非物質文化遺產:永恆之藍(ETERNAL BLUE) 模塊,針對 Windows SMB 服務的實現漏洞植入惡意代碼,再結合自己的創新:加密用戶文件和顯示勒索聲明,一代網紅勒索病毒由此誕生。從病毒本身的設計流程來看,似乎並不需要高深的編碼技巧或深厚的理論根基,然而這也恰恰是這一事件中最值得我們警惕的地方:NSA 泄漏的***模塊遠不止永恆之藍一種,藉助已有***框架進行二次開發的難度又如此之低,所以,可以預期,一大波未知的病毒正在來襲的路上。


是不是細思極恐?所謂“知彼知己,百戰不殆”,要想不 die,先要充分了解對手,所以接下來我們進一步瞭解一下什麼是病毒?病毒是如何以危險方式危害公共安全的?又是怎樣進入我們的系統的?


病毒是什麼,其實是老生常談了,經常關注醫療衛生領域的朋友都知道:


病毒由一段基因與蛋白質構成,自身不能實現新陳代謝,通過適當的途徑侵入宿主體內,通過宿主細胞的代謝系統實現複製傳播。


跑題了?好吧,不要在意這些細節,我們改幾個字就能用了:


病毒由一段可執行代碼與數據構成,自身不能在裸機上運行,通過適當的途徑侵入宿主操作系統,通過宿主系統中的存儲和網絡實現複製傳播。


Wirth 教授教導我們:


算法+數據結構=程序,

病毒=代碼+數據=算法+數據結構=程序


沒錯,病毒就是一類特殊的計算機程序,廣義上稱爲惡意軟件。與自然界病毒的最大不同之處在於,它們不是純天然的,而是 100% 人工打造。通常它們懷着對人類的深深的惡意來到世上,行爲各不相同,有的在你的屏幕上畫個圈圈詛咒你,有的會竊取你設備中的隱私照片,還有的會眨眼間轉走你銀行卡上的購房首付款......顯然,它們的目標還是很一致的:危害人類設備,破壞世界和平。


又扯遠了,我們接着來看病毒是如何***操作系統的。病毒的***無外乎兩個途徑:主動和被動。所謂主動是針對目標系統嘗試發起掃描和***,一般是遠程發起,當發現了自己能吃定的漏洞之後,就通過各種陰險手段(其實技術實現上大多還是很優雅的)攫取系統權限,進而將惡意代碼注入宿主系統中伺機作惡,對此沒什麼概念的小夥伴可以自行腦補一下《異形》中的人類被寄生的過程。


病毒***的另一種方式,我們稱之爲被動方式。這種方式並不需要系統存在漏洞或缺陷,需要的是用戶的經驗、常識或智商存在缺陷。它們通過各種僞裝誘騙用戶去打開或運行自己,包括形形色色讓你心動的郵件、鏈接、不明來源的安裝程序等等,一旦獲得機會運行,它們會悄無聲息的在你的系統中安營紮寨、留下多道後門,然後爲所欲爲,這類病毒又被形象地稱爲(特洛伊)***。


2.如何應對各種病毒威脅

瞭解了病毒的來龍去脈之後,我們就可以開始討論如何應對各種病毒層出不窮的威脅了。


對於大多數用戶,良好的使用習慣是第一位的。堡壘往往從內部被攻克,再安全的操作系統,再強大的安全機制,都難以阻止用戶自我毀滅的腳步。良好的使用習慣中最重要的,是安全更新,安全更新,安全更新!爲什麼呢?這要先談一下操作系統漏洞的由來。


漏洞實際是軟件缺陷的一種,也就是俗稱的 bug,是由於軟件開發人員的疏忽而導致程序沒有按照預期的方式運行。軟件缺陷多種多樣,有些很呆,有些很萌,也並不都會對系統安全構成威脅。那些僥倖逃脫開發和測試人員的輪番圍剿,隨着軟件的發佈散落人間的軟件缺陷,一旦被***們發現、策反,並藉助自己在系統內部的有利位置,披着合法軟件的外衣,做出送人頭、坑隊友的惡劣行徑時,就成爲軟件系統的公敵:漏洞。越是龐大和複雜的軟件越容易產生漏洞,不幸的是操作系統就是一類極其龐大而複雜的軟件系統。


雖然操作系統漏洞常常難以完全避免,然而某個漏洞一旦被發現,開發廠商都會在第一時間發佈安全更新對問題進行修復。以這次勒索病毒爲例,針對被利用的 SMB 服務漏洞,事實上早在一個月前微軟就公佈了漏洞警告和補丁,提供了安全更新,那些開啓自動更新並及時修復了漏洞的用戶,他們可以用省下的三個比特幣吃着火鍋唱着歌,完全不用擔心綁匪。所以請劃重點:操作系統安全更新非常重要,不論個人用戶、企業用戶還是系統管理員,不論服務器,桌面還是移動終端,不論 Windows,Linux 還是 MacOS,都應該儘可能及時地從操作系統廠商處獲取安全更新。


其次,殺毒軟件也可以起到一定的安全增強的作用,多數殺毒軟件可以藉助病毒庫對已有病毒的特徵進行分析比對,一旦發現用戶即將運行的程序中含有病毒或惡意程序,會及時提醒用戶,或者自動清除。因此,殺毒軟件可以在很大程度上防禦已知的、以被動方式***系統的病毒。


那麼,積極地安全更新、安裝殺毒軟件就可以解決所有病毒威脅了麼?


很不幸,事實並非如此。安全更新和殺毒軟件之於病毒威脅正如強身健體之於疾病隱患,可以大幅降低機率,卻難以完全避免。爲什麼?這要從零日(0-day)漏洞說起。


零日漏洞,聽起來就很霸氣的一個名字,彷彿給人一種世界末日的感覺。它並不是指具體的某個或某類漏洞,而是指被***發現後立刻用來發起***的漏洞,這些漏洞尚未公開,用戶不知道,軟件廠商也不瞭解,應對時間爲零。所以,這類漏洞沒有檢測工具,沒有修復方法,傳統被動升級防禦、病毒特徵比對的方式毫無用處,一旦被用來發起***,普通系統是毫無招架能力的。那麼有沒有可以防禦零日漏洞的安全的操作系統呢?


3.安全的操作系統與 SELinux

一提到安全的操作系統,總會涌現出很多真知灼見,最膾炙人口的莫過於:


“所有操作系統都有漏洞,所以沒有絕對安全的操作系統;所以 Windows 也好,Linux 也好,MacOS 也好,都一樣不安全。”


說的好有道理,我竟無言以對,因爲前半句就是對本文前半部分的總結,理論正確,邏輯自洽,沒什麼可黑的。後半句的邏輯卻似乎有點燒腦,如果它成立的話,我們不妨試着推廣一下,比如:


“任何物質都是有毒性的,沒有什麼是絕對無毒的。砒霜吃了會中毒,水喝多了也會中毒,所以砒霜和水一樣不安全。”


毒理學有句名言:


一切談毒性不談劑量的行爲都是耍流氓。同樣,任何談操作系統安全不談體系架構的行爲也是耍流氓。所以面對這種耍流氓的行爲,接下來我們要嚴肅的談一談操作系統的安全體系架構。


多年前,永恆之藍的始作蛹者 NSA 爲了防禦自家系統,開發了一套安全框架,多年後這套框架被貢獻給了 Linux 內核,這就是 SELinux。作爲造成這次世界性災難的幕後大 boss,NSA 爲自己定製的 SELinux 又是怎樣的一套防具呢?


SELinux 全稱 Security Enhanced Linux ,是針對 Linux 的全面安全增強,相比一般的發現漏洞-修復漏洞這種被動挨打的模式,SELinux 具備主動防禦能力,可以抵禦包括零日漏洞在內的多種***。


那麼 SELinux 是如何做到的呢?


訪問控制是操作系統安全體系中的最核心最關鍵的機制,它決定了系統中什麼樣的資源可以被哪些用戶以什麼樣的方式來訪問,也就是說普通用戶能做什麼,***者能做什麼,應用軟件能做什麼,惡意軟件能做什麼,都是訪問控制系統決定的。SELinux 的核心訪問機制是強制訪問控制(Mandatory Access Control),簡稱 MAC,SELinux 的安全特性是建立在 MAC 基礎之上的。那麼 MAC 何德何能,堪負如此重任?


說到 MAC 強制訪問控制就不得不說它的前輩自主訪問控制(Discretionary Access Control),簡稱 DAC。傳統的操作系統,Windows、MacOS、以及包括早期 Linux 在內的各種Unix的系統權限管理都是採用的自主訪問控制,自主訪問控制將用戶(或用戶組)簡化爲一個標識,系統中的資源(比如文件)都會帶上用戶標識和對應的訪問權限信息,通過這種方式賦予不同用戶不同的訪問權限,操作系統通過對用戶標識的比對和權限信息決定一個用戶是否能訪問某個資源。打個比方,你認爲你家裏的東西是隻屬於你的,在 DAC 看來,只要能進屋的人都對這個屋子裏的東西擁有權限,那麼你自己開門進屋睡覺也好,小偷撬門進去拿走金銀細軟也好,都是合法的。


在操作系統中也是如此,幾乎所有操作系統中都有一個身影,叫管理員,Administrator 也好,root 也好,都是一羣在系統中權力無限大,對任何資源都有完全訪問權限的傢伙。多數系統服務是以管理員權限運行的,如果它們存在漏洞,被劫持去做一些它們本不該做的事情的時候,DAC 是不會阻攔的,因爲它無法區分某個動作是程序正常行爲還是惡意行爲。在它眼裏,身份就是權力的象徵,只要認可了你的管理員身份,你說什麼都是對的,你做什麼都是合法的。


那麼 MAC 機制又是怎樣的呢?與 DAC 中的混沌不同,MAC 是一個充滿秩序的世界,一個一舉一動要提出申請的世界。在 MAC 中,一切訪問計劃都要事先寫入安全策略,沒有明確的策略允許的任何訪問都會被禁止。在上個例子中,作爲家中的主人,你需要能夠在家睡覺,也是需要明確制定計劃的,你需要添加的安全策略看起來是這樣的:


定義資源類型: 牀

定義安全域: 休息

定義角色: 主人

訪問規則: 允許 主人 休息時 使用牀

如果系統對於你家中的資源訪問只添加了這一條安全策略,那麼你仍然可以安心的在家睡覺,小偷無論用何種方式進入你家都將寸步難行,接觸任何東西的行爲都會被禁止,並且一切被禁止的行爲嘗試都將被另一套完善的監控系統:審計日誌記錄在案。


明白了這個例子,回到操作系統中我們就很容易看懂 MAC 是如何防範系統帶來的安全威脅的:假設我們有一個存在緩衝區溢出漏洞的文件共享服務,與多數系統服務一樣使用管理員權限運行。***者通過精心構建一個特殊的數據包發送給服務器,使存在漏洞服務器正常的執行流程被劫持,轉而執行修改管理員密碼的操作。在 DAC 控制下的傳統操作系統中,一旦***生效,那麼管理員密碼會被這個平時八竿子打不着的文件服務器修改,***者隨後可以很容易的登錄進入系統。而在 MAC 系統中,文件服務器的可訪問的文件是嚴格受限的,安全策略類似於:


允許 系統管理員角色 運行文件服務器 該進程允許訪問被共享文件。

安全策略的定義了該服務可以訪問的所有資源,***者在***了文件服務器後,希望修改管理員密碼,它需要訪問的是 SAM 或 passwd 等的密碼管理文件,由於文件服務器進程僅被策略僅允許訪問需要被共享的文件,因此對密碼管理文件的操作將被拒絕,***失效。這種情況下最壞的情形是,***者可能非法訪問共享文件,因爲它仍在安全策略允許範圍內。儘管如此,一個系統級的安全漏洞對整個操作系統的影響被限制在了非常小的範圍內。


通過細粒度的劃分訪問權限,將所有應用和服務的訪問限制在最小範圍內,這就是強制訪問控制保護系統不受已知及未知漏洞***的原理。


其實 MAC 和 DAC 並不是水火不容的,在包括 SELinux 在內的多數安全框架中,它們是共同生效的,所有的資源(或者準確的說叫客體)訪問請求首先要經過 DAC 權限判定,驗證通過之後再進一步進行 MAC 的安全策略判定,只有同時符合自主訪問控制和強制訪問控制規則後才能獲得訪問權限。


SELinux 中,有三大類 MAC 策略模型,分別是 TE(類型增強),RBAC(角色訪問控制)以及 MLS(多級別安全),每一類模型都針對系統已有服務和應用提供了大量安全策略。一個使用了 SELinux 的典型的服務器操作系統環境,內核中會包含 10 萬條以上的安全策略。


4.計算機信息系統的安全等級

瞭解了 SELinux 及其強制訪問框架後,看到***兩端都造詣深厚的 NSA,你可能會驚歎於矛尖盾厚的美國在信息安全領域的強大的實力。然而我國在這個陸上有東風,海上有航母,天空有北斗的時代,在信息安全這樣重要的領域當然不會碌碌無爲。我國很早就對信息安全領域展開了全面的研究,公安部對信息安全的各個領域提出了一些列標準,最早在 GB 17859-1999 標準中就根據需求將計算機信息系統的安全級別由低到高,劃分爲 1-5 共五個等級。在 GB/T 20272-2006 中更進一步對操作系統安全技術提出了具體要求。


從國標安全第三級開始要求操作系統提供強制訪問控制,除了要實現 SELinux 中的各類安全模型架構外,還根據最小特權原則開創性的引入三權分立的概念,將普通操作系統中權限不受控制的管理員根據職責分解爲系統管理員,安全管理員,審計管理員三個角色。


系統管理員負責“行政”體系,也就是系統中的配置管理,類似網絡配置、服務啓停(安全服務除外)、設備管理等等;安全管理員負責“立法”,負責安全策略制定、加載以及安全服務的開啓;審計管理員的職責類似“司法”,制定違規訪問的記錄,安全服務的關閉。三個角色的權限之間互相制約,從而避免了惡意***者通過獲取管理員權限對操作系統的全面控制。同時標準還對用戶數據的私密性、完整性提出了嚴格的保護要求,要求操作系統通過安全標籤保障用戶數據不被非法讀取和篡改。


國標安全四級除了在訪問控制和數據保護上提出更爲嚴格要求之外,還要求設計者對操作系統的安全策略模型、安全功能模塊進行形式化驗證,並進行隱蔽信道分析,對系統抵禦***能力進行評估,也是目前已有操作系統能達到的最高安全等級。目前普華、凝思等國產操作系統廠商已經開發出了符合國標安全四級的安全操作系統,提供了遠高於普通 SELinux 的底層安全保護。


5.結語

信息安全是全方位的,儘管病毒與惡意***並非只針對操作系統,單一從操作系統層面無法解決所有的安全問題,然而作爲所有上層應用的最底層軟件支撐,操作系統卻在最終執行層面承載着一切上層軟件的安全機制,脫離操作系統構建的安全體系,如同沙灘上的城堡,即使再堅固也將最終失去根基。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章