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

病毒是什么,其實是老生常談了,經(jīng)常關(guān)注醫(yī)療衛(wèi)生領(lǐng)域的朋友都知道:

病毒是一段基因與蛋白質(zhì)構(gòu)成,自身不能實現(xiàn)新陳代謝,通過適當(dāng)?shù)耐緩角秩胨拗黧w內(nèi),通過宿主細(xì)胞的代謝系統(tǒng)實現(xiàn)復(fù)制傳播。

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

病毒由一段可執(zhí)行代碼與數(shù)據(jù)構(gòu)成,自身不能在裸機(jī)上運(yùn)行,通過適當(dāng)?shù)耐緩角秩胨拗鞑僮飨到y(tǒng),通過宿主系統(tǒng)中的存儲和網(wǎng)絡(luò)實現(xiàn)復(fù)制傳播。

Wirth教授教導(dǎo)我們,算法+數(shù)據(jù)結(jié)構(gòu)=程序,

病毒=代碼+數(shù)據(jù)=算法+數(shù)據(jù)結(jié)構(gòu)=程序

沒錯,病毒就是一類特殊的計算機(jī)程序,廣義上稱為惡意軟件。通常它們懷著對人類的深深的惡意來到世上,行為各不相同,有的在你的屏幕上畫個圈圈詛咒你,有的會竊取你設(shè)備中的隱私照片,還有的會眨眼間轉(zhuǎn)走你銀行卡上的購房首付款……顯然,它們的目標(biāo)還是很一致的:危害人類設(shè)備,破壞世界和平。

又扯遠(yuǎn)了,我們接著來看病毒是如何入侵操作系統(tǒng)的。病毒的入侵無外乎兩個途徑:主動和被動。所謂主動是針對目標(biāo)系統(tǒng)嘗試發(fā)起掃描和攻擊,一般是遠(yuǎn)程發(fā)起,當(dāng)發(fā)現(xiàn)了自己能吃定的漏洞之后,就通過各種陰險手段(其實技術(shù)實現(xiàn)上大多還是很優(yōu)雅的)攫取系統(tǒng)權(quán)限,進(jìn)而將惡意代碼注入宿主系統(tǒng)中伺機(jī)作惡,對此沒什么概念的小伙伴可以自行腦補(bǔ)一下《異形》中的人類被寄生的過程。

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

如何應(yīng)對各種病毒威脅

了解了病毒的來龍去脈之后,我們就可以討論如何應(yīng)對各種病毒層出不窮的威脅了。

對于大多數(shù)用戶,良好的使用習(xí)慣是第一位的。堡壘往往從內(nèi)部被攻克,再安全的操作系統(tǒng),再強(qiáng)大的安全機(jī)制,都難以阻止用戶的自我毀滅的腳步。良好的使用習(xí)慣中最重要的,是安全更新,安全更新,安全更新!為什么呢?這要先談一下操作系統(tǒng)漏洞的由來。

漏洞實際是軟件缺陷的一種,也就是俗稱的bug,是由于軟件開發(fā)人員的疏忽而導(dǎo)致程序沒有按照預(yù)期的方式運(yùn)行。軟件缺陷多種多樣,有些很呆,有些很萌,也并不都會對系統(tǒng)安全構(gòu)成威脅。在軟件正式發(fā)布前,研發(fā)人員和測試人員經(jīng)過漫長而艱苦卓絕的互相傷害,通常最終會達(dá)成妥協(xié),通過共同消滅軟件缺陷的方式來解決雙方的爭端。然而總會一些生性狡猾、城府極深的漏網(wǎng)之魚,潛伏在革命隊伍中,混入千家萬戶。當(dāng)它們中的一些被黑客們發(fā)現(xiàn)、策反,并借助自己在系統(tǒng)內(nèi)部的有利位置,披著合法軟件的外衣,做出送人頭、坑隊友的惡劣行徑時,就成為軟件系統(tǒng)的公敵:漏洞。

軟件漏洞通常分為代碼實現(xiàn)漏洞和邏輯設(shè)計漏洞。代碼實現(xiàn)漏洞通常是開發(fā)人員代碼編寫方式的缺陷而產(chǎn)生的漏洞,常見的包括緩沖區(qū)溢出、格式化字符串、內(nèi)存越界訪問、資源釋放重用等;另一類則是邏輯設(shè)計漏洞,它在架構(gòu)或流程設(shè)計上就存在的固有缺陷,較為常見的例如安全機(jī)制可旁路,導(dǎo)致密碼檢查、權(quán)限驗證等機(jī)制被輕易繞過。而越龐大越復(fù)雜的系統(tǒng)中越容易產(chǎn)生這兩類漏洞。操作系統(tǒng)就是這樣一類極其龐大而復(fù)雜的軟件系統(tǒng)。

