安全漏洞追蹤

《安全漏洞追蹤》是由美國蓋弗(Gallagher,T.)、詹弗瑞斯(Jeffries,B.)、蘭德(Landauer,L.)等編著,電子工業出版社於2008年11月1日出版發行的書籍,本書適用於軟體測試人員、軟體開發人員、學生、滲透測試人員。

安全漏洞追蹤

作 者:(美)蓋弗(Gallagher,T.),(美)詹弗瑞斯(Jeffries,B.),(美)蘭德(Landauer,L.)
譯者:鍾力,朱敏,何金勇
出 版 社: 電子工業出版社
出版時間: 2008-11-1
頁 數: 532頁
開 本: 16開
I S B N : 9787121073717
分類: 圖書 >> 計算機/網路 >>網路安全
定價:¥65.00

編輯推薦

軟體安全一直在快速地發展,未來我們將面臨今天所不知道的危險攻擊,本書主要討論以攻擊者的角度、採用攻擊者的方法進行安全測試的步驟,以促進大家的測試工作,從而開發出更好的軟體。
本書共20章,前三章介紹了此書的背景信息,第4、5章解釋了網路流量是如何被操控的,第8、9章闡述了攻擊者是如何通過直接操控記憶體來執行任意代碼的,第18、19章闡述了各種各樣的再利用攻擊。最後的一系列工具和一份安全測試用例列表中包含了一些適用於初學者的基本測試用例。書中絕大部分章節在開始處都有一個高度概括的概要,在結尾處會總結一些精煉的測試技巧。有些章節也包含了一些走查,你可以在自己的計算機上嘗試這些步驟。
本書適用於軟體測試人員、軟體開發人員、學生、滲透測試人員。.

作者簡介

Tom Gallagher,微軟Office安全測試組負責人,擅長滲透測試、編寫安全測試工具和安全培訓。

宣傳語

•一本難得的面向安全測試的好書
•我們必須培養一類新型的測試員——一種能像惡意攻擊者那樣思考的人——一種基於白盒和黑盒測試基礎的通過攻擊來追蹤安全漏洞的人。——微軟主席兼軟體體系結構執行長 比爾•蓋茨

內 容 簡 介

這是一本針對安全測試的書籍,同時也是一本十分適合信息安全研究人員的優秀參考書。本書共20章,其中前3章討論了安全測試的基礎,包括如何從攻擊者的角度去思考測試方法,以及如何進行威脅建模和入口點查找。第4章至第19章則通過詳細的示例與代碼,分別深入地闡述了網路流量和記憶體數據的操控方法,包括緩衝區溢出、格式化字元串、HTML腳本、XML、規範化、許可權、拒絕服務、託管代碼、SQL注入和ActiveX再利用等安全漏洞追蹤方法,以及在二進制代碼條件下查找安全漏洞的逆向工程技術。第20章論述了合理報告安全漏洞的程式,並提出了一個負責的安全漏洞公開流程。最後,本書還提供了一個適於初學者的測試用例列表。

推 薦 序

