本書結構
本書共12 章,可以分為三大部分。
■基礎篇(第1 章):主要介紹一些軟體漏洞相關的基本概念,以及常用工具及漏洞分析方法,最後向讀者推薦一些相關的學習網站和書籍,方便讀者做進一步地學習和交流。
■實戰篇(第2~11 章):是本書最主要的部分,根據不同的漏洞類型挑選不同的經典案例,用不同的漏洞分析技巧,介紹比較高效的分析方法,剖析各種常見的軟體漏洞類型、原理、利用和修復的實戰技術。同時,緊接目前熱門的行動網際網路安全問題,增加了Android 平台的漏洞分析,以保持內容與時俱進。
■展望篇(第12 章):對未來的軟體漏洞發展趨勢做出預判,相信未來的主要戰場會更集中在行動終端、雲端運算平台、物聯網三大方向上,並對現有的這些方向的漏洞案例進行簡介。
適合讀者群:電腦相關科系學生,資訊安全愛好者,軟體安全及行動安全相關的從業人員,軟體發展與測試人員、駭客等。
本書特色
以各種類型的經典漏洞實戰講解
分析各種系統及軟體漏洞的成因及攻擊方法
好評推薦
過去幾年,我們見證了行動互聯網的興起、軟體漏洞戰場從PC端向行動端的遷移。本書從這個視角出發,結合實例、深入淺出、涵蓋全面,是學習軟體漏洞的絕佳之選。作者在騰訊安全應急回應中心是負責軟體漏洞的處理和研究,有著豐富的實戰經驗。強烈推薦!--騰訊安全平台部總監 lake2
安全性漏洞的挖掘與分析是隱秘且難度較高的一門技術,系統性的學習資料更是少。本書以近年來報告出的經典漏洞為藍本,分析並講解常見的各種系統及軟體漏洞的成因及攻擊方法,透過對這些精彩漏洞實例的全面講解,相信讀者對軟體漏洞技術會有更加全面的認識,被漏洞挖掘者的聰明與智慧折服。--軟體安全專家 豐生強
一本關於二進位漏洞分析最全面的力作,本書結合新的經典漏洞與新型分析方法,深度剖析不同類型的安全性漏洞,相信能夠幫助那些希望從事安全行業的人員,為其提供更好的幫助。--阿里安全威脅情報中心安全專家 instruder
隨著互聯網的蓬勃發展,安全性漏洞也逐年爆發。如何快速分析漏洞成因是安全研究人員必備技能。本書涵蓋各種各樣的漏洞類型,覆蓋PC端和行動端,極具實戰性和全面性,兼具實用性和時效性,是安全研究人員提高漏洞分析能力的利器。--阿里巴巴行動安全專家 dragonltx
作者
林椏泉
網路ID:riusksk、泉哥、林大夫,福建中醫藥大學中西醫骨傷科。
畢業後任職騰訊安全應急回應中心(TSRC),主要負責安全應急回應工作,
研究聚焦在軟體安全、行動安全、Web安全等方向。
曾獲Microsoft、Adobe、Yahoo、百度、阿里、網易等各大廠商的漏洞致謝。
目錄
前言
01 基礎知識
1.1 漏洞的相關概念
1.2 為什麼要分析漏洞
1.3 常用分析工具
1.4 常見的漏洞分析方法
1.5 學習資源
1.6 本章歸納
02 堆疊溢位漏洞分析
2.1 堆疊溢位簡史
2.2 堆疊溢位原理
2.3 CVE-2010-2883 AdobeReader TTF 字型SING表堆疊溢位漏洞
2.4 CVE-2010-3333 MicrosoftRTF堆疊溢位漏洞
2.5 CVE-2011-0104 Microsoft Excel TOOLBARDEF Record 堆疊溢位漏洞
2.6 阿里旺旺ActiveX 控制項imageMan.dll 堆疊溢位漏洞
2.7 CVE-2012-0158 Microsoft Office MSCOMCTL.ocx 堆疊溢位漏洞
2.8 歸納
03 堆積溢位漏洞分析
3.1 堆積溢位簡史
3.2 堆積溢位原理
3.3 堆積偵錯技巧
3.4 CVE-2010-2553 Microsoft Cinepak Codec CVDecompress 函數堆積溢位漏洞
3.5 CVE-2012-0003 Microsoft Windows Media Player winmm.dll MIDI 檔案堆積溢位漏洞
3.6 CVE-2013-0077 Microsoft DirectShow quartz.dll m2p檔案堆積溢位漏洞
3.7 CVE-2012-1876 Internet Exporter MSHTML.dll CalculateMinMax 堆積溢位漏洞
3.8 小結
04 整數溢位漏洞分析
4.1 整數溢位簡史
4.2 整數溢位原理
4.3 CVE-2011-0027 Microsoft Data Access Components 整數溢位漏洞
4.4 CVE-2012-0774 Adobe Reader TrueType 字型整數溢位漏洞
4.5 CVE-2013-0750 Firefox字串取代整數溢位漏洞
4.6 CVE-2013-2551 Internet Explorer VML COALineDashStyleArray整數溢位漏洞
4.7 歸納
05 格式化字串漏洞分析
5.1 格式化字串漏洞簡史
5.2 格式化字串漏洞的原理
5.3 CVE-2012-0809 Sudo sudo_debug 函數格式化字串漏洞
5.4 CVE-2012-3569 VMwareOVF Tool 格式化字串漏洞
5.5 歸納
06 雙重釋放漏洞分析
6.1 雙重釋放漏洞簡史
6.2 雙重釋放漏洞的原理
6.3 CVE-2010-3974 Windows 傳真封面編輯器fxscover.exe 雙重釋放漏洞
6.4 CVE-2014-0502 Adobe Flash Player 雙重釋放漏洞
6.5 歸納
07 釋放重參考漏洞分析
7.1 釋放重參考(Use After Free,UAF)漏洞簡史
7.2 UAF 漏洞的原理
7.3 CVE-2011-0065 Firefox mChannel UAF 漏洞
7.4 CVE-2013-1347 Microsoft IE CGenericElement UAF 漏洞
7.5 CVE-2013-3346 Adobe Reader ToolButton UAF漏洞
7.6 CVE-2015-0313 Adobe Flash Player Workers ByteArray UAF 漏洞
7.7 本章歸納
08 陣列越界存取漏洞分析
8.1 陣列越界與溢位的關係
8.2 陣列越界存取漏洞原理
8.3 CVE-2011-2110 Adobe Flash Player 陣列越界存取漏洞
8.4 CVE-2014-0160 OpenSSL TLS 陣列越界存取漏洞(「心臟出血」)
8.5 本章歸納
09 核心漏洞分析
9.1 Windows 核心漏洞漫談
9.2 Windows 核心偵錯環境架設
9.3 常見核心漏洞原理與利用
9.4 360 安全衛士bregdrv.sys 本機提權漏洞分析
9.5 CVE-2011-2005 Windows Afd.sys 本機提權漏洞
9.6 CVE-2013-3660 Windows win32k.sys EPATHOB 指標未初始化漏洞
9.7 CVE-2014-1767 Windows AFD.sys 雙重釋放漏洞(Pwn2Own 2014)
9.8 本章歸納
10 Android 平台漏洞分析
10.1 Android 平台漏洞簡史
10.2 Android 平台漏洞分類
10.3 常見的漏洞分析方法
10.4 智慧插座漏洞分析
10.5 CVE-2013-4787 Android系統簽名漏洞
10.6 CVE-2010-1119 Android WebKit UAF 漏洞
10.7 CVE-2014-3153 Android 核心Futex 提權漏洞(Towelroot)
10.8 本章歸納
11 其他類型的漏洞分析
11.1 本章引言
11.2 CVE-2013-2423 JAVA Applet reflection 類型混淆程式執行漏洞
11.3 CVE-2014-0257 Microsoft Internet Explorer 11 dfsvc 元件沙盒逃逸漏洞
11.4 CVE-2014-9150 Adobe Acrobat Reader MoveFileEx IPC Hook 競爭條件(沙盒逃逸)漏洞
11.5 本章歸納
12 軟體漏洞發展趨勢
12.1 軟體漏洞領域的新挑戰
12.2 行動終端漏洞發展趨勢
12.3 雲端運算平台漏洞發展趨勢
12.4 物聯網漏洞發展趨勢
12.5 本章歸納
序/導讀
前言
為什麼寫這本書
不知道大家是否曾有過這樣的經歷:
■ 無法讀懂網上很多軟體漏洞分析文章,不了解裡面的漏洞成因和漏洞利用技巧。
■ 即使讀懂某篇軟體漏洞分析文章,自己仍無法獨立完成相同漏洞的分析。如果文章中所使用的測試環境與軟體版本跟自己使用的不一樣,則頓時更不知如何入手。
■ 很多軟體漏洞分析文章貼出存在漏洞的組合語言程式碼,指出導致漏洞的原因,即「結論式分析」,但如何定位到此段程式並無解釋,看完之後,仍不知如何快速找出,缺乏可參考的想法。
帶著這些問題,相信讀者會在本書中找到想要的答案。
再來聊下本書的一些寫作經歷,開始寫作本書始於2012 年5 月,最初是「愛無言」找到我,說大家合作寫一本關於軟體漏洞案例分析的書,因為那段時間我在部落格上每週都會分享一兩篇軟體漏洞分析的實際案例,而當時還沒有專門寫軟體漏洞案例的專著(幾年前出版的《0Day 安全:軟體漏洞分析技術》主要偏向堆積和堆疊溢位及核心方面的漏洞分析,實際案例較少,且「愛無言」也是作者之一)。
就這樣,兩人開始謀劃,寫書的念頭就此產生。
後來,我又拉了兩位朋友加入,然後幾人列出大綱目錄,但最後因種種原因,只剩下我一人獨自完成本書創作,中途也多次想放棄,但慶倖的是,歷時4 年後終於出版。
就這樣,一本原為「合著」的書寫成了「專著」。
相信一些讀者看完本書目錄之後會有一些疑問,也相信其中一些疑問也是我在定位本書方向時考慮的,所以有必要在此談一談。
□ 本書與《0day 安全:軟體漏洞分析技術》有何區別?
□ 0day 安全一書主要是講Windows 平台下堆疊溢位和核心提權的漏洞分析技術,還有關部分格式化字串漏洞,從基礎講起,最後是實例分析。本書則完全是以真實的漏洞為實例以分享漏洞分析時的一些技巧,以漏洞類型的不同來分享不同的漏洞分析技巧,可以說是「用偵錯器寫出來的一本書」,而且綜合考慮目前熱門的移動安全,特意加入Android 平台上的漏洞分析章節,從Java 層、Native 層和核心層等方向分享不同的偵錯分析方法。從難度而言,本書比《0day 安全:軟體漏洞分析技術》一書更難,可以將本書當作進階版,搭配學習。
□ 本書列舉的許多漏洞實例網上早有分析文章,為何還寫這本書?
□ 著書的宗旨在於「授人以魚,不如授人以漁」。如果讀者經常看網上的漏洞分析文章,就會發現一個常見現象:它們大多是「結論性分析」,而非「想法性分析」。換句話說,就是貼出存在漏洞的組合語言程式碼,然後直接列出漏洞成因的結論,至於如何定位到漏洞程式,並沒有列出分析想法。正因為如此,即使你看懂了Vupen 漏洞軍火商寫的分析文章,也不代表你看完後就能獨立分析出來,甚至在偵錯之後,你還會發現Vupen 在一些文章裡留有「坑」,故意省略或寫錯某些關鍵內容,如果沒有自己實際偵錯一遍是很難發現這些問題的。
相信有一定軟體漏洞分析經驗的朋友會注意到,軟體漏洞分析的大部分時間是花費在尋找和定位漏洞程式,而非分析存在漏洞的程式。對於有一定程式設計經驗和漏洞基礎的讀者,如果直接給一段漏洞程式,可能很容易就看出來,但像Adobe 和Windows 這些複雜的軟體或系統,在千千萬萬的程式行中找到漏洞程式是有一定難度的。因此,本書的重點是講授如何快速地定位漏洞程式,針對不同漏洞類型採取不同的分析技巧,以幫助大家快速地分析出漏洞成因,制定檢測、防禦與修復方案。書中的漏洞實例分析技巧是可以長期運用和延伸的,這才是本書的核心價值。
□ 如何借助本書提升本身的軟體漏洞分析能力?
□ 本書主要針對有一定軟體漏洞基礎的讀者,如果缺乏這方面的基礎,且有一定C 語言和組合語言基礎,建議先看《0day 安全:軟體漏洞分析技術》一書。軟體漏洞分析是一種實作性比較強的安全領域分支,需要許多實際動手的偵錯經驗,因此建議大家在看本書時,一邊看一邊動手偵錯,以加深了解,就像騎自行車一樣,熟練之後,哪怕十年未碰,也依然會騎。本書在分析漏洞時,也儘量以想法性的描述為主,以說明分析漏洞時的思考方式和常用技巧,包含工具和方法論,因此大家在閱讀時,應該掌握書中介紹的思考方式、工具運用及分析技巧,畢竟單一漏洞案例本身是會過時的,但技巧性的東西總是可以參考和擴充的。
記得大一上第一節歷史課時,老師說過這樣一句話,如果在未來的某一天,你在和朋友閒聊時,能夠運用到歷史課上學到的知識,哪怕一句話作為話題,那這歷史課就算沒白學。同樣地,我也希望未來大家在分析軟體漏洞時,本書能夠提供一些幫助,哪怕是一個分析技巧,一個工具使用,我也覺得這4 年的付出是值得了。
縱觀近五年,各種APT 攻擊事件頻發,包含知名企業,甚至國家級單位都曾遭受到漏洞攻擊。每年都有一款產品的漏洞被頻繁用於網路攻擊,例如2012 年的Office 漏洞(還記得經典的CVE-2012-0158 嗎?),2013年的Java 漏洞,2014 年的Internet Explorer 漏洞,2015 年Adobe Flash漏洞。PC 端上的軟體漏洞一直在逐年增加,雖然廠商在不斷地推出各種安全機制,但漏洞利用技術的發展從未間斷,Exploiter 們依然生存得很好。同時,網際網路早已步入行動化時代,伴隨著PC 軟體漏洞攻擊事件的頻發,行動端的漏洞攻擊也在逐年增長。因此,筆者結合PC 端(Windows)與行動端(Android)平台上的漏洞案例,歷時近4 年,將本身的實戰經驗整理成本書。
■ 求學之路
經常有人問我:「一個醫學生為什麼會轉行做安全?」通常我都會這麼回答:「因為小說看多了」。
大一時,由於喜歡看駭客小說,例如《駭客傳說》、《地獄駭客》、《指間的駭客》,就去圖書館找一些駭客書籍學習,每天中午都不休息,幾乎天天都泡在圖書館,甚至翹課去看電腦書。
大四才買電腦,在此之前一直都只能去網咖、學校機房或借用室友的電腦。當年就用諾基亞3100 手機看完了《Windows 程式設計》、《Windows核心程式設計》和《Windows 環境下32 位元組合語言程式設計》。後來就網購實體書來看,這樣比在網咖看電子書更實惠。
大學期間,經常投稿《駭客防線》雜誌,一方面可以加強個人技術,一方面可以用稿費作為生活補貼,後來就用稿費加上我哥的經濟支援,買下第一台屬於自己的電腦,本書有一半內容是在那台電腦上完成的。
在求學這條道路上,我一直是一個人默默地前行,就連一起生活多 年的室友也不知道我在學習安全方面的知識,我買的一堆電腦書一直藏在宿舍衣櫃最裡面。在此過程中,自己走過很多彎路,甚至多次差點放棄,但很慶倖最後還是堅持下來,並直到今日,依然在安全這條道路上前行著。
■ 面試經歷
在圈內朋友的建議下,我在大五(醫學五年制)上學期開始找安全相關的工作,最後順利拿到安恒和騰訊的offer。當初投簡歷給安恒時,安恒的副總裁看完簡歷後直接發了offer,我有點受寵若驚,也特別感謝安恒的信任,但最後還是選擇騰訊。面試騰訊的經歷,我覺得是個有趣的過程,值得與大家分享。
那年我還在廈門市第二醫院骨傷科實習,門診部剛好不是特別忙,我在替一位腰椎患者做完針灸後,就接到來自騰訊安全中心的面試電話。然後趁主任不在,偷偷躲到門診部後面的樓梯口進行電話面試,整個面試過程還算順利,第2 天騰訊安全中心就來電說希望我到深圳總部面試。
到深圳總部後,騰訊安全中心的主管面試我,雖然聊了一個半小時,但沒有問我多少問題,聊完後直接被帶去HR 那裡面試。
HR 面試我時,並非以正常的話題開場,我們是以腰椎間碟突出的話題開場的,也算是一次別開生面的面試經歷。
回到廈門後,我跟帶教老師說明轉行情況,之後有上手術台的機會,我都會主動讓給其他同班同學,讓他們有更多練手的機會,我自然也有更多的時間去鑽研安全技術。
■ 加入騰訊
騰訊是我的第一家雇主,也是目前我唯一工作過的公司,從我畢業一直工作到現在。在公司我見證了騰訊安全應急回應中心(TSRC)的成立與發展,幫助加強各種流程和標準,作為早期主要的漏洞審核者,我也從廣大白帽子身上學到很多東西,包含各種漏洞採擷與利用技術,有關各個安全領域,如Web 安全、驅動安全、應用軟體安全、移動安全等,正是TSRC給了我更多學習的機會,使得我在安全技術上能夠更加全面地發展。除此之外,我在公司也做一些安全研究工作,並研發出Android 與iOS 應用安全稽核系統,已投入公司日常營運使用。
至今,我依然覺得工作能夠與興趣結合在一起,是一件既幸福又幸運的事,而選擇騰訊依然是我當年的明智之舉。
■ 著書感言
本書是我寫的第一本書,也可能是最後一本技術書籍,只有自己經歷著書過程,才知道寫書的不易。特別是類似本書這種以漏洞實例進行偵錯分析的書,寫起來特別費時,也更需要有持之以恆之的毅力。如果說單純寫書用掉1 年時間,那麼我用來偵錯的時間大約是3 年,因此可以說這是「一本用偵錯器寫出來的書」。
「開頭容易,收尾難」是個人著書的真實感受,很多人一時興起寫了開頭,最後很難堅持下去,導致夭折了不少著作。
■ 本書結構
本書共12 章,可以分為三大部分。
基礎篇(第1 章):主要介紹一些軟體漏洞相關的基本概念,以及常用工具及漏洞分析方法,最後向讀者推薦一些相關的學習網站和書籍,方便讀者做進一步地學習和交流。
實戰篇(第2~11 章):是本書最主要的部分,根據不同的漏洞類型挑選不同的經典案例,用不同的漏洞分析技巧,介紹比較高效的分析方法,剖析各種常見的軟體漏洞類型、原理、利用和修復的實戰技術。同時,緊接目前熱門的行動網際網路安全問題,增加了Android 平台的漏洞分析,以保持內容與時俱進。
展望篇(第12 章):對未來的軟體漏洞發展趨勢做出預判,相信未來的主要戰場會更集中在行動終端、雲端運算平台、物聯網三大方向上,並對現有的這些方向的漏洞案例進行簡介。
繁體中文版說明
本書寫作環境為簡體中文,因此書中有些畫面是在簡體中文下操作。為保留原書完整性,本書使用簡體中文系統產生之結果將保留,請讀者對照前後文閱讀
■ 致謝
感謝我父母的養育之恩,是他們在背後默默地支援我前行。
感謝我的兄長在生活和工作上對我的幫助與支援。
感謝我的女朋友,正是她的督促和支援才讓我能夠準時完稿,並且書中有些畫面是經過她後期製作的,以便使得圖片的印刷效果更好。
感謝我的姑母長期以來對我生活上的關心與照顧。
感謝我的公司騰訊,它所營造的良好氣氛,使我的技術水準和在職場的發展都更上一層樓。同時也感謝在工作中一直給予我幫助和鼓勵的同事和主管,由於人數眾多,就不一一列舉。
感謝王清先生為本書作序,他所著書籍一直是軟體安全企業的經典。
感謝編輯皎子、鄭柳潔及她們的團隊,正是他們的努力才使得本書最後能夠與大家見面。
感謝各位圈內的朋友,他們包含但不限於(排名不分先後):wushi、愛無言、仙果、wingdbg、instruder、kanxue、lake2、harite、h4ckmp、dragonltx、非蟲、monster、gmxp、古河、冰雪風穀、KiDebug、KK
由於作者水準有限,書中難免有誤,歡迎各位業界同仁斧正!