最常見的軟體漏洞
緩衝區溢出是一種常見的編程錯誤,也是一種牽扯到複雜因素的錯誤。開發人員經常預先分配一定量的臨時記憶體空間,稱為一個緩衝區,用以保存特殊信息。如果代碼沒有仔細地把要存放的數據大小同應該保存它的空間大小進行對照檢查,那么靠近該分配空間的記憶體就有被覆蓋的風險。熟練的黑客輸入仔細組織過的數據就能導致程式崩潰,更糟糕的話能執行代碼。
幸虧近年來緩衝區溢出攻擊發生的顯著數量提高了編程界對這個問題的認識。雖然緩衝區溢出仍然在出現,但它們經常會被很快發現和糾正,特別在開放原始碼套用中更是如此。像Java和.Net這樣的比較新的編程體系都包含自動檢查數據大小,防止發生緩衝區溢出的機制。
緩衝區溢出是稱為輸入有效性漏洞的更大一類軟體安全缺陷下的一個子類。幾乎所有的程式都接受某種類型的用戶輸入(例如,命令行參數或者HTML表格)。如果代碼沒有嚴格檢查輸入的格式和內容是否合適,就開始處理數據,那么就會發生問題。考慮下面這個簡單的例子:
這段代碼的意圖可能是列印/var/www/html下某個HTML檔案的內容,/var/www/html是Red Hat伺服器上Apache的httpd服務程式默認的文檔根目錄。這段代碼接受用戶輸入的一個檔案名稱,把它作為參數傳給open函式。不過,如果一個惡意的用戶把../../../etc/shadow當作參數輸入的話,就會顯示出/etc/shadow的內容!
作為一名系統管理員,您該如何防止這種情況發生呢?幾乎無可奈何,至少在確定出缺陷(bug),並發布解決它的補丁之前是這樣。緊盯補丁和安全性公告的發布,這是大多數系統管理員工作的一個重要部分。大多數Linux發行版本都帶自動打補丁的工具,如Fedora上的yum、Debian和 Ubuntu上的apt-get。利用這些工具能讓您的站點避免出現軟體的安全漏洞問題。
軟體漏洞中編程錯誤
大多數IT安全事件(如補丁程式或網路攻擊等)都與軟體編程錯誤有關,在過去的三年中,非贏利調研機構MITRE和美國系統網路安全協會( SANS Institute)發現了700多處常見的軟體編程錯誤,經過安全專家的篩選,最終公布了以下25大軟體編程錯誤:
1. 錯誤的輸入驗證
2. 不正確的編碼或轉義輸出
3. 維持SQL查詢結構(SQL注入)錯誤
4. 維持網頁結構(跨站點腳本)錯誤
5. 維持作業系統命令結果(作業系統命令注入)錯誤
6. 明文傳送敏感信息
7. 跨站點請求偽造
8. 資源競爭(Race condition)
9. 錯誤信息泄露
10. 限定緩衝區內操作失敗
11. 外部控制重要狀態數據
12. 外部控制檔案名稱或路徑
13. 不可信搜尋路徑
14. 控制代碼生成錯誤(代碼注入)
15. 下載未經完整性檢查的代碼
16. 錯誤的資源關閉或發布
17. 不正確的初始化
18. 錯誤計算
19. 可滲透防護
20. 使用被破解的加密算法
21. 硬編碼密碼
22. 對核心資源的錯誤許可權分配
23. 隨機值的錯誤利用
24. 濫用特權操作
25. 客戶端執行伺服器端安全