當Jesse James——美國西部著名的歹徒被問到他為什麼搶劫銀行時,他回答道:“錢在那!”同樣地,任何一個可能僱傭你作為安全測試員的現代公司,在它的內部網路上都有著非常重要的資產,同時心懷惡意的人將會試圖進入內部網路並竊取那些資產。無論你測試的是哪種軟體——內部使用的、外部網站的或現成的商業軟體——總會有人有目的地攻擊你的產品。改善應用程式的安全涉及設計人員、開發人員和測試人員,而且,安全測試人員的角色是不能被低估的。
有那么多關於軟體安全的書,為什麼要讀這本書呢?我認識很多在微軟公司和比較大的安全協會中能查找安全缺陷的人,但Tom Gallagher和Lawrence Landauer的工作我非常了解,他們是最優秀的和表達最清楚的人中的兩位。在微軟Office可信計算小組(The Microsoft Office Trustworthy Computing team)中,有一些在行業中最好的安全測試人員。Tom、Lawrence和他們的朋友及合著者Bryan Jeffries都極富經驗,並且知識淵博。在本書中他們提供的信息將會使你更深層次地認識安全測試。
來看看到目前為止已經在其他書中探討過的主題,比如《黑客大曝光(Hacking Exposed)》和《Assessing Network Security》。這些書很好地揭示了網路黑客和從事網路安全評估的人所使用的技術。如果你的工作是開發更安全的軟體,那么它們會是很有用的信息,能幫助你看到那些很容易受到黑客攻擊的缺陷。但是,雖然掌握這種知識是好事,但它們並不能幫助你快速、有效、系統地查找安全問題。而這就是本書將要討論的主題。
有些人的工作就是在其他人的產品中查找安全缺陷,其中一個最有創造性的人就是Greg Hoglund。他的書《Exploiting Software》(2004年,與Gary McGraw合著,Addison-Wesley公司出版)對在此行業中對最優秀的、最具有創造性的人是如何查找漏洞的給予了一些很好的闡述。但Greg沒有原始碼,也沒有詢問開發人員,所以他採用了一個不同的方法。正如Tom簡短的解釋:安全行業的超級明星每年僅能發現和公布非常少的問題。當我在網際網路安全系統的X-Force組(Internet Security System’s X-Force)管理漏洞搜尋人員時,該組中最優秀的人每個月做得好的話能夠發現一個或兩個嚴重的安全問題。一個專業的軟體測試人員不會奢侈到花費這么長時間來查找如此少的漏洞,同時,大多數閱讀本書的人還要負責功能特性的測試,這會進一步地限制了他們的時間。你可以把本書作為一種資源來幫助你理順和加強安全測試進程。
也許你更關心那些受公司防火牆保護的內部運行的軟體。如果公司的網路相當大,那么最安全的構想就是將內部網路當作一個半公開、半敵對的網路來對待。大多數的公司已經犯下了僱傭錯誤,同時內部安全的不足會允許心懷不滿或惡意的雇員做許多壞事。儘管由內部人員發起的內部攻擊比來自外部網路的攻擊要少得多,但是他們攻擊成功的可能性要大得多,並且能造成更嚴重的傷害。我也曾看到過一些內部的、線上交易應用程式的例子,它使大公司的網路變得不安全。如果攻擊者找到了系統所在,那將會有很多問題。大網路之外具有一定熟練程度的攻擊者想達到這個目的是極度困難且代價不菲的。
你為什麼需要學習安全呢?由安全漏洞導致的損失已經非常嚴重。如果你正在為微軟公司或者另外一家大的軟體廠商工作,你就會看到安全問題對你的客戶和公司的影響。對你和你的客戶來說,花費時間修補已經售出的軟體比在軟體發行前發現漏洞的代價要昂貴得多。在經歷了系統崩潰和其他一些損失後,如果廠商不在產品發行前找到並修補安全缺陷的話,客戶幾乎不可能從他們那再購買軟體。
更糟的是,這種形勢正變得更加具有挑戰性。攻擊者可利用的工具正變得更加完善且更容易使用。在90年代中期,需要非常專業的開發人員編寫把緩衝區溢出變成可利用程式的彙編代碼。近幾年來,許多優秀的安全審計小組都有一個或多個人在滲透測試期間編寫漏洞利用程式來攻擊定製的軟體。現在,一個點選式(point-and-click)的網站能產生針對多種作業系統的漏洞利用代碼,克服了許多用戶輸入方面的限制,通常會很容易地把開發人員的錯誤變成可利用的條件。
在攻擊者可得到的資源變得更加全面的時候,攻擊者也變得越來越全面。很多年以前,闖入計算機的人一般不會破壞任何東西或他們可能僅僅惡作劇一下。因為網際網路上並沒有多少計算機,而且被侵入的計算機也沒有什麼有趣的東西,所以在攻擊者中產生了一套道德規範。人們會寫一些帶有政治口號或者只會引起一點點小麻煩的病毒。真正有破壞性的病毒是非常罕見的。
現今,有人控制了大量的計算機形成“殭屍”大軍。為了獲取金錢,有人編寫複雜的間諜軟體而不是病毒。如今攻擊者的目標通常是金錢,社會上甚至存在著從商業網站偷取信用卡的市場需求。位於日本東京的一家安全公司——Little Earth Corporation——最近對一百多個商業網站進行了評估,發現具有嚴重安全問題的網站比安全網站要多得多。儘管開發作業系統和Web伺服器的開發人員做了大量工作,但如果建立在那些安全平台上的軟體是不安全的,那么客戶的數據和公司的聲譽就會存在風險。
為了充分保護你的客戶,請閱讀本書吧!
David LeBlanc
2006年4月

譯 者 序

