本文章是由機器翻譯。

安全性簡介

關於威脅模型為交談主旨

Michael Howard

內容

[Thespians
場景我
場景 II
場景 III
場景 IV

多年前我讀取在紙張的帳單收件者 Bryant 權 」 設計的驗證系統: A 的對話方塊的四個場景」,說明 Kerberos 驗證系統。 紙張會是如何 grumpy 和 jaded 安全性人員認為,及非安全性的人回應問題的反映。 通常,當非安全性人員會要求安全性人員問題有關安全性,它可以是像解壓縮的牙齒到達適當的和安全性的解決方案,因為沒有網域的專業知識的開發人員和安全性專業之間通訊不相符。 因此我認為我會在文件的交談的 amalgam 我有許多的年來,一個完整的安全性聊天室。 我無法假設這個聊天室不過,會執行到原始的 Kerberos 紙張,正義,對我見諒 profusely 的前進距離。

這個聊天室的一個主要的目標是結合在某些主要的安全性開發生命週期 (SDL) 需求,我們對產品團隊在此 Microsoft。

[Thespians

Paige: 年輕、 亮軟體開發人員。

Michael: 一個簡單的安全性人員在 Microsoft。

場景我

cubicles 的兩個集合之間的一個小 hallway 應該用來增強靈活的軟體開發和通訊。

Paige: 嗨,grumps。 我需要您的 [說明] 建置某些軟體。

Michael: 因此嗎?

Paige: 嚴重,我希望您建立這個系統,我在工作的說明。

Michael: 代表您要設計項目、 建置、 測試它,並再詢問尋找這些安全性弱點的假設嗎?

Paige: 不要是因此 grumpy。 不,希望最多前您的說明。

暫停: Michael 擦他朝下的他手,並強制在微笑片中。

Michael: 哇 ! 這是在第一個。 [確定],我將幫助。 請問您要?

Paige: 我們有基本架構的設計配置。 資料的 Web 應用程式的但是我想確定我們在做正確的安全性內容]。

Michael: 代表您要傳遞您最終安全性檢閱嗎?

Paige 尋找,perplexed 然後一點 agitated。

Paige: 沒有可因此 GRUMPY ! 否,我需要進行正確的安全性動作,我做。 我不想要這個產品,標題中的錯誤的原因。 我要確定任何敏感的資料受到保護,而且我想要保存任何緊急補充程式,在最小值。 我們的客戶有告訴我們他們想要減少補充程式部署的事件。

Michael,嘗試真的不正確的 Yoda 模擬。

Michael: wise 就。

Paige: 其中我們開始?

Michael: 位置的潛在威脅模型? 沒有潛在威脅模型我們只要猜測。

Paige: 這裡是。 我們已識別出的威脅,但我猜我們必須確定,緩和措施是正確。

Michael 會 leans 透過 Paige 的支援,及快速外觀透過潛在威脅模型。

Michael: 好。 非常好。 我印象。 這是很好的潛在威脅模型。 如果您 squint,看起來應用程式會很像許多 Web 應用程式: Web 前端、 Web 的後端資料庫伺服器、 儲存後結束的客戶資料的應用程式邏輯。 Hmmm… 相當標準的東西。

Paige: 確定,接下來該怎麼辦?

Michael: 我看到您已識別出第一個順序潛在威脅。

Paige: 實際,威脅分析模型工具沒有的。

Michael: 我知道,我被不錯 ! 讓我們來看看一些在 biggies。 這時候我假設正確的應用程式圖表。

Paige: [是],設計已經相當穩定經過數週。

Michael: 好。 因為它是您的應用程式定義域 」 和 「 我的安全性網域之間的在最重要橋接器,一個好的圖表是處理序的其餘部分的關鍵。

場景 II

Michael 提取椅子,以在 Paige 的支援,來查看更詳細的說明中的 「 潛在威脅模型工具分析。

Michael: 的首先,您應該知道的是攻擊發生且沒有真的沒有您可以如何將它們停止。 只要攻擊者會繪製一口氣,他們會攻擊。 Web 應用程式會是一個大的目標,因為它們通常會提供對機密資料的前端,它們通常完整真的不正確的安全性錯誤。

Paige: 為什麼是因此完整的安全性錯誤的 Web 應用程式?

Michael: 我沒有經驗的資料但我已經看到數千個錯誤,檢閱更多程式碼,不是我想要記住,聽過每個好像和 implausible 的藉口,無法修正錯誤的。

我想我們可以看到這麼多的安全性錯誤因為下列兩種情況之。 第一次,大量 Web 的程式碼撰寫今天,而且法律規定的大的數字指出的極少數的大量的程式碼的安全性錯誤仍然是錯誤的大數字。

第二個,大部分的開發人員就不知道問題。 這是悲傷,但 true。 不幸的是,有很多大型的攻擊者有者知道問題。

第三個,大量的程式碼被緊迫上市。 我聽到 「 取得它那裡 」 所有太頻繁。 不要將取得我錯誤,您的 Web 應用程式有提供真正的商業價值以及如果它在開發實驗室中停留,它執行沒有任何。 如果您正在建置的高公開,等為一的 Web 應用程式,則您必須執行安全性,但因為 diligence,因此您不將風險的客戶。

Paige: 您說發生的原因有二,但提供三個。

我所知道 Michael:。 我的 lied。

Michael,furrows 他 brow。

Michael: 時沒有您最後移至安全性訓練課程呢?

Paige: 三週前,這是 Web 安全性類別。

Michael: 好。 使用者會教導類別?

Paige: Bryan。

Michael 具有擔心的外觀,他的臉上。 Paige 回應擔心的外觀。

Paige: 什麼是嗎?

您必須我們最好的傢伙的其中一個 Michael: 只要 kidding。 沒有他告訴您他本書的 AJAX 安全性?

Paige: 的課程。

Paige 和 Michael 的 smirk。

Michael: 確定,讓我們得到的課程。

透過潛在威脅模型,看起來短為 Michael 的暫停。

Michael: 您已記下的資料庫伺服器會儲存可能的敏感性的使用者資料。

Paige: 沒錯。 還有一種可在瀏覽器以 C# 撰寫小型用戶端應用程式。 這個程式碼可以上載檔案從使用者透過 Web 伺服器,我們後端],並將檔案儲存在連同不同檔案中繼資料快速查閱的在 SQL Server 中儲存的檔案系統。 我們可能最後儲存不計其數的檔案。

Michael: 此安全性和隱私權實質上因為資料是可能的機密,且因為它是資料,它會受限於在後端資料存放區,並在從用戶端與伺服器正確的傳輸時的資訊洩漏威脅?

Paige: 呃,沒錯。

Michael: 確定,讓我在操作的應用程式的風險。 所以讓我們開始開頭。

我看到有使用者 — 外部實體,在您的系統上。 您清楚地需要驗證使用者,因為它們可能假造。 您如何驗證它們?

Paige: 我們使用的使用者名稱和密碼或 Windows 驗證。

Michael: 為什麼都嗎?

Paige: 我們有兩個不同的使用方式案例。

Paige 顯示核心案例,潛在威脅模型工具。 第一個是網際網路時。 第二個都是內部網路案例。

Michael: 什麼做您所謂近端內部網路?

Paige: 從用戶端程式碼我們偵測是否電腦是網域,如果它,我們變更一些充分利用 Windows 平台上我們內部設定。

Paige 會顯示下列的程式碼:

bool _fIsDomainJoined = true;
try {
    Domain d = Domain.GetComputerDomain();
}
catch (ActiveDirectoryObjectNotFoundException e) {
    // not in a domain
    _fIsDomainJoined = false;
}

Michael grimaces。

Michael: 有是兩個錯誤,程式碼。 第一個是您正在檢查是否已加入網域電腦,不使用者帳戶)。 很可能使用本機帳戶,即使電腦是網域登入,因此將程式碼使用 domain.GetCurrentDomain 的變更。

