| 本單元內容 | |
| 目標 | |
| 適用於 | |
| 如何使用本單元 | |
| 簡介 | |
| 為什麼撰寫本指南 | |
| 什麼是可回復性應用程式? | |
| 本指南的遠景 | |
| 誰應該閱讀本指南 | |
| 如何使用本指南 | |
| 本指南的組織 | |
| 本指南使用的方法 | |
| 本指南的定位 | |
| 意見和支援 | |
| 本指南的創作團隊 | |
| 告訴我們您的成功案例 | |
| 總結 |
《增強 Web 應用程式的安全性:潛在威脅及因應對策》是一份完整而且詳細的安全性指南,可幫助設計、開發、設定及部署可回復且安全的 Web 應用程式。
此單元為本指南的開場白,描繪出它的結構,並向您展示如何將這些指引套用到您的特殊狀況。也介紹如何以全面性及階段性方法達到本指南所提倡的安全性,其中涵蓋了橫跨分散式 .NET Web 應用程式各階層的網路、主機及應用程式層級。
透過本單元即可:
| • | 瞭解本指南的目的。 |
| • | 學習什麼是「可回復性」的 Web 應用程式。 |
| • | 學習有關如何以全面性及階段性方法達到指南所提倡的安全性。 |
| • | 學習如何在開發週期中,將本指引套用到您現有的專案及角色中 |
| • | 請參閱本指南在與其他相關的 Microsoft《Patterns and Practices (英文)》指南關聯時的定位。 |
本單元並無技術資訊,但是此指南適用於下列產品及技術:
| • | Microsoft Windows Server 2000 及 2003 |
| • | .NET Framework 1.1 |
| • | ASP.NET 1.1 |
| • | Microsoft SQL Server 2000 |
使用本單元來學習《增強 Web 應用程式的安全性:潛在威脅及因應對策》安全性指南是如何建立及組織的。
本指南包括複雜主題的深入探討,對瞭解如何將此資訊套用到您的角色及產品生命週期十分重要。透過本單元即可學習如何:
| • | 將指引套用到您的角色。 |
| • | 將指引套用到您的產品生命週期。 |
閱讀本單元之後,請使用隨附的<解決方案總覽>及<快速入門>單元來開始套用指引。如此可以讓您在盡可能最短的時間內充分善用此指南。
本指南中的資訊是以改進 Web 應用程式安全性的實證作法為基礎。此指南是以工作為主,而且以相對應於產品生命週期、工作及角色的各個部份加以呈現。
| • | 第一部,<潛在威脅及因應對策的簡介>,將識別及說明網路、主機及應用程式層級所面對的各種不同威脅。潛在威脅模型的程序可以幫助確認哪些潛在威脅會傷害到應用程式。經由瞭解這些潛在威脅,可以確認及排列有效因應對策的優先順序。 |
| • | 第二部,<設計安全的 Web 應用程式>,提供設計安全的 Web 應用程式所需要的指引。即使您已經部署了應用程式,仍建議分析及評估在此部份所描述的概念、原理及技術。 |
| • | 第三部,<建置安全的 Web 應用程式>,允許您套用第二部所介紹的安全設計實例,來建立安全的實作方式。您會學習到防禦性編碼技術,讓您的程式碼及應用程式可從攻擊中回復。 |
| • | 第四部,<保障網路、主機及應用程式的安全>,說明如何套用安全性組態設定來保障這三個互相關聯層級的安全。並將學習到安全性建議背後的原理,而不是隨意地套用安全性。 |
| • | 第五部,<評估安全性>,提供評估對安全性努力是否成功所需要的工具。從應用程式開始,將採取由內到外的方式來評估程式碼和設計。接著才是挑戰網路、主機及應用程式的安全性風險由外而內的觀點。 |
在傳統上,安全性一直被認為是網路的議題,當中防火牆是主要的防禦 (堡壘模型) 或者是系統管理員依靠鎖定主機電腦來處理的類似情況。應用程式架構設計師及開發人員過去將安全性看待成一種事後補充的東西,或認為是一種在時間允許的情況下的功能 通常是在解決效能考量之後。
防火牆或堡壘模型的問題是攻擊可以經過網路的防禦而直接進入應用程式。典型的防火牆可幫助限制到 HTTP 的資料傳輸,但是 HTTP 資料傳輸中可能包含有利用應用程式弱點的命令。完全倚賴鎖定主機是另一種無效的方法。雖然在主機層級可有效對抗幾項威脅,然而應用程式攻擊會呈現一個嚴重且日增的安全性議題。
發生安全性問題的另一個領域是部署。常見的情況是當部署在鎖定生產環境的應用程式失敗時,會迫使系統管理員放寬安全性設定。如此做通常會導致新的安全性弱點。此外,缺乏安全性原則或者與原則不一致的應用程式需求,也會危及安全性。本指南的目的之一是幫助在開發和操作的鴻溝間搭起橋樑。
漫無目的的安全性是不夠的。要使應用程式具備可回復性,需要全面且有系統的方法來保障網路、主機及應用程式的安全。責任跨越產品生命週期的各個階段及角色。安全性不是一個終點;而是一個旅程。本指南會幫助您邁向正途。
本指南會幫助您建置可回復性應用程式。可回復性應用程式是一個可降低攻擊成功可能性以及在發生攻擊時,減輕損害範圍的程式。可回復性應用程式位於安全網路中的安全的主機 (伺服器) 上,並使用安全設計及開發指導方針所開發而成。
在 2002 年,eWeek 所贊助的第四屆「公開駭客 (Open Hack)」挑戰中,證明了可回復性應用程式可以使用 .NET 技術在執行 Microsoft® Windows® 2000 的系統上建置。「公開駭客」團隊使用 Microsoft Windows 2000 Advanced Server、Internet Information Services (IIS) 5.0、Microsoft SQL Server 2000 及 .NET Framework 建置了一個 ASP.NET Web 應用程式。成功的抵擋了超過 82,500 次的攻擊嘗試,並且毫髮無傷的從競爭中脫穎而出。
本指南分享了包括在「公開駭客」應用程式中用於保障 Web 應用程式安全的方法及經驗。此外,本指南也包括在世界各地上用於保障網路及 Web 伺服器的實證作法。這些方法及最佳實例在此簡略地以實務指導的形式提供。
Web 應用程式的安全性必須跨各階層及多層級加以處理。在任何一階層或層級的弱點都會使應用程式變得脆弱而易受攻擊。
[圖 1] 展示本指南的遠景及用來保障網路、主機及應用程式安全所使用的三層式方法。它也說明一個稱為潛在威脅模型的程序,提供安全性處理的架構及原理,並允許評估安全性潛在威脅及確認恰當的因應對策。如果您對潛在威脅一無所知,那要如何保障系統的安全呢 ?

