王渭清,陳 軍,薄明霞
(中國電信股份有限公司北京研究院 北京100035)
進入全業(yè)務(wù)經(jīng)營時代的各家運營商均已經(jīng)不滿足于只提供網(wǎng)絡(luò)管道和能力給用戶,隨著用戶需求的多樣化和應用時代的來臨,運營商加大應用平臺和應用系統(tǒng)的開發(fā)和推廣(如網(wǎng)上營業(yè)廳、各種B/S或C/S架構(gòu)的增值業(yè)務(wù)系統(tǒng)),在業(yè)務(wù)豐富的同時,過多定制化應用軟件的出現(xiàn)引出了許多安全問題。
多個權(quán)威組織和機構(gòu)均表明,目前網(wǎng)絡(luò)攻擊的主要對象已經(jīng)由攻擊網(wǎng)絡(luò)和主機系統(tǒng)轉(zhuǎn)而變?yōu)楣魬密浖?。這些攻擊可能導致被攻擊方聲譽受損、經(jīng)濟損失甚至產(chǎn)生不良的政治影響。其中,根據(jù)美國國家標準技術(shù)研究院(NIST)的統(tǒng)計分析得出,所確認漏洞中92%的是在應用層,而不是在網(wǎng)絡(luò)層;另據(jù)Gartner的數(shù)據(jù)表明,當前網(wǎng)絡(luò)上75%的攻擊是針對Web應用的[1]。
與此同時,對于應用軟件用戶而言,軟件是否安全目前已經(jīng)逐漸成為他們面臨選擇時最為關(guān)注的方面。尤其是運營商的應用軟件往往承載大量的用戶數(shù)據(jù)、充值卡信息以及部分商業(yè)機密,安全需求就更加突出。由此可見,更有效地解決安全問題,提供安全的應用軟件,能夠使運營商在爭奪市場份額的戰(zhàn)斗中占據(jù)更為有力的位置。
應用軟件主要包括采用B/S、C/S結(jié)構(gòu)軟件和單機應用軟件,其中單機應用軟件可看作沒有客戶端的C/S結(jié)構(gòu)軟件。應用軟件的通用漏洞主要由于應用軟件在需求、設(shè)計、開發(fā)和測試等過程中存在缺陷和弱點,進而產(chǎn)生能被利用的漏洞,影響安全性。通用漏洞主要包括溢出漏洞、拒絕服務(wù)、功能濫用、暴力破解、認證繞過、SQL注入、跨站腳本、客戶端攻擊、網(wǎng)絡(luò)攻擊、用戶輸入、信息泄露、安全審計、惡意代碼等。下面將對主要的漏洞進行介紹。
(1)緩沖區(qū)溢出漏洞
緩沖區(qū)溢出漏洞是一種在軟件中最易發(fā)生的漏洞。它發(fā)生的原理是,由于軟件在處理用戶數(shù)據(jù)時使用了不限邊界的拷貝,導致程序內(nèi)部一些關(guān)鍵的數(shù)據(jù)被覆蓋,引發(fā)了安全問題,嚴重的緩沖區(qū)溢出漏洞會使得程序被利用而安裝上木馬或病毒。
(2)格式化字符串漏洞
格式化字符串漏洞是由于程序的數(shù)據(jù)輸出函數(shù)中對輸出數(shù)據(jù)的格式解析不當而引發(fā)的??梢员缓诳屠玫臄?shù)據(jù)輸出函數(shù)一般具有3個特性:參數(shù)個數(shù)不固定造成訪問越界數(shù)據(jù)、利用%n格式符寫入跳轉(zhuǎn)地址和利用附加格式符控制跳轉(zhuǎn)地址的值。
(3)指針覆蓋漏洞
由于程序在運行中往往會將來自于程序外部的數(shù)據(jù)也存進內(nèi)存中,如果某些數(shù)據(jù)恰好覆蓋了程序的指針,那么程序的執(zhí)行流程會被這些外部的數(shù)據(jù)所控制,這就是指針覆蓋漏洞。
(4)SQL 注入漏洞
SQL注入漏洞將包含了某種目的的SQL語句,通過關(guān)鍵變量插入到軟件中正常的數(shù)據(jù)庫操作語句中。軟件一啟動就會產(chǎn)生注入漏洞,從而引發(fā)一系列的安全隱患。
(5)Bypass漏洞
Bypass漏洞是一個大類,包含了很多小類,這些小類有一個共同的特點,就是這些出現(xiàn)問題的軟件在使用上都存在對用戶使用的限制,而Bypass漏洞就可以繞過軟件的限制,使得軟件的限制形同虛設(shè)。
(6)信息泄漏漏洞
信息泄漏漏洞主要分為兩種:本地式信息泄漏漏洞和遠程式信息泄漏漏洞。本地式信息泄漏漏洞是指當用戶在自己的計算機系統(tǒng)上安裝使用了某個軟件后,該軟件生成的文件會將用戶計算機系統(tǒng)上的其他數(shù)據(jù)信息在未經(jīng)用戶許可的情況下,擅自保存到文件中。當該文件被惡意攻擊者獲得后,惡意攻擊者就可以借助該漏洞獲得用戶計算機系統(tǒng)的信息,從而造成用戶信息被泄漏;遠程式信息泄漏漏洞常見于提供遠程網(wǎng)絡(luò)服務(wù)的軟件。惡意攻擊者可以通過該漏洞獲取遠程服務(wù)器或者系統(tǒng)上的涉密信息,進而引發(fā)經(jīng)濟或者政治上的巨大損失。
傳統(tǒng)軟件開發(fā)生命周期,主要從軟件功能實現(xiàn)的角度出發(fā),其基本目的是如何合理地組織開發(fā)流程以高效地完成軟件的各項功能,通常只是注重軟件功能的定義、實現(xiàn)與測試,安全策略沒有得到充分的考慮。即使是在測試環(huán)節(jié)考慮到軟件系統(tǒng)的安全性,也往往是在編碼完成后進行,而沒有將軟件安全的思想貫穿到軟件開發(fā)的整個過程。對比而言,安全軟件開發(fā)生命周期是將安全原則滲透在整個軟件開發(fā)的生命周期中,即在每個開發(fā)階段均需要考慮安全性。安全軟件開發(fā)生命周期是通過軟件開發(fā)的各個步驟來確保軟件的安全性,其目的是確保安全的軟件得以成功實現(xiàn)。在軟件安全開發(fā)周期的每一個階段都需要應用安全風險管理。只有保證安全風險管理貫徹在整個開發(fā)周期中,才能保證軟件的安全性。
近年來,眾多公司投入了大量的資金進行軟件安全工程的研究,并且形成了3種高效的管理模式,即OWASP的 CLASP、微軟的 SDL和 McGraw的 Touchpoints[2]。
其中微軟公司提出的SDL(security development lifecycle)是從安全角度指導軟件開發(fā)過程的管理模式。這一過程包括一系列基于安全的行為,并將它們分配至軟件開發(fā)的各個階段,這些行為包括:在設(shè)計階段對危險的模式進行改善、在編碼階段使用靜態(tài)編碼分析工具以及在安全推進工作中進行產(chǎn)品代碼檢查和安全測試。在軟件被釋出前,它還必須經(jīng)過評審小組的安全審核,與未經(jīng)SDL模式開發(fā)出的產(chǎn)品相比,SDL模式可令產(chǎn)品在對外發(fā)行后發(fā)現(xiàn)安全漏洞的幾率顯著降低[3]。
SDL的核心理念就是將軟件安全的考慮集成在軟件開發(fā)的每一個階段,如圖1所示,通過對需求分析、設(shè)計、編碼、測試和維護各階段進行約束來實現(xiàn)軟件的安全管理。
SDL作為微軟提出的軟件安全開發(fā)周期,它主要適用于軟件開發(fā)公司,并不完全適用于運營商。作為軟件采購者和服務(wù)提供者,運營商位于軟件開發(fā)商和用戶二者之間,在軟件開發(fā)的進程中,需要收集并分析用戶的需求,通過模擬使用環(huán)境等一系列因素向軟件開發(fā)商提出具體的要求,在軟件開發(fā)周期中要負責軟件功能的制定,其后需要根據(jù)用戶對軟件的反映來進一步與軟件開發(fā)商溝通,以對應用軟件進行完善。
借鑒業(yè)界成熟的安全開發(fā)周期思路,運營商可針對自身情況設(shè)計自己的應用軟件安全開發(fā)周期。從需求、設(shè)計、開發(fā)、測試、部署等階段,為運營商自己和開發(fā)廠商制定應遵循的安全原則與安全要求,確保應用軟件在交付使用后能穩(wěn)定、可靠、安全地為用戶提供服務(wù)。
(1)需求階段
在需求階段中,運營商應該在功能需求的提煉、軟件功能與廠商協(xié)商的基礎(chǔ)上,找出關(guān)鍵的安全對象,考慮如何在開發(fā)流程中集成安全性,分析軟件風險及評估項目代價,最終形成開發(fā)計劃,同時,在提升軟件安全性的同時盡量減少對計劃和日程的影響。在此階段工作中,運營商應該充分發(fā)揮主要地位,結(jié)合企業(yè)自身安全標準和要求,將安全需求和功能需求相融合,最終以技術(shù)規(guī)范書的形式,在合同中予以確定。
(2)設(shè)計階段
設(shè)計階段主要將需求轉(zhuǎn)變?yōu)檐浖愂觯ū磉_),包括概要設(shè)計和詳細設(shè)計。其中概要設(shè)計關(guān)注于如何將需求轉(zhuǎn)換成數(shù)據(jù)和軟件框架,詳細設(shè)計關(guān)注于將框架逐步精細化為具體的數(shù)據(jù)結(jié)構(gòu)和軟件的算法表達,設(shè)計階段的安全要求主要目的是將各項安全需求轉(zhuǎn)變成具體的安全要求。在此階段中,運營商主要負責根據(jù)軟件的應用環(huán)境和功能提出身份認證、會話管理、訪問控制、權(quán)限管理、日志記錄、數(shù)據(jù)存儲與傳輸?shù)榷鄠€項目的開發(fā)要求,并在此基礎(chǔ)上協(xié)助軟件開發(fā)商進行概要設(shè)計框架的構(gòu)建,至于詳細設(shè)計環(huán)節(jié),則主要交予軟件開發(fā)商來完成。
圖1 SDL開發(fā)模式
(3)開發(fā)階段
開發(fā)階段是軟件開發(fā)生命周期的重要階段,與軟件廠商不同,運營商在此環(huán)節(jié)中并不實際參與。但是,應該在需求分析或者設(shè)計中應明確地提出此階段的一些安全要求,如輸入驗證、輸出管理、內(nèi)存管理、異常管理等。需要注意的是在此階段,除應滿足設(shè)計階段提出的安全要求外,還應注意使用安全的編碼方法,確保軟件的交付質(zhì)量,避免因為編碼缺陷給應用軟件引入安全漏洞。
(4)測試階段
測試階段是軟件開發(fā)過程的重要組成部分,主要確認一個軟件的品質(zhì)或性能是否符合需求、設(shè)計和開發(fā)階段的各項要求,是對軟件需求分析、設(shè)計規(guī)格說明和編碼的最終復審,是軟件質(zhì)量保證的關(guān)鍵步驟。在測試階段中,電信運營商也需要承擔一定的工作。有別于軟件廠商在此階段主要針對代碼實現(xiàn)和設(shè)計以及需求階段的傳統(tǒng)軟件測試,電信運營商還應該開展安全驗收測試工作,主要包括應用軟件所在環(huán)境的安全測試(如所處網(wǎng)絡(luò)環(huán)境、主機操作系統(tǒng)等),其次,采用黑盒測試對應用軟件的身份認證有效性、授權(quán)管理有效性、訪問控制可用性、日志審計有效性及完整性等內(nèi)容進行測試,有條件的運營商甚至可以采用白盒測試,也就是業(yè)界常說的代碼審核來測試應用軟件的安全性。因為應用軟件一旦上線往往將直接面向用戶,所以運營商測試階段需要盡可能發(fā)現(xiàn)問題和整改問題,進而保障應用軟件在現(xiàn)網(wǎng)的安全運行。
(5)部署階段
部署階段主要包括將應用軟件從測試環(huán)境搬遷到生產(chǎn)環(huán)境以及與各接口應用的聯(lián)調(diào)工作。此階段應在測試階段的基礎(chǔ)上,對應用軟件和其所處環(huán)境進行必要的安全加固,部署后需要對整個應用軟件系統(tǒng)進行全面的安全評估檢查,評估合格者方能允許上線運行。
從項目初期就考慮安全問題,并將安全意識貫穿于整個應用軟件的開發(fā)生命周期中,是電信運營商解決應用軟件安全問題的重要思路之一。
1 俞優(yōu),顧健,李毅.Web應用安全現(xiàn)狀分析及防護建議.信息網(wǎng)絡(luò)安全,2010(7)
2 Bart De Win,Riccardo Scandariato,Koen Buyens.On the secure software development process:CLASP,SDL and touchpoints compared.Information and Software Technology,2009,51(7)
3 Linper S.The trustworthy computing security development lifecycle.Information Theory,2004