適合印表機的版本      送出     
按一下以給予評分及指教
Related Articles
我們要向您介紹 BizTalk Server 2006 R2 中的 EDI 功能,並說明結構描述的建立、文件的對應、EDI 的傳遞與傳輸,以及例外的處理。

By Mark Beckner (8 月 2008)
在本月的文章中,James McCaffrey 建置了可完全操作 WCF 應用程式的測試控管。

By Dr. James McCaffrey (7 月 2008)
本月份的專欄繼續以 WCF 和部分信任服務中的程式碼存取安全性為討論範圍。

By Juval Lowy (7 月 2008)
本月的內容將告訴您如何在不需要另行安裝測試環境的情況下即可在各種平台上測試您的網站,如何使用模擬 (Mock) 物件進行單元測試,還要為您介紹 Raymond Chen 的部落格。

By Scott Mitchell (June 2008)
More ...
Articles by this Author


By Shawn Hernan, Scott Lambert, Tomasz Ostwald, Adam Shostack (November 2006)
More ...
Popular Articles
隨著 Web 應用程式的擴充,效能的問題也漸漸出現,而當出現問題時,您需要盡快找出原因並擬定最佳的解決策略。

By Richard Campbell and Kent Alstad (April 2008)
本文將透過簡短的語言介紹和程式碼範例,來說明以 CLR 語言的各種語言架構。

By Joel Pobar (May 2008)
單次密碼解決方案可預防字典攻擊、網路釣魚、攔截及其他許多安全性缺口的問題。以下為其運作方式。

By Dan Griffin (May 2008)
本文將介紹如何以程式設計的方式和宣告的方式來進行資料繫結,以及如何使用 Windows Presentation Foundation 來顯示資料。

By Josh Smith (7 月 2008)
More ...
Read the Blog
SQL Server 2008 supports a new data type, HierarchyID, that helps solve some of the problems in modeling and querying hier­archical information. In the September 2008 issue of MSDN Magazine, Kent Tegels introduces you to the ...
Read more!
Many people using SharePoint technologies don't realize that there is auditing support built directly into the Windows SharePoint Services (WSS) 3.0 platform. In the September 2008 issue of MSDN Magazine, Ted Pattison walks you through a ...
Read more!
The September 2008 issue of MSDN Magazine is now available online. Here's what's in the issue: Hierarchy ID: Model ...
Read more!
Silverlight 2 features a rich and robust control model that is the basis for the controls included in the platform and for third-party control packages. You can also use this control model to build controls of your own. In the August 2008 issue of MSDN Magazine, Jeff Prosise describes how to ...
Read more!
In the August 2008 issue of MSDN Magazine, Matt Milner covers several topics regarding development with Windows Workflow Foundation, some that are intended to address specific reader questions, such as how to safely share a persistence database ...
Read more!
LINQ is a powerful tool enabling quick filtering data based on a standard query language. It can tear through a structured set of data using a simple and straightforward syntax. In the August 2008 issue of MSDN Magazine, Jared Parsons demonstrates a ...
Read more!
More ...
安全性簡報
重振威脅分析模型的程序
Adam Shostack

我同事 Ellen 的說法是,每個人隨時隨地都在建立威脅分析模型。我們會針對機場的安全性建立威脅分析模型。我們會針對住家建立威脅分析模型。我們會考量個人資產的種種威脅:包括家庭、珠寶,以及充滿情感又無可取代的相片 (不過這比較適用於我們這些有點年紀,照片尚無數位格式之年代的人)。我們會根據建築結構來建立威脅分析模型:這裡有面牆,有扇大觀景窗,還有一顆很好爬的樹,萬一忘了帶鑰匙就能派上用場。我們也會根據攻擊者來建立威脅分析模型。我們會擔心竊賊,也會害怕孩子失足而掉進泳池內。我們還會擔心天災人禍,像是地震、暴風雪或龍捲風。
如果換成管理顧問的口吻,我會說您要套用成熟、多面向的評量程序,同時在各案例之間大幅仰賴啟發式學習法並降低重複性。然而,您可能無法料想到所有可能發生的情況,也無法針對所有可能發生的攻擊採取防禦措施。您的家中可能沒有擬出一套居家防禦管理計劃,更不可能執行居家侵入性測試。
但是在建置軟體時,不論我們採取捷徑式或傳統式的開發模型,都必須對建置目標達成共識,溝通要建置與不建置的項目,以確認我們建置的軟體是正確的。過去幾年來,大家逐漸認為威脅分析模型是沈重、官僚的程序。不過有些不錯的理由值得加入這些程序;我將討論這些原因、這些程序的相關經驗談,以及如何威脅分析模型變得更有趣,同時使威脅分析模型變成有效率、敏捷又友善的活動,讓每個人都能做到。

