❶ python灰帽子:黑客與逆向工程師的Python編程之道的前 言
「搞定了嗎?」,這可能是在Immunity公司出現頻率最高的一句話了。你也許會在類似以下的場景中聽到這樣的發問:「我正要給Immunity Debugger開發一個新的ELF載入器」,片刻停頓之後,「搞定了嗎?」或者,「我剛發現了IE瀏覽器的一個Bug!」又一片刻的沉寂之後,「那個漏洞利用程序搞定了嗎?」在日常的安全項目中我們幾乎無時無刻地須要創建或者改寫自己的安全工具,並在這些頻繁的活動中始終保持高速的開發節奏,這使得Python逐漸成為了這個舞台上的明星。你可以在下一個安全項目中選擇Python作為自己的開發工具,也許你將會用它來創建一個特殊的反編譯器或者開發一個完整的調試器。
當我走進位於南邁阿密海灘的Ace Hardware(美國的一家連鎖五金店),沿著擺放著螺絲刀的通道走過時,常常會感到目眩。你會看到接近50多種不同規格的螺絲刀以整齊的順序陳列在貨架上。每一種規格的螺絲刀都與緊鄰的螺絲刀有著微小卻又十分重要的區別。我不是一個合格的修理能手,因此無法准確地說出每一種螺絲刀最為理想的使用場合,但是我很確信類似的情況同樣適用於我們的安全工具軟體。尤其是當你在對Web類型或者其他類型的高度定製化的應用程序進行安全審計時,你會發現每一次的審計任務都會需要一把特殊的「螺絲刀」來解決問題。要知道能夠及時地拼湊出一些類似SQL API函數鉤子之類的安全小工具已經不止一次地拯救了Immunity的工作團隊。當然這些工具並不僅僅適用於安全審計任務,一旦你能夠使用鉤子函數對SQL API進行攔截,你就可以輕易地編寫出一個工具用於實時檢測可疑的異常SQL查詢,並及時向你的客戶公司提供修復方案,以抵禦那些來自頑固黑客們的攻擊。
眾所周知,要讓你的每一個安全研究人員真正成為團隊的一部分是一件棘手的事情。很多安全研究人員無論在面對何種類型的問題時,都懷揣著白手起家式的過度熱情,企圖將需要藉助的工具庫完全重寫。比如說Immunity發現了某個SSL Daemon的一個安全漏洞,接下來很有可能發生的一件事就是,你突然發現你的某個安全研究人員居然正在試圖從頭開始編寫一個SSL客戶端。而他們對此通常給出的解釋是「我能找到的SSL庫都醜陋不堪」。
你需要盡力避免這種情況發生。事實情況並不是現有的SSL庫醜陋不堪——它只是沒有按照某個安全研究人員的特別偏好風格來設計而已。而我們真正需要做的是能夠深入分析大量的現有代碼,快速地發現問題所在,並對其進行修改以適應自身所需,這才是及時地搭建出一個可用的SSL庫,並用其開發出一個尚處於保鮮期內的漏洞利用程序的關鍵。而要做到這一點,你需要使你的安全研究員們能夠像一個真正的團隊一樣去工作。一個熟練掌握了Python的安全研究人員就有了一個強大的武器,也許就像那些掌握了Ruby的安全研究人員一樣。然而Python真正的與眾不同之處顯現在那些Python狂熱分子們協同工作時,他們將猶如一個高速運轉的超個體①一樣戰鬥力驚人。正如你家廚房中的螞蟻大軍一樣,當它們的數量足夠組成一隻大烏賊時,要殺死它們將比殺死一隻烏賊棘手得多。而這正是本書極力告訴你的一個事實。
你也許已經為自己想做的事找到了一些工具。你也許會問:「我已經有了一套Visual Studio,裡面附帶了一個調試器,為什麼還要去編寫一個供自己專用的調試器。」或者「WinDbg不是有一個插件介面了嗎?」答案是肯定的。WinDbg的確提供了插件介面,你可以通過那些API慢慢地拼湊出一些有用的東西。直到某一天你很可能又會說:「Heck,如果我能和5000個WinDbg使用者互聯該有多好啊,這樣我們就可以互通各自的調試結果了」。如果你從一開始就選擇了Python,你只要寫 100 行左右的代碼就可以構建一個XML-RPC客戶端與服務端,接下來整個團隊可以同步地進行工作並使每個人及時地享有他人的成果和信息。
黑客絕不等同於逆向工程——你的目標並不是還原出整個應用程序的源碼。你的目標是對軟體系統獲得比系統開發者自身更加深入的理解。一旦你能做到這一點,無論目標以何種形式出現,你將最終成功地滲透它,獲得炙手可熱的漏洞利用(exploit)。這也意味著你需要成為可視化、遠程同步、圖論、線性方程求解、靜態分析技術以及其他很多方面的專家。因此,Immunity決定將這些都標准化實現在Python平台上,這樣一旦我們編寫了一個圖論演算法,這個演算法將在我們所有的工具中通用。
在第6章中,Justin向你演示了如何使用一個鉤子竊取Firefox瀏覽器中輸入的用戶名與密碼。這正是一個惡意軟體作者所做的事——從之前的一些相關報道中可以看出,惡意軟體作者通常使用一些更為高級語言來編寫此類程序。然而你同樣可以使用Python在15分鍾內編寫出一個樣常式序,用於向你的開發人員演示,讓他們明白他們對自己的產品所做的安全假設並不成立。現在的一些軟體公司出於他們所聲稱的安全考慮,在保護軟體內部數據方面的投資花費不菲。而實際上他們所做的往往只是實現了一些版權保護和數字版權管理機制而已。
這正是本書試圖教你的東西:快速創建安全工具的能力。你應當能夠藉助這種能力為你個人或者整個團隊帶來成功。而這也是安全工具開發的未來:快速實現、快速修改,以及快速互聯。我想,最後你唯一剩下的問題也許就是:「搞定了嗎?」
Immunity Ine的創始人兼CTO Dave Aitel
2009年2月於美國佛羅里達州,邁阿密海灘
致 謝
我想藉此機會感謝我的家人,對於他們在撰寫本書過程中所表現出來的理解和支持。感謝我的四個可愛的孩子:Emily、Carter、Cohen和Brady,是你們給了爸爸完成此書的理由,我為擁有你們而感到無比幸福。我還要為我的姐姐和兄弟們在這個過程中所給予的鼓勵說一聲謝謝,你們自己都曾經歷過著書立作的嚴苛和艱辛,擁有你們這些對技術作品出版感同身受的人真是受益匪淺——我愛你們。我還想對我的爸爸說,你的幽默感幫助我度過了那些難以執筆為繼的日子——我愛你,老爸,不要停止讓你周圍的人發出笑聲。
多虧了一路上眾多優秀的安全研究人員的幫助才使得本書得以羽翼漸豐,他們是:Jared DeMott、Pedram Amini、Cody Pierce、Thomas Heller(傳說中的無敵Python男)以及Charlie Miller——我欠你們大夥一個大大的感謝。至於Immunity團隊,毫無疑問,你們一直以來大度地支持著我來撰寫此書,正是得益於你們的幫助,我不僅僅成長為一個Python小子,同時更成為了一名真正的開發人員和安全技術研究者。Nico和Dami,抽出了額外的時間來幫助我解決問題,對此表示不勝感激。Dave Aitel,我的技術編輯,始終驅使著本書的進度直至完成,並確保本書的邏輯性與可讀性,在此致以莫大的感謝。對於另一個Dave, Dave Falloon,非常感謝你為我校閱此書,對於那些讓我自己都哭笑不得的錯誤,對於你在CanSecWest大會上拯救了本人的筆記本電腦的英雄行徑,以及你巫師一般神奇的網路知識,都令我印象深刻。
最後,是那些總是被放在最後感謝的傢伙們——No Starch出版團隊。Tyler與我經歷了本書的整個出版過程(相信我,Tyler將是你遇到的最有耐心的傢伙),Bill將鼓勵聲連同那個可愛的印有Perl小抄的咖啡杯贈予了我。Megan在本書創作的尾聲階段為我減輕了眾多的麻煩,還有其他為出版本書而工作在幕後的團隊成員——謝謝你們!。我對你們為我所做的每一件事充滿感激。現在這篇致謝詞的篇幅快要跟格萊美的獲獎感言有一拼了,最後再次說一聲感謝給所有那些幫助過我,卻可能被我忘記提及的朋友們——你們清楚自己之於本書的意義。
Justin Seitz
❷ Python灰帽子的內容簡介
本書是由知名安全機構ImmunityInc的資深黑帽JustinSeitz先生主筆撰寫的一本關於編程語言Python如何被廣泛應用於黑客與逆向工程領域的書籍.老牌黑客,同時也是Immunity Inc的創始人兼首席技術執行官(CT0)Dave Aitel為本書擔任了技術編輯一職。本書的絕大部分篇幅著眼於黑客技術領域中的兩大經久不衰的話題:逆向工程與漏洞挖掘,並向讀者呈現了幾乎每個逆向叢拿工程師或安全研究人員在日常工作中所面臨的各種場景,其中包括:如何設計?構建自己的調試工具,如何自動化實現煩瑣的逆賀滲向分析任務,如何設計與構建自己的fuzzing工具,如何利用fuzzing測試來找出存在於軟體產品中的安全漏洞,一些小技巧諸如鉤子與注入技術的應用,以及對一些主流Python安全工具如PyDbg、Immunity Debugger、Sulley、IDAPython、PyEmu等的深入介紹。作者藉助於如今黑客社區中備受青睞的編程語言Python引領讀者構建出精悍的腳本程序來——應對上述這些問題。出現在本書中的相當一部分Python代碼實例借鑒滲拍搭或直接來源於一些優秀的開源安全項目,諸如Pedram Amini的Paimei,由此讀者可以領略到安全研究者?是如何將黑客藝術與工程技術優雅融合來解決那些棘手問題的。本書適合熱衷於黑客技術,特別是與逆向工程與漏洞挖掘領域相關的讀者,以及所有對Python編程感興趣的讀者閱讀與參考。
❸ python灰帽子講的什麼
內容簡介
《Python灰帽子》是由知名安全機構Immunity Inc的資深黑帽Justin Seitz主筆撰寫的一本關於編程語言Python如何被廣泛應用於黑客與逆向工程領域的書籍。老牌黑客,同時也是Immunity Inc的創始人兼首席技術執行官(CTO)Dave Aitel為這本書擔任了技術編輯一職。書中絕大部分篇幅著眼於黑客技術領域中的兩大經久不衰的話題:逆向工程與漏洞挖掘,並向讀者呈現了幾乎每個逆向工程師或安全研究人員在日常工作中所面臨的各種場景,其中包括:如何設計與構建自己的調試工具,如何自動化實現煩瑣的逆向分析任務,如何設計與構建自己的fuzzing工具,如何利用fuzzing 測試來找出存在於軟體產品中的安全漏洞,一些小技巧諸如鉤子與注入技術的應用,以及對一些主流Python安全工具如PyDbg、 Immunity Debugger、Sulley、IDAPython、PyEmu等的深入介紹。作者藉助於如今黑客社區中備受青睞的編程語言 Python引領讀者構建出精悍的腳本程序來一一應對上述這些問題。出現在書中的相當一部分Python代碼實例借鑒或直接來源於一些優秀的開源安全項目,諸如Pedram Amini的Paimei,由此讀者可以領略到安全研究者們是如何將黑客藝術與工程技術優雅融合來解決那些棘手問題的。
相關推薦:《Python教程》
作者簡介
Justin Seitz是一名Immunity公司的高級安全研究員,他在以往的工作中花費了大量的時間從事漏洞挖掘、逆向工程、編寫漏洞利用以及編寫Python代碼的研究。
目錄
第1章 搭建開發環境 1
1.1 操作系統要求 1
1.2 獲取和安裝Python 2.5 2
1.2.1 在Windows下安裝Python 2
1.2.2 在Linux下安裝Python 2
1.3 安裝Eclipse和PyDev 4
1.3.1 黑客摯友:ctype庫 5
1.3.2 使用動態鏈接庫 6
1.3.3 構建C數據類型 8
1.3.4 按引用傳參 9
1.3.5 定義結構體和聯合體 9
第2章 調試器原理和設計 12
2.1 通用寄存器 13
2.2 棧 15
2.3 調試事件 17
2.4 斷點 18
2.4.1 軟斷點 18
2.4.2 硬體斷點 20
2.4.3 內存斷點 22
第3章 構建自己的Windows調試器 24
3.1 Debugee,敢問你在何處 24
3.2 獲取寄存器狀態信息 33
3.2.1 線程枚舉 34
3.2.2 功能整合 35
3.3 實現調試事件處理常式 39
3.4 無所不能的斷點 44
3.4.1 軟斷點 44
3.4.2 硬體斷點 49
3.4.3 內存斷點 55
3.5 總結 59
第4章 PyDbg——Windows下的純Python調試器 60
4.1 擴展斷點處理常式 60
4.2 非法內存操作處理常式 63
4.3 進程快照 66
4.3.1 獲取進程快照 67
4.3.2 匯總與整合 70
第5章 Immunity Debugger——兩極世界的最佳選擇 74
5.1 安裝Immunity Debugger 74
5.2 Immunity Debugger 101 75
5.2.1 PyCommand命令 76
5.2.2 PyHooks 76
5.3 Exploit(漏洞利用程序)開發 78
5.3.1 搜尋exploit友好指令 78
5.3.2 「壞」字元過濾 80
5.3.3 繞過Windows 下的DEP機制 82
5.4 破除惡意軟體中的反調試常式 87
5.4.1 IsDebuugerPresent 87
5.4.2 破除進程枚舉常式 88
第6章 鉤子的藝術 90
6.1 使用PyDbg部署軟鉤子 90
6.2 使用Immunity Debugger部署硬鉤子 95
第7章 DLL注入與代碼注入技術 101
7.1 創建遠程線程 101
7.1.1 DLL注入 102
7.1.2 代碼注入 105
7.2 遁入黑暗 108
7.2.1 文件隱藏 109
7.2.2 構建後門 110
7.2.3 使用py2exe編譯Python代碼 114
第8章 Fuzzing 117
8.1 幾種常見的bug類型 118
8.1.1 緩沖區溢出 118
8.1.2 整數溢出 119
8.1.3 格式化串攻擊 121
8.2 文件Fuzzer 122
8.3 後續改進策略 129
8.3.1 代碼覆蓋率 129
8.3.2 自動化靜態分析 130
第9章 Sulley 131
9.1 安裝Sulley 132
9.2 Sulley中的基本數據類型 132
9.2.1 字元串 133
9.2.2 分隔符 133
9.2.3 靜態和隨機數據類型 134
9.2.4 二進制數據 134
9.2.5 整數 134
9.2.6 塊與組 135
9.3 行刺WarFTPD 136
9.3.1 FTP 101 137
9.3.2 創建FTP協議描述框架 138
9.3.3 Sulley會話 139
9.3.4 網路和進程監控 140
9.3.5 Fuzzing測試以及Sulley的Web界面 141
第10章 面向Windows驅動的Fuzzing測試技術 145
10.1 驅動通信基礎 146
10.2 使用Immunity Debugger進行驅動級的Fuzzing測試 147
10.3 Driverlib——面向驅動的靜態分析工具 151
10.3.1 尋找設備名稱 152
10.3.2 尋找IOCTL分派常式 153
10.3.3 搜尋有效的IOCTL控制碼 155
10.4 構建一個驅動Fuzzer 157
第11章 IDAPython——IDA PRO環境下的Python腳本編程 162
11.1 安裝IDAPython 163
11.2 IDAPython函數 164
11.2.1 兩個工具函數 164
11.2.2 段(Segment) 164
11.2.3 函數 165
11.2.4 交叉引用 166
11.2.5 調試器鉤子 166
11.3 腳本實例 167
11.3.1 搜尋危險函數的交叉代碼 168
11.3.2 函數覆蓋檢測 169
11.3.3 檢測棧變數大小 171
第12章 PYEmu——腳本驅動式模擬器 174
12.1 安裝PyEmu 174
12.2 PyEmu概覽 175
12.2.1 PyCPU 175
12.2.2 PyMemory 176
12.2.3 PyEmu 176
12.2.4 指令執行 176
12.2.5 內存修改器與寄存器修改器 177
12.2.6 處理常式(Handler) 177
12.3 IDAPyEmu 182
12.3.1 函數模擬 184
12.3.2 PEPyEmu 187
12.3.3 可執行文件加殼器 188
12.3.4 UPX加殼器 188
12.3.5 利用PEPyEmu脫UPX殼 189