在與開發人員就 xml web 服務的將來談話的過程中我們得知,他們最大的擔心之一就是害怕軟件中存在的弱點可能使服務受到不懷好意的用戶的攻擊。這可以說既是一個壞消息,又是一個好消息。說它是壞消息,是因為攻擊可能導致服務的可用性受限制、私有數據泄露,更糟糕的情況是,使計算機的控制權落入這些不懷好意的用戶的手中。說它是好消息,是因為您可以獲得一些真正的保護,以減少這些攻擊所帶來的風險。我們將介紹已出現的攻擊類型,以及您如何保護自己在部署、設計和開發領域的心血。此主題的第一篇專欄文章將集中講述部署時應考慮的問題,下一篇專欄文章將講述在開發 xml web 服務時需注意的設計和開發問題。
在要求身份驗證的系統上,最常見的黑客攻擊之一是算出某個用戶的身份驗證證書,以該用戶登錄,然后訪問該用戶的信息。這已經很糟糕了,但如果被泄露的證書屬于系統管理員或其他某個具有更高權限的用戶,則風險會更大。因為,在這種情況下,攻擊可能不僅限于泄露單個用戶的數據,而且有泄露所有用戶數據的可能。 黑客可能會使用多種方法來確定用戶的密碼。例如:嘗試對該用戶有意義的字,如該用戶的姓名、其寵物的名字或生日。更有恒心的黑客甚至會嘗試字典中的每個字(字典攻擊)。獲取證書信息的其他方法包括:捕捉網絡數據包并讀取發送的數據中的信息;通過 dns 欺騙,插入一臺不懷好意的計算機,作為客戶端和服務器之間的中介;假裝系統管理員,以排除故障為由,要求用戶給出其證書;或者,記錄與服務器的登錄握手,然后重復這一過程,嘗試通過身份驗證。 可以通過采取諸如強制實現加強密碼等措施以及使用安全身份驗證機制,來緩解由欺騙所帶來的大多數風險。
利用錯誤
決定系統弱點的關鍵因素之一是運行在該系統上的代碼的質量。系統錯誤不僅僅局限于使某個特定的線程出現異常。黑客可能利用這些弱點在系統上執行他們自己的代碼,訪問具有較高權限的資源,或者,只是利用可能潛在地引起系統速度減慢或變得不可用的資源漏洞(由錯誤引起的)。這種攻擊中最著名的一個例子就是紅色代碼蠕蟲病毒,這種病毒利用 index server isapi 擴展中的錯誤,在受感染的系統上執行它選擇的代碼,然后繼續尋找其他有弱點的計算機。 另外一種常見攻擊就是利用輸入數據的有效性假設方面的錯誤。例如,xml web service 希望用戶名作為參數輸入的情況。如果您假設用戶名僅包含 ascii 字符串,并因此將它直接放入您的 sql 查詢,可能會使您的服務出現嚴重的弱點。例如,假設您的代碼中有一個 sql 查詢,如下所示:
sqlquery = "select * from users where (username='" & usernameinput & "')
如果 usernameinput 參數包含的內容恰好如下所示
bob') or not (username='0
那么您的服務可能會返回所有記錄,而不只是特定用戶的記錄。
拒絕服務
拒絕服務攻擊的目的不在于闖入一個站點,或更改其數據,而在于使站點無法服務于合法的請求。紅色代碼蠕蟲病毒不僅感染計算機,并繼而尋找并感染其他計算機,而且,還使得被感染的計算機向官方的白宮 web 站點發送大量的數據包。因為數千臺計算機被感染,所以發往白宮 web 站點的請求的數目極高。因為紅色代碼蠕蟲病毒會導致從大量計算機發出請求,所以被視作“分布式拒絕服務攻擊”。由于涉及到如此眾多的計算機,因此這種攻擊極難限制。 拒絕服務請求可能有多種形式,因為可以通過多種級別發送偽請求,以攻擊您的系統。例如,您的站點可能允許用戶 ping 您的 ip 地址,從而使 icmp 消息被發送到您的服務器,然后又被返回。這是一種排除連接故障的有效方法。但是,如果數百臺計算機同時向您的服務器發送數千個數據包,您會發現您的計算機忙于處理 ping 請求,而無法獲得 cpu 時間來處理其他正常的請求。 級別稍高的是 syn 攻擊,這種攻擊需要編寫一個低級網絡程序,所發送的數據包看起來有如 tcp 連接握手中的第一個數據包(syn 包)。這種攻擊比 ping 請求攻擊危害更大,因為對于 ping 請求,您可以在必要時將其忽略,但對于 syn 攻擊,只要有應用程序在偵聽 tcp 端口(如 web 服務器),則無論您何時收到看似有效的連接請求,都需要花費資源。 最高級別的拒絕服務攻擊可以呈現一種向 xml web service 發送多個基本有效的 soap 請求的形式,這種請求將導致數據庫開始查找操作。數據庫查找可能需要花費一段很長的時間。因此,如果每秒鐘向服務器發送數千個這樣的請求,會使得接收請求的 web 服務器和后端數據庫服務器變得非常忙。而且,這也會使您的服務無法及時處理其他請求。 如果您的計算機上有包含錯誤的代碼,那么拒絕服務攻擊會更加容易。例如,如果投入使用的 web service 有這樣一個錯誤:當出現某個特定類型的錯誤時,會顯示一個消息框,黑客可以利用這一缺陷向您的計算機發送數目相對較少的請求,使該消息框顯示出來。這會鎖定所有的線程處理請求,因此有效地阻止了其他人訪問您的服務。