◆丁 涵 許慶光 李孟君
(海軍研究院 北京 100841)
軟件作為信息系統的核心,決定著信息系統的安全。當前,軟件的運行和開發環境從傳統靜態封閉的狀態變成互聯網環境下動態開放的狀態。越來越多的軟件漏洞和缺陷被發現并被惡意攻擊者利用。如果不能保證軟件來源的可信性及傳輸過程的安全性,即使在信息系統內部做了很多防護措施,仍會導致防護措施形同虛設。本文提出一種基于數字證書的軟件安全分發方案,保證軟件在下載、安裝和使用過程中的安全性。
軟件安全分發系統拓撲結構如圖1所示。

圖1 軟件安全分發系統拓撲結構
軟件安全分發系統包括數字證書認證機構(CA)、源服務器、軟件發布系統服務端和軟件發布系統客戶端組成。CA負責證書庫的建立和維護、設備及用戶證書的簽發和管理、證書撤銷列表的發布和管理;源服務器負責對基于不同Linux發行版本的操作系統及不同處理器架構的平臺上運行的軟件進行統一的管理;軟件發布服務端是用戶終端下載軟件的唯一來源,負責軟件資源的檢測、錄入和分發;用戶終端運行軟件發布系統客戶端,負責對軟件發布服務端下發的軟件資源進行驗證、安裝、更新和卸載。
軟件發布系統服務端架構如圖2所示。

圖2 軟件發布系統服務端架構
軟件發布系統服務端由軟件安全檢測模塊、證書管理模塊、軟件管理模塊、訪問控制權限管理模塊和軟件發布模塊組成。其中軟件安全檢測模塊負責對通用軟件進行惡意行為檢測,避免將病毒、木馬、蠕蟲引入信息系統內部。軟件管理模塊負責軟件資源的錄入。證書管理模塊負責對用戶平臺的用戶證書進行管理。訪問控制權限管理模塊負責對每個軟件資源設置對應用戶可讀、可執行的權限。軟件發布模塊負責對軟件資源進行集中發布或授權發布。
軟件發布系統客戶端架構如圖3所示。
軟件發布系統客戶端由用戶注冊模塊、軟件下載管理模塊、軟件安裝模塊、軟件運行監視模塊和軟件資源庫組成。其中用戶注冊模塊負責向服務端上報用戶的身份信息,包括終端唯一標識號、用戶名、口令、用戶身份證書、IP地址等。軟件下載管理模塊負責對服務端分發的資源進行下載存儲。軟件安裝模塊負責對軟件資源進行驗證并安裝。軟件運行監視模塊負責監視軟件行為,阻止越權等非法操作,保證軟件實時行為符合預期。

