在WindowsVista上編寫安全的代碼

在WindowsVista上編寫安全的代碼

《在WindowsVista上編寫安全的代碼》是2008年電子工業出版社出版的圖書,作者是赫沃德.、勒伯雷恩。

基本介紹

  • 書名:在WindowsVista上編寫安全的代碼
  • 作者:(美)赫沃德.),(美)勒伯雷恩
  • 譯者:羅愛國
  • ISBN:9787121074196
  • 類別: 圖書 >> 計算機/安全>>系統安全
  • 頁數:240頁
  • 定價:¥35.00元
  • 出版社: 電子工業出版社
  • 出版時間: 2008-10-1
  • 開本: 16開
內容簡介,目錄,序言,前言,如何閱讀本書,

內容簡介

本書內容主要是面向Windows Vista的設計和編碼的最佳實踐,介紹安全編碼的原則,以及在設計和測試軟體時應該遵循的原則。全書包括9章,內容包括代碼質量、用戶賬號控制、令牌和完整性級別、網路防護措施、創建安全而且能復原的服務、利用IE的防護措施、加密增強、認證與授權,以及其他的防護措施和安全技術。本書適合Windows下的軟體開發人員、設計人員和系統架構師參考,也適合高校計算機相關專業學生閱讀。

目錄

第1章 代碼質量
1.1 Windows Vista質量閥 3
1.2 用SAL註解所有的C/C++字元串緩衝區 4
1.2.1 SAL示例 5
1.2.2 如何在已有的代碼里使用SAL 9
1.3 從代碼庫中剔除被取締的API 10
1.4 從代碼庫中剔除被取締的加密算法 11
1.5 通過靜態分析發現並修復bug 12
1.5.1 與/analyze相關的警告 12
1.5.2 Application Verifier警告 13
1.5.3 FxCop警告 14
1.6 用/GS選項編譯UnmanagedC/C++程式,並用/SafeSEH,/DynamicBase和/NXCompat選項進行連線 14
1.7 行動起來 14
1.8 參考資料 15
第2章 用戶賬號控制
2.1 深入UAC 18
2.1.1 從初級用戶令牌開始 18
2.1.2 提升為管理員 23
2.1.3 一個小小的變種:“具有認可模式的管理員” 23
2.1.4 最新的Windows Vista令牌格式 25
2.1.5 確定一個進程是否被提升 25
2.1.6 怎樣要求一個應用程式以管理員身份運行 27
2.1.7 使應用程式提示憑證(密碼)或同意 31
2.1.8 用COM Elevation Moniker啟動COM組件 32
2.1.9 啟動提升的可控代碼應用程式 34
2.2 用戶接口需要考慮的事項 34
2.3 虛擬化 35
2.3.1 怎樣在你的應用程式中禁用虛擬化 39
2.4 完整性級別 40
2.4.1 完整性設定的規則 51
2.4.2 NW、NR和NX Masks 51
2.4.3 使用完整性級別的防護模型 52
2.5 Windows Vista里調試應用程式的兼容性問題 53
2.5.1 File Warnings 54
2.5.2 Registry Warnings 54
2.5.3 INI Warnings 54
2.5.4 Token Warnings 54
2.5.5 Privilege Warnings 54
2.5.6 Name Space Warnings 54
2.5.7 Other Objects Warnings 55
2.5.8 Process Warnings 55
2.6 代碼簽名的重要性 55
2.7 Windows Vista里的新特權 56
2.8 行動起來 57
2.9 參考資料 57
第3章 緩衝區防護
3.1 ASLR 62
3.1.1 ASLR的限制 65
3.1.2 性能和兼容性 65
3.2 棧隨機化 66
3.2.1 性能和兼容性 67
3.3 堆防護措施 67
3.4 NX 73
3.4.1 性能和兼容性問題 76
3.5 /GS 79
3.6 SafeSEH 83
3.7 小結 89
3.8 行動起來 90
3.9 參考資料 90
第4章 網路防護措施
4.1 IPv6概述 93
4.1.1 Teredo 95
4.2 網路列表管理器 98
4.3 Windows Vista RSS平台 99
4.4 Winsock安全套接字擴展 101
4.5 更安全的Windows防火牆 103
4.5.1 全局防火牆設定 103
4.5.2 創建規則 106
4.5.3 與規則組共事 113
4.6 行動起來 115
4.7 參考資料 115
第5章 安全復原服務
5.1 服務概述 118
5.2 服務賬號 119
5.3 減少特權 123
5.4 控制網路訪問 130
5.5 與桌面進行通信 133
5.5.1 Simple Message Boxes 135
5.5.2 共享記憶體 135
5.5.3 命名管道 136
5.5.4 套接字 141
5.5.5 RPC/COM 142
5.6 實踐出真知 142
5.7 行動起來 143
5.8 參考資料 144
第6章 IE7防護措施
6.1 普及的防護措施 147
6.1.1 ActiveX opt-in 147
6.1.2 保護模式 148
6.1.3 數據執行保護 152
6.2 cURL和IUri接口 155
6.3 鎖住你的ActiveX控制項 158
6.4 你應當知道的關於IE7的其他事情 158
6.4.1 禁止訪問剪貼簿 158
6.4.2 腳本URL 158
6.4.3 Good-bye PCT and SSL2 (and Good Riddance), Hello AES! 159
6.4.4 Window Origin 159
6.5 行動起來 159
6.6 參考資料 160
第7章 加密方面增強
7.1 核心模式和用戶模式支持 163
7.2 敏捷加密 164
7.2.1 CNG中的敏捷加密 165
7.3 CNG中的新算法 167
7.4 使用CNG 168
7.4.1 加密數據 169
7.4.2 Hashing數據 169
7.4.3 MACing數據 170
7.4.4 生成隨機數 170
7.5 CNG和FIPS 171
7.6 改良的審計 172
7.7 CNG缺少的東西 173
7.8 SSL/TLS改進 173
7.8.1 SSL/TLS撤銷檢查和OCSP 175
7.9 Windows Vista里的根證書 177
7.10 Windows Vista拒絕的加密功能 178
7.11 行動起來 179
7.12 參考資料 179
第8章 認證與授權
8.1 WindowsCardSpace及Information Cards 181
8.1.1 Information Cards數據流 182
8.1.2 WindowsCardSpace和網路鉤魚 183
8.1.3 CardSpace和網路釣魚示例 185
8.1.4 看Information Cards的實際使用效果 187
8.1.5 Information Cards包含什麼內容 187
8.1.6 通過編程的方式訪問Information Cards 188
8.1.7 CardSpace小結 190
8.2 圖像識別和授權改變 191
8.3 Owner SID改變 191
8.4 行動起來 193
8.5 參考資料 193
第9章 其他的防護措施
9.1 在應用程式中增加父母監控 196
9.1.1 代碼 197
9.1.2 時間限制 198
9.1.3 The 450 Error 199
9.1.4 檢測是否啟用了“Block file downloads” 199
9.1.5 為你的應用程式或URL關閉過濾 199
9.1.6 記錄事件 200
9.2 Windows Defender APIs 201
9.2.1 簽名你的代碼 202
9.2.2 請求加入Windows Defender “Known or Not Yet Classified” 列表 203
9.3 新的Credential User Interface API 203
9.4 使用Security Event Log 206
9.5 指針編碼 207
9.6 核心模式調試相關 211
9.7 通過編程訪問TPM 211
9.7.1 對TPM的低級訪問 214
9.8 Windows SideBar和Gadget方面的安全性考慮 219
9.9 參考資料 220

