直播中
在與開(kāi)發(fā)人員就 XML Web 服務(wù)的將來(lái)談話的過(guò)程中我們得知,他們最大的擔(dān)心之一就是害怕軟件中存在的弱點(diǎn)可能使服務(wù)受到不懷好意的用戶的攻擊。這可以說(shuō)既是一個(gè)壞消息,又是一個(gè)好消息。說(shuō)它是壞消息,是因?yàn)楣艨赡軐?dǎo)致服務(wù)的可用性受限制、私有數(shù)據(jù)泄露,更糟糕的情況是,使計(jì)算機(jī)的控制權(quán)落入這些不懷好意的用戶的手中。說(shuō)它是好消息,是因?yàn)槟梢垣@得一些真正的保護(hù),以減少這些攻擊所帶來(lái)的風(fēng)險(xiǎn)。我們將介紹已出現(xiàn)的攻擊類型,以及您如何保護(hù)自己在部署、設(shè)計(jì)和開(kāi)發(fā)領(lǐng)域的心血。此主題的第一篇專欄文章將集中講述部署時(shí)應(yīng)考慮的問(wèn)題,下一篇專欄文章將講述在開(kāi)發(fā) XML Web 服務(wù)時(shí)需注意的設(shè)計(jì)和開(kāi)發(fā)問(wèn)題。
攻擊類型
要找出風(fēng)險(xiǎn)所在并了解如何避免,第一步應(yīng)了解服務(wù)可能遭受的攻擊類型。在了解了可能遇到的問(wèn)題種類后,就可以采取適當(dāng)?shù)拇胧﹣?lái)減小這些問(wèn)題所帶來(lái)的風(fēng)險(xiǎn)。
攻擊通??煞譃槿箢悾?
欺騙
利用錯(cuò)誤
拒絕服務(wù)
欺騙
在要求身份驗(yàn)證的系統(tǒng)上,最常見(jiàn)的黑客攻擊之一是算出某個(gè)用戶的身份驗(yàn)證證書(shū),以該用戶登錄,然后訪問(wèn)該用戶的信息。這已經(jīng)很糟糕了,但如果被泄露的證書(shū)屬于系統(tǒng)管理員或其他某個(gè)具有更高權(quán)限的用戶,則風(fēng)險(xiǎn)會(huì)更大。因?yàn)?,在這種情況下,攻擊可能不僅限于泄露單個(gè)用戶的數(shù)據(jù),而且有泄露所有用戶數(shù)據(jù)的可能。
黑客可能會(huì)使用多種方法來(lái)確定用戶的密碼。例如:嘗試對(duì)該用戶有意義的字,如該用戶的姓名、其寵物的名字或生日。更有恒心的黑客甚至?xí)L試字典中的每個(gè)字(字典攻擊)。獲取證書(shū)信息的其他方法包括:捕捉網(wǎng)絡(luò)數(shù)據(jù)包并讀取發(fā)送的數(shù)據(jù)中的信息;通過(guò) DNS 欺騙,插入一臺(tái)不懷好意的計(jì)算機(jī),作為客戶端和服務(wù)器之間的中介;假裝系統(tǒng)管理員,以排除故障為由,要求用戶給出其證書(shū);或者,記錄與服務(wù)器的登錄握手,然后重復(fù)這一過(guò)程,嘗試通過(guò)身份驗(yàn)證。
可以通過(guò)采取諸如強(qiáng)制實(shí)現(xiàn)加強(qiáng)密碼等措施以及使用安全身份驗(yàn)證機(jī)制,來(lái)緩解由欺騙所帶來(lái)的大多數(shù)風(fēng)險(xiǎn)。
利用錯(cuò)誤
決定系統(tǒng)弱點(diǎn)的關(guān)鍵因素之一是運(yùn)行在該系統(tǒng)上的代碼的質(zhì)量。系統(tǒng)錯(cuò)誤不僅僅局限于使某個(gè)特定的線程出現(xiàn)異常。黑客可能利用這些弱點(diǎn)在系統(tǒng)上執(zhí)行他們自己的代碼,訪問(wèn)具有較高權(quán)限的資源,或者,只是利用可能潛在地引起系統(tǒng)速度減慢或變得不可用的資源漏洞(由錯(cuò)誤引起的)。這種攻擊中最著名的一個(gè)例子就是紅色代碼蠕蟲(chóng)病毒,這種病毒利用 Index Server ISAPI 擴(kuò)展中的錯(cuò)誤,在受感染的系統(tǒng)上執(zhí)行它選擇的代碼,然后繼續(xù)尋找其他有弱點(diǎn)的計(jì)算機(jī)。
另外一種常見(jiàn)攻擊就是利用輸入數(shù)據(jù)的有效性假設(shè)方面的錯(cuò)誤。例如,XML Web Service 希望用戶名作為參數(shù)輸入的情況。如果您假設(shè)用戶名僅包含 ASCII 字符串,并因此將它直接放入您的 SQL 查詢,可能會(huì)使您的服務(wù)出現(xiàn)嚴(yán)重的弱點(diǎn)。例如,假設(shè)您的代碼中有一個(gè) SQL 查詢,如下所示:
sqlQuery = "SELECT * FROM Users WHERE (Username='" & UsernameInput & "')
如果 UsernameInput 參數(shù)包含的內(nèi)容恰好如下所示
Bob') or not (Username='0
那么您的服務(wù)可能會(huì)返回所有記錄,而不只是特定用戶的記錄。
拒絕服務(wù)
拒絕服務(wù)攻擊的目的不在于闖入一個(gè)站點(diǎn),或更改其數(shù)據(jù),而在于使站點(diǎn)無(wú)法服務(wù)于合法的請(qǐng)求。紅色代碼蠕蟲(chóng)病毒不僅感染計(jì)算機(jī),并繼而尋找并感染其他計(jì)算機(jī),而且,還使得被感染的計(jì)算機(jī)向官方的白宮 Web 站點(diǎn)發(fā)送大量的數(shù)據(jù)包。因?yàn)閿?shù)千臺(tái)計(jì)算機(jī)被感染,所以發(fā)往白宮 Web 站點(diǎn)的請(qǐng)求的數(shù)目極高。因?yàn)榧t色代碼蠕蟲(chóng)病毒會(huì)導(dǎo)致從大量計(jì)算機(jī)發(fā)出請(qǐng)求,所以被視作“分布式拒絕服務(wù)攻擊”。由于涉及到如此眾多的計(jì)算機(jī),因此這種攻擊極難限制。
拒絕服務(wù)請(qǐng)求可能有多種形式,因?yàn)榭梢酝ㄟ^(guò)多種級(jí)別發(fā)送偽請(qǐng)求,以攻擊您的系統(tǒng)。例如,您的站點(diǎn)可能允許用戶 PING 您的 IP 地址,從而使 ICMP 消息被發(fā)送到您的服務(wù)器,然后又被返回。這是一種排除連接故障的有效方法。但是,如果數(shù)百臺(tái)計(jì)算機(jī)同時(shí)向您的服務(wù)器發(fā)送數(shù)千個(gè)數(shù)據(jù)包,您會(huì)發(fā)現(xiàn)您的計(jì)算機(jī)忙于處理 PING 請(qǐng)求,而無(wú)法獲得 CPU 時(shí)間來(lái)處理其他正常的請(qǐng)求。
級(jí)別稍高的是 SYN 攻擊,這種攻擊需要編寫一個(gè)低級(jí)網(wǎng)絡(luò)程序,所發(fā)送的數(shù)據(jù)包看起來(lái)有如 TCP 連接握手中的第一個(gè)數(shù)據(jù)包(SYN 包)。這種攻擊比 PING 請(qǐng)求攻擊危害更大,因?yàn)閷?duì)于 PING 請(qǐng)求,您可以在必要時(shí)將其忽略,但對(duì)于 SYN 攻擊,只要有應(yīng)用程序在偵聽(tīng) TCP 端口(如 Web 服務(wù)器),則無(wú)論您何時(shí)收到看似有效的連接請(qǐng)求,都需要花費(fèi)資源。
最高級(jí)別的拒絕服務(wù)攻擊可以呈現(xiàn)一種向 XML Web Service 發(fā)送多個(gè)基本有效的 SOAP 請(qǐng)求的形式,這種請(qǐng)求將導(dǎo)致數(shù)據(jù)庫(kù)開(kāi)始查找操作。數(shù)據(jù)庫(kù)查找可能需要花費(fèi)一段很長(zhǎng)的時(shí)間。因此,如果每秒鐘向服務(wù)器發(fā)送數(shù)千個(gè)這樣的請(qǐng)求,會(huì)使得接收請(qǐng)求的 Web 服務(wù)器和后端數(shù)據(jù)庫(kù)服務(wù)器變得非常忙。而且,這也會(huì)使您的服務(wù)無(wú)法及時(shí)處理其他請(qǐng)求。
如果您的計(jì)算機(jī)上有包含錯(cuò)誤的代碼,那么拒絕服務(wù)攻擊會(huì)更加容易。例如,如果投入使用的 Web Service 有這樣一個(gè)錯(cuò)誤:當(dāng)出現(xiàn)某個(gè)特定類型的錯(cuò)誤時(shí),會(huì)顯示一個(gè)消息框,黑客可以利用這一缺陷向您的計(jì)算機(jī)發(fā)送數(shù)目相對(duì)較少的請(qǐng)求,使該消息框顯示出來(lái)。這會(huì)鎖定所有的線程處理請(qǐng)求,因此有效地阻止了其他人訪問(wèn)您的服務(wù)。