直播中
設(shè)計(jì)問(wèn)題
設(shè)計(jì) Web 服務(wù)時(shí)必須認(rèn)真考慮安全問(wèn)題,以及如何能夠使遭受攻擊的危險(xiǎn)性降到最低。許多在試圖防止攻擊時(shí)可能起作用的因素都可以在設(shè)計(jì)時(shí)予以考慮。例如考慮如何進(jìn)行身份驗(yàn)證,或希望返回哪類錯(cuò)誤等問(wèn)題。
確定安全需求
在 XML Web 服務(wù)設(shè)計(jì)的早期,您需要確定所需的安全級(jí)別。某些 XML Web 服務(wù)根本不需要身份驗(yàn)證,而其他服務(wù)對(duì)于確定使用該服務(wù)的用戶有非常嚴(yán)格的要求。由 XML Web 服務(wù)接收和發(fā)送的數(shù)據(jù)需要何種隱私級(jí)別?如果某個(gè) XML Web 服務(wù)用戶聲明他們未請(qǐng)求您記錄中所指明的服務(wù),則在工時(shí)、處理能力或法律費(fèi)用方面可能要花費(fèi)哪些成本?
首先,讓我們來(lái)看一下身份驗(yàn)證。某些種類的身份驗(yàn)證會(huì)比其他身份驗(yàn)證更容易遭受攻擊。在低端,如果您使用“HTTP 基本身份驗(yàn)證”,則可以看到網(wǎng)絡(luò)上的數(shù)據(jù)包的所有用戶都能看到您的用戶名和密碼。如果通過(guò) Internet 發(fā)送請(qǐng)求,則您無(wú)法控制能看到您的數(shù)據(jù)包的用戶。在身份驗(yàn)證級(jí)別的高端,您可以考慮使用 SSL 客戶端證書進(jìn)行身份驗(yàn)證,該證書提供了一個(gè)編碼的通道,并使數(shù)據(jù)包的惡意攻擊者很難進(jìn)行攻擊。有關(guān)身份驗(yàn)證選項(xiàng)的詳細(xì)討論,請(qǐng)參閱 At Your Service 專欄中 Mary Kirtland 的 Authentication and Authorization(英文)。
我們已經(jīng)間接提到了身份驗(yàn)證過(guò)程中的隱私問(wèn)題,當(dāng)涉及到電子欺騙時(shí)您應(yīng)考慮此問(wèn)題。您還需要知道與所有從 XML Web 服務(wù)發(fā)送和接收的數(shù)據(jù)有關(guān)的隱私問(wèn)題,而不僅僅是用戶名和密碼。例如,您可能會(huì)為通過(guò)身份驗(yàn)證的用戶生成一個(gè)會(huì)話密鑰,該用戶將此密鑰隨每個(gè)請(qǐng)求一起發(fā)送以標(biāo)識(shí)自身。如果此密鑰未加密發(fā)送,則數(shù)據(jù)包的惡意攻擊者可以看到此密鑰,并用它向您的 Web 服務(wù)發(fā)送自己的請(qǐng)求,這樣您的 Web 服務(wù)會(huì)將其看作是原來(lái)那個(gè)合法用戶。
另一個(gè)隱私問(wèn)題是由 Web 服務(wù)發(fā)送和接收的簡(jiǎn)單數(shù)據(jù)。該數(shù)據(jù)是否因其敏感性強(qiáng)而需要加密?SSL 加密的代價(jià)是 Web 服務(wù)會(huì)發(fā)送和接收整個(gè)加密的通道,從而降低性能。您或許可以只加密請(qǐng)求中的敏感項(xiàng),但您隨后可能需要在客戶端上安裝自定義編寫的軟件以啟用加密/解密。使用 SSL 加密整個(gè)通道的一個(gè)優(yōu)點(diǎn)是:目前大多數(shù)客戶端平臺(tái)都支持基本 SSL 通信,而不需要針對(duì)應(yīng)用程序編寫特定代碼。
就基本安全性設(shè)計(jì)而言,還必須考慮否認(rèn)的概念,即一個(gè)用戶可以拒絕承認(rèn)其通過(guò) XML Web 服務(wù)執(zhí)行的操作。例如,如果您提供股票交易服務(wù),而某些人聲稱他們沒(méi)有要求您的系統(tǒng)為其出售股票,并且要否認(rèn)此出售命令。很明顯,與其他服務(wù)相比,某些 XML Web 服務(wù)對(duì)這種問(wèn)題可能會(huì)更為關(guān)心,但是您應(yīng)該確定您的服務(wù)可能會(huì)遇到的危險(xiǎn),以及在方案中應(yīng)采取什么樣的有效措施。
使用安全的身份驗(yàn)證系統(tǒng)肯定是避免出現(xiàn)這類危險(xiǎn)的首要步驟。例如,使用 HTTP 基本身份驗(yàn)證可能是不安全的,但是通過(guò)使用 SSL 的加密通道來(lái)使用此身份驗(yàn)證則是安全的。如果用戶使用空密碼或容易猜到的密碼,即使具有安全的身份驗(yàn)證系統(tǒng)也是沒(méi)有用的。強(qiáng)制使用強(qiáng)加密密碼是防止出現(xiàn)此類問(wèn)題的重要步驟??傊?,用戶和服務(wù)執(zhí)行者都有責(zé)任防止密碼泄露。
最后,如果不審核通過(guò)服務(wù)發(fā)生的事件,當(dāng)出現(xiàn)否認(rèn)情況時(shí),安全的身份驗(yàn)證和強(qiáng)加密密碼都是毫無(wú)意義的。當(dāng)事務(wù)中存在否認(rèn)威脅時(shí),應(yīng)記錄這些事務(wù)及其用戶、時(shí)間、日期等足夠多的信息以標(biāo)識(shí)事務(wù)的詳細(xì)信息。否則,當(dāng)出現(xiàn)爭(zhēng)論時(shí),您可能缺少足夠的證據(jù)以證實(shí)您的觀點(diǎn)。
審核、報(bào)告和監(jiān)視
審核對(duì)減少否認(rèn)危險(xiǎn)程度起著重要的作用;在識(shí)別其他種類的攻擊過(guò)程中,也起著關(guān)鍵作用。例如,如果不是您的審核記錄中的統(tǒng)計(jì)數(shù)據(jù)表明您的服務(wù)存在異常使用情況,您可能根本意識(shí)不到您的服務(wù)正在遭受攻擊。例如,您是否注意到某個(gè)人正在對(duì)登錄方式進(jìn)行字典攻擊?所以,我們將講述在審核、報(bào)告和監(jiān)視時(shí)需要考慮的問(wèn)題,以保護(hù) XML Web 服務(wù)免受攻擊。
審核的概念就是記錄所發(fā)生的每個(gè)事件的所有信息。但是,當(dāng)通過(guò) XML Web 服務(wù)的數(shù)據(jù)量很大時(shí),此想法可能是不切實(shí)際的。審核記錄至少應(yīng)包括所有請(qǐng)求的時(shí)間、日期和 IP 地址。如果 XML Web 服務(wù)經(jīng)過(guò)身份驗(yàn)證,您需要在每個(gè)審核記錄中包括用戶名。如果您的服務(wù)支持多種方法或消息格式,您需要標(biāo)識(shí)調(diào)用的是哪一個(gè)。最后,您需要包括足夠的信息以滿足您標(biāo)識(shí)調(diào)用詳細(xì)信息的需要。例如,如果 XML Web 服務(wù)使用了一種方法,您可能希望記錄傳遞給該方法的所有參數(shù)。
您還需要考慮其他需要,例如當(dāng)站點(diǎn)遭到攻擊時(shí)您可能需要回滾事務(wù)。而且,您的審核記錄往往是某些報(bào)告的最佳信息源。由于審核記錄可能相當(dāng)大,您需要協(xié)調(diào)審核設(shè)計(jì)和備份策略。
審核處理的是通過(guò)您的服務(wù)同時(shí)發(fā)生的所有事件的記錄,報(bào)告則是向用戶、操作員和管理員匯報(bào)系統(tǒng)的使用信息。報(bào)告是保護(hù) XML Web 服務(wù)免受攻擊的一個(gè)重要部分,因?yàn)橥ㄟ^(guò)它可以觀察服務(wù)的使用情況。一種主要的報(bào)告類型是報(bào)告發(fā)生的錯(cuò)誤。報(bào)告 XML Web 服務(wù)所遇到的錯(cuò)誤的能力是最重要的。同樣,您還需要報(bào)告那些可能指出惡意客戶端企圖的錯(cuò)誤。例如,如果所接收請(qǐng)求中的某個(gè)參數(shù)是一個(gè)異常的長(zhǎng)字符串,則您需要以一種容易引人注意的方式來(lái)報(bào)告該錯(cuò)誤。對(duì)于這種類型的錯(cuò)誤,您應(yīng)該在應(yīng)用程序事件日志中創(chuàng)建事件,這樣可以相應(yīng)地對(duì)它們進(jìn)行監(jiān)視。有關(guān)如何將事件寫入事件日志的詳細(xì)信息,請(qǐng)參閱操作系統(tǒng)平臺(tái) SDK 中的 Event Logging(英文)。
另一種對(duì)您的服務(wù)至關(guān)重要的報(bào)告類型是匯總服務(wù)使用情況的報(bào)告。它應(yīng)該有兩種形式:首先,創(chuàng)建供您個(gè)人進(jìn)行分析的全局報(bào)告,您可以使用該報(bào)告檢測(cè)使用級(jí)別或異常模式。應(yīng)該對(duì)正常報(bào)告的外觀具有足夠的了解,這樣您才能夠發(fā)現(xiàn)異常使用的情況。其次,需要為您的用戶提供報(bào)告。您的用戶還應(yīng)能夠監(jiān)視他們對(duì)服務(wù)的使用情況。很有可能出現(xiàn)這樣的情況:在全局報(bào)告中未記錄攻擊行為,而個(gè)別用戶卻能立即在其各自的報(bào)告中發(fā)現(xiàn)問(wèn)題。
如果 XML Web 服務(wù)正在 Internet Information Server (IIS) 上運(yùn)行,那么我們就有必要提及一種能免費(fèi)得到的非常有用的報(bào)告類型。即,為所有傳入的 HTTP 請(qǐng)求(包括對(duì)您服務(wù)的請(qǐng)求)進(jìn)行的 IIS 日志記錄。您可以使用 IIS 日志中提供的信息來(lái)改進(jìn)自己的報(bào)告。 '
最后,實(shí)施了審核及適當(dāng)?shù)膱?bào)告方法后,您需要使用某種機(jī)制以發(fā)現(xiàn)所報(bào)告的問(wèn)題。這就是監(jiān)視。
可以以不同級(jí)別進(jìn)行監(jiān)視。當(dāng)然,定期手動(dòng)查看報(bào)告是監(jiān)視 XML Web 服務(wù)的使用情況的一種方式,但是還應(yīng)檢查事件日志中已報(bào)告的錯(cuò)誤,使用性能監(jiān)視日志,并利用可以監(jiān)視 Web 服務(wù)器停機(jī)時(shí)間的多種工具中的一種。性能監(jiān)視對(duì)于檢測(cè)攻擊可能是非常關(guān)鍵的。幸好,與 IIS 關(guān)聯(lián)的大量性能計(jì)數(shù)器可以為檢測(cè)問(wèn)題提供許多重要的統(tǒng)計(jì)數(shù)據(jù)。
您可能還希望為 XML Web 服務(wù)創(chuàng)建自己的性能計(jì)數(shù)器。有關(guān)創(chuàng)建您自己的性能計(jì)數(shù)器的詳細(xì)信息,請(qǐng)參閱 Performance Monitoring(英文)。為了確保引起您對(duì)異常情況的特殊關(guān)注,應(yīng)以某種形式通知您正在發(fā)生的事件,這點(diǎn)是非常重要的??梢栽诋惓J录l(fā)生時(shí),利用性能監(jiān)視警報(bào)發(fā)送彈出式消息,或運(yùn)行某個(gè)程序。圖 1 顯示的性能監(jiān)視警報(bào)會(huì)監(jiān)視未完成的 IIS ISAPI 請(qǐng)求的數(shù)量,以及當(dāng)前隊(duì)列中的 ASP 請(qǐng)求的數(shù)量。
圖 1:創(chuàng)建性能監(jiān)視警報(bào)
如果不對(duì)可能發(fā)生的問(wèn)題采取一些措施,則對(duì)濫用的操作進(jìn)行審核、報(bào)告和監(jiān)視不會(huì)有任何用處。拒絕服務(wù)攻擊可能會(huì)被定義到特定的 IP 地址,這意味著您可能需要在路由器中過(guò)濾來(lái)自該地址的請(qǐng)求。但是,拒絕服務(wù)攻擊或電子欺騙攻擊可能與 XML Web 服務(wù)的特定用戶相關(guān)。您必須能夠在這種問(wèn)題發(fā)生時(shí)禁用帳戶。完成此操作可能僅需在 Microsoft® Active Directory™ 中禁用 Windows 用戶帳戶?;蛘?,如果使用的是自己設(shè)計(jì)的身份驗(yàn)證方式,則意味著必須在用戶記錄中添加一個(gè)可以表示禁用帳戶的狀態(tài)字段。您還應(yīng)確認(rèn) XML Web 服務(wù)的用戶同意“服務(wù)條款”文檔,該文檔指明在何種情況下您可以刪除或禁用他們的帳戶。