序言

對於身處高技術產業的每一個人來說,《編寫安全的代碼(Vista版)》都是值得擁有的。書里表達的觀念體現了創造可信賴用戶體驗里的最新思想。
Microsoft認識到技術將隨著摩爾定律套用到社會的各行各業,而更強大、更便宜的計算機將可以迎合所有人的需求。隨著寬頻網的持續普及,以及新的無線網路技術出現,全世界的計算機設備彼此相連,這給人們訪問信息、媒體、和服務帶來了空前的便利。不單單是Microsoft有這種遠見,它其實也是大部分高科技行業的共識。不論你是否迷信商業或技術,這個遠見都給我們描繪了這樣一幅圖景:我們的行業將怎樣高速增長,我們的商業將怎樣大獲成功,我們將怎樣為全世界的人們提供越來越多的便利——每一個人都可以發掘他全部的潛能。這是一幅美妙的前景——我們已經迫不及待了。
為了實現這個前景,需要有一個基本的前提。如果各行各業的人都加入到我們這個美妙的、互連的數字世界,他們將需要一定的信任。他們想知道他們的隱私是否被適當地保護了。他們也想確定他們的關鍵信息不會被竊取或破壞。他們還想他們的體驗更加可靠、簡單。這一直都在艱難地發展。
在Microsoft,我們跟蹤黑客和與網際網路相關的犯罪行動。現在的環境變得很複雜:從為了開玩笑和聲望而黑入系統到有組織的犯罪。據不完全統計,全世界與網際網路相關的犯罪導致了數十億美元的損失。這些錢可以用來資助許多工程,這也意味著罪犯在尋找高科技產品里最晦澀的漏洞方面比以往更加執著了。“假設沒有人會注意到產品里的漏洞”只是我們一廂情願的想法。我們生活的時代如果有漏洞出現,就會有人注意並利用它。
當黑客為了獲取更高的回報時,他們在共享漏洞信息方面也變得更有組織了。我們現在生活的環境是:罪犯擅長“武裝”漏洞信息,使從發現這些漏洞到利用這些漏洞獲利之間的時間間隔趨於0。這些罪犯可以算是網際網路上有組織犯罪的軍火商,他們將這些商品待價而沽。
因為惡意的黑客團伙比以往更有組織性,對於每一個生產高科技產品的人來說,使用嚴格的技術標準變得越來越重要了,例如《Secure Development Lifecycle》(已有中文版,名為《軟體安全開發生命周期》),可以將產品里的漏洞降到最少。因為高科技產品也是人造的,所以並不能保證沒有漏洞。然而,如果我們整個產業能聯合起來,將可以使我們的防禦最大化。
作為一個軟體平台,Windows在幫助軟體公司交付更安全的軟體方面,扮演著特殊的角色。《編寫安全的代碼(Vista版)》可以幫助那些為Windows編寫應用程式的人遵循安全最佳實踐,交付從根本上更安全的軟體產品。Windows Vista在設計時就考慮到了為軟體作者提供相關的特性,從而使他們的軟體更安全。這些特性體現了Microsoft對軟體應用程式認證、數據保護、防範利用等方面的深刻理解。通過使用Windows Vista提供的安全特性,應用程式在客戶眼裡將會變得更安全,也更加可信。
實現數位化生活還有很長一段路要走,需要高技術行業協同工作,為人們提供便利和價值。成功的關鍵因素是創造出人們信任的技術產品。《編寫安全的代碼(Vista版)》將幫助我們向客戶交付從根本上更安全更可信的產品。
Jon DeVaan
Senior Vice President of Engineering Excellence
Microsoft Corporation
February 2007