建立威脅分析模型的方法
有許多東西都稱為威脅分析模型。重點並不是要爭論「單一最佳方法」,而是要根據您的需求、技術和能力以及時間表,來找出最適合您的方法。在這樣的方法中,有些人會問:「你的威脅分析模型是什麼?」,或者問「你曾經為該元件建立威脅分析模型嗎?」一是必要條件的定義,另一則是設計的分析。在 Microsoft,我們幾乎都是談論後者這項技巧。
其實威脅分析模型有很多種,多到我根本無法在一篇專欄中討論。另外還有極多元化的目標。您的威脅分析模型的程序到底應該要求速度或者深度呢?是要專注於保證品質和完整性,或者著重於使用的便利性?每次開會是否應邀請專家或開發人員參與?有沒有必要遵守的組織或產業規則,例如 Microsoft® Security Development Lifecycle (SDL) 或者醫療設備生產規定?高階目標應該把焦點放在要儘早了解安全性議題,以便於設計期間解決問題,而非在事後再嘗試克服設計上的缺陷。
建立威脅分析模型活動的主要方法如下:
資產 以資產導向的威脅分析模型,有如在思考您需要保護的家中物品。您一開始要先列出軟體相關聯的資產,接著思考攻擊者可能會如何危及這些資產。範例包括儲存客戶信用卡資料的資料庫,或者包含已加密密碼的檔案。
有些人可能會將資產解譯為威脅分析模型圖表的元素,以為網路伺服器本身就是一項資產。這種想法太瘋狂了。數位資產指的是攻擊者想要讀取、竄改或拒絕讓您使用的事物。
攻擊者 以攻擊者導向的威脅分析模型,包括思考誰會想要您的資產,並且要藉由了解這些攻擊者的能力,進而得知他們可能使用的攻擊方式。若您的對手是個外來軍團,具有已知的策略信念、實體限制,且需要長時間來建立武器系統,這個方法最為管用。然而,若您的敵人是一群組織鬆散的匿名駭客團體,這招恐怕就無效了。
大體上而言,我們不確定這在威脅分析模型中是否有用。對某些人而言,「洞悉駭客思緒」的方式可以是有效的設計分析。不過,能否複製這樣的程序來訓練更多人,則必須持保留的態度。若您準備要從駭客的角度著手,或許值得使用標準組合。因為它將有助於排除某些負面案例。
軟體設計 以設計導向的威脅分析模型,是根據您門戶位置的設計。您需要畫出圖表,並分析圖中的每件事物可能會在哪裡出錯 (這是現今 SDL 威脅分析模型之程序的本質,因為軟體界每個人都會在白板上畫圖表)。
軟體中等同於門戶的包括各種形式的攻擊面,例如檔案剖析器或網路接聽服務 -- 通訊端、遠端程序呼叫 (RPC) 服務、Web 服務描述語言 (WSDL) 介面或者 AJAX API。上述信任的界限,是攻擊者最可能入侵的位置。