[圖 1]
《增強 Web 應用程式的安全性:潛在威脅及因應對策》的範疇
本指南提出了顯示在 [圖 1] 中橫跨三個實體階層的安全性。其中涵蓋 Web 伺服器、遠端應用程式伺服器及資料庫伺服器。在每一階層,同時解決網路層級、主機層級及應用程式層級的安全性。[圖 1] 也顯示本指南用來組織不同安全性組態設定的各種設定類別,以套用到用來建構應用程式安全性考量的各種主機、網路及應用程式弱點類別。
雖然本指南中許多資訊採用的技術無從而知,但焦點會集中在使用 .NET Framework 建置及部署在 Windows 2000 Server 系列作業系統上的 Web 應用程式。本指南也特別注意到 .NET Framework 程式碼存取的安全性,尤其是有關於使用 ASP.NET 程式碼存取的安全性。並適時強調 Windows Server 2003 所提供的新功能。[表 1] 顯示本指南的產品及技術基礎。
[表 1] 本指南所專注的基本技術
| 區域 | 產品 / 技術 |
平台 | .NET Framework 1.1 |
Web 伺服器 | IIS 5.0 (包括 Windows 2000 Server) |
應用程式伺服器 | Windows 2000 Server 及 .NET Framework 1.1 |
資料庫伺服器 | SQL Server 2000 |
中介軟體技術 | ASP.NET,Enterprise Services,XML Web Services,.NET 遠端服務 |
資料存取 | ADO.NET |
本指南適用於任何關心規劃、建置、部署或操作 Web 應用程式的人。本指南包含給設計者、開發人員、系統管理員及安全性分析師不可或缺的資訊。
設計者將學到如何避免會導致損失慘重的安全性錯誤,以及如何在產品開發週期中及早做出適當的設計選擇。開發人員將學會如何執行防禦性編碼技術及建置安全的程式碼。系統管理員將學習到如何有條理的保障伺服器及網路的安全,而安全性分析師將學習到如何執行安全性的評估。
本指南中的每一單元都是一個模組。本指南是以工作為主,並以相對應於產品開發週期不同階段,以及生命週期中牽涉到的人員及角色,包括架構設計師、開發人員、系統管理員及安全性分析師等各個部份來呈現。
每位從事設計、開發、部署或維護 Web 應用程式以及其基礎建設的人,無論其角色為何,都應該閱讀本指南的第一部。第一部,<潛在威脅及因應對策的簡介>,強調及解釋在網路、主機及應用程式層級,對 Web 應用程式的主要威脅。其中也展示如何建立「潛在威脅模型」,來幫助識別與您特定應用程式最相關的該些威脅,並排定其優先順序。對於潛在威脅及相關因應對策有實際的瞭解,是任何有興趣保障 Web 應用程式安全的人來說是不可少的。
如果您負責或牽涉到全新或現存 Web 應用程式的設計過程,您應該閱讀第二部,<設計安全的 Web 應用程式>。第二部會幫助您識別應用程式設計中潛在的弱點。
如果您是開發人員,那麼您應該閱讀第三部,<建置安全的 Web 應用程式>。這一部份中的資訊會幫助您開發安全的程式碼及元件,包括網頁和控制項、Web 服務、遠端元件以及資料存取程式碼。身為開發人員,您也應該閱讀第四部,<保障網路、主機及應用程式的安全>以便對部署程式碼的安全環境型態獲得進一步的瞭解。如果您對目標環境有更多的瞭解,問題的風險和在部署階段會出現的安全性弱點就會大幅地降低。
如果您是系統管理員,您應該閱讀第四部,<保障網路、主機及應用程式的安全>。這一部份中的資訊會幫助您建立安全的網路及伺服器基礎結構 一套可經過調整以支援 .NET Web 應用程式及 Web 服務的基礎結構。
任何負責審閱產品安全性的人都應該閱讀第五部,<評估安全性>。如此可幫助您識別由不安全的編碼技術或部署設定所導致的弱點。
本指南的不同部份適用於產品開發週期中,各個不同的階段。本指南中單元的順序反映了生命週期的典型階段。[圖 2] 顯示各部份和單元如何對應到傳統產品開發週期的各個階段。

