李鎮(zhèn)京
(安徽省住房和城鄉(xiāng)建設(shè)信息中心,安徽 合肥 230091)
近年來隨著信息化技術(shù)的迅猛發(fā)展,全省住房城鄉(xiāng)建設(shè)領(lǐng)域根據(jù)國家“互聯(lián)網(wǎng)+政務(wù)”工作的推進(jìn)和部署,陸續(xù)建成了一批面向住房城鄉(xiāng)行業(yè)主管部門、服務(wù)對象的業(yè)務(wù)應(yīng)用信息系統(tǒng),這些信息系統(tǒng)為全省全行業(yè)日常信息化辦公提供了信息便利,為政府部門科學(xué)決策提供了數(shù)據(jù)支撐。
在為政府部門提供便利的同時(shí),信息系統(tǒng)的安全問題也日益凸顯,因此在系統(tǒng)建設(shè)生命周期中需要持續(xù)加強(qiáng)安全防護(hù)。需要結(jié)合應(yīng)用開發(fā)流程,充分考慮敏捷、持續(xù)集成、開發(fā)運(yùn)行一體化等應(yīng)用開發(fā)新模式,實(shí)現(xiàn)安全防護(hù)機(jī)制貫穿于全省住房城鄉(xiāng)建設(shè)領(lǐng)域應(yīng)用系統(tǒng)建設(shè)全生命周期。
信息系統(tǒng)的建設(shè),根據(jù)不同分類方式,一般分為立項(xiàng)(系統(tǒng)規(guī)劃)、開發(fā)(系統(tǒng)分析、系統(tǒng)設(shè)計(jì)、系統(tǒng)實(shí)施)、運(yùn)維及消亡四個(gè)階段。但筆者從安全管理角度將其分為六個(gè)階段:需求分析、架構(gòu)設(shè)計(jì)、代碼編寫、測試驗(yàn)證、應(yīng)用部署和運(yùn)行維護(hù),如圖1所示。
圖1 業(yè)務(wù)應(yīng)用系統(tǒng)生命周期
需求分析階段是信息系統(tǒng)建設(shè)的第一步,是信息系統(tǒng)建設(shè)的前期階段。該階段主要是對項(xiàng)目建設(shè)的目標(biāo)任務(wù)、業(yè)務(wù)需求、政策文件、需求描述進(jìn)行收集、分析,也是信息化項(xiàng)目可行性、必要性以及主要業(yè)務(wù)需求的總結(jié)分析。項(xiàng)目可行性研究報(bào)告審議通過后,將根據(jù)業(yè)務(wù)部門的業(yè)務(wù)需求,對新系統(tǒng)進(jìn)行需求方案編寫,形成需求規(guī)格說明書等文檔。
需求分析階段主要是解決為什么要做,要做什么的問題,架構(gòu)設(shè)計(jì)階段是項(xiàng)目組拿到項(xiàng)目任務(wù)(即項(xiàng)目已招標(biāo)完成)后,根據(jù)前期的項(xiàng)目政策文件要求、業(yè)務(wù)需求描述來解決怎么做的問題,是具體實(shí)現(xiàn)的方法和路徑。這個(gè)階段又稱為物理設(shè)計(jì)階段或架構(gòu)設(shè)計(jì)階段,可分為總體設(shè)計(jì)(概要設(shè)計(jì))和詳細(xì)設(shè)計(jì)兩個(gè)子階段,這個(gè)階段的技術(shù)文檔是系統(tǒng)設(shè)計(jì)說明書。
代碼編寫是整個(gè)業(yè)務(wù)應(yīng)用系統(tǒng)開發(fā)過程中最核心也是最實(shí)際的一部分,這個(gè)過程考驗(yàn)的是編程人員對需求和架構(gòu)設(shè)計(jì)的理解,考驗(yàn)的是如何把文字描述轉(zhuǎn)換成二進(jìn)制代碼。具備高效的軟件開發(fā)平臺、代碼安全規(guī)范等是保障軟件代碼編寫的重要支撐,高質(zhì)量的代碼編寫是后續(xù)程序升級、完善、維護(hù)高效運(yùn)行的保障,這個(gè)階段需要形成代碼設(shè)計(jì)文檔。
這個(gè)階段是前期所有階段的一個(gè)里程碑事件,也是業(yè)務(wù)系統(tǒng)進(jìn)行階段性交付的一個(gè)關(guān)鍵階段,是質(zhì)量測試部門通過嚴(yán)格的程序功能、性能測試,以及同需求、設(shè)計(jì)等階段的對比測驗(yàn)系統(tǒng)的一個(gè)質(zhì)量把關(guān)環(huán)節(jié)。測試驗(yàn)證階段一般包括功能測試、性能測試、BUG測試、安全測試等內(nèi)容,系統(tǒng)測試之后寫出系統(tǒng)測試分析報(bào)告。
應(yīng)用部署階段是將設(shè)計(jì)的系統(tǒng)付諸實(shí)施的階段。這一階段的任務(wù)包括服務(wù)器環(huán)境(包括CPU、內(nèi)存、磁盤)、網(wǎng)絡(luò)環(huán)境(IP地址端口映射)、安全環(huán)境(防篡改、防病毒、防入侵)以及數(shù)據(jù)備份環(huán)境(備份策略、備份方式)等軟硬件環(huán)境的準(zhǔn)備和安裝調(diào)試。這個(gè)階段的特點(diǎn)是幾個(gè)互相聯(lián)系、互相制約的任務(wù)同時(shí)展開,需要運(yùn)維人員精心安排、合理組織。應(yīng)用部署階段完成后應(yīng)寫出系統(tǒng)部署文檔說明及使用手冊。
系統(tǒng)部署及投入運(yùn)行后,需要經(jīng)常進(jìn)行維護(hù)和評價(jià),記錄系統(tǒng)運(yùn)行的情況,根據(jù)一定的規(guī)則對系統(tǒng)進(jìn)行必要的修改,評價(jià)系統(tǒng)的工作質(zhì)量和經(jīng)濟(jì)效益。
面對業(yè)務(wù)應(yīng)用系統(tǒng)生存周期里的幾個(gè)階段,我們會遇到以下一些安全問題:
代碼編寫是考驗(yàn)一個(gè)程序員編程“功底”的最核心也是最基礎(chǔ)的一個(gè)方面,筆者根據(jù)十幾年的業(yè)務(wù)應(yīng)用系統(tǒng)項(xiàng)目建設(shè)、運(yùn)維管理經(jīng)驗(yàn)分析,經(jīng)常遇到業(yè)務(wù)應(yīng)用系統(tǒng)XSS注入安全漏洞或出現(xiàn)安全事件后無法查詢到系統(tǒng)運(yùn)行日志等安全問題,而這些安全問題80%是程序代碼編寫不規(guī)范造成的。
業(yè)務(wù)應(yīng)用系統(tǒng)開發(fā)常用的三種框架有Struts2、Spring、Hibernate(ssh), 大多數(shù)業(yè)務(wù)應(yīng)用系統(tǒng)程序是基于這三種開發(fā)框架的一種,進(jìn)行的二次開發(fā),這些開源的第三方程序框架往往由于更新不及時(shí)等原因存在嚴(yán)重安全隱患。以Struts系列框架為例,Struts2從2007年7月23日發(fā)布的第一個(gè)Struts2漏洞S2-001到2017年12月發(fā)布的最新漏洞S2-055,跨度足足有10年,而漏洞的個(gè)數(shù)也升至55個(gè)。分析了Struts2的這55個(gè)漏洞發(fā)現(xiàn),基本上是RCE、XSS、CSRF、DOS、目錄遍歷和其他功能缺陷漏洞等。這些嚴(yán)重的開發(fā)框架漏洞,直接威脅業(yè)務(wù)應(yīng)用系統(tǒng)底層代碼程序的安全,但是部分程序由于太復(fù)雜,底層開發(fā)框架的升級又帶來嚴(yán)重的考驗(yàn)。
如果說前面兩個(gè)問題是業(yè)務(wù)應(yīng)用系統(tǒng)開發(fā)設(shè)計(jì)階段的安全問題,是程序開發(fā)人員的知識儲備、編寫習(xí)慣問題,程序部署環(huán)節(jié)考驗(yàn)的是系統(tǒng)運(yùn)維人員綜合素質(zhì)結(jié)合運(yùn)維能力。程序部署環(huán)節(jié)一般涉及到中間件(如Weblogic、IIS、Appache)及整個(gè)系統(tǒng)部署環(huán)境問題,給運(yùn)維人員(負(fù)責(zé)程序部署的工程師)帶來了一定考驗(yàn)。經(jīng)常遇到工程師在部署程序時(shí)Webconfig文件沒有加密存儲、配置IIS及虛擬目錄過于簡單,沒有對程序目錄讀寫權(quán)限進(jìn)行詳細(xì)設(shè)置、默認(rèn)虛擬目錄沒有禁用等安全問題,給業(yè)務(wù)系統(tǒng)后期安全運(yùn)行帶來了重大隱患。
操作系統(tǒng)、數(shù)據(jù)庫、Office、Pdf軟件、報(bào)表控件等第三方軟件是業(yè)務(wù)應(yīng)用系統(tǒng)部署時(shí)必須同步安裝配置的軟件,但經(jīng)常會有運(yùn)維管理人員在操作系統(tǒng)帳號時(shí)使用默認(rèn)最大權(quán)限的Administrator賬號、使用遠(yuǎn)程桌面的3389進(jìn)行遠(yuǎn)程、關(guān)閉操作系統(tǒng)自帶防火墻等安全問題的存在。
業(yè)務(wù)應(yīng)用系統(tǒng)的安全問題在大多數(shù)情況下是難以避免的,因安全管理員、運(yùn)維管理員等人員的知識水平、責(zé)任心以及業(yè)務(wù)能力有很大的差別,往往導(dǎo)致業(yè)務(wù)系統(tǒng)安全問題頻發(fā)。舉例說,因安全管理要求,數(shù)據(jù)庫服務(wù)器密碼需要每6個(gè)月更改一次,因運(yùn)維管理人員不熟悉Oracle數(shù)據(jù)庫修改,導(dǎo)致一用戶OA辦公系統(tǒng)出現(xiàn)非??裏o法使用,運(yùn)維人員排查了網(wǎng)絡(luò)、服務(wù)器、安全產(chǎn)品等問題,最終發(fā)現(xiàn)是數(shù)據(jù)庫密碼過期問題。
制度的建立是規(guī)范業(yè)務(wù)應(yīng)用系統(tǒng)安全開發(fā)、建設(shè)、運(yùn)行的頂層框架,業(yè)務(wù)應(yīng)用系統(tǒng)的開發(fā)涉及政府部門(業(yè)主方)和軟件開發(fā)企業(yè)(承建方),雙向都需要從自身管理角度出發(fā)制定軟件安全開發(fā)管理的相關(guān)制度,明確安全開發(fā)規(guī)范。如政府部門可以根據(jù)部門實(shí)際需要制定《某行業(yè)業(yè)務(wù)應(yīng)用系統(tǒng)安全開發(fā)管理規(guī)范》《某行業(yè)業(yè)務(wù)應(yīng)用系統(tǒng)建設(shè)管理辦法》等安全制度,安全管理可以從安全管理要求(包括開發(fā)環(huán)境安全、文檔安全、開發(fā)人員安全、源代碼安全等方面)、需求階段安全(包括基本安全、功能安全、數(shù)據(jù)安全等方面)、應(yīng)用安全要求(包括身份認(rèn)證安全、訪問控制安全、系統(tǒng)安全審計(jì)、業(yè)務(wù)邏輯安全等方面)、測試安全要求、部署安全要求四個(gè)方面著手制定。這些制度的建立可以很大程度上減少程序代碼環(huán)境的安全隱患問題,大大提升程序的安全“堅(jiān)固性”。據(jù)筆者單位內(nèi)部管理統(tǒng)計(jì),10個(gè)業(yè)務(wù)應(yīng)用系統(tǒng)開發(fā)中,制定軟件安全開發(fā)管理規(guī)范并嚴(yán)格執(zhí)行的軟件程序代碼安全漏問題會有減少90%以上。
面對以上經(jīng)常發(fā)生的業(yè)務(wù)應(yīng)用系統(tǒng)安全問題,需要從系統(tǒng)建設(shè)全生命周期內(nèi)每個(gè)階段進(jìn)行建設(shè)和加強(qiáng)。結(jié)合應(yīng)用系統(tǒng)建設(shè)的六個(gè)不同階段,筆者建議在安全建設(shè)中實(shí)行“清單”化管理,如圖2所示。
圖2 信息系統(tǒng)生命周期安全建設(shè)架構(gòu)圖
3.2.1 需求分析階段的安全建設(shè)
在需求分析階段需要編寫涵蓋國家和地方法律、法規(guī)、監(jiān)管要求、住房城鄉(xiāng)建設(shè)行業(yè)標(biāo)準(zhǔn)、內(nèi)部規(guī)范的安全要求檢查表,建立安全需求清單,把安全需求融入到應(yīng)用系統(tǒng)建設(shè)需求階段中。
3.2.2 架構(gòu)設(shè)計(jì)階段的安全建設(shè)
根據(jù)需求階段的清單,結(jié)合威脅分析、攻擊態(tài)勢和安全事件數(shù)據(jù),在架構(gòu)層面進(jìn)行應(yīng)用安全架構(gòu)設(shè)計(jì),確保安全需求和安全架構(gòu)貫通。編制覆蓋身份驗(yàn)證、訪問控制、數(shù)據(jù)管控、密碼使用等安全功能的應(yīng)用安全架構(gòu)清單,確保應(yīng)用系統(tǒng)在架構(gòu)中體現(xiàn)應(yīng)用安全基礎(chǔ)能力。
3.2.3 代碼編寫階段的安全建設(shè)
對應(yīng)用開發(fā)人員進(jìn)行安全意識和技能培訓(xùn),確保應(yīng)用開發(fā)人員建立對代碼安全需求的理解,從而在應(yīng)用系統(tǒng)開發(fā)過程中建立良好的安全意識和開發(fā)規(guī)程。優(yōu)化應(yīng)用開發(fā)流程,落實(shí)需求分析、架構(gòu)設(shè)計(jì)、編碼開發(fā)、測試評估等環(huán)節(jié)的安全控制機(jī)制,根據(jù)軟件開發(fā)安全規(guī)范形成代碼編寫規(guī)范清單。實(shí)施涵蓋靜態(tài)應(yīng)用代碼安全測試、動態(tài)應(yīng)用代碼安全測試、交互應(yīng)用代碼安全測試在內(nèi)的應(yīng)用代碼安全測試,實(shí)現(xiàn)代碼安全檢查與應(yīng)用開發(fā)測試的聚合。
3.2.4 測試驗(yàn)證階段的安全建設(shè)
在測試階段需制定符合業(yè)務(wù)應(yīng)用系統(tǒng)安全實(shí)際的測試清單,實(shí)現(xiàn)安全與測試的深度融合。測試時(shí)還需從業(yè)務(wù)系統(tǒng)功能、性能、系統(tǒng)身份管理、訪問控制、權(quán)限執(zhí)行和密碼操作等內(nèi)容進(jìn)行測驗(yàn),確保安全控制機(jī)制在應(yīng)用系統(tǒng)中得到正確使用。
3.2.5 應(yīng)用部署階段的安全建設(shè)
建立應(yīng)用部署規(guī)范和檢查清單,確保應(yīng)用按照安全域劃分正確地部署在基礎(chǔ)設(shè)施環(huán)境中,建立應(yīng)用運(yùn)行環(huán)境規(guī)范和檢查清單,確保應(yīng)用運(yùn)行環(huán)境正確使用網(wǎng)絡(luò)、主機(jī)和云基礎(chǔ)的安全防護(hù)能力,并能夠?qū)?yīng)用的輸入輸出進(jìn)行監(jiān)控。
3.2.6 運(yùn)行維護(hù)階段的安全建設(shè)
建立應(yīng)急響應(yīng)機(jī)制,能夠?qū)?yīng)用漏洞、安全事件進(jìn)行及時(shí)響應(yīng)。建立覆蓋漏洞情報(bào)、漏洞掃描、滲透測試、眾測等在內(nèi)的漏洞收集清單,并反饋到缺陷(BUG)管理平臺和安全防護(hù)平臺,建立漏洞評估和修復(fù)體系。
信息系統(tǒng)建設(shè)是一項(xiàng)復(fù)雜而艱巨的任務(wù),信息系統(tǒng)生命周期內(nèi)六個(gè)階段面臨著不同的安全建設(shè)需求,建立健全安全管理機(jī)制,實(shí)施信息系統(tǒng)生命周期安全建設(shè),實(shí)施六個(gè)階段的“清單”化管理,是切實(shí)提升政府部門信息系統(tǒng)建設(shè)安全能力、系統(tǒng)運(yùn)行生命力的有力保障。