文|吳海燕 戈金鐘
隨著網(wǎng)絡(luò)的普及,目前幾乎所有的信息化應(yīng)用都是基于網(wǎng)絡(luò)的,軟件技術(shù)主要包括C/S、B/S兩類。近年來(lái)隨著服務(wù)器硬件技術(shù)、網(wǎng)絡(luò)技術(shù)的發(fā)展,B/S應(yīng)用以其開(kāi)放性、通用性、靈活性的優(yōu)點(diǎn),逐步占據(jù)了信息化應(yīng)用開(kāi)發(fā)技術(shù)的主流地位。隨著web應(yīng)用的普及,web應(yīng)用也成為了黑客攻擊的首選目標(biāo),但是,不容樂(lè)觀的是,目前各類web應(yīng)用的安全性并不高。
根據(jù)360發(fā)布的《2015年中國(guó)網(wǎng)站安全報(bào)告》,2015年全年360網(wǎng)站安全檢測(cè)平臺(tái)共掃描各類網(wǎng)站231.2萬(wàn)個(gè),其中,存在安全漏洞的網(wǎng)站為101.5萬(wàn)個(gè),占掃描網(wǎng)站總數(shù)的43.9%,存在高危安全漏洞的網(wǎng)站共有30.8萬(wàn)個(gè),占掃描網(wǎng)站總數(shù)的13.0%。2015年(截至11月18日)補(bǔ)天共收錄的各類網(wǎng)站漏洞總數(shù)為37943個(gè),平均每月3161個(gè)。其中,高危漏洞占比為71.2%;從漏洞性質(zhì)上看,事件型漏洞占86.3%,通用型漏洞占比13.7%。
在此背景下,信息系統(tǒng)所面臨的安全威脅也從網(wǎng)絡(luò)和系統(tǒng)層面的攻擊上移到應(yīng)用層面,近年來(lái)頻發(fā)的web應(yīng)用被攻擊的安全事件,也驗(yàn)證了信息安全的重點(diǎn)上移的趨勢(shì)。網(wǎng)絡(luò)或者系統(tǒng)層面的安全問(wèn)題通??梢酝ㄟ^(guò)打補(bǔ)丁或者使用成熟的安全設(shè)備(如防火墻)來(lái)解決,與之相比,應(yīng)用安全問(wèn)題更難以處理,而且往往要花費(fèi)昂貴的代價(jià)。
考慮到web應(yīng)用是目前信息系統(tǒng)的主要應(yīng)用類型,本文將以web應(yīng)用為例,對(duì)信息系統(tǒng)的安全開(kāi)發(fā)方法進(jìn)行探討。
開(kāi)源Web應(yīng)用安全計(jì)劃(Open Web Application Security Project,OWASP)是一個(gè)致力于對(duì)抗不安全的Web應(yīng)用軟件的非營(yíng)利組織,在Web應(yīng)用安全方面做了很多工作。隨著存在安全隱患的Web應(yīng)用程序數(shù)量的增長(zhǎng),OWASP也總結(jié)出了Web應(yīng)用程序的十大安全漏洞。在這個(gè)10大安全漏洞中,不但包括了Web應(yīng)用程序的脆弱性介紹,還包括了OWASP的建議內(nèi)容,幫助程序開(kāi)發(fā)人員和企業(yè)盡量避免這些脆弱點(diǎn)給企業(yè)系統(tǒng)帶來(lái)的風(fēng)險(xiǎn)。下面列舉了2013年版的OWASP十大安全漏洞。
注入式攻擊。Web應(yīng)用可能使用許多外部系統(tǒng),比如系統(tǒng)調(diào)用、SQL database和模版系統(tǒng)。Web 應(yīng)用使用這些程序時(shí)往往要傳入?yún)?shù)。惡意代碼可以通過(guò)參數(shù)傳給解釋程序,然后被執(zhí)行。
失效的賬戶和session管理。會(huì)話令牌,比如密碼、鑰匙和會(huì)話cookies需要得到保護(hù),否則認(rèn)證機(jī)制形同虛設(shè)。
跨站點(diǎn)腳本攻擊。瀏覽器執(zhí)行來(lái)自站點(diǎn)的代碼,比如javascript、 fl ash等。攻擊者將可執(zhí)行的惡意代碼腳本作為輸入的一部分傳給Web應(yīng)用,這些腳本然后在其他用戶的瀏覽器中運(yùn)行,從而對(duì)使用它的其他用戶造成損害。造成的結(jié)果是盜取會(huì)話令牌,攻擊機(jī)器或者哄騙用戶。
不安全的直接對(duì)象引用。當(dāng)開(kāi)發(fā)人員暴露一個(gè)對(duì)內(nèi)部實(shí)現(xiàn)對(duì)象的引用時(shí),例如,一個(gè)文件、目錄或者數(shù)據(jù)庫(kù)密匙, 就會(huì)產(chǎn)生一個(gè)不安全的直接對(duì)象引用。在沒(méi)有訪問(wèn)控制檢測(cè)或其他保護(hù)時(shí),攻擊者會(huì)操控 這些引用去訪問(wèn)未授權(quán)數(shù)據(jù)。
不安全的配置管理。網(wǎng)站和應(yīng)用程序服務(wù)器有許多安全相關(guān)的配置選項(xiàng)給服務(wù)器帶來(lái)的潛在的危險(xiǎn)。
敏感信息泄露。許多Web應(yīng)用程序沒(méi)有正確保護(hù)敏感數(shù)據(jù),如信用卡,身份驗(yàn)證憑據(jù)等。
失效的訪問(wèn)控制。很多站點(diǎn)的訪問(wèn)控制策略過(guò)于復(fù)雜或者實(shí)現(xiàn)不當(dāng)。攻擊者可以看到自己本不應(yīng)當(dāng)看到的內(nèi)容,并且提高自己的權(quán)限。通過(guò)正確的實(shí)現(xiàn)訪問(wèn)控制,確保用戶只能看到自己有權(quán)限看到的東西。
跨站請(qǐng)求偽造(CSRF)。一個(gè)跨站請(qǐng)求偽造攻擊迫使登錄用戶的瀏覽器將偽造的HTTP請(qǐng)求發(fā)送到一個(gè)存在漏洞的web應(yīng)用程序。這就允許了攻擊者迫使用戶瀏覽器向存在漏洞的應(yīng)用程序發(fā)送請(qǐng)求,而這些請(qǐng)求會(huì)被應(yīng)用程序認(rèn)為是用戶的合法請(qǐng)求。
使用含有已知漏洞的組件。應(yīng)用程序使用帶有已知漏洞的組件會(huì)破壞應(yīng)用程序防御系統(tǒng),并使一系列可能的攻擊和影響成為可能。
未驗(yàn)證的重定向和轉(zhuǎn)發(fā)。Web應(yīng)用程序經(jīng)常將用戶重定向和轉(zhuǎn)發(fā)到其他網(wǎng)頁(yè)和網(wǎng)站,并且利用不可信的數(shù)據(jù)去判定目的頁(yè)面。
如果待web應(yīng)用開(kāi)發(fā)完成后才著手考慮安全問(wèn)題,那么消耗的代價(jià)是巨大的,只能取得事倍功半的效果,業(yè)界一直認(rèn)可的做法是在將安全考慮嵌入到整個(gè)軟件開(kāi)發(fā)生命周期,也就是 secure Software Development Life Cycle(S SDLC)的方法。EDUCAUSE的SECURITY INITIAL的應(yīng)用安全建議提出了web應(yīng)用安全開(kāi)發(fā)的8個(gè)步驟,包括規(guī)范建設(shè)、人員培訓(xùn)、安全需求分析、確定組織安全角色、將安全作為開(kāi)發(fā)或者購(gòu)買軟件的必需環(huán)節(jié)、應(yīng)用實(shí)施、運(yùn)行維護(hù)、應(yīng)用終止。美國(guó)國(guó)家標(biāo)準(zhǔn)技術(shù)研究院(National Institute of Standards and Technoligy ,NIST)的標(biāo)準(zhǔn)規(guī)范文件從應(yīng)用的啟動(dòng)、需求、開(kāi)發(fā)、部署、運(yùn)行幾個(gè)階段提出了相應(yīng)的安全建議。微軟提出了安全軟件開(kāi)發(fā)生命周期的方法。
這些標(biāo)準(zhǔn)和建議是很有借鑒意義的,但過(guò)于復(fù)雜,在信息化過(guò)程中完全實(shí)現(xiàn)是不現(xiàn)實(shí)的。為此,美國(guó)的GaryMcGraw教授提出了基于安全接觸點(diǎn)的軟件安全的工程化方法,Gary McGraw博士總結(jié)出了七個(gè)接觸點(diǎn),即代碼審核、體系結(jié)構(gòu)風(fēng)險(xiǎn)分析、滲透測(cè)試、基于風(fēng)險(xiǎn)的安全測(cè)試、濫用案例、安全需求和安全操作。無(wú)論采用什么樣的軟件開(kāi)發(fā)方法學(xué),你都可以將這些接觸點(diǎn)應(yīng)用到你的開(kāi)發(fā)生命周期中,而不需要完全改變你的軟件開(kāi)發(fā)生命周期。這些接觸點(diǎn)從“黑帽子”(攻擊和破解)和“白帽子”(防御和保護(hù))兩個(gè)方面綜合地考察軟件開(kāi)發(fā)中可能出現(xiàn)的問(wèn)題,結(jié)合了它們的開(kāi)發(fā)生命周期就成為“安全的”開(kāi)發(fā)生命周期?!鞍踩摹遍_(kāi)發(fā)生命周期能夠在每一個(gè)開(kāi)發(fā)階段上盡可能地避免和消除漏洞,同時(shí)又保留了你熟悉的工作方式。
這些標(biāo)準(zhǔn)和建議是很有借鑒意義的,但過(guò)于復(fù)雜,在信息化過(guò)程中完全實(shí)現(xiàn)是不現(xiàn)實(shí)的。而且這些流程都由國(guó)外的組織提出,并沒(méi)有考慮中國(guó)關(guān)于信息系統(tǒng)安全保護(hù)相關(guān)的標(biāo)準(zhǔn)和法律法規(guī)。因此我們結(jié)合自己的經(jīng)驗(yàn)提出了適合中國(guó)信息化發(fā)展階段特點(diǎn)的、基于安全控制點(diǎn)的軟件安全保障方法,基于安全控制點(diǎn)的軟件開(kāi)發(fā)流程,流程模型如圖1所示。
在此流程中,我們?cè)谛畔⑾到y(tǒng)生命周期的五個(gè)階段分別設(shè)置了安全控制點(diǎn)并建立了所需的技術(shù)和管理規(guī)范:
立項(xiàng)階段。立項(xiàng)階段的主要任務(wù)是明確信息系統(tǒng)的安全保護(hù)等級(jí),以便根據(jù)信息系統(tǒng)的重要性實(shí)施分等級(jí)的安全防護(hù)。參考規(guī)范是《信息系統(tǒng)分級(jí)規(guī)范》。
設(shè)計(jì)階段。設(shè)計(jì)階段的主要任務(wù)是明確信息系統(tǒng)的安全需求,設(shè)計(jì)相應(yīng)的安全防護(hù)措施。信息系統(tǒng)的安全需求來(lái)自于兩個(gè)方面。一方面是來(lái)自于對(duì)于相應(yīng)級(jí)別的信息系統(tǒng)的規(guī)范要求,目前主要是等保的相關(guān)要求及校內(nèi)規(guī)范的要求,另一方面來(lái)自于信息系統(tǒng)本身的一些特殊的風(fēng)險(xiǎn)和安全需求。建議建立技術(shù)規(guī)范,如《軟件安全技術(shù)規(guī)范》、《軟件安全準(zhǔn)入規(guī)范》等,作為此階段的參考規(guī)范。
圖1 高校信息系統(tǒng)生命周期安全管理流程
開(kāi)發(fā)階段。開(kāi)發(fā)階段可通過(guò)程序員培訓(xùn)、制定安全編碼規(guī)范、開(kāi)發(fā)常用的安全控件等方法提升代碼質(zhì)量,也可以在開(kāi)發(fā)階段引入單元檢查、代碼掃描等安全工具,及早發(fā)現(xiàn)bug,進(jìn)行代碼修補(bǔ),提高修補(bǔ)效率、降低修補(bǔ)成本。
上線實(shí)施階段。此階段主要的安全控制點(diǎn)是上線前的安全檢查,參考規(guī)范是《軟件安全技術(shù)規(guī)范》、《軟件安全準(zhǔn)入規(guī)范》等。通過(guò)安全檢查的應(yīng)用才允許投入運(yùn)行。
運(yùn)行階段。在系統(tǒng)運(yùn)行階段,安全管理員會(huì)定期進(jìn)行應(yīng)用安全掃描,發(fā)現(xiàn)高危漏洞后會(huì)反饋給項(xiàng)目負(fù)責(zé)人進(jìn)行漏洞修復(fù)。在系統(tǒng)運(yùn)行階段,安全管理員會(huì)隨時(shí)進(jìn)行漏洞跟蹤,發(fā)現(xiàn)應(yīng)用使用的控件、框架等出現(xiàn)安全漏洞需要修復(fù)時(shí),會(huì)及時(shí)將漏洞信息反饋給項(xiàng)目負(fù)責(zé)人進(jìn)行漏洞修復(fù)。