雖然操作系統(tǒng)漏洞常常難以完全避免,然而某個漏洞一旦被發(fā)現(xiàn),開發(fā)廠商都會在第一時間發(fā)布安全更新對問題進(jìn)行修復(fù)。以這次勒索病毒為例,針對被利用的SMB服務(wù)漏洞,事實上早在一個月前微軟就公布了漏洞警告和補(bǔ)丁,提供了安全更新,那些開啟自動更新及時修復(fù)了漏洞的用戶,他們可以用省下的三個比特幣吃著火鍋唱著歌,完全不用擔(dān)心麻匪。

所以請劃重點(diǎn):操作系統(tǒng)安全更新非常重要,不論個人用戶、企業(yè)用戶還是系統(tǒng)管理員,不論服務(wù)器,桌面還是移動終端,不論Windows,Linux還是MacOS,都應(yīng)該盡可能及時地從操作系統(tǒng)廠商處獲取安全更新。

其次,殺毒軟件也可以起到一定的安全增強(qiáng)的作用,多數(shù)殺毒軟件可以借助病毒庫對已有病毒的特征進(jìn)行分析比對,一旦發(fā)現(xiàn)用戶即將運(yùn)行的程序中含有病毒或惡意程序,會及時提醒用戶,甚至自動清除。因此,殺毒軟件可以在很大程度上防御已知的、以被動方式入侵系統(tǒng)的病毒。

那么,積極地安全更新、安裝殺毒軟件就可以解決所有病毒威脅了么?很不幸,事實并非如此。安全更新和殺毒軟件之于病毒威脅正如強(qiáng)身健體之于疾病隱患,可以大幅降低幾率,卻難以完全避免。為什么?這要從零日(0-day)漏洞說起。

零日漏洞,聽起來就很霸氣的一個名字,仿佛給人一種世界末日的感覺。它并不是指具體的某個或某類漏洞,而是指被黑客發(fā)現(xiàn)后立刻用來發(fā)起攻擊的漏洞,這些漏洞尚未公開,用戶不知道,軟件廠商也不了解,應(yīng)對時間為零。所以,這類漏洞沒有檢測工具,沒有修復(fù)方法,傳統(tǒng)被動升級防御、病毒特征比對的方式毫無用處,一旦被用來發(fā)起攻擊,普通系統(tǒng)是毫無招架能力的。那么有沒有可以防御零日漏洞的安全的操作系統(tǒng)呢?

安全的操作系統(tǒng)與 SELinux

一提到安全的操作系統(tǒng),總會涌現(xiàn)出很多真知灼見,最膾炙人口的莫過于:“ 所有操作系統(tǒng)都有漏洞,所以沒有絕對安全的操作系統(tǒng);所以Windows也好,Linux也好,MacOS也好,都一樣不安全?!?/p>

說的好有道理,我竟無言以對,因為前半句是對本文前半部分的總結(jié),理論正確,邏輯自洽,沒什么可黑的。后半句的邏輯卻似乎有點(diǎn)燒腦,如果它成立的話,我們不妨試著推廣一下,比如:“任何物質(zhì)都是有毒性的,沒有什么是絕對無毒的。紕霜吃了會中毒,水喝多了也會中毒,所以砒霜和水一樣不安全。”

毒理學(xué)有句名言:一切談毒性不談劑量的行為都是耍流氓。同樣,任何談操作系統(tǒng)安全不談體系架構(gòu)的行為也是耍流氓。所以面對這種耍流氓的行為,接下來我們要嚴(yán)肅的談一談操作系統(tǒng)的安全體系架構(gòu)。

多年前,永恒之藍(lán)的始作蛹者NSA為了防御自家系統(tǒng),開發(fā)了一套安全框架,多年后這套框架通過開源組織進(jìn)入了Linux內(nèi)核,這就是SELinux。作為造成這次世界性災(zāi)難的幕后大boss,NSA為自己定制的SELinux又是怎樣的一套防具呢?

SELinux全稱Security Enhanced Linux ,是針對Linux的全面安全增強(qiáng),相比一般的發(fā)現(xiàn)漏洞-修復(fù)漏洞這種被動挨打的模式,SELinux具備主動防御能力,可以抵御包括零日漏洞在內(nèi)的多種攻擊。那么SELinux是如何做到的呢?

訪問控制是操作系統(tǒng)安全體系中的最核心最關(guān)鍵的機(jī)制,它決定了系統(tǒng)中什么樣的資源可以被哪些用戶以什么樣的方式來訪問,也就是說普通用戶能做什么,入侵者能做什么,應(yīng)用軟件能做什么,惡意軟件能做什么,都是訪問控制系統(tǒng)決定的。

