周夏芳(北京全路通信信號研究設計院有限公司,北京 100073)
周夏芳,女,碩士畢業(yè)于西南交通大學,工程師。研究方向:安全平臺,安全保障,參與項目:DS6-60計算機聯(lián)鎖系統(tǒng)開發(fā)、DS6-60e全電子計算機聯(lián)鎖系統(tǒng)開發(fā)、DS6-60計算機聯(lián)鎖系統(tǒng)安全認證、DS6-60e全電子計算機聯(lián)鎖系統(tǒng)安全認證.獲取專利:一種用于軌道交通區(qū)域聯(lián)鎖和站間通信的系統(tǒng)(2012,ZL.2009.1.0158488.X);一種二乘二取二主備控制切換系統(tǒng)和方法(2012,ZL.2009.1.0235437.2);一種二乘二取二系統(tǒng)的同步方法和設備(2012,ZL.2009.1.0237497.8).
操作系統(tǒng)是一種為應用程序提供服務的系統(tǒng)軟件,它位于底層硬件和上層應用軟件之間,負責系統(tǒng)資源的分配與管理。在安全控制系統(tǒng)中使用操作系統(tǒng),能為系統(tǒng)開發(fā)、產(chǎn)品功能實現(xiàn)帶來巨大便捷。
然而使用操作系統(tǒng)也會帶來很多的問題[1]。首先,很多通用的操作系統(tǒng)不具備完整清晰的行為定義,使得應用設計人員無法明確操作系統(tǒng)在具體應用環(huán)境中的行為;其次,操作系統(tǒng)的類型很多,同一類型下的操作系統(tǒng)往往也有不同選擇,操作系統(tǒng)的行為是否能夠滿足應用的要求需要慎重考慮;最后,操作系統(tǒng)和其他類型的已開發(fā)的軟件組件不同,它是計算機硬件和應用軟件的接口。操作系統(tǒng)向應用提供的服務失效,不可避免會導致應用軟件的失效,而在大多數(shù)情況下,應用軟件無法對此進行防御,有時必須依靠硬件的防御機制來應對操作系統(tǒng)的失效。
本文根據(jù)參考文獻[2,3],描述了一種在安全控制系統(tǒng)中采用通用操作系統(tǒng)的分析方法及標準。
C1.操作系統(tǒng)的行為應被準確定義,從而盡可能避免由于應用軟件的設計人員對操作行為的誤解而引入的風險;
C2.操作系統(tǒng)各方面的行為必須適合于安全應用;
C3.操作系統(tǒng)應具備足夠的可靠性。
本文以Linux操作系統(tǒng)為例,分別對特定操作系統(tǒng)如何滿足C1、C2、C3標準進行具體闡述。
操作系統(tǒng)的行為可分為功能、實時性、容量等多方面[3]。應用設計人員必須準確理解操作系統(tǒng)行為,才能在操作系統(tǒng)支持下完成上層應用軟件的正確開發(fā)。
系統(tǒng)性的測試能發(fā)現(xiàn)大多數(shù)由于應用設計人員對操作系統(tǒng)行為誤解帶來的軟件缺陷,但不一定能找出所有這樣的缺陷。因此,通過對操作系統(tǒng)行為的完整定義,使得應用設計人員能夠準確的理解操作系統(tǒng)行為,對整系統(tǒng)的功能正確性至關重要。
操作系統(tǒng)行為的定義通常有如下形式:完整的用戶手冊,包括所有的接口函數(shù)定義、正常及異常執(zhí)行時的系統(tǒng)反應等?;蛘?,操作系統(tǒng)源代碼是開放的,并具備良好的可讀性,應用設計人員可以通過代碼本身來理解操作系統(tǒng)的行為。
對于Linux操作系統(tǒng),可以找到這樣一些證據(jù)來證明其行為經(jīng)過明確定義,可以被應用設計人員很好地理解。
1)Linux遵循POSIX[4]標準。POSIX(Portable Operating Sy stem In ter face for Com pu ting Sy stem s)是由IEEE和ISO/IEC開發(fā)的標準。該標準描述了操作系統(tǒng)的調(diào)用服務接口,用于保證編制的應用程序源代碼可以在多種操作系統(tǒng)上移植。
2)L in u x遵 循 LSB標 準。LSB(L in u x Standard Base)可以說是Linux的工業(yè)標準,它保證了Linux發(fā)行版同Linux應用程序之間的良好結合。它是一個二進制接口規(guī)范,使應用程序在系統(tǒng)間遷移時不用重新編譯,保證了應用程序在不同Linux發(fā)行版上都具有兼容性。
3)很多關于L inu x操作系統(tǒng)及操作系統(tǒng)內(nèi)核研究的著作,如文獻[5]等,有利于開發(fā)者對操作系統(tǒng)行為以及接口的理解。
4)Linux文檔計劃(LPD)提供了許多有用的Linux操作系統(tǒng)文檔資源[6]。
5)由于L inux是開源的操作系統(tǒng),因此如果發(fā)現(xiàn)有不清楚的行為,可以在論壇或向LDP尋求幫助。
此外,還有對L in u x應用技能的認證——LPI認證[7],它是站在一個中立的、第三方的角度,對L in ux廣泛和通用的技術水平進行考核。應用設計人員具備LPI認證資質,可以更好地保證產(chǎn)品設計者準確理解使用的操作系統(tǒng)行為。
根據(jù)參考文獻[3],并結合操作系統(tǒng)的特性,可以從以下幾方面考慮操作系統(tǒng)是否適合于安全應用。
3.1.1 分區(qū)
如果安全相關應用需要多個進程協(xié)同工作,操作系統(tǒng)應能提供對資源進行安全管理的手段。這就是分區(qū)。分區(qū)能防御由于共享資源帶來的風險,包括以下內(nèi)容。
空間上的分區(qū):能防止一個分區(qū)改變另一個分區(qū)的數(shù)據(jù)或軟件,屏蔽另一分區(qū)輸出設備的命令。
時間上的分區(qū):能保證一個進程一定能獲得CPU處理時間,一定能訪問到某個物理設備,而不會受其他進程的影響。
L in u x系統(tǒng)在空間上的分區(qū)體現(xiàn)為內(nèi)核空間和用戶空間的劃分,時間上的分區(qū)則體現(xiàn)在其內(nèi)核調(diào)度策略上。
3.1.2 自發(fā)行為
操作系統(tǒng)會有一些非應用命令引起的自發(fā)行為(如每天定時執(zhí)行,或由于某些內(nèi)部限制到達后執(zhí)行的清掃功能)。這些行為會增加應用調(diào)用操作系統(tǒng)服務的響應時間。影響較大時,可能會導致輸入請求響應時間的偏差,或系統(tǒng)吞吐量的變化。安全應用設計時,應考慮操作系統(tǒng)的自發(fā)行為是否會對整系統(tǒng)性能產(chǎn)生不可接受的影響。
L in u x并不存在過多的自發(fā)行為,它其中的一個自發(fā)行為是:每次寫文件時并不直接寫入磁盤,而是寫入磁盤高速緩存中對應頁(寫過的頁面被標記為臟頁)。內(nèi)核線程會定期將臟頁更新到磁盤,同時將更新后的臟頁回收。這種自發(fā)行為可以在文件打開時選擇禁止,繞開磁盤高速緩存,直接與塊設備打交道,但應該考慮到磁盤I/O性能會因此降低。3.1.3 未使用功能的可移除性
對于任何安全相關應用來說,對于操作系統(tǒng)中未使用的功能都希望可以移除,以防止對應用產(chǎn)生不可預期影響。由于L in u x是以源碼形式提供的,它可以做到只有滿足安全應用需要的設備驅動和文件系統(tǒng)才被封裝進內(nèi)核。
系統(tǒng)根據(jù)對實時性要求的不同可分為硬實時系統(tǒng)、軟實時系統(tǒng)和非實時系統(tǒng)。
硬實時系統(tǒng)有一個剛性、不可改變的時間限制,要求系統(tǒng)要確保任務執(zhí)行最壞情況下的服務時間,即對于實時事件響應時間的截止期限必須得到滿足,否則會破壞系統(tǒng)造成致命的錯誤;
軟實時系統(tǒng)也有一個時間限制,并希望滿足該時限的要求。但它是一個柔性的,并不是強制的。它可以容忍偶然的超時錯誤,即使過了最后時限,任務的執(zhí)行仍然是有意義的,不會給系統(tǒng)帶來致命的錯誤;
非實時系統(tǒng)對時間沒有限制,哪怕是最高優(yōu)先級任務開始執(zhí)行的最后時限也無法得到保障。
標準L inux是多任務多用戶的分時操作系統(tǒng),盡管系統(tǒng)通過為實時任務賦予較高優(yōu)先級使得系統(tǒng)具有一定的實時性,但對于大多數(shù)時限要求較高的實時性任務來說,還是遠遠達不到其對于時間約束的要求。Linux中影響實時性的機制主要有以下幾方面。
1)關中斷。在系統(tǒng)調(diào)用中,為了保護臨界資源,Linux處于內(nèi)核臨界區(qū)時,中斷會被系統(tǒng)屏蔽,這就意味著如果當前的進程正處于臨界區(qū),即使它的優(yōu)先級較低,也會延遲高優(yōu)先級的中斷請求。
2)進程調(diào)度。Linux內(nèi)核是不可搶占的,采用基于固定時間片的可變優(yōu)先級調(diào)度。這對一些要求高優(yōu)先級進程立即搶占CPU的實時應用是不能滿足要求的。
3)最小時鐘分辨率??筛鶕?jù)特定應用的實時調(diào)度要求調(diào)整L in ux最小時鐘分辨率,但需考慮由于Linux的進程切換以及頻繁時鐘中斷導致系統(tǒng)開銷。
如果系統(tǒng)對實時性要求較高,可以考慮采用RTLinux。它是Linux中的一種實時操作系統(tǒng),它在L inux內(nèi)核與硬件之間增加了一個虛擬層,構筑了一個小的、時間上可預測的、與Linu x內(nèi)核分開的實時內(nèi)核,使得在其中運行的實時進程能夠滿足硬實時要求。
操作系統(tǒng)的容量要求指操作系統(tǒng)應可滿足特定應用所需要的資源。
系統(tǒng)資源是由操作系統(tǒng)內(nèi)核來進行統(tǒng)一分配和管理的,例如進程表、文件描述符表等。L in u x的表容量通常足夠大,并不會對安全相關應用帶來問題。
軟件的健壯性是指軟件在異常輸入或苛刻環(huán)境條件下能保持正常工作的程度。它有兩層含義:一是差錯屏蔽能力,指發(fā)生異常時系統(tǒng)能不出錯的能力;二是差錯恢復能力,指發(fā)生錯誤后重新運行時,恢復到?jīng)]有發(fā)生錯誤之前狀態(tài)的能力。
操作系統(tǒng)的健壯性可以通過3類異常來考慮:用戶進程的非預期行為、外設失效、硬件平臺(CPU或內(nèi)存)的失效。
L in u x對健壯性的要求可通過以下特性得到滿足。
1)L inu x的系統(tǒng)調(diào)用要對入?yún)⑦M行檢查,入?yún)㈠e誤時轉入異常處理邏輯,因此非法調(diào)用不會導致內(nèi)核崩潰;Linux內(nèi)核由虛擬內(nèi)存管理系統(tǒng)保護,用戶進程不能直接訪問內(nèi)核空間;內(nèi)核會跟蹤用戶進程的異常并向用戶進程產(chǎn)生錯誤報告。
2)外設失效的解決辦法依賴于外設驅動。外設失效多表現(xiàn)為響應超時,這時通常會向用戶進程返回一個錯誤信息。
3)如果內(nèi)核本身產(chǎn)生了異常(如訪問到非法內(nèi)存,或CPU計算錯誤等),操作系統(tǒng)不會恢復,所有應用進程都會被終止。內(nèi)核會嘗試輸出一個錯誤信息。內(nèi)核不會自重啟,如果應用有重啟要求應采用其他解決辦法,如使用看門狗。
操作系統(tǒng)的可靠性指操作系統(tǒng)支持應用軟件穩(wěn)定運行的能力。根據(jù)參考文獻[3],可以從以下幾方面來搜集操作系統(tǒng)可靠性的證據(jù)。
L in u x被廣泛使用于PC機、服務器和嵌入式系統(tǒng)。根據(jù)Linux Cou ters Project[8]的統(tǒng)計,約12萬L in u x用戶在該網(wǎng)站進行了注冊登錄。由此得出的估算數(shù)字是,世界各地共約有6 400萬的Linux用戶。
應盡量選擇已具備可信、完整的測試報告的操作系統(tǒng)。由于操作系統(tǒng)的復雜性,通常較難以搜集完整的測試證據(jù)。對于特定的應用,至少應結合系統(tǒng)的具體功能進行完整的測試。
目前了解到的部分Linux測試內(nèi)容如下。
1)LTP(Linux Test Project)對Linux可靠性、健壯性、穩(wěn)定性的測試。
2)LSB工作組對Linux發(fā)行版是否符合LSB標準進行的測試。
3)BA LLISTA計劃對Lin ux健壯性的測試。測試結果參見參考文獻[9]。
如具備條件,可以對操作系統(tǒng)的軟件質量進行分析,或搜集相關分析證據(jù)。參考文獻[10]對Linux內(nèi)核軟件質量進行了初步的分析。
針對通用操作系統(tǒng)在安全控制系統(tǒng)中的適用性,本文描述了一種通用的分析方法及衡量標準,并以L in u x操作系統(tǒng)為例,說明了特定操作系統(tǒng)滿足該標準的論證方法。然而除了對操作系統(tǒng)的適用性進行通用的分析,還應結合具體應用,對使用的操作系統(tǒng)功能進行失效分析,并針對可能的風險提出具體失效防御措施。
[1] Pumfrey, D.J. The Principled Design of Computer System Safety Analyses[M]. DPhil Thesis, University of York,1999.
[2] Civil Aviation Authority, Safety Regulation Group, Requirements for the Use of Operating Systems in Satety Related Systems[R]. report OS01, Parts 1 and 2, 1998.
[3] CAP 670, Air Traffic Services Safety Requirement[S]. section SW01 “Regulatory Objectives for Software Assurance in ATS Equipment”,Civil Aviation Authority, Satefy Regulation Group ,2012.
[4] ISO/IEC 9945-1, Information Technology Portable Operating System Interface(Posix)[S]. Part1: System Application Program Interface (API) [C Language], 1996.
[5] D P. Bovet & M Cesati. Understanding the Linux Kernel[M]. O’Reilly & Associates Inc, 2001.
[6] http://www.linux.org/docs/index.html
[7] http://www.lpi.org
[8] http://linuxcounter.net
[9] Koopman P. Comparing the Robustness of POSIX Operating Systems[J]. Proc. 29thAnnual Symposium on Fault Tolerant Computer Systems,15-18 June 1999, Madison, Wisconsin.
[10] H.R. Pierce. Preliminary Assessment of Linux for safety related systems[R]. Research Report 011, 2002.