本書是一本難得的面向安全測試的好書,凝聚了作者在該領域淵博的知識和豐富的經驗。前三章是本書討論內容的基礎,第1章提出了安全測試的基本思路和方法,認為從攻擊者的角度去思考如何進行安全測試,是目前最有效的方法;第2章討論了威脅模型在安全測試中的關鍵作用,指出理解軟體工作機制和數據流程圖,列舉數據的入口點和退出點,分析潛在的威脅和數據處理點,是威脅建模的重要內容;第3章則介紹了常見的入口點及其查找方法。第4章至第19章分別針對不同的主題進行深入的闡述,內容涉及如何對網路流量和記憶體等數據進行操控,緩衝區溢出、格式化字元串、HTML腳本、XML、規範化、許可權、拒絕服務、託管代碼、SQL注入和ActiveX再利用中的安全漏洞及其測試方法,以及怎樣在二進制代碼條件下進行逆向工程來查找安全漏洞。第20章討論了合理報告安全漏洞的程式,並提出了一個負責的漏洞公開流程。最後,附錄A和附錄B給出了本書引用的相關工具列表和適於初學者的測試用例列表。
本書最大的特點就是“廣”和“實”。它探討了幾乎所有的軟體存在安全漏洞的地方,覆蓋面非常寬;而且,對每一個主題都進行了深入的分析,給出明確的指導和具體的實例。該書不但能夠很好地直接用於安全測試,同時對於從事信息安全研究的技術人員來說,也不失為一本優秀的參考書。
我們成立了一個10人組成的團隊來翻譯這本書。除前言和第3章由大家共同翻譯之外,王中鋒翻譯了第4、5、6章,朱敏翻譯了第7、8章,唐雲翻譯了第9、12章,何金勇翻譯了第10、11章,阮強翻譯了第12、13、14章,李蒙翻譯了第15章,張金祥翻譯了第16、17章,張志鵬翻譯了第18、19章,韋朋輝翻譯了附錄A和附錄B,我翻譯了第1、2、20章,並對本書進行了全文校對。在這裡,我十分感謝大家的辛勤勞動,正是由於每個人的努力付出,本書的翻譯工作才得以順利完成。在翻譯過程中,我儘量兼顧每位成員所擅長的研究方向和工作經驗,但由於本書非常全面,有些領域我們涉獵不深,再加上時間緊迫,水平有限,所以翻譯難免有誤,敬請讀者諒解。另外,在本書的翻譯過程中,得到了出版社的大力支持,在此表示衷心的感謝。
鍾 力
2008年8月8日

前 言

你可能想知道微軟為什麼要出版這樣一本關於安全測試的書,因為加強軟體安全是一件非常困難的事情。當然,微軟已經遇到過相當多的軟體安全問題,因而有大量的經驗供測試人員參考。在2002年可信計算計畫被提出之前,我們就已經在微軟工作了。自微軟實施該計畫以來,我們已經看到微軟在處理安全問題方面的重大改變。現在,安全問題已經不僅僅是安全專家的職責,已經成為了我們每一個人的責任。這本具有創見性的關於軟體安全測試的書,源於我們在微軟的工作經驗以及為開發出用戶購買後能持續安全可靠運行的軟體而做出的努力。
套用軟體的安全並不僅僅局限於使用安全技術的功能特徵,以及像加密和賬戶管理這樣的功能特徵。我們必須認真考慮一個產品的每個功能特徵的安全。鑒於此,在微軟工作的每個項目管理人員、開發人員、測試人員和相關技術人員都有責任保證軟體儘可能安全。本書認為安全是每個人的責任,並且重點向測試人員提供用來發現軟體功能安全漏洞的信息,這些安全漏洞都可能是難以發現的。
本書沒有闡述這些漏洞應該如何修補。其他的一些書,如Michael Howard和David LeBlanc所寫的《Writing Secure Code》(微軟出版社,2002年)是一本從編寫代碼的角度闡述如何修補和防止安全漏洞的優秀參考書。
微軟因為發布了含有安全缺陷的軟體而經歷了一些慘痛的教訓,後來微軟不得不通過安全更新來修補這些缺陷。本書描述了現在許多軟體中存在的安全問題,並包含了一些已經帶來損失的漏洞信息,以及我們在產品發布前自己發現的一些漏洞信息。我們希望你能從我們的經驗中學到知識,從而在發布自己的軟體時防止產生類似的安全漏洞。
在本書中,我們把能夠被另外一名用戶控制的數據稱為“攻擊者已控數據(Attacker Controlled Data)”。我們這么做,是要讓你不僅意識到應用程式所操作的數據有可能來自攻擊者,還應該樹立攻擊者的意識,認識到你也能控制這些數據。我們鼓勵你不但要像攻擊者那樣帶有惡意的想法去思考,而且在測試軟體時還要扮演攻擊者,攻擊你自己的系統,以此來幫助公司發現軟體的安全漏洞。
本書的目的就是為了促進你的測試工作,能夠開發出更好的軟體,而不是讓你攻擊其他人的軟體,或者利用攻擊者的惡意想法或技術去分析不屬於你測試範圍的軟體。本書是一本為白帽黑客而寫的書。
軟體安全一直在快速地發展。未來我們將面臨今天所不知道的危險攻擊。但是無論如何,本書討論的以攻擊者的角度、採用攻擊者的方法進行安全測試的步驟,並不會發生太大的改變。
本書的讀者對象
軟體測試人員是此書的主要讀者。下面列出的這些讀者朋友因其工作性質,都能從本書中受益:
 軟體測試人員:測試人員有責任全面了解他們所測試的功能特徵工作原理的技術細節。軟體測試時會用到這些技術細節。我們為測試人員展示了如何利用功能特性的測試知識來完成安全測試。我們在微軟的測試機構工作過,曾經花費了幾年的時間與軟體測試人員在一起,幫助他們更好地理解如何在已進行功能特性測試的地方進行安全測試。在撰寫本書的過程中,我們已向功能特性測試人員和安全專家尋求了反饋意見。
 軟體開發人員:儘管此書並沒有介紹如何構建和編寫安全代碼的知識,但它的確介紹了如何攻擊軟體。軟體開發人員應該對這方面比較感興趣,因為準確地理解攻擊是如何進行的,開發人員就能更好地保護他們的套用軟體。軟體開發人員也能學到特定測試領域的知識,然後要求安全測試人員開發適用於這些測試領域的代碼。
 學生:現在許多學校是不會講授如何進行安全測試的相關知識。如果學生畢業以後,從事軟體和信息技術領域的工作,可能會因為沒有接受過安全測試的教育而感到手足無措。閱讀此書的學生能夠在設計、寫作和配置安全軟體等方面獲取更多的技能。這些技能有助於他們找到工作並勝任工作。
 滲透測試人員:專業的滲透測試人員(也被稱為安全測試專家)對於此書所要討論的許多主題也許已經十分了解。很可能,書中一大段文章可以引起滲透測試人員探尋未知領域的興趣。這本書包含了客戶端和伺服器應用程式。我們從該領域專家那裡獲知了信息和建議,這些專家可以是我們所討論的某些技術的提出者,也可以是專注於安全測試技術的專家。
