文|吳海燕 戈金鐘

隨著網絡的普及,目前幾乎所有的信息化應用都是基于網絡的,軟件技術主要包括C/S、B/S兩類。近年來隨著服務器硬件技術、網絡技術的發展,B/S應用以其開放性、通用性、靈活性的優點,逐步占據了信息化應用開發技術的主流地位。隨著web應用的普及,web應用也成為了黑客攻擊的首選目標,但是,不容樂觀的是,目前各類web應用的安全性并不高。
根據360發布的《2015年中國網站安全報告》,2015年全年360網站安全檢測平臺共掃描各類網站231.2萬個,其中,存在安全漏洞的網站為101.5萬個,占掃描網站總數的43.9%,存在高危安全漏洞的網站共有30.8萬個,占掃描網站總數的13.0%。2015年(截至11月18日)補天共收錄的各類網站漏洞總數為37943個,平均每月3161個。其中,高危漏洞占比為71.2%;從漏洞性質上看,事件型漏洞占86.3%,通用型漏洞占比13.7%。
在此背景下,信息系統所面臨的安全威脅也從網絡和系統層面的攻擊上移到應用層面,近年來頻發的web應用被攻擊的安全事件,也驗證了信息安全的重點上移的趨勢。網絡或者系統層面的安全問題通常可以通過打補丁或者使用成熟的安全設備(如防火墻)來解決,與之相比,應用安全問題更難以處理,而且往往要花費昂貴的代價。
考慮到web應用是目前信息系統的主要應用類型,本文將以web應用為例,對信息系統的安全開發方法進行探討。
開源Web應用安全計劃(Open Web Application Security Project,OWASP)是一個致力于對抗不安全的Web應用軟件的非營利組織,在Web應用安全方面做了很多工作。隨著存在安全隱患的Web應用程序數量的增長,OWASP也總結出了Web應用程序的十大安全漏洞。在這個10大安全漏洞中,不但包括了Web應用程序的脆弱性介紹,還包括了OWASP的建議內容,幫助程序開發人員和企業盡量避免這些脆弱點給企業系統帶來的風險。下面列舉了2013年版的OWASP十大安全漏洞。
注入式攻擊。Web應用可能使用許多外部系統,比如系統調用、SQL database和模版系統。Web 應用使用這些程序時往往要傳入參數。惡意代碼可以通過參數傳給解釋程序,然后被執行。
失效的賬戶和session管理。會話令牌,比如密碼、鑰匙和會話cookies需要得到保護,否則認證機制形同虛設。
跨站點腳本攻擊。瀏覽器執行來自站點的代碼,比如javascript、 fl ash等。攻擊者將可執行的惡意代碼腳本作為輸入的一部分傳給Web應用,這些腳本然后在其他用戶的瀏覽器中運行,從而對使用它的其他用戶造成損害。造成的結果是盜取會話令牌,攻擊機器或者哄騙用戶。
不安全的直接對象引用。當開發人員暴露一個對內部實現對象的引用時,例如,一個文件、目錄或者數據庫密匙, 就會產生一個不安全的直接對象引用。在沒有訪問控制檢測或其他保護時,攻擊者會操控 這些引用去訪問未授權數據。
不安全的配置管理。網站和應用程序服務器有許多安全相關的配置選項給服務器帶來的潛在的危險。
敏感信息泄露。許多Web應用程序沒有正確保護敏感數據,如信用卡,身份驗證憑據等。
失效的訪問控制。很多站點的訪問控制策略過于復雜或者實現不當。攻擊者可以看到自己本不應當看到的內容,并且提高自己的權限。通過正確的實現訪問控制,確保用戶只能看到自己有權限看到的東西。
跨站請求偽造(CSRF)。一個跨站請求偽造攻擊迫使登錄用戶的瀏覽器將偽造的HTTP請求發送到一個存在漏洞的web應用程序。這就允許了攻擊者迫使用戶瀏覽器向存在漏洞的應用程序發送請求,而這些請求會被應用程序認為是用戶的合法請求。

