ASP網絡安全:
一 前言
Microsoft Active Server Pages(ASP)是服務器端腳本編寫環境,使用它可以創建和運行動態、交互的 Web 服務器應用程序。使用 ASP 可以組合 HTML 頁 、腳本命令和 ActiveX 組件以創建交互的 Web 頁和基於 Web 的功能強大的應用程序。 現在很多網站特別是電子商務方面的網站,在前台上大都用ASP來實現。以至於現在ASP在網站應用上很普遍。ASP是開發網站應用的快速工具,但是有些網站管理員只看到ASP的快速開發能力,卻忽視了ASP安全問題。ASP從一開始就一直受到眾多漏洞,後門的困擾,包括%81的噩夢,密碼驗證問題,IIS漏洞等等都一直使ASP網站開發人員心驚膽跳。
本文試圖從開放了ASP服務的操作系統漏洞和ASP程序本身漏洞,闡述ASP安全問題,並給出解決方法或者建議。
二 關鍵字
ASP,網絡安全,IIS,SSL,加密。
三 ASP工作機理
Active Server Page技術為應用開發商提供了基於腳本的直觀、快速、高效的應用開發手段,極大地提高了開發的效果。在討論ASP的安全性問題之前,讓我們來看看ASP是怎麼工作的。ASP腳本是采用明文(plain text)方式來編寫的。
ASP腳本是一系列按特定語法(目前支持vbscript和jscript兩種腳本語言)編寫的,與標准HTML頁面混合在一起的腳本所構成的文本格式的文件。當客戶端的最終用戶用WEB浏覽器通過INTERNET來訪問基於ASP腳本的應用時,WEB浏覽器將向Web服務器發出HTTP請求。WEB服務器分析、判斷出該請求是ASP腳本的應用後,自動通過ISAPI接口調用ASP腳本的解釋運行引擎(ASP.DLL)。ASP.DLL將從文件系統或內部緩沖區獲取指定的ASP腳本文件,接著就進行語法分析並解釋執行。最終的處理結果將形成HTML格式的內容,通過WEB服務器"原路"返回給WEB浏覽器,由WEB浏覽器在客戶端形成最終的結果呈現。這樣就完成了一次完整的ASP腳本調用。若干個有機的ASP腳本調用就組成了一個完整的ASP腳本應用。
讓我們來看看運行ASP所需的環境:
Microsoft Internet Information Server 3.0/4.0/5.0 on NT Server
Microsoft Internet Information Server 3.0/4.0/5.0 on Win2000
Microsoft Personal Web Server on Windows 95/98
WINDOWS NT Option Pack所帶的Microsoft IIS提供了強大的功能,但是IIS在網絡安全方面卻是比較危險的。因為很少有人會用Windows 95/98當服務器,因此本文我更多的從NT中的IIS安全問題來探討。
四 微軟自稱的ASP的安全優點
雖然我們本文的重點是探討ASP漏洞和後門,但是有必要談談ASP在網絡安全方面的"優點",之所以加個"",是因為有時這些微軟宣稱的"優點"恰恰是其安全隱犯。
微軟稱ASP在網絡安全方面一大優點就是用戶不能看到ASP的源程序,從ASP的原理上看,ASP在服務端執行並解釋成標准的HTML語句,再傳送給客戶端浏覽器。"屏蔽"源程序能很好的維護ASP開發人員的版權,試想你辛辛苦苦做了一個很優秀的程序,給人任意COPY,你會怎麼想?而且黑客還能分析你的ASP程序,挑出漏洞。更重要的是有些ASP開發者喜歡把密碼,有特權的用戶名和路徑直接寫在程序中,這樣別人通過猜密碼,猜路徑,很容易找到攻擊系統的"入口"。但是目前已經發現了很多能查看ASP源程序的漏洞,後面我們還要討論。
IIS支持虛擬目錄,通過在"服務器屬性"對話框中的"目錄"標簽可以管理虛擬目錄。建立虛擬目錄對於管理WEB站點具有非常重要的意義。虛擬目錄隱藏了有關站點目錄結構的重要信息。因為在浏覽器中,客戶通過選擇"查看源代碼",很容易就能獲取頁面的文件路徑信息,如果在WEB頁中使用物理路徑,將暴露有關站點目錄的重要信息,這容易導致系統受到攻擊。其次,只要兩台機器具有相同的虛擬目錄,你就可以在不對頁面代碼做任何改動的情況下,將WEB頁面從一台機器上移到另一台機器。還有就是,當你將WEB頁面放置於虛擬目錄下後,你可以對目錄設置不同的屬性,如:Read、Excute、Script。讀訪問表示將目錄內容從IIS傳遞到浏覽器。而執行訪問則可以使在該目錄內執行可執行的文件。當你需要使用ASP時,就必須將你存放.asp文件的目錄設置為"Excute(執行)"。建議大家在設置WEB站點時,將html文件同ASP文件分開放置在不同的目錄下,然後將HTML子目錄設置為"讀",將ASP子目錄設置為"執行",這不僅方便了對WEB的管理,而且最重要的提高了ASP程序的安全性,防止了程序內容被客戶所訪問。
五 ASP漏洞分析和解決方法
有人說一台不和外面聯系的電腦是最安全的電腦,一個關閉所有端口,不提供任何服務的電腦也是最安全的。黑客經常利用我們所開放的端口實施攻擊,這些攻擊最常見的是DDOS(拒絕服務攻擊).下面我會列出ASP的二十幾個漏洞,每個漏洞都會有漏洞描述和解決方法。
1 在ASP程序後加個特殊符號,能看到ASP源程序
受影響的版本:
win95+pws
IIS3.0
98+pws4 不存在這個漏洞。
IIS4.0以上的版本也不存在這個漏洞。
問題描述:
這些特殊符號包括小數點,%81, ::$DATA。比如:
http://someurl/somepage.asp.
http:// someurl/somepage.asp%81
http:// someurl/somepage.asp::$DATA
http:// someurl/somepage.asp %2e
http:// someurl/somepage %2e%41sp
http:// someurl/somepage%2e%asp
http:// someurl/somepage.asp %2e
http://someurl/msadc/samples/selector/showcode.asp?source=/msadc/samples/../../../../../../boot.ini (可以看到boot.ini的文件內容)那麼在安裝有IIS3.0和win95+PWS的浏覽中就很容易看到somepage.asp的源程序。究竟是什麼原因造成了這種可怕的漏洞呢?究其根源其實是 Windows NT 特有的文件系統在做怪。有一點常識的人都知道在 NT 提供了一種完全不同於 FAT 的文件系統:NTFS,這種被稱之為新技術文件系統的技術使得 NT 具有了較高的安全機制,但也正是因為它而產生了不少令人頭痛的隱患。大家可能不知道, NTFS 支持包含在一個文件中 的多數據流,而這個包含了所有內容的主數據流被稱之為"DATA",因此使得在浏覽器 裡直接訪問 NTFS 系統的這個特性而輕易的捕獲在文件中的腳本程序成為了可能。然而 直接導致 ::$DATA 的原因是由於 IIS 在解析文件名的時候出了問題,它沒有很好地規范文件名。
解決方法和建議:
如果是Winodws NT用戶,安裝IIS4.0或者IIS5.0,Windows2000不存在這個問題。如果是win95用戶,安裝WIN98和PWS4.0。
2 ACCESS mdb 數據庫有可能被下載的漏洞
問題描述:
在用ACCESS做後台數據庫時,如果有人通過各種方法知道或者猜到了服務器的ACCESS數據庫的路徑和數據庫名稱,那麼他能夠下載這個ACCESS數據庫文件,這是非常危險的。比如:如果你的ACCESS數據庫book.mdb放在虛擬目錄下的database目錄下,那麼有人在浏覽器中打入:
http:// someurl/database/book.mdb如果你的book.mdb數據庫沒有事先加密的話,那book.mdb中所有重要的數據都掌握在別人的手中。
解決方法:
(1) 為你的數據庫文件名稱起個復雜的非常規的名字,並把他放在幾目錄下。所謂"非常規",打個比方:比如有個數據庫要保存的是有關書籍的信息,可不要把他起個"book.mdb"的名字,起個怪怪的名稱,比如d34ksfslf.mdb,再把他放在如./kdslf/i44/studi/ 的幾層目錄下,這樣黑客要想通過猜的方式得到你的ACCESS數據庫文件就難上加難了。
(2)不要把數據庫名寫在程序中。有些人喜歡把DSN寫在程序中,比如:
DBPath = Server.MapPath("cmddb.mdb")
conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & DBPath
假如萬一給人拿到了源程序,你的ACCESS數據庫的名字就一覽無余。因此建議你在ODBC裡設置數據源,再在程序中這樣寫:
conn.open "shujiyuan"
(3)使用ACCESS來為數據庫文件編碼及加密。首先在選取"工具->安全->加密/解密數據庫,選取數據庫(如:employer.mdb),然後接確定,接著會出現"數據庫加密後另存為"的窗口,存為:employer1.mdb。接著employer.mdb就會被編碼,然後存為employer1.mdb..
要注意的是,以上的動作並不是對數據庫設置密碼,而只是對數據庫文件加以編碼,目的是為了防止他人使用別的工具來查看數據庫文件的內容。
接下來我們為數據庫加密,首先以打開經過編碼了的employer1.mdb,在打開時,選擇"獨占"方式。然後選取功能表的"工具->安全->設置數據庫密碼",接著輸入密碼即可。
為employer1.mdb設置密碼之後,接下來如果再使用ACCEES數據庫文件時,則ACCESS會先要求輸入密碼,驗證正確後才能夠啟動數據庫。
不過要在ASP程序中的connection對象的open方法中增加PWD的參數即可,例如:
param="driver={Microsoft Access Driver (*.mdb)};Pwd=yfdsfs"
param=param&";dbq="&server.mappath("employer1.mdb")
conn.open param
這樣即使他人得到了employer1.mdb文件,沒有密碼他是無法看到employer1.mdb的。
3 code.asp文件會洩漏ASP代碼
問題描述:
舉個很簡單的例子,在微軟提供的 ASP1.0 的例程裡有一個 .asp 文件專門用來查看其它 .asp 文件的源代碼,該文件為 ASPSamp/Samples/code.asp。