王志勇 李健 孫迪
北京工業(yè)大學(xué)計算機(jī)學(xué)院 北京 100124
安全度量提供了一個信息系統(tǒng)安全管理體制,并能維持組織信息安全狀況的持續(xù)改進(jìn)。目前國內(nèi)外研究較多的信息安全度量是關(guān)于信息技術(shù)或產(chǎn)品的安全度量、信息安全風(fēng)險分析等相關(guān)理論和方法,并已形成相應(yīng)的標(biāo)準(zhǔn)與規(guī)范,如ISO/ IEC 17799,ISO/ IEC 1333521,ISO/ IEC 15408等。這些標(biāo)準(zhǔn)對信息技術(shù)的安全性評估方法、系統(tǒng)或資產(chǎn)的風(fēng)險分析要素等進(jìn)行了系統(tǒng)的描述。
科學(xué)的信息安全度量一般包括目標(biāo)定義、需求分析、建立度量模型、設(shè)定安全基線、信息系統(tǒng)改進(jìn)和安全控制等內(nèi)容。
(1) 明確度量目標(biāo)
度量目標(biāo)就是一個組織實施信息安全度量的動機(jī),它影響著度量所采用的指標(biāo)以及相應(yīng)的安全基線。信息安全度量的目標(biāo)可以分為長期目標(biāo)和短期目標(biāo)。信息安全度量的長期目標(biāo)包括:分析和判斷信息安全態(tài)勢、信息安全控制的有效性、為組織的信息安全管理和決策提供支持等。信息安全度量的短期目標(biāo)包括:了解對某一項安全項目投入的效益、為調(diào)整近期的安全策略提供決策依據(jù)等。
(2) 定義信息安全需求
圖1 信息系統(tǒng)安全需求分析
面對復(fù)雜的網(wǎng)絡(luò)信息系統(tǒng),全面、準(zhǔn)確地分析其安全需求是實施度量的基礎(chǔ)。本文建議通過以下步驟分析信息系統(tǒng)的安全需求。
① 界定研究對象,明確本系統(tǒng)信息安全的使命、目標(biāo)和功能,分析系統(tǒng)在國家安全、社會穩(wěn)定和經(jīng)濟(jì)發(fā)展中的地位和作用。
② 給出信息系統(tǒng)業(yè)務(wù)描述,包括本信息系統(tǒng)主要業(yè)務(wù)應(yīng)用、業(yè)務(wù)流程和信息流程。
③ 針對本系統(tǒng)信息安全建設(shè)的使命、信息的重要程度、信息系統(tǒng)承載業(yè)務(wù)的重要程度、風(fēng)險分析的結(jié)果、系統(tǒng)遭到攻擊破壞后造成的危害程度等因素,確定本信息系統(tǒng)的安全的總體需求。
④ 進(jìn)一步明確系統(tǒng)對信息和信息系統(tǒng)的保密性、完整性、可用性、真實性和不可否認(rèn)性等安全屬性的需求程度。
(3) 確定度量指標(biāo)
根據(jù)組織的度量目標(biāo)和信息系統(tǒng)的安全需求確定度量指標(biāo)。度量指標(biāo)的選取要遵循兩個原則:定性與定量相結(jié)合原則和可操作性原則。在信息安全度量過程中會涉及到諸多不確定性因素,有些度量指標(biāo)可以量化,而有些則無法進(jìn)行直接量化。因此,需要堅持定性與定量相結(jié)合的原則。同時,信息安全度量所建立的模型,應(yīng)滿足量化計算的可行性,否則,會導(dǎo)致無法計算而得不到最終的評估結(jié)果。選取度量指標(biāo)要以產(chǎn)生可計量的數(shù)據(jù)為導(dǎo)向,以便于比較。例如可以采用公式以便于分析,或選擇參考點以追蹤變化。百分比和平均數(shù)也是度量中常用的方法,有時也可以使用絕對數(shù),這都取決于被考察對象的性質(zhì)。
(4) 建立度量模型
建立度量模型有兩個任務(wù):一是分析各度量指標(biāo)所占的權(quán)重;二是將各度量指標(biāo)通過數(shù)學(xué)模型進(jìn)行合成,且要保證模型的科學(xué)性。
(5) 設(shè)定信息安全基線
“基線”是一種用于度量或在度量中用于比較的基準(zhǔn)?!盎€”的概念已經(jīng)應(yīng)用于信息安全標(biāo)準(zhǔn)或規(guī)范當(dāng)中,如美國聯(lián)邦信息處理標(biāo)準(zhǔn) FIPS199。本文把信息安全基線定義為特定條件下實現(xiàn)其安全使命和功能的基本安全需求。
信息安全基線是為了度量不同時段的安全狀況所開發(fā)出的一套指標(biāo)集,它將信息系統(tǒng)當(dāng)前的安全狀況與基線進(jìn)行度量比較,可以了解當(dāng)前的安全狀態(tài)?;€會隨著組織及其信息系統(tǒng)結(jié)構(gòu)的變化而變化。如果一個組織增加了 50名新員工,或新配置了無線局域網(wǎng)辦公環(huán)境,組織系統(tǒng)的正常運行會發(fā)生新的變化。這時,就需要為系統(tǒng)更新或添加新的安全基線指標(biāo)。
(6) 制定信息安全度量制度
建立了信息安全度量模型和基線,就可以對組織的信息系統(tǒng)實施安全度量了。但是,確定信息安全度量周期、建立專職隊伍、實施人員培訓(xùn)、將安全度量納入組織的日常管理等等,則需要建立一套與度量目標(biāo)相一致的度量制度。
前文提到,基于可信聲明的軟件行為監(jiān)測離不開對軟件在用戶處運行時發(fā)生的真實行為的監(jiān)測,這種監(jiān)測數(shù)據(jù)一方面能夠?qū)崟r的對軟件行為是否合乎聲明的內(nèi)容進(jìn)行監(jiān)測,另一方面也能對超出聲明內(nèi)容的軟件行為做出反應(yīng)。根據(jù)用戶、軟件、安全要求的不同,待選的反應(yīng)方式包括日志、提示、阻斷等。
隨著軟件技術(shù)的發(fā)展,軟件運行的平臺逐漸趨于多樣化、移動化和云端化,復(fù)雜的軟件運行環(huán)境使得第三方外掛的監(jiān)測手段(類似傳統(tǒng)防火墻、殺毒軟件等)往往被開發(fā)人員有意或無意的繞開,使得其無法全面的檢測到軟件運行的真實信息。因此提出了基于安全編譯的監(jiān)測方案,軟件運行的代碼在部署運行前,通過安全編譯生成最終運行的程序,同時在編譯中對代碼內(nèi)容進(jìn)行審核,達(dá)到從根本上對軟件行為進(jìn)行監(jiān)控的目的。
安全編譯是指在傳統(tǒng)的代碼編譯流程中,加入安全組件,完成對代碼進(jìn)行安全檢測、嵌入安全監(jiān)測模塊的任務(wù)。安全編譯具有兩個特點:一是具有安全檢測功能,盡早發(fā)現(xiàn)程序中的安全隱患;二是編譯器自身的可信性,保證程序能夠被翻譯成正確的目標(biāo)代碼(如圖2)。.
圖2 安全編譯的工作內(nèi)容
(1) 安全檢測
在軟件開發(fā)完成后,開發(fā)者需要撰寫與代碼相匹配的軟件為聲明,但是如何將軟件行為聲明與代碼內(nèi)容進(jìn)行核對以檢查代碼是否合規(guī)的工作量極大,而編譯器作為最早接觸軟件全部代碼的工具,能夠在編譯初期便對軟件代碼進(jìn)行安全檢測,如果發(fā)生代碼內(nèi)容超出行為聲明的范圍時,能夠及時的生成報告,確保開發(fā)者能夠修改行為聲明或軟件代碼而使二者內(nèi)容真實匹配。
(2) 嵌入安全監(jiān)測模塊
在軟件運行的真實環(huán)境中能夠完全檢測軟件的行為是極其困難的,因此如果能夠在編譯時對在軟件生成的代碼中嵌入安全檢測模塊,在軟件發(fā)生容易引發(fā)安全問題的關(guān)鍵行為(如IO讀取、網(wǎng)絡(luò)傳輸、用戶關(guān)鍵信息讀取等)時,向系統(tǒng)拋出信息,便于系統(tǒng)中的安全監(jiān)測軟件接收以實時了解軟件的真實行為。
本文主要探討如何在軟件中嵌入安全模塊,由于軟件開平臺日趨復(fù)雜,千變?nèi)f化,因此主要選擇了目前流行的Microsoft .NET平臺下的單機(jī)軟件編譯過程進(jìn)行探討。在探討研究完成后,可以逐漸擴(kuò)展支持的語言和軟件平臺,遠(yuǎn)期希望能夠?qū)⒐δ軘U(kuò)展至云平臺上。
面向方面編程(Aspect-Oriented Programming,AOP)是一種將函數(shù)的輔助性功能與業(yè)務(wù)邏輯相分離的編程泛型(Programming Paradigm),其目的是將橫切關(guān)注點(Cross-Cutting Concerns)分離出來,使得程序具有更高的模塊化特性。AOP是面向方面軟件開發(fā)(Aspect-Oriented Software Development)在編碼實現(xiàn)層面上的具體表現(xiàn)(面向方面軟件開發(fā)AOSD是一個囊括面向方面分析、面向方面設(shè)計和面向方面編程等一系列概念的完整工程系統(tǒng))。AOP包括編程模型和具體用于實現(xiàn)AOP的框架兩部分。
下面對上文提到的定義進(jìn)行一些解釋。
在當(dāng)前大多數(shù)支持面向?qū)ο蟮木幊陶Z言中(例如C#等),函數(shù)是表述程序功能的最小單元,而一個函數(shù)的代碼層面往往同時含有核心業(yè)務(wù)邏輯和輔助性功能。核心業(yè)務(wù)邏輯指一個函數(shù)本身主要實現(xiàn)的業(yè)務(wù)功能,例如在一個在線電子商務(wù)系統(tǒng)中,“下訂單”函數(shù)其核心業(yè)務(wù)邏輯是“新建訂單”,而“提升會員”函數(shù)其核心業(yè)務(wù)是“提升一個會員的等級”。但是,一個函數(shù)除了核心業(yè)務(wù)代碼外,往往還會有一些輔助性功能代碼,如事務(wù)處理、緩存處理、日志記錄、異常處理等等。而這些輔助性功能一般會存在于大多數(shù)甚至所有業(yè)務(wù)函數(shù)中,即形成AOSD中所謂的橫切關(guān)注點,如圖3所示。
圖3 橫切關(guān)注點示意
一般來說,在純編譯型語言(如 C、C++)等語言中實現(xiàn)AOP非常困難,必須完全從編譯器角度入手。因此一般通過討論托管型語言(如 C#,Java)中 AOP的實現(xiàn)方式來完成對AOP的支持。AOP的主要實現(xiàn)方式有編譯時AOP和運行時AOP兩種:
(1) 編譯時AOP(靜態(tài)織入)
編譯時 AOP的實現(xiàn)思想是給語言的編譯器做擴(kuò)展,使得在編譯程序的時候編譯器將相應(yīng)的 Aspect代碼織入到業(yè)務(wù)代碼的指定連接點,輸出整合的結(jié)果。圖4是編譯時AOP的示意圖(以.NET平臺為例)。
圖4 編譯時AOP示意圖
如圖4所示,當(dāng)使用靜態(tài)織入時,帶AOP擴(kuò)展的編譯器會在編譯時將Aspect代碼織入業(yè)務(wù)函數(shù)代碼,形成整合后的IL,然后交由CLR運行。
(2) 運行時AOP(動態(tài)織入)
運行時AOP如圖5所示。
圖5 運行時AOP的示意圖
如圖5所示,運行時AOP的實現(xiàn)方式是將擴(kuò)展添加到運行虛擬機(jī)而不是編譯器。功能點和業(yè)務(wù)代碼分別獨立編譯,而在運行時由虛擬機(jī)在必要時進(jìn)行織入。
圖6 安全監(jiān)測層
在安全編譯中需要將安全模塊嵌入到生成的最終代碼中,同時又不希望這些模塊影響軟件已有的功能,因此選用AOP框架在代碼中加入安全監(jiān)測層來完成這一目的(圖6)。
圖7 安全編譯流程
例如在C#語言編寫的.NET平臺應(yīng)用中,我們通過撰寫微軟MSBuild編譯器插件,將安全模塊嵌入的功能嵌入到標(biāo)準(zhǔn)的編譯流程中,得以在編譯器遇到特殊的代碼語句時,自動執(zhí)行代碼前后加入拋出信息的語句(圖7)。這些拋出安全信息的語句不會對代碼的正常功能產(chǎn)生的影響討論如下:
(1) 功能影響
由于選用的安全監(jiān)測語句基于標(biāo)準(zhǔn)的.NET平臺消息技術(shù),因此理論上不會對應(yīng)用原有功能產(chǎn)生影響。為了便于軟件開發(fā)人員對軟件進(jìn)行調(diào)試,在編譯中提供了關(guān)閉安全消息通知模塊嵌入的選項,得以排除是否由嵌入安全監(jiān)測模塊帶來的對軟件已有功能的影響。
(2) 性能影響
由于嵌入安全模塊是在軟件生成的最終代碼中嵌入新的語句,因此理論上一定會對軟件的性能產(chǎn)生影響,同時監(jiān)測的粒度與軟件的性能影響本身成為一對需要平衡的矛盾,監(jiān)測的粒度越大,對軟件本身產(chǎn)生的性能影響越大。因此在實際工程中,需要平衡這對矛盾,盡量在不影響軟件性能的情況下,提高軟件行為監(jiān)測的粒度。
同時考慮到現(xiàn)有的軟件應(yīng)用,尤其是面對最終客戶的軟件應(yīng)用,計算性能本身并非軟件需要考慮的第一要素,而且現(xiàn)有的安全軟件(防火墻、殺毒軟件等)由于涉及到大量的跨線程、跨進(jìn)程、跨內(nèi)存區(qū)域的對軟件應(yīng)用的訪問,會消耗更多的計算性能。而嵌入的安全模塊與軟件應(yīng)用代碼處于同一內(nèi)存空間,不涉及上述耗費性能的訪問工作,因此比較現(xiàn)有安全軟件帶來的性能營銷較小。
本文通過分析軟件可信要素的研究現(xiàn)狀、從可信要素的植入方法入手,對安全編譯等課題進(jìn)行了研究與探討。并且從靜態(tài)、動態(tài)兩個方向討論了軟件可信要素在編譯層面的植入方法,并對其可能對軟件可信監(jiān)測做出的影響進(jìn)行了研究。
軟件行為的檢測層面千差萬別,切入點各異,文本中提出了統(tǒng)一的方法——即從編譯環(huán)節(jié)植入可信要素——對其進(jìn)行檢測,同時保證不會對軟件本身已有功能、開發(fā)流程產(chǎn)生較大影響。
后續(xù)的研究工作包括且不限于:植入的安全要素如何與行為檢測平臺通信、如何基于軟件可信聲明等手段對軟件的行為做出反應(yīng)等。
[1]劉克,單志廣,王戟等.“可信軟件基礎(chǔ)研究”重大研究計劃綜述[J].中國科學(xué)基金. 2009.
[2]Saint-Germain R. Information security management best practice based on ISO/IEC 17799[J]. Information Management Journal. 2005.
[3]閆強(qiáng),陳鐘,段云所等.信息系統(tǒng)安全度量與評估模型[J].電子學(xué)報.2003.
[4]申瑞芬.高可信安全編譯器的設(shè)計與實現(xiàn)[D].國防科學(xué)技術(shù)大學(xué).2007.
[5] 石丹丹,王靜,熊前興.面向方面編程模式的探討[J].武漢理工大學(xué)學(xué)報:信息與管理工程版.2005.
[6]靳小強(qiáng),唐寧九,胡雪亮. .NET 平臺利用 AspectSharp實現(xiàn)權(quán)限驗證[J].計算機(jī)應(yīng)用研究. 2006.
[7]楊帆.基于AOP技術(shù)的Web應(yīng)用開發(fā)研究[J].Software Guide.2008.
[8]程虎.面向方面(aspect)的程序設(shè)計方法[J].信息技術(shù)快報.2005.