依據漏洞成因進行分類,是漏洞研究中最令人頭疼的環節。同一漏洞在不同抽象層次上可能歸入不同類別。以經典的 ps 競爭條件漏洞為例:在最低層次,它屬於參數驗證錯誤,因連續的系統調用未檢查是否處理同一對象;稍高層次看,是同步或競爭條件錯誤;更高層次則是邏輯錯誤,因對象可能在使用過程中被刪除。迄今仍無完美分類方案,連 SecurityFocus 的分類也難令人滿意。現將主流分類大致歸納為七大類:
絕大多數緩衝區溢出漏洞與 CGI 類漏洞,皆因未對用戶輸入數據的合法性進行適當檢查。
程序的訪問控制邏輯存在可利用缺陷,導致攻擊者可繞過權限檢查。早期 AIX 的 rlogin 漏洞即屬典型案例。
程序在處理文件等實體時,時序與同步機制存在缺陷,形成「機會窗口」讓攻擊者施加外部影響。早期 Solaris 系統的 ps 命令即存在此類漏洞:ps 執行時會在 /tmp 生成基於 PID 的臨時文件,隨後將其 chown 為 root 並改名為 ps_data。若攻擊者在 ps 運行期間創建同名臨時文件並指向敏感文件,ps 執行後即可任意修改該 root 權限文件,從而獲取 root 權限。
程序實現邏輯未考慮到應被處理的異常情況。大多數 /tmp 目錄下盲目跟隨符號鏈接覆蓋文件的漏洞屬此類。例如 SCO UNIX OpenServer 的 /etc/sysadm.d/bin/userOsa 存在盲目覆蓋調試日志文件問題,文件名固定,攻擊者可將文件名指向特權文件,徹底破壞系統。
此類別較為籠統。嚴格說來,絕多數漏洞根源皆為設計缺陷,故暫時無法歸入其他類別的漏洞,先歸於此。
源於系統或應用配置失誤:軟件安裝路徑錯誤、配置參數錯誤、訪問權限設置不當、安全策略錯誤等。
由環境變量錯誤或惡意設置引發。攻擊者可通過重置 Shell 內部分隔符 IFS、轉義字符或其他環境變量,誘導特權程序執行攻擊者指定代碼。RedHat Linux 的 dump 程序漏洞即屬此類。
兩者存在明確對應關係:輸入驗證錯誤幾乎涉及所有威脅類型;設計錯誤與配置錯誤同樣可導致多種威脅。圖示已省略。
一般依威脅類型劃分三級:
但實戰中須具體分析:針對流行系統的遠程拒絕服務漏洞應升為高危;廣泛使用軟件存在弱口令或口令恢復漏洞,應歸為中高危。
漏洞利用要求攻擊者處於網絡空間特定位置,分四類:
本文對網絡安全漏洞作粗淺分類,遠非完美方案,歡迎交流心得。
參考資料:
UC Davis 漏洞分類項目