本書的組織結構
你可以按照章節順序閱讀此書。然而,本書中的許多章節都可以獨立成篇。前三章介紹了此書的背景信息,是其他章節的基礎。第4章“成為惡意的客戶端”和第5章“成為惡意的伺服器”解釋了網路流量是如何被操控的,我們平時所討論的許多攻擊行為都需要操控網路流量。第8章“緩衝區溢出及堆疊/堆操縱”和第9章“格式化字元串攻擊”一併闡述了攻擊者是如何通過直接操控記憶體來執行任意代碼的。第18章“ActiveX再利用攻擊”和第19章“其他再利用攻擊”闡述了各種各樣的再利用攻擊。在書的最後,你會看到一系列工具(附錄 A)和一份安全測試用例列表(附錄 B),其中包含了一些適用於初學者的基本測試用例。
書中絕大部分章節在開始處都有一個高度概括的概要,在結尾處會總結一些精煉的測試技巧。有些章節也包含了一些走查,你可以在自己的計算機上嘗試這些步驟。
系統需求
你需要配置以下的硬體和軟體來編譯和運行書中提到的代碼實例。
 Microsoft Windows XP with Service Pack 2, Microsoft Windows Server 2003 Service Pack 1或更高補丁版本
 Microsoft Visual Studio 2003標準版或Microsoft Visual Studio 2003專業版或以後版本
 600 MHz 奔騰或兼容處理器(推薦1GHz 奔騰處理器)
 192 MB 記憶體(推薦256 MB或更高)
 顯示器(800 × 600或更高的解析度)至少採用256色(推薦1024 × 768,16位色)
 微軟滑鼠或其兼容設備
技術更新
因為書中涉及的相關技術是不斷更新的,更新的內容將被放在微軟出版社的技術更新網頁上,地址如下:
http://www.microsoft.com/mspress/updates/
定期訪問該頁面可以獲取Visual Studio 2005和其他技術方面的更新。
代碼實例及附帶內容
本書包含了一些預先設計好的代碼實例、附帶工具和程式。書中討論的所有代碼實例和附帶內容能在以下地址下載:
http://www.microsoft.com/mspress/companion/0-7356-2187-X/
本書技術支持
我們已盡最大努力來確保本書及附帶內容的正確性。微軟出版社通過以下網址為本書及附帶內容提供技術支持:
http://www.microsoft.com/learning/support/books
問題與評論
如果你對本書及附帶內容有任何評論、問題或建議,或者你的問題在上述網址中沒有找到解答,請發E-mail至[email protected]