[圖 2]
《增強 Web 應用程式的安全性:潛在威脅及因應對策》和產品生命週期的關聯
如果您是使用而且比較熟悉 Microsoft Solutions Framework (MSF),[圖 3] 顯示了 MSF 處理模型和生命週期的對應。

[圖 3]
《增強 Web 應用程式的安全性:潛在威脅及因應對策》和 MSF 的關聯
您可以從頭到尾閱讀本指南,或者僅閱讀您工作所需要的單元。如需本指南的快速總覽,請參考<快速入門>一節。
<解決方案總覽>一節為本指南提供問題索引,強調關切的重點範圍及在何處可以取得更多的詳細資料。
在本指南前面的<快速入門>一節可幫助您快速並輕易地執行相關建議及指引。
本指南劃分為五個部份:
| • | 第一部,潛在威脅及因應對策的簡介 |
| • | 第二部,設計安全的 Web 應用程式 |
| • | 第三部,建置安全的 Web 應用程式 |
| • | 第四部,保障網路、主機及應用程式的安全 |
| • | 第五部,評估安全性 |
本部份會識別及闡明網路、主機及應用程式層級所面對的各種潛在威脅。使用潛在威脅模型程序,可以識別與您應用程式相關的潛在威脅。這為識別有效的因應對策設下佈景。此部份包括:
| • | 單元 1 <Web 應用程式安全性基礎> |
| • | 單元 2 <潛在威脅及因應對策> |
| • | 單元 3 <潛在威脅模型> |
本部份提供安全地設計 Web 應用程式所需要的指導。即使您已有現存的應用程式,仍應該檢視本章節,並重新檢查在應用程式設計時所使用的概念、原理及技術。此部份包括:
| • | 單元 4 <設計安全 Web 應用程式的指導方針> |
| • | 單元 5 <安全性的架構及設計檢閱> |
本部份幫助您套用前一部份所涵蓋的安全設計實務和原理,以建立一個堅固及安全的實作。您會學習到防禦性編碼技術,讓您的程式碼及應用程式可從攻擊中回復。單元 6 呈現一個 .NET Framework 安全性景像的總覽,讓您知道許多可供使用的防衛選項及工具。第三部包括:
| • | 單元 6 <.NET 安全性概觀> |
| • | 單元 7 <建置安全的組件> |
| • | 單元 8 <程式碼存取安全性實務> |
| • | 單元 9 <配合 ASP.NET 使用程式碼存取安全性> |
| • | 單元 10 <建置安全的 ASP.NET 網頁和控制項> |
| • | 單元 11 <建置安全的服務元件> |
| • | 單元 12 <建置安全的 Web 服務> |
| • | 單元 13 <建置安全的遠端元件> |
| • | 單元 14 <建置安全的資料存取> |
此部份展示如何套用安全性組態設定以保障互相關聯的網路、主機及應用程式層級的安全。將學會安全性建議的理由,而不是隨意地套用安全性。第四部包括:
| • | 單元 15 <保障網路的安全> |
| • | 單元 16 <保護 Web 伺服器的安全> |
| • | 單元 17 <保障應用程式伺服器的安全> |
| • | 單元 18 <保護資料庫伺服器的安全> |
| • | 單元 19 <保障 ASP.NET 應用程式及 Web 服務的安全> |
| • | 單元 20 <裝載多個 Web 應用程式> |
此部份提供評估對安全性努力是否成功所需要的工具。當中並向您展示如何評估您的程式碼及設計,以及如何檢視部署的應用程式,以識別潛在的弱點。
| • | 單元 21 <程式碼的檢閱> |
| • | 單元 22 <部署過程的檢閱> |
此節包括一些可列印、以工作為主的檢查清單,是一份可幫助將資訊化為行動的快速參考表。此節包括下列檢查清單:
| • | |
| • | |
| • | |
| • | |
| • | |
| • | |
| • | |
| • | |
| • | |
| • |
此節包括《How To》文章,當中提供關鍵工作的逐步步驟。此節包括下列文章:
| • | |
| • | |
| • | |
| • | |
| • | |
| • | |
| • | |
| • | |
| • |
如果您的目標是擁有可回復性應用程式,那麼要如何達成呢?本指南使用的方法如下:
| • | 保障網路、主機及應用程式的安全 |
| • | 焦點放在潛在威脅 |
| • | 遵循以原則為基礎的方法 |
安全性必須在三個層級上解決:網路、主機及應用程式。任何層級上的弱點都可能被攻擊者所利用。此指南對應用程式的安全性使用了全面性方法,並套用到所有的三個層級。這項安全性的全面性方法顯示在 [圖 4] 中。

