matt powell microsoft corporation 2001 年 9 月 19 日 在上一篇文章中,我們討論了不同種類的攻擊,以及如何進(jìn)行配置以免受到攻擊。本文中,我們將集中討論如何進(jìn)行設(shè)計(jì)和開(kāi)發(fā),以免受到攻擊。 首先,我想介紹兩個(gè)非常好的新工具,它們是 microsoft® 開(kāi)發(fā)的,可使您的 web 服務(wù)器獲得最大的安全性。iis lockdown tool(英文)可以最大限度地防止可能的攻擊者對(duì)您的 microsoft® internet information server (iis) 進(jìn)行訪問(wèn)。鎖定工具還提供了“advanced”選項(xiàng),您可以在其中選擇所需設(shè)置。此外還提供了“rollback changes”選項(xiàng)。當(dāng)您對(duì)所做更改不滿意時(shí)可選擇該選項(xiàng)。請(qǐng)嘗試該工具。 另一個(gè)重要工具是用于 iis 5.0 的 hotfix checking tool(英文)。該工具會(huì)查詢由 microsoft 發(fā)布的所有可用安全性修補(bǔ)程序的 xml 文檔(該文檔是不斷更新的),然后將此文檔與本機(jī)安裝的文檔進(jìn)行比較并報(bào)告其差異。使用該工具可以更輕松地管理單個(gè) web 服務(wù)器或大型 web 領(lǐng)域的安全修補(bǔ)程序。
設(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 客戶端證書(shū)進(jìn)行身份驗(yàn)證,該證書(shū)提供了一個(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),但您隨后可能需要在客戶端上安裝自定義編寫(xiě)的軟件以啟用加密/解密。使用 ssl 加密整個(gè)通道的一個(gè)優(yōu)點(diǎn)是:目前大多數(shù)客戶端平臺(tái)都支持基本 ssl 通信,而不需要針對(duì)應(yīng)用程序編寫(xiě)特定代碼。 就基本安全性設(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)如何將事件寫(xiě)入事件日志的詳細(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)是非常重要的。可以在異常事件發(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ù)條款”文檔,該文檔指明在何種情況下您可以刪除或禁用他們的帳戶。