獨立型系統(tǒng)正瀕于滅絕,這一趨勢使得開發(fā)人員在安全性問題上面臨越來越大的壓力。這個問題涉及手機、具有Wi-Fi功能的數(shù)碼相框等幾乎所有電子產(chǎn)品。使用防火墻或加密幾個數(shù)據(jù)文件是遠遠不夠的,系統(tǒng)安全性就像最脆弱的鏈路一樣需要受到保護。
基本的安全性概念
信息能夠以明文、認證或加密方式進行傳輸(圖1)。認證是指那些可讀懂的文字信息,但它也經(jīng)常用來指沒有簽名或加密信息。經(jīng)鑒定的信息是經(jīng)過數(shù)字簽名的信息。修改信息將使簽名失效,藉此可以判斷信息是否被篡改。這時信息仍是可以訪問的,這點與加密信息不同,加密信息在解密之前是無法辨認的。
圖1:通信鏈路突出了不同類型的數(shù)據(jù)交換,包括從認證的數(shù)據(jù)交換到加密的數(shù)據(jù)交換。
數(shù)字簽名通常是使用被稱為消息的相關信息來加密附屬于這個信息的標簽,也稱為消息摘要或簡稱摘要。如果簽名是在信息被修改后創(chuàng)建的,那么兩個標簽將不再匹配。發(fā)現(xiàn)修改通常并不能提供誰修改、怎樣修改或修改了什么的信息。數(shù)字簽名可以使用加密,但更多的是使用哈希函數(shù)。哈希函數(shù)和加密之間的區(qū)別在于哈希函數(shù)是單向操作,而加密通常是雙向過程,因為原始明文可以用正確的密鑰和算法重新構建。
一般來說,哈希函數(shù)比加密快,它們用于從口令存儲到通信握手的廣泛應用領域。例如,Linux將用戶名和口令存儲在“passwd”文件中。這是一個明文文件,但訪問這個文件只能得到用戶名和經(jīng)過哈希算法處理過的口令。
可以使用這個信息對用戶進行認證,方法是使用口令產(chǎn)生一個新的哈希值,然后將結果與passwd文件中的內(nèi)容進行比較。當然,泄露passwd文件將形成安全漏洞。實際上大多數(shù)Linux實現(xiàn)將哈希過的口令保存在影子文件中,passwd文件只是減去哈希口令后的鏡像文件。
加密通常會使用一個或兩個密鑰。單個密鑰用在對稱加密算法中,即加密和解密使用相同的密鑰。對稱加密速度一般要比非對稱或兩個密鑰的系統(tǒng)快。非對稱系統(tǒng)中加密用一個密鑰,解密用另一個相關密鑰。在這種雙密鑰案例中,其中一個密鑰不能用另一個密鑰重建。
大多數(shù)公開密鑰系統(tǒng)采用兩個密鑰(一個公鑰,一個私鑰)進行雙向數(shù)據(jù)交換,這意味著一個密鑰的主人加密的信息可以被另一個密鑰的主人解密。單向系統(tǒng)允許一個密鑰用于加密,另一個密鑰用于解密。而在雙向系統(tǒng)中,同一密鑰不能用于加密同時又用于解密加密過的數(shù)據(jù)。如果兩個密鑰都保密,那么在信息交換時這兩個密鑰可以用來識別主人。
RSA公鑰算法是MIT的Ron Rivest、Adi Shamir和Leonard Adleman在1978年提出的。這種算法基于兩個大的素數(shù)以及分解大素數(shù)非常耗時的事實,從而使得強力攻擊非常困難。在公鑰環(huán)境中,通常有一個密鑰可提供給感興趣方。同樣,每一方通常都有自己的密鑰(后面的密鑰交換中會用到多個密鑰)。
目前流行的一些哈希算法包括MD4、MD5、SHA-1和SHA-256。普通加密系統(tǒng)包括DES(數(shù)據(jù)加密標準)、RSA和AES(高級加密標準)。DES加密密鑰長度為56位,對于目前處理器性能而言強力攻擊并不容易。在DES發(fā)布的20世紀70年代這種算法還是相當安全的。三倍DES(3DES)同樣使用DES算法和密鑰,但彌補了DES的缺點。3DES使用三個密鑰,數(shù)據(jù)要被加密三次。
AES密鑰可以是128位、192位或256位長。目前AES已經(jīng)成為微控制器上的標準配置。AES在ZigBee等無線標準中被廣泛采用,能用于全盤加密和大量其它應用。
還有一種方法叫橢圓曲線加密(ECC)法,它能使用很小的密鑰達到與使用大型密鑰的其它技術相同的安全性。這種高效算法可以用硬件輕松實現(xiàn)。安全軟件通常支持一種或一種以上的加密和哈希算法,同時許多通信標準允許使用不同的算法和密鑰長度。這些參數(shù)一般在初始握手期間選擇。
安全要從最基本的做起
安全需要從最基本的做起。如果任何一層不安全,那么它上面的所有層都將變得不安全。這也是安全深度之所以重要的原因。同樣,劃分可以隔離問題,但前提條件是劃分機制沒有被攻破。破壞性攻擊經(jīng)常是通過尋找安全機制中的漏洞進行的,這正是蠕蟲和病毒利用操作系統(tǒng)、應用軟件或系統(tǒng)配置中的缺陷攻擊系統(tǒng)的做法。
對大多數(shù)計算機系統(tǒng)來說,物理安全和啟動過程是起點。保證系統(tǒng)安全的方法之一是使用Trusted Computing Group公司(TCG)的可信平臺模塊(TPM)啟動系統(tǒng)。TPM包含個人電腦中常見的安全微控制器和存儲器(圖2)。防篡改硬件可以從物理上保護器件,破壞性地打開器件將導致存儲的安全密鑰丟失。TPM會在系統(tǒng)啟動時自檢,然后完成系統(tǒng)剩余部分的啟動,包括處理用戶輸入的PIN碼、認證通常存儲在另一個器件中并經(jīng)數(shù)字簽名或加密的啟動程序。
圖2:可信平臺模塊(TPM)被設計用于提供安全啟動環(huán)境。
一般情況下,TPM會將安全控制權轉(zhuǎn)交給主機,但也可以用于與安全有關的其它操作。TPM還包含一個唯一的RSA私鑰用于TPM的識別。TPM允許系統(tǒng)對信息進行數(shù)字簽名,從而實現(xiàn)其它系統(tǒng)對它自身的認證。
此外,TPM可以用來對機器上的器件進行遠程認證或識別,方法是獲得硬件和軟件的數(shù)字特征,然后簽名這些信息。簽名過的信息隨后即可發(fā)往第三方。這種方法一般可以用來確保使用的是特定版本的音樂播放程序。
為了解決基本遠程認證缺少匿名的問題,TCG開發(fā)出了一種稍有不同的方法,叫做直接匿名認證(DAA)。DAA執(zhí)行類似的過程,但結果只驗證目標硬件或軟件的狀態(tài),它不識別TPM模塊本身。
TPM也能提供安全密鑰存儲以及執(zhí)行加密和數(shù)字簽名工作。密鑰不需要存儲在TPM上,因為加密版本可以存儲在其它系統(tǒng)存儲器中。TPM可以利用這個信息提取和解密密鑰以供使用。
TPM功能可以被集成進微控制器,而不僅是個人電腦,從而打開了更為廣泛的消費設備市場。許多TPM功能可以使用帶I2C/SMBus接口的安全串行存儲器進行訪問。這些存儲器通常是TPM中常見的功能類子集,但具有更低的功耗要求和更簡單的接口。 [!--empirenews.page--]
保證節(jié)點安全
安全啟動是起點,而安全通信可以從通過CA認證的密鑰開始實現(xiàn)。對于嵌入式微控制器而言,下一步也許直接是應用程序,但對大多數(shù)應用來說,兩者之間至少還有一個操作系統(tǒng)。在最簡單的情況下,還有存儲器保護,更進一步還包括虛擬存儲器支持。理論上講,一個安全的操作系統(tǒng)可以使應用程序完全隔離于這種存儲器保護支持。當然,操作系統(tǒng)架構和規(guī)??赡転槟切で罄@過這種安全機制的攻擊者提供大量漏洞。
另一個可能的步驟是虛擬機支持。這種虛擬機支持使用額外的硬件,可提供與存儲器保護或虛擬存儲器支持相同類型的保護,但它更詳細,因為它模擬了所有的硬件。
管理程序本質(zhì)上是一種管理虛擬機環(huán)境的操作系統(tǒng),這種方法用于管理多個系統(tǒng),但也能提供額外的安全性。其方法是隔離操作系統(tǒng),并進一步隔離應用程序。一個“瘦”的管理程序通常比傳統(tǒng)的操作系統(tǒng)或?qū)崟r操作系統(tǒng)(RTOS)簡單得多,因此缺陷較少,在應用正式方法時也更容易驗證。
一些虛擬機系統(tǒng)使用主機操作系統(tǒng),如Linux,使得這類驗證非常困難。另外一種方法是建立一個虛擬機,用它來處理到虛擬機系統(tǒng)的用戶接口。虛擬機通過與管理程序通信來控制基礎系統(tǒng)。理論上講這種方法可以提供更好的隔離性能。
制定安全策略
管理程序為系統(tǒng)提供獨立多層次安全性(MILS)或域分離功能。MILS可以是多層安全(MLS)系統(tǒng)的一個組件,然而,MLS的實現(xiàn)不需要虛擬機支持,前提是系統(tǒng)(包括安全啟動過程)可以得到安全保護。
像SELinux等操作系統(tǒng)使用MLS安全模型,這種模型可以提供比單獨Linux更細顆粒的訪問控制。一般來說,Linux使用Linux安全模塊(LSM)框架。LSM可以支持包括SELinux在內(nèi)的多種安全模型,另外一個是Smack(簡化的強制訪問控制內(nèi)核)。
基本的Linux安全模塊提供基于用戶/組模型的認證和訪問控制,并且它是圍繞文件系統(tǒng)搭建而成的。文件可以從組、用戶或匿名的角度進行操作,并且讀、寫和執(zhí)行屬性是單獨可控的。訪問控制繼承了目錄樹的概念。
SELinux更像是一種面向功能的系統(tǒng),其策略可以變得相當復雜。這種強制訪問控制系統(tǒng)將策略和執(zhí)行分開來,不僅控制對文件和目錄的訪問,而且控制對網(wǎng)絡接口和消息的訪問。
訪問可以關聯(lián)到應用程序,而不僅是用戶。例如,文件服務器可以只提供對那些正確標示為共享的文件或目錄進行訪問。它能跟蹤應用程序以及由這些應用程序之一產(chǎn)生的任何子程序。這樣,策略可以防止信息從較高安全層次流向較低安全層次。沒有正確的允許,更高層次的應用程序不能簡單地提供對較低層次的訪問。
這種復雜性帶來的一個問題是如何正確地使用。較差的策略可能開啟漏洞,允許數(shù)據(jù)或控制移動到不應被允許的地方。這正是大多數(shù)系統(tǒng)開始時使用一種或多種基本策略定義、然后逐步修改以滿足系統(tǒng)要求的原因。
顯示系統(tǒng)的安全
安全操作系統(tǒng)的安全啟動對某些環(huán)境來說是足夠的,但與用戶的交互帶來了對識別以及用戶相關I/O的需求。安全顯示器是軍用安全系統(tǒng)中常見的一個特色功能(圖3)。顯示系統(tǒng)的安全性可以用軟件或硬件實現(xiàn)。例如,可以設置安全設備驅(qū)動程序只在顯示器底部顯示來自安全應用程序的顯示信息。采用全屏顯示的應用軟件不會覆蓋這個安全區(qū)域,其它技巧包括用顯示硬件執(zhí)行相同的操作。
圖3:在屏幕上留出安全區(qū)域非常重要,這種方法通常與其它形式的安全基礎架構組合在一起。
人們經(jīng)常使用的ctrl-alt-delete也是一個相關接口項。理論上,這個組合鍵應該只是調(diào)用系統(tǒng)應用程序。在使用Windows操作系統(tǒng)時,按下這個組合鍵將彈出一個對話框,其中有任務管理器等啟動選項。使用安全顯示器后,反饋信息可以通過安全顯示區(qū)顯示,使得任何應用程序無法模擬響應。