堵塞Web漏洞(上) |
發(fā)布時間: 2012/8/9 15:17:09 |
Web的大多數(shù)安全問題都屬于下面三種類型之一:
1、服務(wù)器向公眾提供了不應(yīng)該提供的服務(wù)。 2、服務(wù)器把本應(yīng)私有的數(shù)據(jù)放到了公開訪問的區(qū)域。 3、服務(wù)器信賴了來自不可信賴數(shù)據(jù)源的數(shù)據(jù)。 顯然,許多服務(wù)器管理員從來沒有從另一個角度來看看他們的服務(wù)器,例如使用端口掃描程序。如果他們曾經(jīng)這樣做了,就不會在自己的系統(tǒng)上運行那么多的服務(wù),而這些服務(wù)原本無需在正式提供Web服務(wù)的機器上運行,或者這些服務(wù)原本無需面向公眾開放。 與這種錯誤經(jīng)常相伴的是,為了進行維護而運行某些不安全的、可用于竊取信息的協(xié)議。例如,有些Web服務(wù)器常常為了收集訂單而提供POP3服務(wù),或者為了上載新的頁面內(nèi)容而提供FTP服務(wù)甚至數(shù)據(jù)庫服務(wù)。在某些地方這些協(xié)議可能提供安全認證(比如APOP)甚至安全傳輸(比如POP或者FTP的SSL版本),但更多的時候,人們使用的是這些協(xié)議的非安全版本。有些協(xié)議,比如Msql數(shù)據(jù)庫服務(wù),則幾乎沒有提供任何驗證機制。 從公司外面訪問自己的網(wǎng)絡(luò),完整地檢測、模擬攻擊自己的網(wǎng)站看看會發(fā)生些什么,這對于Web管理者來說是一個很好的建議。有些服務(wù)在機器安裝之后的默認配置中已經(jīng)啟動,或者由于安裝以及初始設(shè)置的需要而啟動了某些服務(wù),這些服務(wù)可能還沒有正確地關(guān)閉。例如,有些系統(tǒng)提供的Web服務(wù)器會在非標準的端口上提供編程示范以及系統(tǒng)手冊,它們往往包含錯誤的程序代碼并成為安全隱患所在。正式運行的、可從Internet訪問的Web服務(wù)器不應(yīng)該運行這些服務(wù),請務(wù)必關(guān)閉這些服務(wù)。 9.1Web服務(wù)器常見漏洞介紹 我們的目的就是向大家介紹Web服務(wù)器的常見漏洞,相信看了自己也能試著發(fā)現(xiàn)一些Web服務(wù)器的漏洞了。不過需要記住的是,不要為了尋找漏洞而尋找漏洞。另外,即使你找到了漏洞,是否能夠利用還是另外一回事。 Web服務(wù)器存在的主要漏洞包括物理路徑泄露,CGI源代碼泄露,目錄遍歷,執(zhí)行任意命令,緩沖區(qū)溢出,拒絕服務(wù),條件競爭和跨站腳本執(zhí)行漏洞,和CGI漏洞有些相似的地方,但是更多的地方還是有著本質(zhì)的不同。不過無論是什么漏洞,都體現(xiàn)著安全是一個整體的真理,考慮Web服務(wù)器的安全性,必須要考慮到與之相配合的操作系統(tǒng)。 9.1.1物理路徑泄露 物理路徑泄露一般是由于Web服務(wù)器處理用戶請求出錯導(dǎo)致的,如通過提交一個超長的請求,或者是某個精心構(gòu)造的特殊請求,亦或是請求一個Web服務(wù)器上不存在的文件。這些請求都有一個共同特點,那就是被請求的文件肯定屬于CGI腳本,而不是靜態(tài)HTML頁面。 還有一種情況,就是Web服務(wù)器的某些顯示環(huán)境變量的程序錯誤的輸出了Web服務(wù)器的物理路徑,這應(yīng)該算是設(shè)計上的問題。 9.1.2目錄遍歷 目錄遍歷對于Web服務(wù)器來說并不多見,通過對任意目錄附加“../”,或者是在有特殊意義的目錄附加“../”,或者是附加“../”的一些變形,如“..\”或“..//”甚至其編碼,都可能導(dǎo)致目錄遍歷。前一種情況并不多見,但是后面的幾種情況就常見得多,去年非常流行的IIS二次解碼漏洞和Unicode解碼漏洞都可以看作是變形后的編碼。 9.1.3執(zhí)行任意命令 執(zhí)行任意命令即執(zhí)行任意操作系統(tǒng)命令,主要包括兩種情況。一是通過遍歷目錄,如前面提到的二次解碼和UNICODE解碼漏洞,來執(zhí)行系統(tǒng)命令。另外一種就是Web服務(wù)器把用戶提交的請求作為SSI指令解析,因此導(dǎo)致執(zhí)行任意命令。 9.1.4緩沖區(qū)溢出 緩沖區(qū)溢出漏洞想必大家都很熟悉,無非是Web服務(wù)器沒有對用戶提交的超長請求沒有進行合適的處理,這種請求可能包括超長URL,超長HTTPHeader域,或者是其它超長的數(shù)據(jù)。這種漏洞可能導(dǎo)致執(zhí)行任意命令或者是拒絕服務(wù),這一般取決于構(gòu)造的數(shù)據(jù)。 9.1.5拒絕服務(wù) 拒絕服務(wù)產(chǎn)生的原因多種多樣,主要包括超長URL,特殊目錄,超長HTTPHeader域,畸形HTTPHeader域或者是DOS設(shè)備文件等。由于Web服務(wù)器在處理這些特殊請求時不知所措或者是處理方式不當(dāng),因此出錯終止或掛起。 9.1.6條件競爭 這里的條件競爭主要針對一些管理服務(wù)器而言,這類服務(wù)器一般是以System或Root身份運行的。當(dāng)它們需要使用一些臨時文件,而在對這些文件進行寫操作之前,卻沒有對文件的屬性進行檢查,一般可能導(dǎo)致重要系統(tǒng)文件被重寫,甚至獲得系統(tǒng)控制權(quán)。 9.2CGI的安全性 現(xiàn)在我們來談?wù)劦降资裁词荂GI(CommonGateIntergace)。在物理上,CGI是一段程序,它運行在Server上,提供同客戶段Html頁面的接口。這樣說大概還不好理解。那么我們看一個實際例子:現(xiàn)在的個人主頁上大部分都有一個留言本。留言本的工作是這樣的:先由用戶在客戶段輸入一些信息,如名字之類的東西。接著用戶按一下“留言”(到目前為止工作都在客戶端),瀏覽器把這些信息傳送到服務(wù)器的CGI目錄下特定的CGI程序中,于是CGI程序在服務(wù)器上按照預(yù)定的方法進行處理。在本例中就是把用戶提交的信息存入指定的文件中。然后CGI程序給客戶端發(fā)送一個信息,表示請求的任務(wù)已經(jīng)結(jié)束。此時用戶在瀏覽器里將看到“留言結(jié)束”的字樣。整個過程結(jié)束。 CGI是一種共用網(wǎng)關(guān)接口,它可以稱之為一種機制.因此您可以使用不同的程序編寫適合的CGI程序,這些程序語言包括VisualBasic、Delphi或C/C++等,您將已經(jīng)寫好的程序放在Web服務(wù)器的計算機上運行,再將其運行結(jié)果通過Web服務(wù)器傳輸?shù)娇蛻舳说臑g覽器上。事實上,這樣的編制方式比較困難而且效率低下,因為你每一次修改程序都必須重新將CGI程序編譯成可執(zhí)行文件。 9.2.1為什么使用CGI CGI可以為我們提供許多HTML無法做到的功能,比如: 1、一個記數(shù)器 2、顧客信息表格的提交以及統(tǒng)計 3、搜索程序 4、Web數(shù)據(jù)庫 用HTML是沒有辦法記住客戶的任何信息的,就算用戶愿意讓你知道。用HTML也是無法把信息記錄到某一個特定文件里的。要把客戶段的信息記錄在服務(wù)器的硬盤上,就要用到CGI。這是CGI最重要的作用,它補充了HTML的不足。是的,僅僅是補充,不是替代。 9.2.2CGI安全問題 在計算機領(lǐng)域——尤其在Internet上——盡管大部分Web服務(wù)器所編的程序都盡可能保護自己的內(nèi)容不受侵害,但只要CGI腳本中有一點安全方面的失誤——口令文件、私有數(shù)據(jù)、以及任何東西,就能使入侵者能訪問計算機。遵循一些簡單的規(guī)則并保持警惕能使自己的CGI腳本免受侵害,從而可以保護自己的權(quán)益。這里所說的CGI安全,主要包括兩個方面,一是Web服務(wù)器的安全,一是CGI語言的安全 先從CGI問題的分類開始談起,一般來說,CGI問題主要有以下幾類: 1、暴露敏感或不敏感信息; 2、缺省提供的某些正常服務(wù)未關(guān)閉; 3、利用某些服務(wù)漏洞執(zhí)行命令; 4、應(yīng)用程序存在遠程溢出; 5、非通用CGI程序的編程漏洞。 下面我們就來詳細介紹一下關(guān)于CGI的漏洞: ●配置錯誤 這里所說的配置錯誤主要指CGI程序和數(shù)據(jù)文件的權(quán)限設(shè)置不當(dāng),這可能導(dǎo)致CGI源代碼或敏感信息泄露。還有一個經(jīng)常犯的錯誤就是安裝完CGI程序后沒有刪除安裝腳本,這樣攻擊者就可能遠程重置數(shù)據(jù)。前些日子“XX大聯(lián)盟”論壇多次被黑就是這個低級錯誤所致。 ●邊界條件錯誤 這個錯誤主要針對C語言編寫的CGI,利用這個錯誤,攻擊者可能發(fā)起緩沖區(qū)溢出攻擊,從而提升權(quán)限。 ●訪問驗證錯誤 這個問題主要是因為用于驗證的條件不足以確定用戶的身份而造成的,經(jīng)常會導(dǎo)致未經(jīng)授權(quán)訪問,修改甚至刪除沒有訪問權(quán)限的內(nèi)容。用于確定用戶身份的方法一般有兩種,一是賬號和密碼,一是Session認證。而不安全的認證方法包括Userid認證,Cookie認證等等。 ●來源驗證錯誤 比較常見的利用這種錯誤進行攻擊的方法就是DoS,也就是拒絕服務(wù)攻擊,如我們知道的灌水機,就是利用CGI程序沒有對文章的來源進行驗證,從而不間斷的發(fā)文章,最后導(dǎo)致服務(wù)器硬盤充滿而掛起。 ●輸入驗證錯誤 這種錯誤導(dǎo)致的安全問題最多,主要是因為沒有過濾特殊字符。比如說,沒有過濾“%20”造成的畸形注冊,沒有過濾“../”經(jīng)常造成泄露系統(tǒng)文件,沒有過濾“$”經(jīng)常導(dǎo)致泄露網(wǎng)頁中的敏感信息,沒有過濾“;”經(jīng)常導(dǎo)致執(zhí)行任意系統(tǒng)指令,沒有過濾“|”或“\t”經(jīng)常導(dǎo)致文本文件攻擊,沒有過濾“’”和“#”經(jīng)常導(dǎo)致SQL數(shù)據(jù)庫攻擊,沒有過濾“<”和“>”導(dǎo)致的Cross-SiteScripting攻擊等。 ●意外情況處理失敗 這種錯誤也很常見,如沒有檢查文件是否存在就直接打開設(shè)備文件導(dǎo)致拒絕服務(wù),沒有檢查文件是否存在就打開文件提取內(nèi)容進行比較而繞過驗證,上下文攻擊導(dǎo)致執(zhí)行任意代碼等。 ●策略錯誤 這種錯誤主要是由于編制CGI程序的程序員的決策造成的。如原始密碼生成機制脆弱導(dǎo)致窮舉密碼導(dǎo)致在Cookie中明文存放賬號密碼導(dǎo)致敏感信息泄露,使用與CGI程序不同的擴展名擴展名存儲敏感信息導(dǎo)致該文件被直接下載,丟失密碼模塊在確認用戶身份之后直接讓用戶修改密碼而不是把密碼發(fā)到用戶的注冊信箱,登陸時采用賬號和加密后的密碼進行認證導(dǎo)致攻擊者不需要知道用戶的原始密碼就能夠登陸等。 ●習(xí)慣問題 程序員的習(xí)慣也可能導(dǎo)致安全問題,如使用某些文本編輯器修改CGI程序時,經(jīng)常會生成“.bak”文件,如果程序員編輯完后沒有刪除這些備份文件,則可能導(dǎo)致CGI源代碼泄露。另外,如果程序員總喜歡把一些敏感信息(如賬號密碼)放在CGI文件中的話,只要攻擊者對該CGI文件有讀權(quán)限(或者利用前面介紹的一些攻擊方法)就可能導(dǎo)致敏感信息泄露。 ●使用錯誤 主要是一些函數(shù)的使用錯誤,如Perl中的“die”函數(shù),如果沒有在錯誤信息后面加上“\n”的話,就極可能導(dǎo)致物理路徑泄露。 本文出自:億恩科技【www.riomediacenter.com】 服務(wù)器租用/服務(wù)器托管中國五強!虛擬主機域名注冊頂級提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM] |