致謝

我們非常感謝為本書內容提供了想法、技術見解和其他反饋意見的人士。以下人士慷慨地貢獻了他們的時間無償審閱了此書的部分章節,這些人士是:Atin Bansal、Srijan Chakraborty、Shawn Farkas、Stephen Fisher、Greg Foltz、Raul Garcia、Greg Hartrell、Eric Jarvi、Chris Jeuell、Hidetake Jo、Akhil Kaza、Ariel Kirsman、Alex Krawarik、Secure Windows Initiative Team的John Lambert、Web Services Team的John Lambert、Ivan Medvedev、Bala Neerumalla、Maurice Prather、Walter Pullen、Yong Qu、David Ross、micky Snir、Peter torr、Ambrose Treacy、Don Willits和Oleh Yuschuk。
以下人士的付出應受到特別的讚譽:微軟安全回響中心(Microsoft Security Response Center)的Christopher Edwards認真審閱了本書,並對第20章“報告安全漏洞”提供了反饋,Jason Geffner校對了第17章“觀察及逆向工程”並提出了一些合理的建議。Sean Hunt和Mark Iler超出我們預期地審閱了本書的更多章節並提供了反饋意見。Alan Myrvold認真地審閱了本書幾乎每一頁,他同時也提出了很多評論和建議,提供了一些附加的信息資源。
本書談到了兩個由微軟員工編寫但未公開的工具,他們慷慨地允許我們把這些工具提供到本書的對應網址上。其中,MITM由Jiri Richter開發、ObjSD由Vikram Subramanian開發。這兩個工具都十分有用。再次感謝他們允許我們公開這兩個工具。同樣感謝Mark Russinovich對Sysinternals工具問題的解答,以及對進程瀏覽器工具的細緻修改。
特別感謝Imran Akhtar、Matt Cohen、 Grant George、David Hansen、 David LeBlanc、Mark Mortimore、Tara Roth和Matt Thomlinson,他們全力支持了我們的測試活動,為本書提出了寶貴建議。David LeBlanc更是幫助我們描述了安全測試的重要性。感謝Ben Ryan(策劃編輯)、Kathleen Atkins(項目編輯)、Christina Palaia(文字編輯)、William Teel(美工)和Chris Weber(技術編輯),為了使本書更易懂、語法更準確、技術更精確,他們做了大量的工作。

目 錄