接下來,您無法開啟。 程式如果程式碼會引發任何其他種類的例外狀況它在程式碼中其他地方處理然後碼會使用加入網域的邏輯因為加入網域的旗標為 true。 您需要變更程式碼設定為 true,只在成功的 try 區塊內的加入網域的旗標。

kudos 的方式上只能攔截,您可以處理的例外狀況。 許多人攔截所有例外狀況,即使它們無法處理的例外狀況] 和 [實際程式碼錯誤,只要遮罩。

Paige: [確定],得到它。

Michael:],您應該在威脅模型中特定: 變更內部網路網域加入。

Paige 會更新威脅模型化工具。

Michael: 告訴我有關您在加入網域時,使用 [Windows 驗證。

Paige: 我們使用 NTLM 或 Kerberos。

Michael grins。

Michael: 代表您使用 Kerberos?

代表 Paige: 什麼您意思?

Michael: 您說這是加入網域的案例的因此您應該強制使用 Kerberos。 您應該將從移開 NTLM 有可能,並使用只能使用 Kerberos。 所有目前支援加入網域的版本 Windows 支援 Kerberos。

Paige: 如何我們強制的?

Michael: 只要確定您不要求 NTLM 直接 ; 在您的程式碼中尋找 「 NTLM,然後如果您會看到它,來我我們可以設定和項目正確,請參閱。 請勿違反 SDL 並需要 NTLM。 此範例程式碼是不正確的因為它無法利用 Kerberos 中:

Michael 顯示 Paige 呼叫某些 C ++ 程式碼:

AcquireCredentialsHandle(NULL, NTLMSP_NAME ,...)

Paige 可讓使用 Kerberos 相關的便箋。

Paige: 什麼因此特殊有關 Kerberos?

因為說,在 SDL Michael: 我可以只要說不要使用 NTLM。 此處的為什麼您應該使用 Kerberos,但是: 它是比 NTLM 更調整,而且將在用戶端和伺服器驗證。 NTLM 驗證的只有用戶端。

現在告訴我關於網際網路為基礎的驗證系統。 這在您自己的系統或其他?

Paige: 我們使用 Windows Live ID。

Michael: 我會在老實。 為安全性的人,我不風扇的使用者 ID / 密碼驗證系統。

Paige:,但我們需要的可用性。

Michael: 完全。 我完全瞭解。 只要確定您使用最新版本的 Windows Live ID SDK 中。

我們已解決一個潛在威脅: 欺騙使用者,降低驗證,在這個案例的 Windows Live ID 或 Kerberos。 請確定您擷取的潛在威脅模型中。

Paige: 完成。

Michael: 您必須在瀏覽器中執行此應用程式有所有 STRIDE 風險項目的處理序。 我要專注於兩個大的威脅。 我們可以專注於其他明天。

讓我們來看看詐騙。 您確定真正的應用程式,且不某些其他應用程式假裝為您的程式碼嗎? 我們也查看提高權限。 您要在最後一個項目是讓攻擊者取得這個執行工作,其應該功能之外的程式碼。 許多安全性專業人員宣告的安全性的程式會是它應該執行,不多的程式。

Paige: 我們有這做到。 我認為! 先,由附屬於安裝的 Windows 和 Linux 中的預設值 」、 「 我們的兩個目標平台這個第一個版本的根 CA 憑證的憑證授權單位是數位簽章的下載至瀏覽器的封包檔。 第二個,程式碼會是 C#,因此我們可以限制使用權限集合,基本上是只 FileDialogPermission、 UIPermission、 DnsPermission 和 SocketPermission 的程式碼所需的權限。 至少,這是我們認為我們現在需要權限。

Michael smiles。

Michael: 哇。 好的東西 ! 您正在做我認為是傑出的內容: 您要卸載執行階段或作業系統的安全性工作,而不是建立您自己的安全性基礎結構。 如果您執行您自己的安全性東西,您將只取得錯誤! 您知道有關使用 Managed 程式碼應用程式上的數位簽章的很酷嗎?

Michael: 您只處理 T 的 STRIDE 潛在威脅: 竄改。 因此請確定潛在威脅模型會包含您的數位簽章是 T 緩和措施。

場景 III

Paige 和 Michael 抓取在咖啡,然後標頭回 Paige 的支援。 因此他 drinks 的 outstretched 管口與他咖啡,Michael 穿著一個白色的 T 恤 !

Michael: [下一步] 是伺服器。 再次的處理序在威脅模型中,所以受制於所有 STRIDE 威脅。 我們來只看詐騙的一點時間。 如何知道網站是您真正想要的網站而且不是惡意?

Paige: Ha ! 我們會建立這個一個 sewn 設定。 事實上,現在我考慮哪些您說稍早時,我們可能有兩種解決方案。 第一個是我們需要 SSL / TLS,提供正確的伺服器驗證的?

Michael: 非常好。 只要 CN,伺服器憑證的一般名稱,會符合在 URL 中的網域名稱。

Paige: 但等待。 還有更多。 如果我們使用內部網路... 我是指加入網域的案例,我們取得伺服器驗證,使用 Kerberos ! 酷。

Michael: 我印象。 確定用戶端詐騙地址的程式碼。 詐騙地址的伺服器。 詐騙地址的用戶端。 線上,如何威脅: 將資料從用戶端流向在的伺服器和資料流向用戶端從伺服器。 清楚地 (沒有 pun 目的),所有受限於: 資訊公開和竄改 — 我,並在 STRIDE T (因為它們是資料流程。 好消息是,它們降低。

其所是 Paige:?

Michael: [是]。

Michael,暫停效果並 Paige 是否要取得解決方案,請參閱。

Paige: Ohhh,沒錯。 SSL / TLS ! 我們會取得線上的加密,並免費竄改偵測 !

Michael: Correctammundo。

Paige: 您只說,Correctammundo ! 」

Michael: 我很抱歉。 您是正確的。 加密,SSL / TLS 使用如 AES 的 Symmetric 金鑰的加密,並使用訊息驗證碼防偵測]。 喔,並確定您的 Web 伺服器設定為使用 128 位元或更好的對稱式加密) 的 SDL 的需求。

