- C和C++安全編碼(原書第2版)
- (美)Robert C.Seacord
- 841字
- 2020-10-30 17:56:34
1.2.3 漏洞
并非所有的安全缺陷都會導致漏洞(vulnerability)。然而,如果一個安全缺陷會導致輸入數據(例如,命令行參數)越過安全界限進入到程序中,那該安全缺陷就會導致軟件漏洞。當包含安全缺陷的程序自身擁有比執行程序的用戶更高的執行權限時,或者當程序被網絡服務所使用(輸入數據通過網絡連接傳入)時,這種情況就可能會發生。
漏洞(vulnerability)
指允許攻擊者違反顯式或隱式的安全策略的一組條件。
C安全編碼規則技術規格說明(ISO/IEC TS 17961 C Secure Coding Rules technical specification)[Seacord 2012a]草案用到了這個定義。即便形成一個漏洞的所有前提條件都不具備,仍然可能存在安全缺陷。例如,一個程序可能包含一個缺陷,該缺陷允許用戶以從程序本身繼承而來的權限執行任意的代碼。如果程序本身并沒有特殊權限并且程序只能被本地用戶所使用,那么該安全缺陷就并不構成漏洞,因為此時并沒有違反安全策略的可能性。盡管如此,這個瑕疵也很可能會演變成一個安全缺陷,因為該程序可能會被重新部署或者是被一個擁有更高權限的系統所使用,那時攻擊者就可以以更高的權限執行代碼了。
在沒有安全缺陷的情況下,同樣可能存在漏洞。因為安全只是質量指標中的一個屬性,它還需要與其他質量屬性如性能和易用性等進行權衡[Bass 2013]。在這個權衡的過程中,軟件設計者可能會故意選擇將產品設計成附帶漏洞的形式(可以某種形式利用)。故意忽略軟件中的安全漏洞并不意味著軟件就是安全的,只是說明軟件的設計者代表軟件的使用者接受了可能由安全問題所帶來的風險而已。
圖1.4揭示了程序可能會包含的實質上是由計算機系統和網絡所引起的漏洞。也許看起來這一區別并沒有那么清楚,可是如果程序未部署到計算機系統或者網絡中,那么它也根本不可能有漏洞。如果程序未安裝,或沒有以某種可被攻擊者利用來違反安全策略的方式進行安裝,那么沒有人可以用在你辦公室硬盤上的程序來攻擊你。進一步而言,實際的漏洞通常是在軟件被配置成使其本身固有的漏洞可被利用的情況下而被發現的。因為這個區別有點難以表達清楚,所以在本書和CERT/CC的漏洞公告和咨詢報告中,通常只是說程序包含漏洞或者程序是有漏洞的。
- OpenStack Cloud Computing Cookbook(Third Edition)
- Python深度學習
- 前端架構:從入門到微前端
- Hands-On Functional Programming with TypeScript
- Visual C++開發入行真功夫
- 常用工具軟件立體化教程(微課版)
- Python深度學習原理、算法與案例
- 響應式Web設計:HTML5和CSS3實戰(第2版)
- Apache Camel Developer's Cookbook
- Go語言從入門到精通
- C# 7.1 and .NET Core 2.0:Modern Cross-Platform Development(Third Edition)
- Web前端測試與集成:Jasmine/Selenium/Protractor/Jenkins的最佳實踐
- Hadoop Blueprints
- Unity 5 Game Optimization
- C#從入門到精通(微視頻精編版)