天天看點

0day安全:軟體漏洞分析技術(第2版)

0day安全:軟體漏洞分析技術(第2版)
安全技術大系 0day 安全:軟體漏洞分析技術(第 2 版) 王清主編 ISBN 978-7-121-13396-1   2011 6 月出版 定價: 85.00 16 780

本書分為5篇33章,系統、全面地介紹了Windows平台緩沖區溢出漏洞的分析、檢測與防護。第一篇為漏洞exploit的基礎理論和初級技術,可以引領讀者迅速入門;第二篇在第一篇的基礎上,結合國内外相關研究者的前沿成果,對漏洞技術從攻、防兩個方面進行總結;第三篇站在安全測試者的角度,讨論了幾類常用軟體的漏洞挖掘方法與思路;第四篇則填補了本類書籍在Windows核心安全及相關攻防知識這個神秘領域的技術空白;第五篇以大量的0 day案例分析,來幫助讀者了解前四篇的各類思想方法。

本書可作為網絡安全從業人員、黑客技術發燒友的參考指南,也可作為網絡安全專業的研究所學生或大學生的指導用書。

雖然事隔多年,我仍然清晰記得自己被“沖擊波”愚弄的場景——2003年夏的那個晚上,自己像往常一樣打開實驗室的計算機,一邊嘲笑着旁邊同學因為不裝防火牆而被提示系統将在一分鐘内關機,一邊非常諷刺地在自己的計算機上發現了同樣的提示對話框。正是這個聞名世界的“框框”堅定了我投身網絡安全研究的信念,而漏洞分析與利用正是這個領域的靈魂所在。

漏洞分析與利用的過程是充滿藝術感的。想象一下,剝掉Windows中那些經過層層封裝的神秘的對話框“外衣”,面對着浩如煙海的二進制機器碼,跋涉于記憶體中不知所雲的海量資料,在沒有任何技術文檔可以參考的情況下,進行反彙編并調試,把握函數調用和參數傳遞的細節,猜測程式的設計思路,設定巧妙的斷點并精确定位到幾行有邏輯缺陷的代碼,分析研究怎麼去觸發這個邏輯漏洞,最後編寫出天才的滲透代碼,進而得到系統的控制權……這些分析過程的每一個環節無不散發着充滿智慧的藝術美感!這種技術不同于其他計算機技術,它的進入門檻很高,需要擁有豐富的計算機底層知識、精湛的軟體調試技術、非凡的邏輯分析能力,還要加上一點點創造性的思維和可遇而不可求的運氣。

在無數個鑽研這些技術的夜裡,我深深地感覺到國内的漏洞分析資料和文獻是多麼匮乏。為了真正搞清楚蠕蟲病毒是怎樣利用Windows漏洞精确淹沒EIP寄存器并獲得程序控制權,我仍然記得自己不得不遊走于各種論壇收集高手們零散手稿時的情形。那時的我多麼希望能有一本教材式的書籍,讓我讀了之後比較全面、系統地了解這個領域。

我想,在同樣漆黑的夜裡,肯定還有無數朋友和我從前一樣,滿腔熱情地想學習這門技術而又困惑于無從下手。正是這種“請纓無處,劍吼西風”的感覺,激勵着我把自己鑽研的心血凝結成一本教程,希望這樣一本教程可以幫助喜歡網絡安全的朋友們在學習時繞開我曾走過的彎路。

再版序

距離《0day安全:軟體漏洞分析技術》的出版已有3年,接到再版約稿的時候我着實有一番感慨,也有着太多的内容想與大家分享。在這3年裡,我經曆了從一個初出象牙塔的少年到安全分析員的演變。期間我參加了若幹次安全事件的應急響應、在若幹個安全峰會上做過漏洞技術的演講、完成了無數次的滲透測試、也有幸見證了先行者們在Windows平台上進行的最為精彩的幾場較量……

為了在再版中更加完美地總結這精彩的幾年,我特意邀請了幾位和我意氣相投的兄弟加入編寫團隊,他們是:

熟悉Windows核心機制的張東輝(Shineast,負責編寫核心安全部分);

精通Windows各類保護機制的周浩(Zihan,負責編寫進階溢出部分);

黑客防線的知名撰稿人、漏洞挖掘專家王繼剛(愛無言,負責編寫漏洞挖掘部分);

檔案格式解析專家趙雙(Dflower,負責編寫檔案型漏洞測試部分);

資深病毒分析員蔡山楓(Beanniecai,編寫樣本分析和案例分析的部分章節)。

團隊的力量大大增強了再版内容的廣度和深度。再版中新增了大量前沿知識和案例分析,囊括了Windows平台進階溢出技巧、手機平台的溢出基礎、核心攻防、漏洞挖掘與安全測試、大量的0day分析案例等。此外我們還對Windows平台中進階防護技巧和部分經典案例的分析等内容進行了修訂和勘誤。第一版中關于基礎溢出的知識也得以保留,在經過重新編排和濃縮後,放置在再版的第一篇供入門者學習。