Paige,使便箋有關加密金鑰長度。

Michael:,但是我仍然認為的 Elephant 的房間內。 從用戶端到伺服器的傳送,並再儲存在檔案系統和 SQL Server 資料呢? 因此如何您要如何減輕資訊公開和竄改威脅是可能機密資料?

代表 Paige: 什麼您意思? 未受是資料保護在伺服器嗎?

Michael: 確定它是。 一旦資料顯示的安全的 SSL / TLS 通道的上一步,清除。 因此問題,如何執行您由您的系統管理員,保護資料竄改和資訊洩露或作者我說它攻擊者如果這些入侵後端, 伺服器嗎?

Paige: 哇。 我不會想。

boyish 的大笑快速地散佈,在 Michael 的表面。

Michael: 的就是為什麼我取得付費 mediocre 的 bucks !

Paige: 確定,簡單。 我們將資料,假設,使用 DES 加密。

Michael 使真正惱人的 FAIL 音效。

Paige: 說明。

Michael: 加密可以減輕資訊的 [公開] 威脅中,但加密會無法緩和竄改的威脅,至少不使用複雜的 Cipher 模式。 而且,您無法使用 DES,因為它不是夠安全的並且是 SDL 原則的違規情形。 您可以使用 AES,對稱式加密。

Paige: 如何我們修正這,然後?