SELinux的核心訪問機(jī)制是強(qiáng)制訪問控制,又叫MAC(別想多了,不是蘋果電腦,也不是網(wǎng)卡地址,是Mandatory Access Control),SELinux的安全特性是建立在MAC基礎(chǔ)之上的。那么MAC何得何能,堪負(fù)如此重任?

說到MAC強(qiáng)制訪問控制就不得不說它的前輩自主訪問控制。自主訪問控制又叫DAC(Discretionary Access Control)。傳統(tǒng)的操作系統(tǒng),Windows、MacOS、以及包括Linux在內(nèi)的各種Unix的系統(tǒng)權(quán)限管理都是采用的自主訪問控制,自主訪問控制將用戶(或用戶組)簡化為一個標(biāo)識,系統(tǒng)中的資源(比如文件)都會帶上用戶標(biāo)識和對應(yīng)的訪問權(quán)限信息,通過這種方式賦予不同用戶不同的訪問權(quán)限,操作系統(tǒng)通過對用戶標(biāo)識的比對和權(quán)限信息決定一個用戶是否能訪問某個資源。打個比方,你認(rèn)為你家里的東西是只屬于你的,在DAC看來,只要能進(jìn)屋的人都對這個屋子里的東西擁有權(quán)限,那么你自己開門進(jìn)屋睡覺也好,小偷撬門進(jìn)去拿走金銀細(xì)軟也好,隔壁老王每天不請自來到你家蹭飯也好,都是合法的。

在操作系統(tǒng)中也是如此,幾乎所有操作系統(tǒng)中都有一個身影,叫管理員,Administrator也好,root也好,都是一群在系統(tǒng)中權(quán)力無限大,對任何資源都有完全訪問權(quán)限的家伙。多數(shù)系統(tǒng)服務(wù)是以管理員權(quán)限運(yùn)行的,如果它們存在漏洞,被劫持去做一些它們本不該做的事情的時候,DAC是不會阻攔的,因為它無法區(qū)分某個動作是程序正常行為還是惡意行為,在它眼里,身份就是權(quán)力的象征,只要認(rèn)可了你的管理員身份,你說什么都是對的,你做什么都是合法的。所以我們說,在DAC機(jī)制下,不能用來獲取管理員權(quán)限的漏洞不是好漏洞,不想獲得管理員權(quán)限的入侵者不是好入侵者。

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

定義資源類型: 床

定義安全域: 休息

定義角色: 主人

訪問規(guī)則: 允許 主人 休息時 使用床

如果系統(tǒng)對于你家中的資源訪問只添加了這一條安全策略,那么你仍然可以安心的在家睡覺,小偷也好、老王也罷,無論用何種方式進(jìn)入你家都將寸步難行,接觸任何東西的行為都會被禁止,并且一切被禁止的行為嘗試都將被另一套完善的監(jiān)控系統(tǒng):審計日志記錄在案。

明白了這個例子,回到操作系統(tǒng)中我們就很容易看懂MAC是如何防范系統(tǒng)帶來的安全威脅的:假設(shè)我們有一個存在緩沖區(qū)溢出漏洞的文件共享服務(wù),與多數(shù)系統(tǒng)服務(wù)一樣使用管理員權(quán)限運(yùn)行。攻擊者通過精心構(gòu)建一個特殊的數(shù)據(jù)包發(fā)送給服務(wù)器,使存在漏洞服務(wù)器正常的執(zhí)行流程被劫持,轉(zhuǎn)而執(zhí)行修改管理員密碼的操作。在DAC控制下的傳統(tǒng)操作系統(tǒng)中,一旦攻擊生效,那么管理員密碼會被這個平時八竿子打不著的文件服務(wù)器修改,攻擊者隨后可以很容易的登錄進(jìn)入系統(tǒng)。而在MAC系統(tǒng)中,文件服務(wù)器的可訪問的文件是嚴(yán)格受限的,安全策略類似于:

允許 系統(tǒng)管理員角色 運(yùn)行文件服務(wù)器 該進(jìn)程允許訪問被共享文件。

安全策略的定義了該服務(wù)可以訪問的所有資源,攻擊者在攻擊了文件服務(wù)器后,希望修改管理員密碼,它需要訪問的是SAM或passwd等的密碼管理文件,由于文件服務(wù)器進(jìn)程僅被策略僅允許訪問需要被共享的文件,因此對密碼管理文件的操作將被拒絕,攻擊失效。這種情況下最壞的情形是,攻擊者可能非法訪問共享文件,因為它仍在安全策略允許范圍內(nèi)。盡管如此,一個系統(tǒng)級的安全漏洞對整個操作系統(tǒng)的影響被限制在了非常小的范圍內(nèi)。

