遺憾的是,老謀深算的黑客可以在數(shù)據(jù)經(jīng)過網(wǎng)絡(luò)時,通過篡改數(shù)據(jù)來迫使兩臺新客戶機(jī)都認(rèn)為對方是舊客戶機(jī)。更糟的是,在有了支持完全(雙向)向后兼容性的同時仍無法消除該問題。
對這一問題的一種較好解決方案是從開始就采用強(qiáng)制升級方案進(jìn)行設(shè)計;使客戶機(jī)檢測到服務(wù)器不再支持它。如果客戶機(jī)可以安全地檢索到補(bǔ)丁,它就升級。否則,它告訴用戶他們必須手工獲得一個新的副本。很遺憾,重要的是從一開始就應(yīng)準(zhǔn)備使用這一解決方案,除非您不在乎得罪您的早期用戶。
遠(yuǎn)程方法調(diào)用(Remote Method invocation (RMI))的大多數(shù)實(shí)現(xiàn)都有類似的問題。當(dāng)客戶機(jī)和服務(wù)器想通過 RMI 通信,但服務(wù)器想使用 SSL 或一些其它加密協(xié)議時,客戶機(jī)可能不支持服務(wù)器想用的協(xié)議。若是這樣,客戶機(jī)通常會在運(yùn)行時從服務(wù)器下載適當(dāng)?shù)奶捉幼謱?shí)現(xiàn)。這形成了一個大的安全漏洞,因為下載加密接口時,還沒有對服務(wù)器進(jìn)行認(rèn)證。攻擊者可以假裝成服務(wù)器,在每臺客戶機(jī)上安裝他自己的套接字實(shí)現(xiàn),即使是在客戶機(jī)已經(jīng)安裝了正確的 SSL 類的情況下。問題是:如果客戶機(jī)未能建立與缺省庫的安全連接(故障),它將使用一個不可信實(shí)體給它的任何協(xié)議建立連接,因此也就擴(kuò)展了信任范圍。
原則 4:最小特權(quán)
最小特權(quán)原則規(guī)定:只授予執(zhí)行操作所必需的最少訪問權(quán),并且對于該訪問權(quán)只準(zhǔn)許使用所需的最少時間。
當(dāng)您給出了對系統(tǒng)某些部分的訪問權(quán)時,一般會出現(xiàn)濫用與那個訪問權(quán)相關(guān)的特權(quán)的風(fēng)險。例如,我們假設(shè)您出去度假并把您家的鑰匙給了您的朋友,好讓他來喂養(yǎng)您的寵物、收集郵件等等。盡管您可能信任那位朋友,但總是存在這樣的可能:您的朋友未經(jīng)您同意就在您的房子里開派對或發(fā)生其它您不喜歡的事情。
不管您是否信任您的朋友,一般不必冒險給予其必要的訪問權(quán)以外的權(quán)利。例如,如果您沒養(yǎng)寵物,只需要一位朋友偶爾收取您的郵件,那么您應(yīng)當(dāng)只給他郵箱鑰匙。即使您的朋友可能找到濫用那個特權(quán)的好方法,但至少您不必?fù)?dān)心出現(xiàn)其它濫用的可能性。如果您不必要地給出了房門鑰匙,那么所有一切都可能發(fā)生。
同樣,如果您在度假時確實(shí)雇傭了一位房子看管人,那么您不可能在沒有度假時還讓他保留您的鑰匙。如果您這樣做了,那么您使自己陷入額外的風(fēng)險之中。只要當(dāng)您的房門鑰匙不受您的控制,就存在鑰匙被復(fù)制的風(fēng)險。如果有一把鑰匙不受您的控制,而且您不在家,那么就存在有人使用鑰匙進(jìn)入您房子的風(fēng)險。當(dāng)有人拿了您的鑰匙,而您又沒有留意他們,那么任何這樣的一段時間都會構(gòu)成一個時間漏洞,在此段時間內(nèi)您就很容易受到攻擊。為了將您的風(fēng)險降到最低,您要使這段易受攻擊的時間漏洞盡可能的短。
現(xiàn)實(shí)生活中的另一個好的示例是美國政府的忠誠調(diào)查系統(tǒng) ―“需要知道”政策。即使您有權(quán)查看任何機(jī)密文檔,您仍不能看到您知道其存在的 任何機(jī)密文檔。如果可以的話,就很容易濫用該忠誠調(diào)查級別。實(shí)際上,人們只被允許訪問與那些交給他們的任務(wù)相關(guān)的文檔。
UNIX 系統(tǒng)中出現(xiàn)過一些違反最小特權(quán)原則的最著名情況。例如,在 UNIX 系統(tǒng)上,您一般需要 root 特權(quán)才能在小于 1024 的端口號上運(yùn)行服務(wù)。所以,要在端口 25(傳統(tǒng)的 SMTP 端口)上運(yùn)行郵件服務(wù)器,程序需要 root 用戶的特權(quán)。不過,一旦程序在端口 25 上運(yùn)行了,就沒有強(qiáng)制性要求再對它使用 root 特權(quán)了。具有安全性意識的程序會放棄 root 特權(quán)并讓操作系統(tǒng)知道它不應(yīng)再需要那些特權(quán)(至少在程序下一次運(yùn)行之前)。某些電子郵件服務(wù)器中存在的一個大問題是它們在獲取郵件端口之后沒有放棄它們的 root 權(quán)限(Sendmail 是個經(jīng)典示例)。因此,如果有人找到某種方法來欺騙這樣一個郵件服務(wù)器去完成某些惡意任務(wù)時,它會成功。例如,如果一位懷有惡意的攻擊者要在 Sendmail 中找到合適的棧溢出,則那個溢出可以用來欺騙程序去運(yùn)行任意代碼。因為 Sendmail 在 root 權(quán)限之下運(yùn)行,所以攻擊者進(jìn)行的任何有效嘗試都會成功。
另一種常見情況是:一位程序員可能希望訪問某種數(shù)據(jù)對象,但只需要從該對象上進(jìn)行讀。不過,不管出于什么原因,通常該程序員實(shí)際需要的不僅是必需的特權(quán)。通常,該程序員是在試圖使編程更容易一些。例如,他可能在想,“有一天,我可能需要寫這個對象,而我又討厭回過頭來更改這個請求。”
不安全的缺省值在這里可能還會導(dǎo)致破壞。例如,在 Windosw API 中有幾個用于訪問對象的調(diào)用,如果您將“0”作為參數(shù)傳遞,那么這些調(diào)用授予所有的訪問。為了更有限制地進(jìn)行訪問,您需要傳遞一串標(biāo)志(進(jìn)行“OR”操作)。只要缺省值有效,許多程序員就會堅持只使用它,因為那樣做最簡單。
對于受限環(huán)境中運(yùn)行的產(chǎn)品的安全性政策,這個問題開始成為其中的常見問題。例如,有些供應(yīng)商提供作為 Java applet 運(yùn)行的應(yīng)用程序。applet 構(gòu)成移動代碼,Web 瀏覽器會對此代碼存有戒心。這樣的代碼運(yùn)行在沙箱中,applet 的行為根據(jù)用戶同意的安全性政策受到限制。在這里供應(yīng)商幾乎不會實(shí)踐最小特權(quán)原則,因為他們那方面要花太多的精力。要實(shí)現(xiàn)大體意思為“讓供應(yīng)商的代碼完成所有的任務(wù)”的策略相對要容易得多。人們通常采用供應(yīng)商提供的安全性策略,可能是因為他們信任供應(yīng)商,或者可能因為要確定什么樣的安全性策略能最佳地使必須給予供應(yīng)商應(yīng)用程序的特權(quán)最小化,實(shí)在是一場大爭論。
原則 5:分隔
果您的訪問權(quán)結(jié)構(gòu)不是“完全訪問或根本不準(zhǔn)訪問”,那么最小特權(quán)原則會非常有效。讓我們假設(shè)您在度假,而你需要一位寵物看管人。您希望看管人只能進(jìn)出您的車庫(您不在時將寵物留在那里)但是如果您的車庫沒有一把單獨(dú)的鎖,那么您別無選擇而只能讓看管人進(jìn)出整幢房子。
分隔背后的基本思想是如果我們將系統(tǒng)分成盡可能多的獨(dú)立單元,那么我們可以將對系統(tǒng)可能造成損害的量降到最低。當(dāng)將潛水艇構(gòu)造成擁有許多不同的船艙,每個船艙都是獨(dú)立密封,就應(yīng)用了同樣原則;如果船體裂開了一個口子而導(dǎo)致一個船艙中充滿了水,其它船艙不受影響。船只的其余部分可以保持其完整性,人們就可以逃往潛水艇未進(jìn)水的部分而幸免于難。
分隔原則的另一個常見示例是監(jiān)獄,那里大批罪犯集中在一起的能力降到了最低。囚犯們不是居住在營房中,而是在單人或雙人牢房里。即使他們聚集在一起 ― 假定,在食堂里 ― 也可以加強(qiáng)其它安全性措施來協(xié)助控制人員大量增加帶來的風(fēng)險。
在計算機(jī)世界里,要舉出糟糕分隔的示例比找出合理分隔容易得多。怎樣才能不分隔的經(jīng)典示例是標(biāo)準(zhǔn) UNIX 特權(quán)模型,其中安全性是關(guān)鍵的操作是以“完全訪問或根本不準(zhǔn)訪問”為基礎(chǔ)的。如果您擁有 root 特權(quán),那么您基本上可以執(zhí)行您想要的任何操作。如果您沒有 root 訪問權(quán),那么就會受到限制。例如,您在沒有 root 訪問權(quán)時不能綁定到 1024 以下的端口。同樣,您不能直接訪問許多操作系統(tǒng)資源 ― 例如,您必須通過一個設(shè)備驅(qū)動程序?qū)懘疟P;您不能直接處理它。
通常,如果攻擊者利用了您代碼中的緩沖區(qū)溢出,那人就可以對磁盤進(jìn)行原始寫并胡亂修改內(nèi)核所在內(nèi)存中的任何數(shù)據(jù)。沒有保護(hù)機(jī)制能阻止他這樣做。因此,您不能直接支持您本地磁盤上永遠(yuǎn)不能被擦去的日志文件,這意味著直到攻擊者闖入時,您才不能保持精確的審計信息。不管驅(qū)動程序?qū)Φ讓釉O(shè)備的訪問協(xié)調(diào)得多么好,攻擊者總能夠避開您安裝的任何驅(qū)動程序。
在大多數(shù)平臺上,您不能只保護(hù)操作系統(tǒng)的一部分而不管其它部分。如果一部分不安全,那么整個系統(tǒng)都不安全。有幾個操作系統(tǒng)(諸如 Trusted Solaris)確實(shí)做了分隔。在這樣的情況中,操作系統(tǒng)功能被分解成一組角色。角色映射到系統(tǒng)中需要提供特殊功能的實(shí)體上。一個角色可能是 LogWriter 角色,它會映射到需要保存安全日志的任何客戶機(jī)上。這個角色與一組特權(quán)相關(guān)聯(lián)。例如,LogWriter 擁有附加到它自己的日志文件的權(quán)限,但決不可以從任何日志文件上進(jìn)行擦除??赡苤挥幸粋€特殊的實(shí)用程序獲得對 LogManager 角色的訪問,它就擁有對所有日志的完全訪問權(quán)。標(biāo)準(zhǔn)程序沒有對這個角色的訪問權(quán)。即使您破解了一個程序并在操作系統(tǒng)終止這個程序,您也不能胡亂修改日志文件,除非您碰巧還破解了日志管理程序。這種“可信的”操作系統(tǒng)并不是非常普遍,很大一部分是因為這種功能實(shí)現(xiàn)起來很困難。象在操作系統(tǒng)內(nèi)部處理內(nèi)存保護(hù)這樣的問題給我們提出了挑戰(zhàn),這些挑戰(zhàn)是有解決方案的,但得出解決的結(jié)果并不容易。
分隔的使用必須適度,許多其它原則也是如此。如果您對每一個功能都進(jìn)行分隔,那么您的系統(tǒng)將很難管理。
溫馨提示:因考試政策、內(nèi)容不斷變化與調(diào)整,信管網(wǎng)網(wǎng)站提供的以上信息僅供參考,如有異議,請以權(quán)威部門公布的內(nèi)容為準(zhǔn)!
信管網(wǎng)致力于為廣大信管從業(yè)人員、愛好者、大學(xué)生提供專業(yè)、高質(zhì)量的課程和服務(wù),解決其考試證書、技能提升和就業(yè)的需求。
信管網(wǎng)軟考課程由信管網(wǎng)依托10年專業(yè)軟考教研傾力打造,官方教材參編作者和資深講師坐鎮(zhèn),通過深研歷年考試出題規(guī)律與考試大綱,深挖核心知識與高頻考點(diǎn),為學(xué)員考試保駕護(hù)航。面授、直播&錄播,多種班型靈活學(xué)習(xí),滿足不同學(xué)員考證需求,降低課程學(xué)習(xí)難度,使學(xué)習(xí)效果事半功倍。
發(fā)表評論 查看完整評論 | |