隨著網路發展日漸普及,各式各樣的網路服務也越來越蓬勃發展,人們依賴網路的 程度也越來越高。因此,網路安全問題開始受到重視。在網路服務軟體在設計過程中,
程式設計者若稍一考慮不周,軟體就可能會產生漏洞,以致於在提供服務期間遭受攻 擊。而其中最常見的攻擊型態之一即為buffer overflow attack。如Table 1,根據Computer Emergency Readiness Team(CERT ® Coodination Center) [4]軟體漏洞資料統計 [5],每年 軟體漏洞數量的成長率約為 50%,而其中光是會造成buffer overflow attack之漏洞就佔了 所有軟體漏洞的 50% [43],因此可以知道防止buffer overflow的重要性。
Year 1995 1996 1997 1998 1999
Vulnerabilities 171 345 311 262 417
Year 2000 2001 2002 2003 2004 2005
Vulnerabilities 1090 2437 4129 3784 3780 5990 Table 1: Vulnerabilities reported by CERT [8]
由於 C 語言本身設計上並不會自動檢查指標與陣列的使用邊界,導致寫入陣列時 可能發生溢出寫入而改寫其他資料。這讓攻擊者有機會對有漏洞的網路服務軟體進行 buffer overflow 攻擊,這些網路服務軟體的權限通常都為系統管理者或 root,攻擊者就 能利用含有惡意程式碼的 network input 作為溢出寫入的資料,服務軟體就會以 root 權限 執行這些惡意程式碼,進而讓攻擊者入侵並控制此系統。
1.1 Overview of Buffer Overflow Protection
從Buffer overflow漏洞被發現[31]開始,buffer overflow防護機制的研究至今已十多 年。部份研究專注於漏洞偵測。在此方面,一部份的研究在程式編譯時靜態分析程式碼 中不安全的部份以在執行之前提醒程式設計者開發更安全的程式。然而,靜態分析通常 無法完全偵測出漏洞,或者會出現過多的假警告。於是,大多數的研究利用動態偵測,
在程式執行時偵測buffer overflow攻擊。這些包括偵測程式部分區域如return
address[9][10],利用address space[3][26]或instruction randomization[2][17]的方式,以及在 程式中插入boundary checking程式碼[16][24]。只偵測部分區域讓攻擊者仍有機會攻擊程
式其他部分,randomization讓攻擊者能夠利用大量的猜測而攻擊成功,有些boundary checking的方式對所有程式中的buffer進行範圍檢查,卻產生了過高的overhead。而有其 他相關研究,包括non-executable buffer[11][26][40]、monitoring control flow[18]、或是結 合動態與靜態分析來偵測buffer overflow攻擊[15][23],但這些偵測機制仍過高的overhead 而難以實際使用,或是讓攻擊者仍有機會能夠成功攻擊而控制系統的缺點。
除了偵測buffer overflow攻擊外,近幾年的相關研究也強調在軟體遭受攻擊後,能 自動辨識軟體漏洞[20][44],自動產生network input signature[14][20][21][22][44],或是自 動修復服務軟體系統[27][39]。部分自動化系統利用過去的偵測方式,因此無法達到全 面的保護或有過高的overhead而難以實際使用;自動產生signature的方式也不夠完善,
無法產生準確的signature。錯誤的signature會導致正常的clients被系統拒絕而讓他們無法 使用該網路服務,更重要的,它會讓攻擊者仍有機會略過而達成buffer overflow攻擊,進 而讓攻擊者成功入侵並能完全控制系統。
我們提出一個自動化的系統,以針對軟體 buffer overflow 弱點部份進行保護。在尚 未得知軟體弱點之前能夠隨時偵測是否有攻擊發生,當遭受攻擊時能夠偵測出攻擊資 訊,並利用此資訊進行弱點保護,以有效防止攻擊者利用 buffer overflow attack 入侵控 制系統。
1.2 Automatic Detection and Protection from Buffer Overflow Attack
我們提出的自動化系統有如下特點,(1)我們的系統在偵測攻擊與辨識攻擊資訊之 後,能夠利用這些資訊特別保護弱點區域。為了能防護所有的buffer overflow攻擊並有極 低的run-time overhead,我們採用Address Space Randomization (ASR) [26]來偵測攻擊,
能鑑別遭受攻擊的buffer與overwrite該buffer的指令位址,並在自動偵測與鑑識軟體漏洞 後,能夠快速自動防護該漏洞,相較於產生可能有false alarm的signature,我們能夠直接 排除該漏洞,並自動針對該漏洞進行系統保護,因此不會有false alarm發生;(2)能夠全 面辨識程式中的攻擊資訊。我們稍微修改[20][44]的方式,讓程式中動態配置的資料遭 攻擊時也能夠辨識出以取得相關攻擊資訊;(3) 儘管利用ASR也能避免其缺點-guessing attack。讓我們的系統能夠保護control-sensitive data而讓攻擊者無法藉由大量的猜測而成 功改寫此data,使修補後的系統能夠確實防止buffer overflow攻擊以避免攻擊者成功入侵 系統。
我們在 Linux kernel 2.6.14 上將我們的自動化系統實作成一個 kernel module。在實 驗中,我們利用 Apache、Sendmail、Thttpd、Telnetd、Wu-ftpd 等網路服務軟體,保護
這些軟體某些特定版本的弱點,測得我們的自動化系統能夠擁有很好的效能表現,驗證 了我們的機制所產生之效能損失,是可以被接受而得以被實際使用的。根據實驗顯示,
在系統遭受攻擊前,能夠隨時保持自動偵測攻擊的狀態,並擁有幾乎為 0 的 run-time overhead。而在偵測到攻擊之後,僅需 10%以內的 run-time overhead 來保護系統,使我 們的方案能夠被實際使用。
1.3 Organization of this Paper
此篇論文剩餘部分的編排如下所述:第二章簡介 buffer overflow 攻擊以及討論過去 的 related work,我們自動化系統的設計與實做將在第三章中描述,第四章將列出並分析 我們的實驗結果。最後,我們於第五章做出此篇論文之結論。