7.4.2 軟件安壘測試
1.軟件安全測試基本概念
一般來說,對安全性要求不高的軟件,其安全性測試可以混在單元測試、集成測試、系統測試之中一起做。但是對于安全性要較高要求的軟件,則必須做專門的安全性測試,以便在部署之前預防并識別軟件的安全問題。
顯然,傳統的軟件測試重點在于功能測試,其強調軟件的肯定需求,強調軟件應當做什么。但是,在工程項目中,這種軟件測試并不能用來發現軟件中的安全缺陷,不能用來驗證軟件安全性。因此,需要考慮采用專門的安全測試來保證軟件安全性。事實上,軟件安全性測試技術有著與其他傳統測試類型不同的關注重點。相比傳統軟件測試,軟件安全測試的重點在于軟件的否定需求,安全性測試不但強調軟件應當做什么,而且更加強調軟件不應該做什么。例如,未授權用戶不能訪問系統數據。
隨著軟件技術的發展,安全性作為軟件系統的質量屬性受到越來越多的重視。軟件安全測試是確定軟件的安全特性實現是否與預期設計一致的過程,是驗證軟件安全等級和識別潛在安全缺陷的過程,檢查軟件系統是否具有一定程度的保護機制和防止受到非法侵入的能力。
安全性測試應該以攻擊者所有可能的方式探測系統,尋找軟件中可以被利用的弱點。安全性測試在由風險分析階段發現的系統風險指導時最有效。這意味著安全性測試是一種創造性的測試形式,它受限于已識別的風險和測試人員的安全專業知識。
實踐證明,代碼覆蓋范圍是理解一組測試能發現多少系統缺陷的度量標準。對于安全性測試,代碼覆蓋范圍扮演了更關鍵的角色。簡而言之,如果程序的某個模塊沒有被測試,則其安全性就應該受到懷疑。一個明顯的風險是未經測試的代碼可能會包含特洛伊木馬,表面上無害的代碼會由此進行攻擊。更為普遍的風險是未經驗證的代碼含有嚴重的錯誤,這些錯誤可能被攻擊者利用。