第1章 安全測試的一般方法 1
1.1 安全測試人員的不同類型 2
1.2 一種安全測試的方法 3
1.2.1 深入理解測試的內容 4
1.2.2 從攻擊者的角度思考如何攻擊目標 6
1.2.3 攻擊產品 8
1.2.4 時刻關注新的攻擊 8
1.3 小結 9
第2章 利用威脅模型進行安全測試 10
2.1 威脅建模 10
2.2 測試人員如何對威脅模型分級 11
2.3 數據流程圖 12
2.4 入口點和退出點的安全 13
2.5 識別威脅的技巧及常見威脅 14
2.6 測試人員如何利用一個完整的威脅模型 16
2.7 技術實現難以符合產品規範或威脅模型 19
2.8 小結 20
第3章 查找入口點 21
3.1 查找入口點並劃分等級 22
3.2 常見入口點 23
3.2.1 檔案 23
3.2.2 套接字(Socket) 27
3.2.3 HTTP請求 29
3.2.4 命名管道 32
3.2.5 可插入協定處理程式 35
3.2.6 惡意伺服器回響 37
3.2.7 程式化接口 38
3.2.8 SQL 39
3.2.9 註冊表 39
3.2.10 用戶接口 41
3.2.11 E-mail 42
3.2.12 命令行參數 44
3.2.13 環境變數 45
3.3 小結 47
第4章 成為惡意的客戶端 48
4.1 客戶端/伺服器互動 48
4.1.1 發現伺服器正常接收的請求 49
4.1.2 操縱網路請求 51
4.2 測試HTTP 55
4.2.1 理解無狀態協定 56
4.2.2 接收輸入的測試方法 56
4.3 快速測試特定的網路請求 66
4.4 測試技巧 68
4.5 小結 69
第5章 成為惡意的伺服器 70
5.1 理解客戶端接收惡意伺服器回響的常見方法 71
5.2 SSL能否阻止惡意伺服器的攻擊 73
5.3 操縱伺服器回響 73
5.4 惡意回響漏洞的例子 74
5.5 錯誤認識:對攻擊者來說創建惡意伺服器非常困難 76
5.6 理解降級(Downgrade)MITM攻擊 77
5.7 測試技巧 78
5.8 小結 79
第6章 欺騙 80
6.1 掌握欺騙問題的重要性 80
6.2 尋找欺騙問題 82
6.3 常見欺騙案例 82
6.3.1 ip地址欺騙 83
6.3.2 MAC地址欺騙 84
6.3.3 利用網路協定欺騙 85
6.4 用戶接口(User Interface,UI)欺騙 88
6.4.1 重構對話框 88
6.4.2 Z-Order欺騙 93
6.4.3 讓人誤解的URL和檔案名稱 94
6.5 測試技巧 97
6.6 小結 97
第7章 信息泄露 98
7.1 信息泄露問題 98
7.2 定位信息泄露的常見區域 99
7.2.1 檔案泄露 99
7.2.2 網路泄露 107
7.3 識別重要的數據 111
7.3.1 數據混淆 112
7.3.2 隱含泄露 113
7.4 小結 113
第8章 緩衝區溢出及堆疊/堆操縱 114
8.1 了解溢出的工作原理 117
8.1.1 堆疊溢出 118
8.1.2 整型溢出 121
8.1.3 堆溢出 128
8.1.4 其他攻擊 129
8.2 溢出測試:在哪裡尋找(測試)用例 130
8.2.1 網路 130
8.2.2 文檔與檔案 131
8.2.3 較高許可權和較低許可權用戶之間的共享信息 131
8.2.4 可程式接口 132
8.3 黑盒(功能)測試 133
8.3.1 確定期待的是什麼數據 133
8.3.2 使用你能識別的數據 134
8.3.3 了解界限與邊界 134
8.3.4 保持全部數據的完整性 137
8.3.5 改造正常數據使其溢出的策略 141
8.3.6 測試首要行為和次要行為 143
8.3.7 要查找什麼 144
8.3.8 運行時工具 156
8.3.9 模糊測試 158
8.4 白盒測試 159
8.4.1 要查找的對象 160
8.4.2 溢出的可用性 164
8.4.3 Unicode數據 169
8.4.4 已過濾的數據 170
8.5 其他主題 170
8.5.1 無代碼執行的溢出也很嚴重 170
8.5.2 /GS編譯器開關 173
8.6 測試技巧 175
8.7 小結 176
第9章 格式化字元串攻擊 177
9.1 什麼是格式化字元串 178
9.2 理解為什麼格式化字元串存在問題 178
9.2.1 剖析prinf調用 179
9.2.2 堆疊解析錯誤 180
9.2.3 內存覆蓋 182
9.3 格式化字元串安全漏洞測試 183
9.3.1 代碼檢查 183
9.3.2 黑盒測試 184
9.4 走查(Walkthrough):經歷一個格式化字元串攻擊過程 185
9.4.1 尋找格式化字元串漏洞 185
9.4.2 分析可利用性 186
9.4.3 深度挖掘:圍繞可利用性問題進行工作 189
9.4.4 構建一個簡單的負載 201
9.5 測試技巧 208
9.6 小結 209
第10章 HTML腳本攻擊 210
10.1 理解針對伺服器的反射跨站腳本攻擊 211
10.1.1 例子:一個搜尋引擎中的反射XSS 212
10.1.2 理解為什麼XSS攻擊是安全相關的 214
10.1.3 利用服務端的反射XSS漏洞 216
10.1.4 POST也是可利用的 218
10.2 理解針對伺服器的持久性XSS攻擊 219
10.2.1 例子:在一個留言簿中的持久性XSS攻擊 220
10.2.2 利用針對伺服器的持久性XSS攻擊 221
10.3 識別用於反射和持久性XSS攻擊的數據 221
10.4 程式設計師阻止攻擊的常用方法 224
10.5 理解針對本地檔案的反射XSS攻擊 227
10.5.1 例子:本地檔案中的反射XSS 228
10.5.2 利用本地檔案中的反射XSS漏洞 229
10.5.3 理解為何本地XSS漏洞是一個問題 229
10.5.4 利用本地XSS漏洞在受害者的機器上運行二進制檔案 232
10.5.5 HTML資源 233
10.5.6 編譯後的幫助檔案 234
10.5.7 在客戶端腳本中查找XSS漏洞 236
10.6 理解本地計算機區域中的腳本注入攻擊 237
10.6.1 例子:在Winamp播放列表中的腳本注入 237
10.6.2 把非HTML檔案當作HTML來解析 240
10.7 程式設計師用於防止HTML腳本攻擊的方法 243
10.7.1 過濾器 243
10.7.2 深入理解瀏覽器中的解析器 245
10.7.3 Style中的注釋 245
10.7.4 ASP.NET內置的過濾器 247
10.8 理解Internet Explorer如何減輕針對本地檔案的XSS攻擊 248
10.8.1 從網際網路到本地計算機區域的連結被阻止 248
10.8.2 在默認情況下,腳本在本地計算機區域中是禁止運行的 248
10.9 識別HTML腳本的脆弱性 250
10.10 通過檢查代碼查找HTML腳本漏洞 250
10.10.1 識別所有返回內容給Web瀏覽器或者檔案系統的位置 251
10.10.2 確定輸出中是否包含攻擊者提供的數據 251
10.10.3 檢查攻擊者的數據是否進行了適當的驗證或者編碼 252
10.10.4 ASP.NET自動對數據進行編碼 253
10.11 小結 254
第11章 XML問題 255
11.1 測試XML輸入檔案中的非XML安全問題 255
11.1.1 結構良好的XML 256
11.1.2 有效的XML 257
11.1.3 XML輸入中包括非字母數字的數據 257
11.2 測試特定的XML攻擊 260
11.2.1 實體(Entity) 260
11.2.2 XML注入(XML Injection) 263
11.2.3 大檔案引用(Large File Reference) 266
11.3 簡單對象訪問協定(Simple Object Access Protocol) 266
11.4 測試技巧 271
11.5 小結 271
第12章 規範化問題 272
12.1 理解規範化問題的重要性 272
12.2 查找規範化問題 273
12.3 基於檔案的規範化問題 273
12.3.1 目錄遍歷 274
12.3.2 使檔案擴展名檢查失效 274
12.3.3 導致規範化問題的其他常見錯誤 277
12.4 基於Web的規範化問題 282
12.4.1 編碼問題 282
12.4.2 URL問題 287
12.5 測試技巧 290
12.6 小結 291
第13章 查找弱許可權 292
13.1 理解許可權的重要性 293
13.2 查找許可權問題 294
13.3 理解Windows的訪問控制機制 295
13.3.1 安全對象 295
13.3.2 安全描述符 296
13.3.3 ACL 296
13.3.4 ACE 297
13.4 查找和分析對象的許可權 298
13.4.1 使用Windows安全屬性對話框 298
13.4.2 使用AccessEnum 300
13.4.3 使用Process Explorer 300
13.4.4 使用ObjSD 301
13.4.5 使用AppVerifier 302
13.5 識別常見的許可權問題 302
13.5.1 弱自主訪問控制列表(DACL) 303
13.5.2 NULL DACL 307
13.5.3 不恰當的ACE順序 308
13.5.4 對象創建者 308
13.5.5 間接訪問資源 309
13.5.6 忘記恢復原許可權 309
13.5.7 蹲點(Squatting)攻擊 310
13.5.8 利用競爭條件 311
13.5.9 檔案連結 312
13.6 確定對象的可訪問性 315
13.6.1 可遠程訪問的對象 315
13.6.2 本地可訪問對象 317
13.7 其他的許可權考慮 318
13.7.1 .NET許可權 318
13.7.2 SQL許可權 318
13.7.3 基於角色的安全 320
13.8 小結 321
第14章 拒絕服務攻擊 322
14.1 掌握DoS攻擊的類型 322
14.1.1 查找技術實現缺陷 323
14.1.2 查找資源消耗缺陷 329
14.1.3 尋找解決嚴重問題的方法 335
14.2 測試技巧 336
14.3 小結 336
第15章 託管代碼問題 337
15.1 澄清有關使用託管代碼的常見錯誤認識 338
15.1.1 錯誤認識1:在託管代碼中不存在緩衝區溢出 338
15.1.2 錯誤認識2:ASP.NET Web控制項可防止跨站腳本 339
15.1.3 錯誤認識3:垃圾回收可以防止記憶體泄露 339
15.1.4 錯誤認識4:託管代碼可防止SQL注入 340
15.2 理解代碼訪問安全的基礎 340
15.2.1 用戶安全和代碼安全的比較(User Security vs. Code Security) 341
15.2.2 CAS概況 341
15.2.3 程式(Assembly) 342
15.2.4 物證 343
15.2.5 許可權 343
15.2.6 策略 344
15.2.7 全局程式集緩衝區(Global Assembly Cache) 348
15.2.8 堆疊審核(Stack Walk) 348
15.2.9 堆疊審查修改器(Stack Walk Modifier) 350
15.3 使用代碼檢查方法查找問題 352
15.3.1 調用不安全的代碼 353
15.3.2 查找斷言導致的問題 355
15.3.3 查找連結查詢中的問題 357
15.3.4 了解拙劣的異常處理 360
15.4 理解使用APTCA帶來的問題 362
15.5 .NET程式反編譯 368
15.6 測試技巧 368
15.7 小結 369
第16章 SQL注入 370
16.1 SQL注入的確切含義 370
16.2 了解SQL注入的重要性 372
16.3 查找SQL注入問題 373
16.3.1 利用黑盒測試方法 374
16.3.2 利用代碼檢查 385
16.4 避免SQL注入的常見錯誤 387
16.4.1 轉義輸入中的單引號 388
16.4.2 刪除分號以阻止多重語句 388
16.4.3 只使用存儲過程 389
16.4.4 刪除不必要的存儲過程 390
16.4.5 將運行SQL Server的計算機安置在防火牆之後 390
16.5 理解SQL存儲過程的再利用 391
16.5.1 示例:備份文檔 392
16.5.2 搜尋存儲過程中的再利用問題 393
16.6 識別類似的注入攻擊 393
16.7 測試技巧 394
16.8 小結 395
第17章 觀察及逆向工程 396
17.1 在沒有調試器或反彙編工具時的觀測結果 396
17.1.1 輸出比較 397
17.1.2 使用監視工具 398
17.2 使用調試器跟蹤程式的執行並改變其行為 399
17.2.1 修改執行流程以旁路限制 400
17.2.2 在調試器下讀取並修改記憶體的內容 404
17.3 使用反編譯器或反彙編工具對一個程式實施逆向工程 408
17.3.1 理解二進制本地代碼與位元組碼的區別 409
17.3.2 在沒有原始碼時定位不安全的函式調用 411
17.3.3 對算法實施逆向工程以識別安全缺陷 415
17.4 分析安全更新 417
17.5 測試技巧 418
17.6 法律方面的考慮因素 419
17.7 小結 419
第18章 ActiveX再利用攻擊 420
18.1 理解ActiveX控制項 421
18.1.1 在Internet Explorer瀏覽器中創建ActiveX控制項 421
18.1.2 ActiveX控制項的初始化和腳本解析 423
18.1.3 ActiveX控制項再利用 424
18.1.4 理解ActiveX控制項安全模型 428
18.1.5 利用ActiveX控制項測試方法學 434
18.1.6 其他的測試竅門及技術 441
18.2 走查(Walkthrough):ActiveX控制項測試 450
18.2.1 Clear 451
18.2.2 ClipboardCopy 452
18.2.3 ClipboardPaste 453
18.2.4 InvokeRTFEditor 455
18.2.5 LoadRTF 464
18.2.6 NumChars 465
18.2.7 RTFEditor 屬性 466
18.2.8 RTFEditor PARAM 467
18.2.9 RTFEditorOverride 468
18.2.10 挑戰 470
18.3 測試技巧 470
18.4 小結 471
第19章 其他再利用攻擊 472
19.1 理解請求外部數據的文檔格式 472
19.1.1 文檔格式請求外部數據的常見的降低風險的方法 473
19.1.2 測試請求外部數據的文檔格式 474
19.2 請求外部數據的Web頁面 475
19.2.1 通過URL查詢字元串進行的CSRF攻擊 475
19.2.2 通過POST數據進行的CSRF攻擊 476
19.2.3 防止CSRF攻擊的常用方法 477
19.2.4 通過SOAP數據進行的CSRF攻擊 478
19.2.5 對CSRF攻擊進行測試 479
19.3 理解視窗和執行緒訊息的再利用 479
19.4 小結 480
第20章 報告安全漏洞 481
20.1 報告問題 481
20.2 聯繫開發商 482
20.3 期望聯繫開發商後得到什麼 484
20.4 公開發布 485
20.4.1 確定細節數量 485
20.4.2 公開時間選擇 486
20.5 定位產品中的安全漏洞 486
20.5.1 與漏洞發現者聯繫 487
20.5.2 識別漏洞產生的根本原因 487
20.5.3 尋找相關的漏洞 487
20.5.4 確定受影響的產品及其版本 488
20.5.5 測試補丁 488
20.5.6 確定減輕措施和相關工作 488
20.5.7 為所有受影響的產品及其版本同時發布補丁 489
20.6 小結 489
附錄A 相關工具 490
附錄B 安全測試用例列表 497

相關詞條

熱門詞條

聯絡我們