在計算機工業向子產品化、封裝化、架構化發展的過程中,人們更加傾向于把時間和精力用于那些靈活開發的進階工具上。走進大學的計算機系你可以發現J2EE與.NET的書籍随處可見,但是卻沒有幾個學生能在二進制級别把計算機體系結構講清。甚至在某些網絡安全學院裡,能把蠕蟲入侵的原理刨根問底徹底、弄清的也是鳳毛麟角,非好奇心不盛也,乃道之不傳也久矣。在資訊安全這條道路上行走,需要“男兒何不帶吳鈎,收取關山五十州”的豪情,需要“臣心一片磁針石,不指南方不肯休”的毅力,需要“壁立千仞,無欲則剛”的情懷……我等立書隻為布道交友,最大的收益莫過于幫助還在彷徨如何入門的朋友邁過那條門檻,通過此書結交更多的同道中人。

關于安全技術人才

國内外對網絡安全技術人才的需求量很大,精通緩沖區溢出攻擊的安全專家可以在大型軟體公司輕易地獲得高薪的安全咨詢職位。

資訊安全技術是一個對技術性要求極高的領域,除了紮實的計算機理論基礎外,更重要的是優秀的動手實踐能力。在我看來,不懂二進制資料就無從談起安全技術。

國内近年來對網絡安全的重視程度正在逐漸增加,許多高校相繼成立了“資訊安全學院”或者設立“網絡安全專業”。科班出身的學生往往具有紮實的理論基礎,他們通曉密碼學知識、知道PKI體系架構,但要談到如何真刀實槍地分析病毒樣本、如何拿掉PE上複雜的保護殼、如何在二進制檔案中定位漏洞、如何對軟體實施有效的攻擊測試……能夠做到的人并不多。

雖然每年有大量的網絡安全技術人才從高校湧入人力市場,真正能夠滿足用人機關需求的卻寥寥無幾。捧着書本去做應急響應和風險評估是濫竽充數的作法,社會需要的是能夠為客戶切實解決安全風險的技術精英,而不是滿腹教條的闊論者。

我所認識的很多資深安全專家都并非科班出身,他們有的學醫、有的學文、有的根本沒有學曆和文憑,但他們卻技術精湛,充滿自信。

這個行業屬于有興趣、夠執著的人,屬于為了夢想能夠不懈努力的意志堅定者。

關于“Impossible”與“I’m possible”

從拼寫上看,“Impossible”與“I’m possible”僅僅相差一個用于縮寫的撇号(apostrophe)。學完本書之後,您會發現将“不可能(Impossible)”變為“可能(I’m possible)”的“關鍵(key point)”往往就是那麼簡單的幾個位元組,本書将要讨論的就是在什麼位置畫上這一撇!

從文法上看,“Impossible”是一個單詞,屬于資料的範疇;“I’m possible”是一個句子,含有動詞(算符),可以看成是代碼的範疇。學完本書之後,您會明白現代攻擊技術的精髓就是混淆資料和代碼的界限,讓系統錯誤地把資料當作代碼去執行。

從意義上看,To be the apostrophe which changed “Impossible” into “I’m possible” 代表着人類挑戰自我的精神,代表着對理想執著的追求,代表着對事業全情的投入,代表着敢于直面慘淡人生的豪情……而這一切正好是黑客精神的完美诠釋——還記得在電影《Sword Fish(劍魚行動)》中,Stan在那台酷斃的計算機前堅定地說:“Nothing is impossible”,然後開始在使用Vernam加密算法和512位密鑰加密的網絡上,挑戰蠕蟲的經典鏡頭嗎?

于是我在以前所發表過的所有文章和代碼中都加入了這個句子。盡管我的英語老師和不少外國朋友提醒我,說這個句子帶有強烈的“Chinglish”味道,甚至會引起Native Speaker的誤解,然而我最終還是決定把它寫進書裡。

雖然我不是莎士比亞那樣的文豪,可以創造語言,發明修辭,用文字撞擊人們的心靈,但這句“Chinglish”的确能把我所要表達的含義精确地傳遞給中國人,這已足夠。

關于本書

通常情況下,利用緩沖區溢出漏洞需要深入了解計算機系統,精通彙編語言乃至二進制的機器代碼,這足以使大多數技術愛好者望而卻步。

随着時間的推移,緩沖區溢出攻擊在漏洞的挖掘、分析、調試、利用等環節上已經形成了一套完整的體系。伴随着調試技術和逆向工程的發展,Windows平台下湧現出的衆多功能強大的debug工具和反彙編分析軟體逐漸讓二進制世界和作業系統變得不再神秘,這有力地推動了Windows平台下緩沖區溢出的研究。除此以外,近年來甚至出現了基于架構(Frame Work)的漏洞利用程式開發平台,讓這項技術的進入門檻大大降低,使得原本高不可攀的黑客技術變得不再遙不可及。