圖3 軟件發布系統客戶端架構
為了便于驗證用戶身份的合法性,需要進行證書管理。證書管理模塊由證書數據庫、證書業務管理模塊和自身證書分發模塊組成。用戶在軟件發布系統服務端注冊信息時向服務端提交用戶身份證書,軟件發布系統服務端提取用戶身份證書序列號后建立與用戶名之間的對應關系表,再與用戶身份證書一并錄入證書數據庫中。證書業務管理模塊提供證書查詢、證書導入、證書更新、證書撤銷、證書狀態管理等服務。管理員可通過證書查詢服務根據證書序列號查詢到對應的證書;可通過證書導入服務將離線用戶的身份證書導入到數據庫中;可通過證書更新服務、證書撤銷服務同步更新證書數據庫中的信息;證書狀態管理服務對證書的使用狀態(如更新、撤銷)進行實時狀態更新,為服務端在檢測用戶身份證書有效性和合法性提供依據。當軟件發布系統服務端自身的設備身份證書更新時,需要通過在線分發或離線導出的方式將證書提供給所需節點。
目前軟件之所以頻頻遭受攻擊,引發無數安全問題,其根本原因在于軟件在設計之初沒有或無法充分考慮軟件自身運行環境及外來干擾的復雜性,導致軟件存在設計缺陷或漏洞,在面臨異常環境時無法按照預期行為軌跡運行,從而造成軟件行為可信性無法得到保證,可能會出現如下問題:
(1)軟件停止運行或無法完成指定的功能;
(2)軟件(特別是重要控制軟件)運行異常導致安全事故;
(3)軟件漏洞被利用,導致軟件運行時的系統被非法控制。
因此,為了確保軟件的安全性,不僅要確保軟件數據完整性,必須還要確保軟件行為的完整性,即軟件在實際運行過程中所產生的行為與軟件預期行為是一致的,或者說其行為沒有被非法啟動和終結,也沒有被非法改變。
軟件進程是軟件行為完整性認證的主體。軟件進程在運行過程中,不可避免地要讀取、寫入或執行各類客體。在對這些客體進行操作的過程中,為了確保軟件行為的完整性,避免出現預期之外的行為,必須對這些客體進行相應的認證和控制。這就需要在軟件的開發階段對軟件的安全性進行嚴格的管控。基于這方面考慮,需要制定軟件安全標簽聲明,能夠有效反映軟件的特征信息,并保證其完整性和真實性,內容包括軟件的完整性信息和授權操作表(包括讀、寫、執行等操作行為)。由軟件開發單位在軟件開發結束后生成,作為軟件在分發、安裝和運行過程進行檢測和鑒別的依據。
根據軟件用途的不同,可將軟件類型分為三類,一是通用軟件,二是專用軟件,三是系統軟件。通用軟件為面向系統內所有用戶的常用應用軟件,如辦公軟件或工具軟件;專用軟件為面向系統內部分用戶的軟件,如一些業務系統軟件;系統軟件為操作系統鏡像文件及升級包。
對于通用軟件,在入庫前可采用基于沙箱的行為檢測方法或其他方法進行惡意代碼檢測,只有通過檢測的軟件才可錄入至軟件發布系統服務端。對于專用軟件,只有包含軟件可信標簽聲明的軟件才可錄入至軟件發布系統服務端。
為了能夠對不同類型、不同版本的軟件進行統一管理,軟件錄入信息主要包括:軟件類型標識、軟件名稱、描述信息、軟件版本、提交人、錄入日期等等。
對于類型為通用軟件的軟件,軟件發布系統服務端可以采用對軟件簽名發布的方式進行集中分發,在軟件發布之前利用自身設備身份證書對應私鑰對軟件資源及錄入信息進行簽名,發布時將軟件與簽名打包下發至用戶。
對于類型為專用軟件和系統軟件的軟件,由于其適用范圍不同,需要由軟件發布系統服務端進行授權分發,實現授權分發主要從兩方面考慮:一是用戶登錄軟件發布服務器后只能看到對應該用戶的軟件列表,無法查看到其他用戶的軟件列表;二是從其他平臺上復制過來的軟件也不能被安裝。
針對第一種問題,可以在服務端選擇軟件發布對象的同時設置用戶訪問控制權限列表,對每個軟件資源設置對應用戶可讀、可執行的權限,在服務端與客戶端在線連接的情況下,客戶端登錄服務端只能訪問到允許該用戶可讀、可執行的軟件資源。軟件發布系統服務端訪問控制框架圖如圖4所示。
用戶在登錄軟件發布系統服務端時,軟件發布系統服務端先對用戶的身份信息進行驗證,驗證通過后根據用戶的身份查詢用戶訪問權限表,獲得該用戶可以訪問的軟件資源信息,再將與該用戶對應的軟件資源通過交互界面提供用戶查看或安裝。
針對第二種問題,服務端在進行軟件發布時,對軟件資源簽名前在軟件安裝包的附加信息上添加指定客戶端的終端唯一標識信息字段,當軟件安裝包在線安裝或離線導入到客戶端時,客戶端可通過檢查安裝包附加信息,比對本地終端標識與安裝包附加信息中終端標識的一致性判斷是否進行安裝操作,保證軟件部署的安全性。
軟件在安裝前需要對其來源進行驗證,基本思想是采用用戶終端存儲的發布系統服務端的設備身份證書公鑰和CA公鑰驗證軟件的簽名,再解析軟件安裝包中的附加信息,根據基本信息中的軟件類型和終端標識判斷是否為本機要安裝的軟件,驗證通過后才允許安裝過程繼續,否則安裝失敗。

圖4 軟件發布系統服務端訪問控制框架圖
針對在Linux操作系統運行的軟件,在驗證通過后先判斷該軟件在安裝前是否存在某些依賴軟件尚未安裝的情況,如果存在,用戶終端連接源服務器,下載安裝包清單列表數據,該數據除了記錄每個軟件包的依賴關系之外,還記錄了軟件包所放置在源服務器中的容器位置。用戶終端根據列表數據從軟件所存放的目錄下載所需要的依賴軟件,驗證軟件簽名后先進行依賴軟件的預安裝,再安裝實際需要的軟件。
軟件在運行期間,客戶端對軟件的實際運行狀態與安全標簽聲明中的授權操作表進行比對,一旦發現存在違反訪問原則且與授權操作表不符的行為,會及時阻止軟件的非預期行為,進而保障系統中的軟件實際行為符合預期,確保系統的動態可信。
通過設計基于數字證書的軟件安全分發方案,能夠為不同操作系統下的用戶提供軟件資源可信保障,有助于實現網絡環境下軟件分發安裝過程的可信、可控,提升軟件分發過程中的安全性,避免終端或服務器因安裝未經授權軟件或被篡改軟件的軟件而引起的安全威脅,為后續開展軟件全生命周期集中管理和維護研究工作奠定基礎。