陳波
摘要:隨著計算機網絡技術的不斷發(fā)展,軟件在全社會各行業(yè)得到了廣泛的應用,很大程度上也提高了企業(yè)的生產效率,但是軟件的安全問題也隨著軟件的廣泛應用而漸漸地暴露出來,并且呈現(xiàn)出越來越緊急的態(tài)勢,由于軟件存在的安全漏洞被利用最終導致的企業(yè)損失的利益問題也是越來越多?;诖?,本文提出了基于應用軟件開發(fā)生命周期的安全策略,將安全策略應用到軟件開發(fā)的各個階段中,盡可能減少最終軟件產品中存在的漏洞。
關鍵詞:軟件安全;生命周期;安全策略
中圖分類號:TP393 文獻標識碼:A
文章編號:1009-3044(2019)08-0217-02
軟件的安全問題貫穿了軟件開發(fā)的整個過程,是軟件開發(fā)與維護生命周期的各個環(huán)節(jié)都必須解決的技術問題,本文從軟件開發(fā)的各個階段來提出對應的安全策略。
1 基于生命周期的應用軟件開發(fā)安全策略解析
1.1 需求分析階段的安全策略
需求分析階段主要是從系統(tǒng)的角度理解軟件并評審用于產生計劃估算的軟件范圍是否恰當,在這個階段我們需要通常需要跟業(yè)主方進行當面溝通,去傾聽和挖掘業(yè)主方的需求,然而站在業(yè)主方角度,業(yè)主方通常會使用平舌話的語言來描述需求,而站在技術人員的角度通常會用專業(yè)技術的語言來描述需求,這種情況可能會帶來雙方的理解偏差。我們的安全策略在這個階段是一定要考慮到人性化,用業(yè)主方聽得懂的語言來進行溝通而不是采用技術化的語言,我們還可以采用問卷調查的方式。
1.2 系統(tǒng)設計階段的安全策略
系統(tǒng)設計是基于需求分析的成果,對系統(tǒng)做深層次的分析,從而得出一系列行之有效的系統(tǒng)實現(xiàn)方案,使整個項目在邏輯上和物理上能夠得以實現(xiàn)。系統(tǒng)設計的任務包括構建系統(tǒng)框架,設計系統(tǒng)功能,描述系統(tǒng)流程,建立系統(tǒng)的數(shù)據(jù)模型、接口模型及界面模型,形成系統(tǒng)的邏輯結構,告訴程序員軟件系統(tǒng)應該“怎么做”。
在設計階段引入的漏洞已經成為軟件安全問題的一個主要來源,由于缺乏應用的語義與語境信息,網絡和操作系統(tǒng)層次上提供的安全技術無法使得應用系統(tǒng)免于攻擊。因此,需要在軟件設計階段盡早識別軟件面臨的威脅,提前評估其安全態(tài)勢,并設計相應的應對方案,從而增強軟件系統(tǒng)的安全性。為此,我們提出威脅建模技術進行安全架構分析,依次執(zhí)行分解應用程序,實行攻擊面最小化分析,確定面臨的威脅,進行威脅評估,最后,我們再進行全面的安全架構設計。
1.3系統(tǒng)開發(fā)階段的安全策略
軟件系統(tǒng)開發(fā)階段目標是按照系統(tǒng)設計階段產生的文檔,進行軟件系統(tǒng)功能開發(fā),整合各個功能模塊,實現(xiàn)系統(tǒng)的集成運行,并滿足需求分析階段提出的性能要求,具體任務是將詳細設計的結果轉化為用具體程序設計語言編寫的程序代碼。
1.3.1代碼靜態(tài)分析
代碼靜態(tài)分析,是對源代碼進行分析,找出存在缺陷的代碼,一般會結合靜態(tài)程序分析工具使用,采用機器學習,語義精簡等技術,來檢測類如死鎖、空指針、資源泄露、緩存區(qū)溢出等問題,在這里我們重點是要進行軟件缺陷檢測,挖掘軟件程序潛在的漏洞問題。
1.3.2代碼動態(tài)分析
代碼動態(tài)分析是與靜態(tài)分析技術相對而言的,動態(tài)分析技術一般是通過觀察程序在運行過程中的狀態(tài),如寄存器內容,函數(shù)執(zhí)行結果,內存使用情況等等,分析函數(shù)功能,明確代碼邏輯,挖掘可能存在的漏洞,代碼流和數(shù)據(jù)流通常是動態(tài)調試分析技術關注的兩個方面。動態(tài)調試常用的工具有Debug、WinDbg、Olydbg等。
1.3.3建立安全編碼規(guī)則
在編碼階段,開發(fā)人員的安全意識水平和安全編程能力將直接影響系統(tǒng)自身的安全性和健壯性。規(guī)范對開發(fā)人員的編碼提出統(tǒng)一的安全要求,我們提出以下幾種安全編碼原則:
1.3.3.1最小功能性原則
軟件應該只包含那確實真正需要的功能:(1)只運行明確定義的功能(2)系統(tǒng)調用只在確實需要的時候(3)只在確實需要的時候訪問數(shù)據(jù)。
1.3.3.2最小授權原則
應采用適當?shù)纳矸蒡炞C和權限分配模式,確保程序功能實現(xiàn)嚴格遵循“最小權限”和“需要知道”安全原則。
1.3.3.3謹慎使用多任務和多進程
應盡量使用單任務的程序,如果軟件需要使用多任務和多進程,應同步所有的進程和任務以避免沖突。
1.3.3.4界面輸出最小化
用戶界面應只提供必需的功能,確保用戶不能通過用戶界面直接訪問數(shù)據(jù)或者直接訪問被保護對象。
1.3.3.5代碼應盡量簡單
盡量使用結構化的編程語言,盡量避免使用遞歸和Go to聲明語句,應盡量使用簡單的代碼,清除不必要的功能,防止采用信息隱藏方式進行數(shù)據(jù)保護。
1.3.3.6提供備份機制
為保證運行數(shù)據(jù)的完整性和可用性,應設計有效的備份策略,根據(jù)業(yè)務和系統(tǒng)維護需要提供定期或不定期、自動或手動方式的備份機制。
1.3.3.7其他編碼規(guī)則
其他涉及的安全編碼規(guī)則主要存在于輸入處理、輸出處理、數(shù)據(jù)庫訪問、文件操作、安全特征等方面。
1.4測試與驗證階段安全策略
軟件測試是程序的執(zhí)行過程,目的在于發(fā)現(xiàn)錯誤,一個好的測試用例在于能夠發(fā)現(xiàn)至今尚未發(fā)現(xiàn)的錯誤,一個成功的測試是發(fā)現(xiàn)了至今未發(fā)現(xiàn)錯誤的測試。在測試階段我們著重提出軟件開發(fā)的環(huán)境分離,職責分離:生產環(huán)境對開發(fā)和測試只開放查詢權限;修改權限時需要經過一定的機制來控制記錄,一般只在調試程序時開放修改權限;測試環(huán)境對開發(fā)只開放查詢權限;需要修改權限時要經過確認,一般只在調試程序時開放修改權限;開發(fā)環(huán)境對測試人員只開放查詢權限;以上三個環(huán)境,都由專人負責升版(跑腳本)維護。
實際上,軟件的安全性測試,對測試人員有著極高的專業(yè)素質,不僅要有精湛的攻擊技術,而且能夠具備黑客思維,能夠從軟件的各個方面設計方案來抵御有可能的黑客攻擊,排除有可能的漏洞
1.5發(fā)布與維護階段安全策略
發(fā)布階段是軟件由程序變成成品的階段,在這個階段實施人員應該注重軟件的開發(fā)環(huán)境與生產環(huán)境一致,而在維護階段,我們的維護人員主要是處理系統(tǒng)漏洞,隨著新的黑客技術的不斷產生,任何系統(tǒng)都不會是絕對安全的,所以最終的產品總是會存在漏洞,但是漏洞一旦被發(fā)現(xiàn),我們必須要做出最快的響應,首先我們要確認漏洞產生的原因,并及時的修復漏洞,以免企業(yè)的生產受到威脅,最嚴重甚至導致系統(tǒng)癱瘓,導致企業(yè)的利益受到侵占,一般漏洞被確認后,通常要分為3個階段,首先,發(fā)現(xiàn)漏洞后通知廠商,并將漏洞報告給安全響應中心,然后,確認漏洞并進行風險評估,最后修復漏洞并發(fā)布漏洞補丁,以及做出相應的安全簡報。
2結語
不難看出,安全問題涉及軟件開發(fā)的各個階段,軟件的安全運行在企業(yè)生產過程中起著舉足輕重的作用,這就對軟件開發(fā)的過程提出了更高的要求,必須將安全性考慮到軟件開發(fā)的各個階段中,使得軟件開發(fā)能夠前后呼應,在軟件開發(fā)的初期將安全問題進行全面的分析,在軟件開發(fā)的后期也能夠省出很大的人力和物力,也為軟件成品的安全性提高了堅實的基礎。
參考文獻:
[1] 李昕陳,智李俐.開源軟件安全問題與對策[J].計算機安全,2008(4).
[2] 崔丹丹,張二峰.軟件安全問題初探[A].商場現(xiàn)代化,2009(2).
【通聯(lián)編輯:光文玲】