通過細(xì)粒度的劃分訪問權(quán)限,將所有應(yīng)用和服務(wù)的訪問限制在最小范圍內(nèi),這就是強(qiáng)制訪問控制保護(hù)系統(tǒng)不受已知及未知漏洞攻擊的原理。

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

SELinux中,有三大類MAC策略模型,分別是TE(類型增強(qiáng)),RBAC(角色訪問控制)以及MLS(多級別安全),每一類模型都針對系統(tǒng)已有服務(wù)和應(yīng)用提供了大量安全策略,一個使用了SELinux的典型的服務(wù)器操作系統(tǒng)環(huán)境,內(nèi)核中會包含10萬條以上的安全策略。那么如此多的安全策略,會不會導(dǎo)致系統(tǒng)每項操作都要進(jìn)行大量的策略查詢和判斷,從而步履維艱、不堪重負(fù)呢?不會,因為SELinux中提供了策略緩存機(jī)制,叫做AVC(向量緩存),將已執(zhí)行過的訪問及其判定結(jié)果請求緩存起來,從而可以大幅提升強(qiáng)制訪問控制安全策略判定效率。

計算機(jī)信息系統(tǒng)的安全等級

了解了SELinux及其強(qiáng)制訪問框架后,看到攻防兩端都造詣深厚的NSA,你可能會驚嘆于矛尖盾厚的美國在信息安全領(lǐng)域的強(qiáng)大的實力。然而我國在這個陸上有東風(fēng),海上有航母,天空有北斗的時代,在信息安全這樣重要的領(lǐng)域當(dāng)然不會碌碌無為。我國很早就對信息安全領(lǐng)域展開了全面的研究,公安部對信息安全的各個領(lǐng)域提出了一些列標(biāo)準(zhǔn),最早在GB 17859-1999標(biāo)準(zhǔn)中就根據(jù)需求將計算機(jī)信息系統(tǒng)由低到高,劃分為1-5共五個等級。在GB/T 20272-2006中更進(jìn)一步對操作系統(tǒng)安全技術(shù)提出了具體要求。

從國標(biāo)安全第三級開始要求操作系統(tǒng)提供強(qiáng)制訪問控制,除了要實現(xiàn)SELinux中的各類安全模型架構(gòu)外,還根據(jù)最小特權(quán)原則開創(chuàng)性的引入三權(quán)分立的概念,將普通操作系統(tǒng)中權(quán)限不受控制的管理員根據(jù)職責(zé)分解為系統(tǒng)管理員,安全管理員,審計管理員三個角色。系統(tǒng)管理員負(fù)責(zé)“行政”體系,也就是系統(tǒng)中的配置管理,類似網(wǎng)絡(luò)配置、服務(wù)啟停(安全服務(wù)除外)、設(shè)備管理等等;安全管理員負(fù)責(zé)“立法”,負(fù)責(zé)安全策略制定、加載以及安全服務(wù)的開啟;審計管理員的職責(zé)類似“司法”,制定違規(guī)訪問的記錄,安全服務(wù)的關(guān)閉,三個角色的權(quán)限之間互相制約,從根本上避免了惡意入侵者通過獲取管理員權(quán)限對操作系統(tǒng)的全面控制。

同時標(biāo)準(zhǔn)還對用戶數(shù)據(jù)的私密性、完整性提出了嚴(yán)格的保護(hù)要求,要求操作系統(tǒng)通過安全標(biāo)簽保障用戶數(shù)據(jù)不被非法讀取和篡改。國標(biāo)安全四級除了在訪問控制和數(shù)據(jù)保護(hù)上提出更為嚴(yán)格要求之外,還要求設(shè)計者對操作系統(tǒng)的安全策略模型、安全功能模塊進(jìn)行形式化驗證,并進(jìn)行隱蔽信道分析,對系統(tǒng)抵御攻擊能力進(jìn)行評估,也是目前已有操作系統(tǒng)能達(dá)到的最高安全等級。目前普華、凝思等國產(chǎn)操作系統(tǒng)廠商已經(jīng)開發(fā)出了符合國標(biāo)安全四級的安全操作系統(tǒng),提供了遠(yuǎn)高于普通SELinux的底層安全保護(hù)。

結(jié)語

盡管病毒與惡意入侵并非只針對操作系統(tǒng),信息安全是全方位的,單一從操作系統(tǒng)層面無法解決所有的安全問題,然而作為所有上層應(yīng)用的最底層軟件支撐,操作系統(tǒng)卻承載著一切上層軟件的安全機(jī)制,脫離操作系統(tǒng)的構(gòu)建的安全體系,如同沙灘上的城堡,即使再堅固也將最終失去根基。

本文作者“東風(fēng)快遞”來自普華基礎(chǔ)軟件研發(fā)部

分享到

xiesc

相關(guān)推薦