[圖 4]
安全性的全面性方法
[圖 4] 展示本指南涵蓋的多重層級,包括網路、主機及應用程式。主機層級涵蓋作業系統、平台服務和元件以及 Run-time 服務和元件。平台服務和元件包括 SQL Server 及 Enterprise Services。Run-time 服務和元件包括 ASP.NET 及 .NET 等程式碼存取安全性,以及其他的安全機制。
如果在不知道安全性措施主在減輕哪些威脅而加以套用的話,那麼應用程式的安全性措施可能會變得毫無效用,或有背生產效益。
潛在威脅可以是外部的,例如在網際網路上的攻擊者,或是內部的,例如一名不滿的雇員或系統管理員。本指南會幫助您以兩種方式來識別潛在威脅:
| • | 列舉在網路、主機及應用程式層級影響 Web 應用程式的最高潛在威脅。 |
| • | 經由一個名為潛在威脅模型的程序,可幫助識別與您的應用程式相關的潛在威脅。 |
整份指南中所採用的建議,是以經過長時間考驗的安全性原則為基礎的。在執行或部署產品之前對潛在威脅的分析及考量,給予其本身一個以原則為基礎的方法,使得不論執行技術或應用程式狀況為何,都能夠套用核心原則。
這是一系列專用於幫助客戶規劃、建置、部署及操作安全 Web 應用程式的第二冊:第一冊為 《建置安全的 ASP.NET 應用程式:驗證、認證及安全的通訊》,及第二冊,《增強 Web 應用程式的安全性:潛在威脅及因應對策》。
《建置安全的 ASP.NET 應用程式》會幫助您為應用程式建置一個穩定而功能強大的驗證及授權機制。焦點集中在透過分散式 Web 應用程式各階層的識別身份管理。在設計的早期,經由開發穩定的驗證及授權策略,可以消弭高百分比的應用程式安全性問題。第一冊主要的讀者是架構設計師及開發主管。
[圖 5] 顯示第一冊的範疇。本指南專注於分散式 Web 應用程式跨各階層的驗證、授權及安全的通訊。涵蓋的技術與目前的指南相同,並且包括 Windows 2000 Server、IIS、ASP.NET Web 應用程式及 Web 服務、Enterprise Services、.NET 遠端服務、SQL Server及 ADO.NET。

