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