使用含有已知漏洞的組件。應用程序使用帶有已知漏洞的組件會破壞應用程序防御系統,并使一系列可能的攻擊和影響成為可能。
未驗證的重定向和轉發。Web應用程序經常將用戶重定向和轉發到其他網頁和網站,并且利用不可信的數據去判定目的頁面。
如果待web應用開發完成后才著手考慮安全問題,那么消耗的代價是巨大的,只能取得事倍功半的效果,業界一直認可的做法是在將安全考慮嵌入到整個軟件開發生命周期,也就是 secure Software Development Life Cycle(S SDLC)的方法。EDUCAUSE的SECURITY INITIAL的應用安全建議提出了web應用安全開發的8個步驟,包括規范建設、人員培訓、安全需求分析、確定組織安全角色、將安全作為開發或者購買軟件的必需環節、應用實施、運行維護、應用終止。美國國家標準技術研究院(National Institute of Standards and Technoligy ,NIST)的標準規范文件從應用的啟動、需求、開發、部署、運行幾個階段提出了相應的安全建議。微軟提出了安全軟件開發生命周期的方法。
這些標準和建議是很有借鑒意義的,但過于復雜,在信息化過程中完全實現是不現實的。為此,美國的GaryMcGraw教授提出了基于安全接觸點的軟件安全的工程化方法,Gary McGraw博士總結出了七個接觸點,即代碼審核、體系結構風險分析、滲透測試、基于風險的安全測試、濫用案例、安全需求和安全操作。無論采用什么樣的軟件開發方法學,你都可以將這些接觸點應用到你的開發生命周期中,而不需要完全改變你的軟件開發生命周期。這些接觸點從“黑帽子”(攻擊和破解)和“白帽子”(防御和保護)兩個方面綜合地考察軟件開發中可能出現的問題,結合了它們的開發生命周期就成為“安全的”開發生命周期。“安全的”開發生命周期能夠在每一個開發階段上盡可能地避免和消除漏洞,同時又保留了你熟悉的工作方式。
這些標準和建議是很有借鑒意義的,但過于復雜,在信息化過程中完全實現是不現實的。而且這些流程都由國外的組織提出,并沒有考慮中國關于信息系統安全保護相關的標準和法律法規。因此我們結合自己的經驗提出了適合中國信息化發展階段特點的、基于安全控制點的軟件安全保障方法,基于安全控制點的軟件開發流程,流程模型如圖1所示。
在此流程中,我們在信息系統生命周期的五個階段分別設置了安全控制點并建立了所需的技術和管理規范:
立項階段。立項階段的主要任務是明確信息系統的安全保護等級,以便根據信息系統的重要性實施分等級的安全防護。參考規范是《信息系統分級規范》。
設計階段。設計階段的主要任務是明確信息系統的安全需求,設計相應的安全防護措施。信息系統的安全需求來自于兩個方面。一方面是來自于對于相應級別的信息系統的規范要求,目前主要是等保的相關要求及校內規范的要求,另一方面來自于信息系統本身的一些特殊的風險和安全需求。建議建立技術規范,如《軟件安全技術規范》、《軟件安全準入規范》等,作為此階段的參考規范。

圖1 高校信息系統生命周期安全管理流程
開發階段。開發階段可通過程序員培訓、制定安全編碼規范、開發常用的安全控件等方法提升代碼質量,也可以在開發階段引入單元檢查、代碼掃描等安全工具,及早發現bug,進行代碼修補,提高修補效率、降低修補成本。
上線實施階段。此階段主要的安全控制點是上線前的安全檢查,參考規范是《軟件安全技術規范》、《軟件安全準入規范》等。通過安全檢查的應用才允許投入運行。
運行階段。在系統運行階段,安全管理員會定期進行應用安全掃描,發現高危漏洞后會反饋給項目負責人進行漏洞修復。在系統運行階段,安全管理員會隨時進行漏洞跟蹤,發現應用使用的控件、框架等出現安全漏洞需要修復時,會及時將漏洞信息反饋給項目負責人進行漏洞修復。