本文的目地是為了總結一些東西,解決在試圖構造一個漏洞數據庫的過程中碰到的主要問題,也就是如何對計算機網絡漏洞進行分類的問題。文中的一些想法並不成熟,有些甚至連自己也不滿意,權作拋磚引玉,以期與在這方面有深入研究的同仁交流,共同提高完善。一個計算機網絡安全漏洞有它多方面的屬性,我認為主要可以用以下幾個方面來概括:漏洞可能造成的直接威脅,漏洞的成因,漏洞的嚴重性,漏洞被利用的方式。以下的討論將回繞這幾個方面對漏洞細分其類。 A.按漏洞可能對系統造成的直接威脅 可以大致分成以下幾類,事實上一個系統漏洞對安全造成的威脅遠不限於它的直接可能性,如果攻擊者獲得了對系統的一般用戶訪問權限,他就極有可能再通過利用本地漏洞把自己升級為管理員權限: 一.遠程管理員權限 攻擊者無須一個賬號登錄到本地直接獲得遠程系統的管理員權限,通常通過攻擊以root身份執行的有缺陷的系統守護進程來完成。漏洞的絕大部分來源於緩沖區溢出,少部分來自守護進程本身的邏輯缺陷。 典型漏洞: 1、IMAP4rev1 v10.190版的守護進程imapd的AUTHENTICATE命令存在讀入參數時未做長度檢查,構造一個精心設計的AUTH命令串,可以溢出imapd的緩沖區,執行指定的命令,由於imapd以root身份運行,從而直接獲得機器的root權限。 2、WindowsNT IIS 4.0的ISAPI DLL對輸入的URL未做適當的邊界檢查,如果構造一個超長的URL,可以溢出IIS (inetinfo.exe)的緩沖區,執行我們指定的代碼。由於inetinfo.exe是以local system身份啟動,溢出後可以直接得到管理員權限。 3、早期AIX 3.2 rlogind代碼存在認證邏輯缺陷,用rlogin victim.com ?Cl ?Cfroot,可以直接以root身份登錄到系統而無須提供口令。 二.本地管理員權限 攻擊者在已有一個本地賬號能夠登錄到系統的情況下,通過攻擊本地某些有缺陷的suid程序,競爭條件等手段,得到系統的管理員權限。 典型漏洞: 1、RedHat Linux的restore是個suid程序,它的執行依靠一個中RSH的環境變量,通過設置環境變量PATH,可以使RSH變量中的可執行程序以root身份運行,從而獲得系統的root權限。 2、Solaris 7的Xsun程序有suid位,它對輸入參數未做有效的邊界檢查,可以很容易地溢出它的緩沖區,以root身份運行我們指定的代碼,從而獲得管理員權限。 3、在windows2000下,攻擊者就有機會讓網絡DDE(一種在不同的Windows機器上的應用程序之間動態共享數據的技術)代理在本地系統用戶的安全上下文中執行其指定的代碼,從而提升權限並完全控制本地機器。 三.普通用戶訪問權限 攻擊者利用服務器的漏洞,取得系統的普通用戶存取權限,對UNIX類系統通常是shell訪問權限,對Windows系統通常是cmd.exe的訪問權限,能夠以一般用戶的身份執行程序,存取文件。攻擊者通常攻擊以非root身份運行的守護進程,有缺陷的cgi程序等手段獲得這種訪問權限。 典型漏洞: 1、UBB是個廣泛運行於各種UNIX和Windows系統的論壇程序,用PERL實現,它的5.19以下版本存在輸入驗證問題,通過提交精心構造的表單內容,可以使UBB去執行shell命令,因為一般的web服務器以nobody身份運行,5自學網,因此可以得到一個nobody shell。比如提交這樣的數據:topic='012345.ubb mail [email protected] 2、RedHat Linux 6.2帶的innd 2.2.2.3版新聞服務器,存在緩沖區溢出漏洞,通過一個精心構造的新聞信件可以使innd服務器以news身份運行我們指定的代碼,得到一個innd權限的shell。 3、Windows IIS 4.0-5.0存在Unicode解碼漏洞,可以使攻擊者利用cmd.exe以guest組的權限在系統上運行程序。相當於取得了普通用戶的權限。 四.權限提升 攻擊者在本地通過攻擊某些有缺陷的sgid程序,把自己的權限提升到某個非root用戶的水平。獲得管理員權限可以看做是一種特殊的權限提升,只是因為威脅的大小不同而把它獨立出來。 典型漏洞: 1、RedHat Linux 6.1帶的man程序為sgid man,它存在format bug,通過對它的溢出攻擊,可以使攻擊者得到man組的用戶權限。 2、Solaris 7的write程序為sgid tty,它存在緩沖區溢出問題,通過對它的攻擊可以攻擊者得到tty組的用戶權限。 3、WindowsNT系統中,攻擊者能夠使系統中其他用戶裝入一個”特洛化”的porfile,使其他用戶執行攻擊者的惡意代碼,有時甚至是管理員。 五.讀取受限文件 攻擊者通過利用某些漏洞,讀取系統中他應該沒有權限的文件,這些文件通常是安全相關的。這些漏洞的存在可能是文件設置權限不正確,或者是特權進程對文件的不正確處理和意外dump core使受限文件的一部份dump到了core文件中。 典型漏洞: 1、SunOS 5.5的ftpd存在漏洞,一般用戶可以引起ftpd出錯而dump出一個全局可讀的core文件,裡面有shadow文件的片斷,從而使一般用戶能讀到shadow的部分內容。 2、SuSE 6.2的suid程序pg,對它的配置文件處理存在問題,當把pb.conf鏈接到特權文件,5自學網,可以用pb讀取那些文件的內容。 3、Oracle 8.0.3 Enterprise Edition for NT 4.0的日志文件全局可讀而且為明文,它記錄了連接的口令,很可能被攻擊者讀到。 六.遠程拒絕服務 攻擊者利用這類漏洞,無須登錄即可對系統發起拒絕服務攻擊,使系統或相關的應用程序崩潰或失去響應能力。這類漏洞通常是系統本身或其守護進程有缺陷或設置不正確造成的。 1、早期的Linux 和 BSD的tcp/ip堆棧的ip 片斷重組模塊存在缺陷,攻擊通過向系統發出特殊的ip片斷包可以使機器崩潰。 2、Windows2000帶的Netmeeting 3.01存在缺陷,通過向它發送二進制數據流,可以使服務器的CPU占用達到100%。
3、通過發送一個帶有超長參數的USER命令給AnalogX Proxy Server 4.04的ftp端口,可以使這個應用程序崩潰。 七.本地拒絕服務 在攻擊者登錄到系統後,利用這類漏洞,可以使系統本身或應用程序崩潰。這種漏洞主要因為是程序對意外情況的處理失誤,如寫臨時文件之前不檢查文件是否存在,盲目跟隨鏈接等。 1、BSDi 3.x存在漏洞可以使一個本地用戶用一些垃圾覆蓋系統上的任何,這樣會很容易地把系統搞成不可用。 2、RedHat 6.1的tmpwatch程序存在缺陷,可以使系統fork()出許多進程,從而使系統失去響應能力。 八.遠程非授權文件存取 利用這類漏洞,攻擊可以不經授權地從遠程存取系統的某些文件。這類漏洞主要是由一些有缺陷的cgi程序引起的,它們對用戶輸入沒有做適當的合法性檢查,使攻擊者通過構造特別的輸入獲得對文件存取。 典型漏洞: 1、Poll_It_SSI_v2.0.cgi存在漏洞可以使攻擊者看到web目錄外的所有有權限看的文件,發送如下的請求給服務器就能看到/etc/passwd文件,?data_dir=\etc\passwd