軟體漏洞
軟體開發者開發軟體時的疏忽
軟體開發者開發軟體時的疏忽,或者是編程語言的局限性,比如c語言家族比java效率高但漏洞也多,電腦系統幾乎就是用c語言編的,所以常常要打補丁。軟體漏洞有時是作者日後檢查的時候發現的,然後修正;還有一些人專門找別人的漏洞以從中做些非法的事,當作者知道自己的漏洞被他人利用的時候就會想辦法補救。
多年以來,在計算機軟體(包括來自第三方的軟體,商業的和免費的軟體)中已經發現了不計其數能夠削弱安全性的缺陷(bug)。黑客利用編程中的細微錯誤或者上下文依賴關係,已經能夠控制Linux,讓它做任何他們想讓它做的事情。
緩衝區溢出是一種常見的編程錯誤,也是一種牽扯到複雜因素的錯誤。開發人員經常預先分配一定量的臨時內存空間,稱為一個緩衝區,用以保存特殊信息。如果代碼沒有仔細地把要存放的數據大小同應該保存它的空間大小進行對照檢查,那麼靠近該分配空間的內存就有被覆蓋的風險。熟練的黑客輸入仔細組織過的數據就能導致程序崩潰,更糟糕的話能執行代碼。
軟體漏洞
緩衝區溢出是稱為輸入有效性漏洞的更大一類軟體安全缺陷下的一個子類。幾乎所有的程序都接受某種類型的用戶輸入(例如,命令行參數或者HTML表格)。如果代碼沒有嚴格檢查輸入的格式和內容是否合適,就開始處理數據,那麼就會發生問題。考慮下面這個簡單的例子:
這段代碼的意圖可能是列印/var/www/html下某個HTML文件的內容,/var/www/html是Red Hat伺服器上Apache的httpd服務程序默認的文檔根目錄。這段代碼接受用戶輸入的一個文件名,把它作為參數傳給open函數。不過,如果一個惡意的用戶把../../../etc/shadow當作參數輸入的話,就會顯示出/etc/shadow的內容,並可能根據這些內容破譯出root密碼!
作為一名系統管理員,您該如何防止這種情況發生呢?幾乎無可奈何,至少在確定出缺陷(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. 客戶端執行伺服器端安全