速成威脅分析模型
威脅分析模型可以很簡潔。根據 [圖 1] 所示的程序,以下是基本威脅分析模型之程序的大綱,可讓您快速又輕鬆地上手:
  1. 畫出應用程式圖表,並用來在白板前說明應用程式 (請見 [圖 2)。使用圓圈代表程式碼,方塊代表其外部的東西 (人員、伺服器),並以桶型代表儲存體。我們的團隊使用外形有趣的平行線來代表資料存放區。使用虛線來畫出信任界限,以區別網域。
  2. 藉由腦力激盪找出威脅。若遭遇瓶頸,請針對應用程式的每個元素套用 STRIDE 威脅分析模型,如 [圖 3] 所述。暫時別擔心程式的修復,只要讓腦力激盪順利進行即可。
  3. 思考威脅是否為整體性的,或是完全零散的,以考慮重新設計的因素。無論如何,最好設計出一個元件,或者加入一個元件來解決中心問題。若所有威脅皆位於單一位置,可能代表您只有顧到前門,而忽略了其他部分。
  4. 降低第一順位的風險。放寬範圍,不要深度切入。排列威脅的優先順序以及降低風險之方式的優先順序,會有所幫助。威脅的第一順位是開門。降低風險的第一順位則是上鎖。威脅的第二順位,是有人偷開鎖或是鎖壞了。降低風險的第二順位,包括安裝一把好鎖和一扇堅固的門。防禦方式的第三順位,可能是在門上加裝警報系統,而且為了降低有人切斷訊號線的風險,您可從定期傳送訊息以示運作正常。就軟體而言,若您沒有先考慮到門鎖,而是先擔心有人切斷警報系統的線路,那麼您的順序就搞錯了。
  5. 提出錯誤報告,以便針對威脅分析模型所找出的問題進行修復。
圖 1 威脅分析模型的程序 (按一下影像以放大圖片)
圖 2 繪製您的應用程式有助於建立威脅分析模型 (按一下影像以放大圖片)

知道何時結束
當您的圖表顯示出系統所有相關部分,並完成圖表中所有元素的 STRIDE 模型,就表示您做的很好 (如果您也提出了每個弱點的錯誤報告就更好)。
不過,這說起來就像是您只要檢查過所有門窗皆已鎖好後,就大工告成了。這樣或許已經足夠;可能您的時間只夠做這麼多。又或者您打算更深度思考已就定位的防禦機制還會有哪些漏洞。
您可以更深入的程度,大多端視您的組織或是客戶的風險承受度而定。另外也必須視您的預算和經驗來決定。您或許只想以合理範圍內最快的速度來執行威脅分析模型的程序,以證實成功與否。或許您正在設計某些安全性關鍵的控制系統,所以需要花許多時間進行深入分析。
因此,何時結束的這個問題其實需要有所取捨。首先,您需要考量相關政策、法令,規範的要求。然後您還必須評估欲開發系統的風險。最後,您必須針對威脅分析模型的程序以及任何為降低風險與測試的工作,評估所需時間與資源。

推動威脅分析模型的程序
威脅分析模型不會自行建立,必須有人推動才行。而推動者也會大幅影響其效能。若能由一位或多位重視安全性的人員來推動,就能有效地在整個組織中推動威脅分析模型的建立。
問題在於如何或者是否應該讓其他人參與。這是一項同時牽涉文化與資源的問題。若這些熱血人士可以將一切威脅分析模型化、和大家分享成果,並且將發現的問題修復,那就太好了!何必要麻煩其他人?
但是有些時候,需要負責的專案工作量,會遠比這些注重安全性的人士能處理的還要多,因此您必須找其他人參與。Microsoft 發現安全性專家有助於威脅分析模型的建立,但卻不一定找得到。
所謂的安全性專家,是一位專注於安全性且能夠組織化地考量問題的專業人員。他必須了解在您的設計內容中,何謂否認性威脅。這位專家或許應該擁有某些證照。他應該能夠指出您程式碼及作業中的安全性缺陷。她應該定期參與 (至少要有興趣參與) 例如 SANS 或 BlackHat 的會議,抑或她曾經出現在 Microsoft 資訊安全佈告欄的感謝名單中。
藉由提供結構資訊並回應作品上的意見,將內容細分為易於處理的部分區塊,並為每一個區塊提供相關規則和自我檢測技巧,就能夠獲得不錯的成果。不過,若將威脅分析模型細分為太多太零散的部分,並且賦予太多規則 (或錯誤的規則),則有可能引來排斥,進而使威脅分析模型變成一項煩瑣的雜務。因此您細分的方式,必須依照可參與的專家人數,以及這些專家能夠投入的時間而定。

維持同步處理:因應變化
計劃總是會改變。這是無法避免的事。發生這種情況時,就必須讓相關文件與其他人腦袋裡已深記的實際計劃進行同步處理。無論您有多機靈,一個大型專案絕對會有架構文件。或許是一組大型牆面尺寸的 Visio® 圖表,又或許是個擦不掉的白板。
就威脅分析模型而言,您必須了解哪些東西會在架構上增添信任界限。在這種情況下,您必須考量這些新威脅的影響。
有時候威脅是直接的。例如,若您將某元件所接聽的通訊埠改為 80。當該元件遭遇直接威脅時,您就可以輕易發現威脅、排除威脅,再繼續工作。
有些時候,威脅則是間接的。例如,若您決定從 Active Directory® 和 Lightweight Directory Access Protocol (LDAP) 取得組態資料。這可能需要幾項新元件 (目錄介面及抽象層,以便進行切換),但也同時需要變更組態資料。資料原本或許是由系統管理員輸入到您的 GUI。現在則會透過網路,以多種不同的通訊協定傳入。您應該要在抽象層仔細驗證資料,也需要注意如何讀取和處理組態資料。

幫幫忙,我昏頭了!
您或許會發現自己竟坐在桌前驚呼:「我們現在該怎麼辦?」也許您無法理解整個程序。也許有一個步驟把您難倒了。以下是 SDL 團隊曾遇過的一些問題,以及解決的方法:
有些團隊對於圖表的繪製很難。若您不了解系統的功用,請找熟悉系統的人,或者細分威脅分析模型的程序,並花時間了解您接手的東西。
若您不知道系統應該做什麼 (也許您正在撰寫新系統,且有兩個彼此競爭的設計方案),威脅分析模型可以幫助您脫離停滯的決策進度。這時請將兩種設計都繪出,然後詢問:「哪一個的弱點比較嚴重?」
即使您不知道如何表現某元素,也不用太操心。若您用了錯誤的元素類型,到時候還是會發現的。重點是,不論程式碼是誰撰寫的,所有您負責的程式碼都應該視為程序。您讀取和寫入的所有資料,皆儲存在資料存放區。
您也有可能發現列舉威脅方面的問題。首先,絕對不要讓自己陷入單一威脅的問題而停擺。先用旗標標示起來,後續再回頭處理。如果這樣仍無法解決,請參閱 Larry Osterman 的威脅分析模型系列文章 (go.microsoft.com/fwlink/?LinkId=118281)。另外, Michael Howard 撰寫的 Writing Secure Code 以及 The Security Development Lifecycle 等書籍,也都值得參考。
針對威脅分析模型的驗證以及降低風險計劃等問題,請找出圖表是否可完整表現程式碼,以及開發人員和軟體測試人員之間是否有共識。請確認您是否已為各元素的每一種威脅類型列舉威脅 (請見 2006 年 11 月的 MSDN® Magazine 文章<使用 STRIDE 方法發掘安全性設計瑕疵>,位於 msdn.microsoft.com/magazine/cc163519)。最後,請確認是否有為每一項威脅提出錯誤報告,並已確實修復。
若您剛好有位專家在身旁,可以請求他的協助。即使是專家都會互相問道:「您認為應該用什麼方法來解決這個問題?」若您身邊沒有專家可以詢問,不妨試著找一位專家,不論是以聘任的方式或在部落格上提出問題皆可。
別讓自己為了單一問題而陷入困境。威脅分析模型對您而言實在太重要,不容略過。而且千萬記得要享受其中的樂趣。能夠在產品出貨之前先發現並解決問題,總比事後的修復工作更有價值。

若有任何疑問或意見,請將郵件寄至 briefs@microsoft.com

Adam Shostack 是 Microsoft 安全性開發週期 (SDL) 團隊的專案經理。他負責 SDL 的威脅分析模型元件。

© 2008 Microsoft Corporation and CMP Media, LLC. All rights reserved; reproduction in part or in whole without permission is prohibited.
Page view tracker