前言

網際網路上的計算機每天都可能會受到攻擊和傷害。毫無疑問,攻擊者正逐漸深入軟體堆疊,攻擊計算機上安裝的軟體。不過,這種情形正在慢慢變少,因為隨著要求安全的呼聲日益高漲,軟體廠商在作業系統的防護方面投入了更多的人力物力。在Windows XP發布的2001年到Windows Vista發布的2006年期間,安全技術的發展可謂是日新月異,但反觀另一方面,令人厭煩的低級攻擊行為也在日益增多。我們經常聽到有人抱怨Windows是最容易受到攻擊的平台。的確如此,因此,下面的陳述可能會使他們更擔心:我們(也就是本書的作者)對媒體上報導的攻擊事件並不是特別在意,因為在我們看來攻擊永遠都會發生。其實,人們應該擔心的是其產生的危害,正是因為這個原因,微軟人從長計議,竭盡全力想把Windows Vista打造成更安全的產品。
Windows Vista是微軟公司發布的有史以來最安全的作業系統。我們向裡面添加了很多防禦性的設計(defensive engineering),也採用了很多防護措施。但令人遺憾的是,即使我們如此努力,但攻擊仍將繼續(我們可以儘量把自己的工作做得更好,但沒有權利指定別人可以做什麼,不可以做什麼)。我們不是說Windows Vista沒有安全bug,它肯定會有,但我們為它增加了許多防護措施,儘量減小它被成功攻擊的可能性,減少漏洞被利用的機會。我們加入這些防護措施的目的是儘量避免危害發生。
針對日益增長的潛在攻擊威脅,你打算如何保護你的應用程式?記住,攻擊遲早都會發生!僅僅因為應用程式的標題中沒有“Microsoft”並不意味著不會被攻擊,也並不意味著它永遠不會被攻擊!使安全成為一個令人著魔的主題的不是這樣一些因素,比方說,計算機的性能和可靠性。性能與可靠性指的是人與計算機之間的問題,而安全卻是人與人之間的較量。安全問題沒有終結,因為這個世界上總有一些懷有惡意的人。
除了整理已有的代碼、修正設計問題外,微軟還為Windows Vista新增了許多功能,利用這些功能可以使應用程式更安全。不同於我們以前那些以介紹基礎知識為主的書,本書主要介紹運行在Windows Vista上的應用程式怎樣利用系統提供的防護措施來保護用戶。除了基本的防護策略外,本書還介紹了一些新的安全功能,你可以在應用程式中使用它們,以增加程式的防護措施,從而幫助你或你的客戶達到商業目標。
Windows Vista的安全之路走了5年,在這5年多的時間裡,微軟向Windows Vista中增加了許多防護措施和新的安全功能。你可以在應用程式中充分利用它們,從而減少被攻擊的機會。你可以選用下面介紹的三種方法:
 減少用戶——如果沒有人用你的應用程式,你就不值得攻擊。
 減少攻擊面——組件的入口越少(特別是默認情況下),被攻擊的可能性也就越小。
 加固攻擊面——使攻擊者知難而退。
