保護 xml web 服務(wù)免受黑客攻擊 [第一部分] []第二部分] matt powell microsoft corporation 2001 年 9 月 5 日
簡介
在與開發(fā)人員就 xml web 服務(wù)的將來談話的過程中我們得知,他們最大的擔(dān)心之一就是害怕軟件中存在的弱點可能使服務(wù)受到不懷好意的用戶的攻擊。這可以說既是一個壞消息,又是一個好消息。說它是壞消息,是因為攻擊可能導(dǎo)致服務(wù)的可用性受限制、私有數(shù)據(jù)泄露,更糟糕的情況是,使計算機的控制權(quán)落入這些不懷好意的用戶的手中。說它是好消息,是因為您可以獲得一些真正的保護,以減少這些攻擊所帶來的風(fēng)險。我們將介紹已出現(xiàn)的攻擊類型,以及您如何保護自己在部署、設(shè)計和開發(fā)領(lǐng)域的心血。此主題的第一篇專欄文章將集中講述部署時應(yīng)考慮的問題,下一篇專欄文章將講述在開發(fā) xml web 服務(wù)時需注意的設(shè)計和開發(fā)問題。
在要求身份驗證的系統(tǒng)上,最常見的黑客攻擊之一是算出某個用戶的身份驗證證書,以該用戶登錄,然后訪問該用戶的信息。這已經(jīng)很糟糕了,但如果被泄露的證書屬于系統(tǒng)管理員或其他某個具有更高權(quán)限的用戶,則風(fēng)險會更大。因為,在這種情況下,攻擊可能不僅限于泄露單個用戶的數(shù)據(jù),而且有泄露所有用戶數(shù)據(jù)的可能。 黑客可能會使用多種方法來確定用戶的密碼。例如:嘗試對該用戶有意義的字,如該用戶的姓名、其寵物的名字或生日。更有恒心的黑客甚至?xí)L試字典中的每個字(字典攻擊)。獲取證書信息的其他方法包括:捕捉網(wǎng)絡(luò)數(shù)據(jù)包并讀取發(fā)送的數(shù)據(jù)中的信息;通過 dns 欺騙,插入一臺不懷好意的計算機,作為客戶端和服務(wù)器之間的中介;假裝系統(tǒng)管理員,以排除故障為由,要求用戶給出其證書;或者,記錄與服務(wù)器的登錄握手,然后重復(fù)這一過程,嘗試通過身份驗證。 可以通過采取諸如強制實現(xiàn)加強密碼等措施以及使用安全身份驗證機制,來緩解由欺騙所帶來的大多數(shù)風(fēng)險。
利用錯誤
決定系統(tǒng)弱點的關(guān)鍵因素之一是運行在該系統(tǒng)上的代碼的質(zhì)量。系統(tǒng)錯誤不僅僅局限于使某個特定的線程出現(xiàn)異常。黑客可能利用這些弱點在系統(tǒng)上執(zhí)行他們自己的代碼,訪問具有較高權(quán)限的資源,或者,只是利用可能潛在地引起系統(tǒng)速度減慢或變得不可用的資源漏洞(由錯誤引起的)。這種攻擊中最著名的一個例子就是紅色代碼蠕蟲病毒,這種病毒利用 index server isapi 擴展中的錯誤,在受感染的系統(tǒng)上執(zhí)行它選擇的代碼,然后繼續(xù)尋找其他有弱點的計算機。 另外一種常見攻擊就是利用輸入數(shù)據(jù)的有效性假設(shè)方面的錯誤。例如,xml web service 希望用戶名作為參數(shù)輸入的情況。如果您假設(shè)用戶名僅包含 ascii 字符串,并因此將它直接放入您的 sql 查詢,可能會使您的服務(wù)出現(xiàn)嚴重的弱點。例如,假設(shè)您的代碼中有一個 sql 查詢,如下所示:
sqlquery = "select * from users where (username='" & usernameinput & "')
如果 usernameinput 參數(shù)包含的內(nèi)容恰好如下所示
bob') or not (username='0
那么您的服務(wù)可能會返回所有記錄,而不只是特定用戶的記錄。
拒絕服務(wù)
拒絕服務(wù)攻擊的目的不在于闖入一個站點,或更改其數(shù)據(jù),而在于使站點無法服務(wù)于合法的請求。紅色代碼蠕蟲病毒不僅感染計算機,并繼而尋找并感染其他計算機,而且,還使得被感染的計算機向官方的白宮 web 站點發(fā)送大量的數(shù)據(jù)包。因為數(shù)千臺計算機被感染,所以發(fā)往白宮 web 站點的請求的數(shù)目極高。因為紅色代碼蠕蟲病毒會導(dǎo)致從大量計算機發(fā)出請求,所以被視作“分布式拒絕服務(wù)攻擊”。由于涉及到如此眾多的計算機,因此這種攻擊極難限制。 拒絕服務(wù)請求可能有多種形式,因為可以通過多種級別發(fā)送偽請求,以攻擊您的系統(tǒng)。例如,您的站點可能允許用戶 ping 您的 ip 地址,從而使 icmp 消息被發(fā)送到您的服務(wù)器,然后又被返回。這是一種排除連接故障的有效方法。但是,如果數(shù)百臺計算機同時向您的服務(wù)器發(fā)送數(shù)千個數(shù)據(jù)包,您會發(fā)現(xiàn)您的計算機忙于處理 ping 請求,而無法獲得 cpu 時間來處理其他正常的請求。 級別稍高的是 syn 攻擊,這種攻擊需要編寫一個低級網(wǎng)絡(luò)程序,所發(fā)送的數(shù)據(jù)包看起來有如 tcp 連接握手中的第一個數(shù)據(jù)包(syn 包)。這種攻擊比 ping 請求攻擊危害更大,因為對于 ping 請求,您可以在必要時將其忽略,但對于 syn 攻擊,只要有應(yīng)用程序在偵聽 tcp 端口(如 web 服務(wù)器),則無論您何時收到看似有效的連接請求,都需要花費資源。 最高級別的拒絕服務(wù)攻擊可以呈現(xiàn)一種向 xml web service 發(fā)送多個基本有效的 soap 請求的形式,這種請求將導(dǎo)致數(shù)據(jù)庫開始查找操作。數(shù)據(jù)庫查找可能需要花費一段很長的時間。因此,如果每秒鐘向服務(wù)器發(fā)送數(shù)千個這樣的請求,會使得接收請求的 web 服務(wù)器和后端數(shù)據(jù)庫服務(wù)器變得非常忙。而且,這也會使您的服務(wù)無法及時處理其他請求。 如果您的計算機上有包含錯誤的代碼,那么拒絕服務(wù)攻擊會更加容易。例如,如果投入使用的 web service 有這樣一個錯誤:當(dāng)出現(xiàn)某個特定類型的錯誤時,會顯示一個消息框,黑客可以利用這一缺陷向您的計算機發(fā)送數(shù)目相對較少的請求,使該消息框顯示出來。這會鎖定所有的線程處理請求,因此有效地阻止了其他人訪問您的服務(wù)。
部署問題
到目前為止,我們已介紹了幾種不同的攻擊類型,那么我們能對這些可惡的攻擊采取什么措施呢?有一個好消息可以告訴您,您可以采取很多種方法來保護自己的服務(wù),而且,這些保護大都十分簡單。讓我們首先來看一看只需控制 web 服務(wù)器和后端服務(wù)器的配置方法就可以實現(xiàn)的保護類型。 應(yīng)采取許多重要的保護措施確保您的 web 服務(wù)器不會受到攻擊的破壞,包括一些眾所周知的措施,如確保具有最新的安全性更新。下面列出了自我保護措施中最重要的步驟。其中的許多步驟并不特別針對托管 web 服務(wù),而是適用于所有的 web 服務(wù)器托管內(nèi)容。
安裝安全性更新
首先,確保您具有最新的更新,以避免受到紅色代碼蠕蟲病毒的攻擊。可以在 installing the patch that stops the code red worm(英文)中找到有關(guān)安裝更新的說明和下載修補程序的鏈接。 對紅色代碼蠕蟲病毒的修復(fù)以及其他修復(fù)最終會包含在 microsoft® windows® 2000 的下一個服務(wù)包中,并已在 microsoft® windows® xp 中得到解決。 當(dāng)然,更大的問題是如何避免其他潛在的弱點,并保護自己免受將來可能出現(xiàn)的問題的侵害。有關(guān) microsoft 產(chǎn)品安全問題的信息,可以訂閱“microsoft 安全性通知列表”。對于出現(xiàn)的任何新問題,都將以電子郵件的形式通知訂閱者。有關(guān)如何訂閱的說明,請查看 product security notification(英文)網(wǎng)頁。
限制 web 服務(wù)器的訪問者
如果您對攻擊的問題很關(guān)注,尤其是如果您的 xml web 服務(wù)上包含私有信息,那么您應(yīng)限定僅合法的用戶可以訪問您的站點。這可以用多種方法來實現(xiàn),但下面講述的幾種方法可以防止黑客訪問您的 xml web 服務(wù)。
通過使用 http 身份驗證來對用戶進行驗證,然后限定他們可以訪問哪些資源。身份驗證的配置方法:用鼠標(biāo)右鍵單擊 internet 服務(wù)管理器中的 web 站點、虛擬目錄或單個文件;從彈出菜單中選擇“屬性”;進入“目錄安全性”選項卡,單擊“匿名訪問和身份驗證控制”下面的“編輯”按鈕。
限定可以訪問您的 web 服務(wù)器的 ip 地址。如果有一些可以使用您站點的合法用戶,那么可以只允許這些用戶的特定 ip 地址訪問您的 web 站點。您還可以限定某些 ip 地址范圍具有訪問權(quán)限,或拒絕某個 ip 地址或某個 ip 地址范圍的訪問權(quán)限。甚至可以根據(jù)域名進行限定,但在與您計算機連接的 ip 地址上,可能需要花費很長的時間來進行域名查找。修改 ip 地址限制的方法:轉(zhuǎn)至步驟 1 中提到的“目錄安全性”選項卡,單擊“ip 地址及域名限制”下面的“編輯”按鈕。圖 1 顯示了“ip 地址及域名限制”對話框,其中將訪問權(quán)限限制為三個特定的 ip 地址。
計算機上運行的軟件越多,就越有可能受到攻擊,尤其是在您作為某種具有較高權(quán)限的用戶運行服務(wù)的時候更是如此。如果您的計算機專門運行 web 服務(wù),且 web 服務(wù)獨立于其他服務(wù),那么應(yīng)在您的計算機上禁用其他某些服務(wù),包括 ftp 服務(wù)、smtp 服務(wù)以及諸如終端服務(wù)客戶端等的 windows 服務(wù)。 也應(yīng)限制可通過 internet information server 運行或訪問的軟件數(shù)量。確保僅配置了您需要的虛擬站點和目錄。首先,應(yīng)該刪除管理 web 站點。其次,還應(yīng)該刪除 iissamples 虛擬目錄。同樣,如果您的計算機專門運行 web 服務(wù),應(yīng)刪除其他任何虛擬目錄。 即便對于已經(jīng)安裝某些軟件的虛擬目錄,也必須弄清楚哪種軟件是訪問您的 web 站點時可以使用的。在 internet 服務(wù)管理器中,用鼠標(biāo)右鍵單擊某個站點或虛擬目錄,從所出現(xiàn)的菜單中選擇“屬性”,選擇“虛擬目錄”選項卡,然后單擊“配置”按鈕,將出現(xiàn)“應(yīng)用程序映射”選項卡,其中列出了與不同的 isapi 擴展或 cgi 應(yīng)用程序相關(guān)聯(lián)的所有擴展。如果您沒有使用這些擴展,請將它們從列表中刪除。.idq 文件的索引服務(wù)器擴展自身存在錯誤,紅色代碼蠕蟲病毒就利用了這個錯誤。如果您是在虛擬站點級進行此項更改,那么您不需要為所創(chuàng)建的每個虛擬目錄都進行此項工作。
使用 microsoft internet information server 安全性核對表
microsoft 為 internet information server 4.0 創(chuàng)建了一個安全性核對表,其中除了我在本文中提到的所有安全事項以外,還提到了其他更多的安全事項。使用此核對表來確保您至少已經(jīng)考慮了所有的安全性選項。雖然您運行的可能不是 internet information server 4.0(5.0 版是隨 windows 2000 一起發(fā)布的版本),但本文中的大多數(shù)步驟仍然適用,而且,對于將來 internet information server 版本,也仍然適用。可以從 microsoft internet information server 4.0 security checklist(英文)中找到此核對表。
總結(jié)
根據(jù)您計算機和網(wǎng)絡(luò)配置的不同,會有多種保護措施,您應(yīng)采取相應(yīng)的措施保護您的 web 服務(wù)器免受黑客攻擊。在下一篇專欄文章中,我們將研究開發(fā)人員和設(shè)計人員在創(chuàng)建其 xml web service 時需注意的問題,并繼續(xù)探討保護您的 xml web service 免受黑客攻擊的方法。
at your service matt powell 是 msdn architectural samples team 的成員,他幫助開發(fā)了最新的 soap toolkit 1.0。matt 的其他成就包括與他人合著了由微軟出版社出版的《running microsoft internet information server》一書以及為各種雜志撰寫了大量的文章。他有一個幸福美滿的家庭,是他每天眷戀的地方。