Michael: 我將老實,不是一般。 加密是很簡單。 您只會呼叫某些程式庫程式碼,傳入一個金鑰、 初始化向量,加密型別和純文字金鑰大小、 加密的模式、 填補模式,和您正在完成。

Paige: 您被 cynical。

Michael: 我不是。 簡單的部份 !

Paige: 您已 utterly 遺失。

Michael: 硬碟的一部分會是金鑰管理。 如何產生加密金鑰? 您其中是否儲存它們? 您如何取消它們? 您如何傳輸這些電腦或使用者之間? 如果金鑰而該怎麼辦遺失嗎?

Paige: 我們只允許使用者存取他或她自己的資料。

Michael:,簡化事情一點。 但不是多了 ! 儘可能,依賴作業系統。

Paige: 因此什麼我們可以使用?

場景 IV

Michael 會接受一個深呼吸,並 swivels Paige 向他椅子。

Michael: 所有向右以下是我可以做些。 您有兩個不同的案例: 網際網路及網域的基礎。 網域-並將基礎是 Windows 特定因此運用 Windows 作業系統安全性基本盡。

[確定],Paige: 請移上。

Michael: 私密的資料受到保護,SDL 強制規定使用資料保護 API (DPAPI) 因此只要使用的。 您的用戶端程式碼可以偵測加入網域的使用者執行時,因此只要呼叫 CryptProtectData 和 CryptUnprotectData 並讓它在的。 Windows 會處理金鑰管理以及需要時,加入網域的電腦之間傳輸的金鑰。 其他的好處是本解決方案會很少使用者。 使用者不知道 「 資料保護。 所有的無障礙地,發生,而且很 」 psychologically 接受 「 使用者。