我們不建議大家使用第一個方法,但如果你不重視安全,而且固執己見,基本上可以肯定會出現這種情形。我們希望後兩個方法對你有所幫助,使你能利用作業系統提供的防護措施和功能保護用戶,這也正是本書的目標——闡述如何在程式中使用Windows Vista提供的這些功能。
目標讀者
這本書的目標讀者主要是那些為Windows Vista編寫軟體的開發者。當然,這本書還包括一些軟體設計上的內容,因此,軟體設計師和系統架構師也會從中獲益。不過要注意的是,書中包含了大量的代碼。
我們將假設讀者已經掌握Windows認證與授權等方面的基礎知識。雖然書中提供了一些背景信息,但我們仍將假設你知道怎樣在Windows里保護對象。如果你不知道,建議你先找一些像“Windows Internals Fourth Edition”(Mark Russinovich,David Solomon,Microsoft Press 2005)之類的書來讀。
本書與“Writing Secure Code”(《編寫安全的代碼》)一書的關係
“Writing Secure Code”(微軟出版社)第一版和第二版的內容主要是介紹關鍵的安全編碼的原則,除此之外,書中還簡單介紹了在設計和測試軟體時應該遵循的原則。而本書的主要內容是介紹怎么利用Windows Vista內部的防護措施和功能,編寫出安全的代碼。如果你已經有了“編寫安全的代碼”一書,本書也不會顯得多餘,因為本書的內容主要是面向Windows Vista的設計和編碼的最佳實踐,而“編寫安全的代碼”的內容是寬泛的、基礎性的。因此,這本書不是“編寫安全的代碼”的超集,而是它的有益補充。

如何閱讀本書