遺憾的是,與國外飛速發展的進階黑客技術相比,目前國内還沒有系統介紹Windows平台下緩沖區溢出漏洞利用技術的專業書籍,而且相關的中文文獻資料也非常匮乏。

本書将系統全面地介紹Windows平台軟體緩沖區溢出漏洞的發現、檢測、分析和利用等方面的知識。

為了保證這些技術能夠被讀者輕松了解并掌握,本書在叙述中盡量避免枯燥乏味的大段理論闡述和代碼粘貼。概念隻有在實踐中運用後才能真正被掌握,這是我多年來求學生涯的深刻體會。書中所有概念和方法都會在緊随其後的調試實驗中被再次解釋,實驗和案例是本書的精髓所在。從為了闡述概念而精心自制的漏洞程式調試實驗到現實中已經造成很大影響的著名漏洞分析,每一個調試實驗都有着不同的技術側重點,每一個漏洞利用都有自己的獨到之處。

我将帶領您一步一步地完成調試的每一步,并在這個過程中逐漸解釋漏洞分析思路。不管您是網絡安全從業人員、黑客技術發燒友、網絡安全專業的研究所學生或大學生,如果您能夠完成這些分析實驗,相信您的軟體調試技術、對作業系統底層的了解等計算機能力一定會得到一次質的飛躍,并能夠對安全技術有一個比較深入的認識。

關于本書源代碼及相關文檔

本書中調試實驗所涉及的所有源代碼和PE檔案都可從看雪論壇相關版面下載下傳http://zeroday.pediy.com。

這些代碼都經過了仔細調試,如在使用中發現問題,請檢視實驗指導中對實驗環境的要求。個别攻擊實驗的代碼可能會被部分防毒軟體鑒定為存在風險的檔案,請您調試前詳細閱讀實驗說明。

關于對讀者的要求

雖然溢出技術經常涉及彙編語言,但本書并不要求讀者一定具備彙編語言的開發能力。所用到的指令和寄存器在相關的章節都有額外介紹,隻要您有C語言基礎就能消化本書的絕大部分内容。

我并不推薦在閱讀本書之前先去系統的學習彙編知識和逆向知識,枯燥的尋址方式和指令介紹很容易讓人失去學習的興趣。本書将帶您迅速跨過漏洞分析與利用技術的進入門檻。即使您并不懂彙編與二進制也能完成書中的調試實驗,并獲得一定的樂趣。當然,在您達到一定水準想進一步提高時,補習逆向知識和彙編語言将是絕對必要的。

本書适合的讀者群體包括:

l  安全技術工作者 本書比較全面、系統地收錄了Windows平台下緩沖區溢出攻擊所涉及的各種方法,将會是一本不錯的技術字典。

l  資訊安全理論研究者 本書中纰漏的許多漏洞利用、檢測方法在學術上具有一定的前沿性,在一定程度上反映了目前國内外安全技術所關注的焦點問題。

l  QA工程師、軟體測試人員 本書第4篇中集中介紹了産品安全性測試方面的知識,這些方法可以指導QA人員審計軟體中的安全漏洞,增強軟體的安全性,提高軟體品質。

l  軟體開發人員 知道漏洞利用原理将有利于編寫出安全的代碼。

l  高校資訊安全專業的學生 本書将在一定程度上彌補高校教育與資訊安全公司人才需求脫節的現象。用一套過硬的調試技術和逆向技術來武裝自己可以讓您在未來的求職道路上利于不敗之地。精通exploit的人才可以輕松征服任何一家防毒軟體公司或安全資訊公司的求職門檻,獲得高薪工作。

l  大學二年級以上計算機系學生 通過調試實驗,你們将更加深入地了解計算機體系架構和作業系統。這些知識一樣将成為您未來求職時過硬的敲門磚。

l  所有黑客技術愛好者 如果您厭倦了網絡嗅探、端口掃描之類的掃盲讀物,您将在本書中學到實施有效攻擊所必備的知識和技巧。

關于回報與提問

讀者在閱讀本書時如遇到任何問題,可以到看雪論壇相關版面參與讨論http://zeroday.pediy.com。

緻謝

感謝電子工業出版社對本書的大力支援,尤其是畢甯編輯為本書出版所做的大量工作。

感謝看雪對本書的大力推薦和支援以及看雪論壇為本書提供的交流平台。

非常感謝在本書第一版問世後,向我提供勘誤資訊的衆多熱心讀者,本書品質的提高離不開你們熱心的幫助。

感謝賽門鐵克中國響應中心的病毒分析員Beannie Cai為本書第26章友情撰稿。

最後感謝我的母校西安交通大學,是那裡踏實求是的校風與校訓激勵着我不斷進步。

Failwest

繼續閱讀