[圖 5]
第一冊,《建置安全的 ASP.NET 應用程式》的範疇
本指南會幫助您建置及維護可回復性應用程式。以較寬廣的視野來看待跨各階層的安全性,焦點集中在網路、主機及應用程式層級的潛在威脅及因應對策。預期會有比較廣的讀者群,本指南可套用整個產品生命週期。
其他有關的作品,請參閱本指南最後的<資源>單元。
我們已儘最大的努力來確保本指南及附帶內容的準確性。
如果您對本指南有意見,請寄電子郵件到 secguide@microsoft.com。我們對以下的相關意見特別感興趣:
| • | 推薦特定的技術議題 |
| • | 有用及可行的議題 |
| • | 撰寫及編輯的議題 |
本指南所參考的 Microsoft 產品及技術的技術支援是由 Microsoft 產品支援服務 (PSS) 所提供的。如需產品支援資訊,請造訪「Microsoft 產品支援」網站:http://support.microsoft.com。
MSDN 新聞群組:http://msdn.microsoft.com/newsgroups/default.asp
[表 2] 新聞群組
| 新聞群組 | 位址 |
.NET Framework 安全性 | microsoft.public.dotnet.security |
ASP.NET 安全性 | microsoft.public.dotnet.framework.aspnet.security |
Enterprise Services | microsoft.public.dotnet.framework_component_services |
Web 服務 | microsoft.public.dotnet.framework.aspnet.webservices |
遠端服務 | microsoft.public.dotnet.framework.remoting |
ADO.NET | microsoft.public.dotnet.framework.adonet |
SQL Server 安全性 | microsoft.public.sqlserver.security |
MBSA | microsoft.public.security.baseline_analyzer |
病毒 | microsoft.public.security.virus |
IIS 安全性 | microsoft.public.inetserver.iis.security |
本指南是由下列的 .NET 開發專家製作的:
| • | J.D. Meier,Microsoft,規定結構指導 (PAG) 程式經理 |
| • | Alex Mackman,Content Master Ltd,創始成員及技術長 |
| • | Srinath Vasireddy,Microsoft,PSS 開發支援工程師 |
| • | Michael Dunner,Microsoft,PSS 開發支援工程師 |
| • | Ray Escamilla,Microsoft,PSS 開發支援工程師 |
| • | Anandha Murukan,Satyam Computer Services |
非常感謝下列撰稿者及檢閱者的貢獻:
| • | 感謝外部的檢閱者 Mark Curphey,公開 Web 應用程式安全性專案及警戒;Andy Eunson (廣泛的檢閱);Anil John (程式碼存取安全性及主控狀況);Paul Hudson 及 Stuart Bonell,Attenda Ltd. (對安全系列廣泛的檢閱);Scott Stanfield 及 James Walters,Vertigo Software;Lloyd Andrew Hubbard;Matthew Levine;Lakshmi Narasimhan Vyasarajan,Satyam Computer Services;Nick Smith,American Airlines 資深安全性設計師 (對安全系列廣泛的檢閱);Ron Nelson;Senthil Rajan Alaguvel,Infosys Technologies Limited;Roger Abell,Arizona State University 工程技術服務 以及 Doug Thews。 |
| • | Microsoft 產品團隊 Michael Howard (潛在威脅模型、程式碼的檢閱及部署過程的檢閱);Matt Lyons (揭開程式碼存取安全性的神秘面紗);Caesar Samsi、Erik Olson (在 ASP.NET 廣泛的確認及建議);Andres De Vivanco (保障 SQL Server 的安全);Riyaz Pishori (Enterprise Services);Alan Shi;Carlos Garcia Jurado Suarez;Raja Krishnaswamy,CLR 開發主管;Christopher Brown;Dennis Angeline;Ivan Medvedev (程式碼存取安全性);Jeffrey Cooperstein (潛在威脅模型);Frank Swiderski;Manish Prabhu (.NET 遠端服務);Michael Edwards,MSDE;Pranish Kumar,(VC++ PM);Richard Waymire (SQL 安全性);Sebastian Lange;Greg Singleton;Thomas Deml (IIS PM 主管);Wade Hilmo (IIS);Steven Pratschner;Willis Johnson (SQL Server) 及 Girish Chander (SQL Server)。 |
| • | Microsoft 諮詢服務及產品支援服務 (PSS):Ilia Fortunov (資深設計師) 提供連續不斷及勤奮的工作回饋;Aaron Margosis (廣泛檢閱,指令碼注入,及 SQL 注入);Jacquelyn Schmidt;Kenny Jones;Wade Mascia (Web 服務及 Enterprise Services);Aaron Barth;Jackie Richards;Aaron Turner;Andy Erlandson (PSS 安全性主管);Jayaprakasam Siddian Thirunavukkarasu (SQL Server 安全性);Jeremy Bostron;Jerry Bryant;Mike Leuzinger;Robert Hensing (檢閱安全系列);Gene Ferioli;David Lawler;Jon Wall (潛在威脅模型);Martin Born;Michael Thomassy;Michael Royster;Phil McMillan 及 Steven Ramirez。 |
| • | 感謝 Joel Scambray;Rich Benack;Alisson Sol;Tavi Siochi (IT 稽核);Don Willits (提升品質);Jay Nanduri (Microsoft.com) 檢閱及分享真實世界的經驗;Devendra Tiwari 及 Peter Dampier,廣泛檢閱及分享最佳 IT 實務;Denny Dayton;Carlos Lyons;Eric Rachner;Justin Clarke;Shawn Welch (IT 稽核);Rick DeJarnette;Kent Sharkey (主控情況);Andy Oakley;Vijay Rajagopalan (Dev MS 操作主管);Gordon Ritchie,Content Master Ltd;Chase Carpenter (潛在威脅模型);Matt Powell (Web 服務安全性);Joel Yoker;Juhan Lee [MSN 操作];Lori Woehler;Mike Sherrill;Mike Kass;Nilesh Bhide;Rebecca Hulse;Rob Oikawa (架構設計師);Scott Greene;Shawn Nandi;Steve Riley;Mark Mortimore;Matt Priestley 及 David Ross。 |
| • | 感謝我們的編輯群:Sharon Smith;Kathleen Hartman (S&T OnSite);Tina Burden (Entirenet);Cindy Riskin (S&T OnSite) 及 Pat Collins (Entirenet) 幫助讀者確保優質的經驗。 |
| • | 最後,感謝 Naveen Yajaman;Philip Teale;Scott Densmore;Ron Jacobs;Jason Hogg;Per Vonge Nielsen;Andrew Mason;Edward Jezierski;Michael Kropp;Sandy Khaund;Shaun Hayes;Mohammad Al Sabt;Edward Lafferty;Ken Perilman 及 Sanjeev Garg (Satyam Computer Services)。 |
如果本指南對您有所幫助,我們很樂於知道。請簡短的寫下您面臨的問題,以及本指南如何幫助您解決的摘要,來告訴我們。將您的摘要送到:
MyStory@Microsoft.com.
在本簡介中,向您展示了本指南的結構及用於保障 Web 應用程式安全的基本方法。還向您說明了如何將指引套用到您的角色或產品開發週期的特定階段。