這本書很薄,如果你打算或正在Windows Vista下編寫軟體,那么,這本書就是為你準備的——因為你可以從中了解到微軟在Windows Vista里新增或改進的防護措施和技術。
本書每一章的內容都相對獨立,除了前三章——所有在Windows Vista下編寫軟體的開發者都應該閱讀,其他章節可以有選擇地閱讀。
第1章,“代碼質量”描述了我們為剔除潛在的安全bug,在Windows Vista的代碼層所做的改進。軟體行業可以從微軟為Windows Vista增加安全性所採取的措施中學到很多東西。
第2章“用戶賬號控制、令牌和完整性級別”和第3章“緩衝區溢出防護”是一定要讀的,因為這兩章介紹的技術影響著Windows Vista里所有其他的功能。
現在是網路時代,即使不是所有的開發者,至少大部分的開發者將會編寫基於網路的應用程式,因此,應該熟讀第4章“網路防護措施”,並學以致用。
編寫服務程式的開發者應該仔細閱讀第5章“創建安全而且能復原的服務”,因為我們提供的指導可以使得服務在面對攻擊時更有彈性,並使創建以儘可能低的特權運行的服務變得更容易。
如果你為IE編寫代碼,比如說BHO(browser helper objects)、工具條或ActiveX控制項,那么你應該閱讀第6章“利用IE的防護措施”。Windows Vista的IE 7在架構上做了很多改進,並新增了許多防護措施,這些將影響代碼的運行方式。
如果你的軟體中使用了加密函式,那么你應該閱讀第7章“加密方面的增強”,因為第7章除了介紹名為Cryptography API:Next Generation(CNG)的新加密結構體系外,還增加了更新的算法及證書的撤銷與檢驗等內容。
開發企業級軟體的程式設計師將從第8章“認證與授權”中找到需要的內容,本章簡單地介紹了Windows Vista里的認證及ACL等概念。
最後一章“其他的防護措施和安全技術”介紹的是一些Windows Vista中新加的,但又不適合放在其他章節中的防護措施。你應該花一些時間閱讀本章,從而確定在你的軟體中是否採用這些功能和防護措施。
如何使用書中的代碼
本書中的代碼大部分是用C/C++寫的,只有很少一部分是用C#寫的,使用的開發環境是Microsoft Visual Studio 2005 Team Suite Service Pack 1和Windows Software Development Kit(SDK)。對C/C++開發來說,首先要安裝Visual Studio,接著安裝Windows SDK。除此之外,還要向Visual Studio中添加相關的Windows SDK頭檔案和庫檔案,從而使Visual Studio首先從更新後的目錄讀取。你可以按下面的步驟操作:
打開Visual Studio;
選擇工具|選項;
找到並展開項目和解決方案;
選擇VC++目錄;
單擊新行圖示;
增加Windows SDK include files所在的目錄路徑。
重複上面的步驟添加執行檔和庫檔案。下圖顯示的對話框可以說明正在討論的問題。當然,你也可以在安裝SDK時接受更新環境變數的選項——記得要重啟開發環境。
最後,在你的應用程式中,你應當在包含其他頭檔案之前增加下面這一行,插入在stdafx.h檔案的第一行比較合適。
#define _WIN32_WINNT 0x0600
如果你的代碼中沒有這一語句,而又引用了Windows Vista中新增的函式、定義、常量或結構時,可能無法通過編譯。
重要 注意,書中所有的C/C++例子代碼在合適的地方都用了SAL(在第1章里介紹),用warning level 4(/W4)編譯時不會出現警告,也沒有PREfast警告(/analyze),當然,我們用於演示不安全的編程實踐的例子除外。
對於C#開發來說,只要程式是在安裝了Windows Vista計算機上運行,就不需要更改開發環境的任何設定。
本書配套的網站上有什麼?
本書討論的所有的代碼例子都可以從配套的Web頁面上下載,地址是:
http://www.microsoft.com/mspress/companion/0978735623934
請你務必先讀一下readme檔案,該檔案中對所有的例子代碼做了介紹。
系統需求
任何能運行Windows Vista的機器都能運行本書里的例子代碼(可以在配套的Web網站上下載),運行Windows Vista的最低需求是:
 800 MHz處理器
 512 MB記憶體
 支持DirectX 9的顯示卡
 20 GB硬碟,15 GB可用的硬碟空間
為了獲得更好的Windows Vista體驗(包括Windows Aero的視覺效果),你的計算機至少需要滿足以下需求:
 1GHz處理器
 1 GB記憶體
 支持DirecteX 9的顯示卡,支持Windows Vista Display Driver Model(WDDM)的顯示器,128 MB顯存(如果GPU使用共享記憶體,則不需要獨立顯存),Pixel Shader 2.0,每像素32位。
 40GB硬碟,15 GB可用的硬碟空間
 內/外置DVD-ROM
 音效卡
 可以訪問網際網路

相關詞條

熱門詞條

聯絡我們