Paige 看起來 puzzled。

Paige: 什麼嗎?

Michael: 將排定我 next week,] 及 [我們將討論一些您應該知道的重要安全性原則: 鐘 LaPadula 公開模型 Saltzer 和 Schroeder 安全設計原則。

Paige 會開啟 Outlook,並將下列一週的約會的加入。

Paige: 回到我們的應用程式: 資料和防偵測的完整性的相關內容?

Michael: DPAPI 解決,太 !

Paige: 似乎無易如反掌。

Michael: [是],您可以相容的 SDL !

Michael 和 Paige grin 為 Paige 更新威脅模型。

Paige: 因此那一個網際網路案例嗎?

Michael: 這是,它可以取得非常困難。 若要老實,我沒有解決方案,現在,而設計的其中一個是困難,因為我需要知道有關您的應用程式的事項。 您是否支援哪些作業系統? 伺服器的系統管理員確實可以存取資料嗎? 您要如何產生及儲存加密金鑰? 您的稽核需求是什麼? 假設加密,使用衍生自使用者如果使用者忘記其密碼的資料嗎? 我無法繼續前進 !

Paige: 要討論這個明天嗎?

Michael: 確定,我們應指定完整的小時 — 實際,讓兩個小時了 !

但我們包裝這個聊天室前,我需要要求數個程式碼層級的問題。 先,您使用資料的 Web 應用程式讓您使用 [SDL-規定 ValidateRequest 和 ViewStateUserKey,權限?

Paige: 絕對。

Michael:,而您正在使用的 HTML 編碼方式的程式庫,適當的位置嗎?

Paige: [是]。 所有的輸入,來自外部在的伺服器然後回應使用編碼後,包括在的資料庫中的中繼資料, Microsoft AntiXSS 程式庫.

Michael: 好。 和 Cookie?

Paige: 會標示為 HttpOnly。

Paige 會開啟 Visual Studio,並顯示下列的從 Web 伺服器的程式碼行:

cookie.HttpOnly = true;

Michael: 好 ! SQL 陳述式嗎?

Paige: 使用儲存程序] 和 [參數型的查詢及 [拒絕存取基礎資料庫物件)。

Michael: Bryan 教導您好 !

Paige: 感謝。 也,是非常有用的交談。 我學到許多今天。

聽 Michael: 好。 我們仍然必須大量封面,不過我考慮關閉我們是很好的開始。 我們已傳送的網際網路後端資料的安全性問題後,我們可以查看其餘的潛在威脅模型。 但是的時間我認為我們已經解決一些大的問題。

Michael 請回到他 cubical 上取得。 然後停止,並開啟解決]。

Michael: 喔,掛上。 您會在隱私權聲明中對 「 」 網站權限?

Paige: [是]。 我們的律師和隱私權的人可以製作一個我們。

Michael: 好的另一個的 SDL 需求,您已經解決。

您提出問題或意見,請到的安全性簡介寄 briefs@Microsoft.com.

Michael Howard 會是主要安全性程式經理 Microsoft 著重於安全的處理程序的改進及最佳作法。 他是的許多安全性書籍,包括 Writing Secure Code for Windows Vista,也是 The Security Development LifecycleWriting Secure Code,和 19 Deadly Sins of Software Security