一. 前言 人說,一朝被蛇咬,十年怕.....,就是這樣。2000年初,當我終於擺脫winnt 4.0 server那可怕的補丁之旅,邁向win2000 server時。我終於可以比較放心我的服務器了。但隨著SQL SERVER的補丁出現。我知道,與微軟的補丁因緣又開始輪回了。但還好。win2000自動化的管理還是讓我放心好多,而以前管理winnt後的失眠症狀也逐漸消失了。偶爾還能見到我的"夢"老弟。但這一切都伴隨者同bigeagle的一次知心交談中付之東流了。一次,bigeagle發來qq,給我看了一段代碼。我一看就知道這不是bigeagle寫的代碼,那麼爛,不過有點熟悉。再一看,啊?!這不是我的數據庫連接字符串嗎!!GOD。頓時覺得有一種不祥的預兆。不過還好,這個只是個access的,我還用了一些手段防止他被下載。但這足以讓我長時間的失眠又來了。(再次說明,bigeagle不是蛇,他是鷹) 二. 安裝過程中的IIS 與 ASP安全防護 (這裡只考慮是web服務器,而不是本地機子上的web開發平台。) 接下來的幾天有是幾個難熬的日子。我開始重新部署win2000 web服務器的安全策略。找到ASP代碼被洩漏的原因。原來,我的補丁每次打得都比較及時的。但一次因為卸載FTP時,重裝了IIS,而這之後,我並沒有再打補丁而導致最新的漏洞web解析出錯。(就是那個較新的漏洞 Translate :f, 用這個加上一些工具就可以看到ASP的代碼了。) 首先,開始重裝IIS。 這次安裝的策略就是安全,夠用。去掉一些多余的東西。 1. FTP不要安裝了,功能不好,還容易出錯,並且漏洞很大。Ftp缺省傳輸密碼的過程可是明文傳送,很容易被人截獲。(可以考慮用第三方工具。) 2. 一切實例、文檔也不要安裝了。這是在web服務器上,最好不要這些例子,事實證明可以從這些例子站點突破IIS的防線的。 3. 安裝時選擇站點目錄,建議不要用缺省目錄c:\inetpub,最好安裝道不是系統盤的盤上。如: d:\IISWEB,可以考慮自建目錄。這樣即使IIS被突破,也能盡可能的保護好系統文件了。 4. 不要安裝html的遠程管理。html的遠程管理在winnt 4.0還能用的上,但漏洞比較大,而且比較危險,端口號雖然是隨機的,但很容易被人掃描道,從而留下隱患。事實上,我們可以通過另一台服務器上的IIS來管理他。這樣比較安全。 5. 多余的服務也不要安了,如NNtp,如果不做新聞組。就不要安了。smtp,如果有更好的郵件服務,也不要裝它了。 6. 索引服務器。這個索引真的是很有用,但我沒有用過他。否則,你可以用他建立個整個站點的文件搜索的,但現在好像大多數的ASP網頁都是一個網頁,動態從數據庫裡查詢。所以根本用不上索引服務器了,(不是索引不好,而是本身上面的那種ASP文件結構就不適合)所以可以不要安裝。 三. 有目的進行安全配置 ①、開發前的工作。 首先,啟動IIS後,看有沒有\iissamples,\IIShelp,\msadc\,這些目錄,如果有,他們大多是用來作為例子,幫助安裝的,刪掉他們,再把腳本庫也刪掉,直到web目錄只留下干靜的新建的虛擬目錄即可。如果有管理的web站點,也刪掉他。沒有它,我們一樣可以工作的更好。 還有看看有沒有printer的文件夾,他們大多數都是些通過web來訪問打印機的。MS就是怪。為了表示我的功力強大,允許通過web來遠程打印。相信沒有哪個網絡公司是通過web網來打印的把。也不可能讓網友來使用你的計算機吧。那好,去掉它。 然後。開始詳細配置各個web虛擬目錄的安全。大概的策略是這樣的。分類每個文件夾管理,如可以把擴展名是相同的分配到同一目錄,如*.ASP的,和*.inc就盡量分開。如果是*.ASP的,則開放虛擬目錄權限,但將實際目錄權限授予administrator,system(完全控制)everyone (rc)即可。這樣可以通過web允許讀取。但實際上你可以加大安全力度,如果你認為它是比較保密的。如果是*.inc的,則開放目錄權限,但不允許通過直接訪問。這裡又一個技巧了。比如,你可以允許實際目錄被everyone訪問,但在IIS中,你把改目錄浏覽項去掉,而包含文件只能被源文件讀取,但不允許被直接讀取。這樣,黑客就不可能下載到你的單機數據庫了,而且你的*.inc文件也不會被浏覽器直接閱讀。 剛才我的老弟"夢"還在問我,有沒有辦法可以讓別人看不到你的連接字符串,你可以試試下面的方法! 1 首先建立連接字符串,並建立一個單獨的文件*.inc(要是*.inc的,不要*.ASP的)你把你的連接字符串用變量復制進來。 如:connstr=""Provider=SQLOLEDB.1;Password=passw;...................." 2 然後建立一個文件夾include,放在根目錄裡。 3 然後每一個文件用下面的辦法打開連接。 如: set conn=server.createobject("adodb.connection") conn.open connstr 4 最後在iis裡把include 文件夾用拒絕讀的方法保護起來。你會發現,你的連接可以照常打開,但是如果對方看到你的源代碼,他也看不到連接字符串,即使他看到了包含文件路徑及名稱。他也無法下載,或是用ie 打開。所以,可以保護你的連接字符串了。 這裡用的方法是NT權限與 IIS權限的共同審核。我們知道,為了讓用戶從web上訪問道服務器的文件,每個安裝了IIS後的服務器都會有兩個內置賬號。I_USExxxxxx,I_WAMxxxxxx(x為你的機器名),這樣你就可以有的放矢地預防某些從你的web網絡查看你的必要信息的用戶了。 當然,還有一些比較好的文件策略你可以參考一下: 如:CGI (.exe, .dll, .cmd, .pl)Everyone (X)不允許讀,只能運行。Administrators(完全控制)System(完全控制)。 所以,你在編寫ASP應用程序時,盡量歸類好你的目錄。方便用IIS和NT進行管理。 如,采用下列結構比較好 d:\web\ASPtest\static (放置*.htm) d:\web\ASPtest\script (放置*.ASP) d:\web\ASPtest\include(放置*.inc) d:\web\ASPtest\images (放置*.gif,*.jpg) 這樣你就可以用上面的方法來達到安全目的了。 ②、啟用日志監測 這是亡羊補牢的好工具,至少你可以用它來監測誰通過web干了什麼。當然,你還要保護該日志的權限只能是被系統管理員和超級管理所控制。這樣避免某些人的干了某些事而不留痕跡。為了留好現場而又不影響IIS的響應速度,還是建議選則w3c擴展日志格式比較好。(以前別人介紹我用ODBC,看來比較方便,但實際上不是這樣。它受到數據庫的影響很大,而且速度較慢了)。
可以考慮紀錄下一下現場數據: 客戶 IP 地址 用戶名 方法 URI 資源 HTTP 狀態 Win32 狀態 用戶代理 服務器 IP 地址 服務器端口 如果在一台計算機上有多個 Web 服務器,則後兩種屬性非常有用。Win32 狀態屬性對於調試非常有用。 檢查日志時,密切注意錯誤5 ,這意味著訪問被拒絕。在命令行上輸入 net helpmsg err,可找出其它Win32 錯誤的含義,其中 err 是要查找的錯誤號。 ③、配置合適的腳本映射 相信我,大部分的ASP源代碼洩漏都是通過不安全或是有錯誤的腳本映射導致的。而他們中的大多數可能你用不到,如下面我說的: 1 *.htr這是一個比較厲害的文件,他是web應用程序的一種。同hta一樣。這是些比較厲害的功能,,但介紹很少。hta就是一種html 格式的 application,功能比較強大。切安全性比htm要低。所以可能會導致功能強大的操作。比如htr就可以通過web來重設密碼。相信我們大多數的ASP程序員和NT網管不需要這個。那好,把他的對應選項刪掉好了。否則,任何人都可以通過你的web來進行非法操作,甚至格式化掉你的硬盤。 2 *.hta 這個我已經說過了,他是把雙刃劍,用的好,你可以通過他來訪問nt的很多操作,在ASP上開nt用戶也是可能的。但大多數的工作可以不通過web來事最好的。而*.hta在web很少用到,雖然他在iis4.0就推出了。比如,你把一個文件保存成*.hta,你就可以用ie打開。看看,很奇怪的界面吧。聽ms的工程師說.net中把*.hta換了個說法,功能加大了。看來網管的工作又該加大了。如果你想安全一些,刪掉吧。 3 *.idc 這個東東是個比較老的數據庫連接方法了,現在大多數都直接用ASP文件。不用idc了,所以刪掉他。 4 *.printer這個是打印機文件,去掉他好了 5 *.htw , *.ida *.idq這些都是索引文件,也可以去掉了。 ④、好的安全習慣 要注意多上ms的站點,看看安全公告。(MS的訪問量就是這樣長期排行世界前三的!)還要准備好一些第三方的工具。如掃描工具,模擬攻擊工具。多上安全站點看看。 如果你可以交道一些比較好的黑道朋友(我另一個師兄家家的方法),也是比較好的。(黑道是黑客走的路!) ⑤、防止ASP代碼被洩漏 這裡只能說是防止,我只有從已經發現的看ASP方法的漏洞入手,現在對於iis4.0則幾乎有20種以上的辦法,但安裝了sp6a後有兩種,可以到微軟的網站安全公告下載2000-8月後的補丁可以解決。但如果你用了本文上面的方法。可以裝到sp6就可以了。 如果是win2000 server,則有兩種方法。安了sp1後,還有一種,所以你必須倒微軟安全公告欄去下載相應的hotfix。可以解決。 ⑥、防止惡意的破壞 這個功能能對付一些被你監測到的不良分子,你可以在日志中或第三方工具看到到底是誰在不停的探測、破壞你的IIS。那麼把他列為不收歡迎的黑名單,這樣,你再配置站點時可以對其IP或域進行拒絕訪問,不過這一過程是要付出代價的,你的IIS要擔任反向查找的功能。可能會比較耗時。 ⑦、安全的話題 以上還只是IIS與ASP的。如果你要用到數據庫,用到遠程管理,用到遠程連接數據庫,那還要分別注意。正如我說的,沒有絕對的安全,而這也才是安全的需要。