簡單得說:軟件缺陷就是軟件bug。軟件漏洞屬于軟件缺陷的一類??梢詺w類為軟件安全方面的缺陷。
概念區別
在計算機行業常常叫它Bug,指計算機軟件或程序存在某種破壞正常運行能力的問題、錯誤,或者隱藏的功能缺陷。
是指軟件在設計、實現、配置策略及使用過程中出現的缺陷,它可能導致攻擊者在未授權的情況下訪問或破壞系統。
從概念上看:其實缺陷就是軟件會出故障的點,而漏洞是,軟件被攻擊者攻擊才會出故障的點。
產生根源
軟件缺陷產生的根源主要包括:測試策略,過程、工具和方法,團隊/人,缺乏組織和通訊,硬件,軟件,工作環境等。
測試策略:主要是測試范圍不足,測試目標偏離引起。
過程,工具和方法:主要是需求收集無效,項目管理過程不夠(比如:沒有做變更控制,未做風險管理)。
團隊/人:主要是項目團隊職責不清(要么交叉職責,要么出現空缺),人員缺乏培訓(尤其是沒有經驗的人員),士氣低下或動機不純。
缺乏組織和通訊:蒙頭開發導致和用戶溝通不夠,團隊管理失敗。
硬件:主要是對硬件配置不對,硬件固件本身存在缺陷,處理器本身的缺陷。
軟件:主要是軟件配置不對,對操作系統的資源的獲取和釋放控制不好,編譯器錯誤。
工作環境:主要是團隊變動,預算削減,環境惡劣(比如:噪音很大)
軟件漏洞產生根源也包括在軟件缺陷產生之中。但相對范圍較小,上面有一些過程就不會產生漏洞,只會產生缺陷。
需求收集不足:只會導致用戶使用功能不足,不會產生漏洞。
和用戶溝通不夠:這也只會導致軟件使用缺陷,不會產生漏洞。
防范缺陷
無論是軟件公司、軟件開發人員,還是用戶都不希望軟件出現缺陷。然而軟件只要是人設計的,都有可能出現缺陷。那我們該如何來防范呢?
前面講了缺陷產生的根源,我們可以根據根源產生的原因,進行有效的管控。
進行有效團隊管理、項目管理,做好計劃,監督,檢查,改進的工作。
對測試過程進行嚴格的管控,做到不偏不漏。
做好有效的缺陷分析,找出軟硬件和代碼的缺陷并修正。
做好代碼安全審計,不能讓代碼中存在安全漏洞。
軟件開發完成到發布使用,只是軟件生命周期的開始。在用戶使用過程中依然會發現軟件公司未發現的軟件缺陷。所以,我們要對軟件的全生命周期(設計、開發、運營、更新、停止)進行跟蹤,一旦發現缺陷,立即進行補丁修補。
軟件開發過程中可以吸取之前軟件發生過的缺陷的經驗教訓。我們在自己的軟件過程中盡量避免犯同類的錯誤。否者,我們的軟件注定是一個失敗的開始。
在計算機系統運營過程中,黑客們的攻擊手段眾多。我們需要利用計算機網絡安全的安全系統來對軟件進行邊界的安全保護。
總結
產生軟件的缺陷(含軟件漏洞)對軟件來說都是一件不好的事情。我們除了認識他們的區別之外,更重要是認清的它們的根源,然后盡量減少他們的發生。