出版時間:2011-3 出版社:電子工業(yè)出版社 作者:[美] Justin Seitz 頁數(shù):216 譯者:丁赟卿 譯,崔孝晨 審校
Tag標簽:無
前言
前言 “搞定了嗎?”,這可能是在Immunity公司出現(xiàn)頻率最高的一句話了。你也許會在類似以下的場景中聽到這樣的發(fā)問:“我正要給ImmunityDebugger開發(fā)一個新的ELF加載器”,片刻停頓之后,“搞定了嗎?”或者,“我剛發(fā)現(xiàn)了IE瀏覽器的一個Bug!”又一片刻的沉寂之后,“那個漏洞利用程序搞定了嗎?”在日常的安全項目中我們幾乎無時無刻地須要創(chuàng)建或者改寫自己的安全工具,并在這些頻繁的活動中始終保持高速的開發(fā)節(jié)奏,這使得Python逐漸成為了這個舞臺上的明星。你可以在下一個安全項目中選擇Python作為自己的開發(fā)工具,也許你將會用它來創(chuàng)建一個特殊的反編譯器或者開發(fā)一個完整的調(diào)試器?! ‘斘易哌M位于南邁阿密海灘的AceHardware(美國的一家連鎖五金店),沿著擺放著螺絲刀的通道走過時,常常會感到目眩。你會看到接近50多種不同規(guī)格的螺絲刀以整齊的順序陳列在貨架上。每一種規(guī)格的螺絲刀都與緊鄰的螺絲刀有著微小卻又十分重要的區(qū)別。我不算一個合格的修理能手,因此無法準確地說出每一種螺絲刀最為理想的使用場合,但是我很確信類似的情況同樣適用于我們的安全工具軟件。尤其是當你在對Web類型或者其他類型的高度定制化的應用程序進行安全審計時,你會發(fā)現(xiàn)每一次的審計任務都會需要一把特殊的“螺絲刀”來解決問題。要知道能夠及時地拼湊出一些類似SQLAPI函數(shù)鉤子之類的安全小工具已經(jīng)不止一次地拯救了Immunity的工作團隊。當然這些工具并不僅僅適用于安全審計任務,一旦你能夠使用鉤子函數(shù)對SQLAPI進行攔截,你就可以輕易地編寫出一個工具用于實時檢測可疑的異常SQL查詢,并及時向你的客戶公司提供修復方案,以抵御那些來自頑固黑客們的攻擊。 眾所周知,要讓你的每一個安全研究人員真正成為團隊的一部分是一件棘手的事情。很多安全研究人員無論在面對何種類型的問題時,都懷揣著白手起家式的過度熱情,企圖將需要借助的工具庫完全重寫。比如說Immunity發(fā)現(xiàn)了某個SSLDaemon的一個安全漏洞,接下來很有可能發(fā)生的一件事就是,你突然發(fā)現(xiàn)你的某個安全研究人員居然正在試圖從頭開始編寫一個SSL客戶端。而他們對此通常給出的解釋是“我能找到的SSL庫都丑陋不堪”。 你需要盡力避免這種情況發(fā)生。事實情況并不是現(xiàn)有的SSL庫丑陋不堪——它只是沒有按照某個安全研究人員的特別偏好風格來設計而已。而我們真正需要做的是能夠深入分析大量的現(xiàn)有代碼,快速地發(fā)現(xiàn)問題所在,并對其進行修改以適應自身所需,這才是及時地搭建出一個可用的SSL庫,并用其開發(fā)出一個尚處于保鮮期內(nèi)的漏洞利用程序的關鍵。而要做到這一點,你需要使你的安全研究員們能夠像一個真正的團隊一樣去工作。一個熟練掌握了Python的安全研究人員就有了一個強大的武器,也許就像那些掌握了Ruby的安全研究人員一樣。然而Python真正的與眾不同之處顯現(xiàn)在那些Python狂熱分子們協(xié)同工作時,他們將猶如一個高速運轉(zhuǎn)的超個體①一樣戰(zhàn)斗力驚人。正如你家廚房中的螞蟻大軍一樣,當它們的數(shù)量足夠組成一只大烏賊時,要殺死它們將比殺死一只烏賊棘手得多。而這正是本書極力告訴你的一個事實。 你也許已經(jīng)為自己想做的事找到了一些工具。你也許會問:“我已經(jīng)有了一套VisualStudio,里面附帶了一個調(diào)試器,為什么還要去編寫一個供自己專用的調(diào)試器。”或者“WinDbg不是有一個插件接口了嗎?”答案是肯定的。WinDbg的確提供了插件接口,你可以通過那些API慢慢地拼湊出一些有用的東西。直到某一天你很可能又會說:“Heck,如果我能和5000個WinDbg使用者互聯(lián)該有多好啊,這樣我們就可以互通各自的調(diào)試結(jié)果了”。如果你從一開始就選擇了Python,你只要寫100行左右的代碼就可以構建一個XMLRPC客戶端與服務端,接下來整個團隊可以同步地進行工作并使每個人及時地享有他人的成果和信息?! 『诳徒^不等同于逆向工程——你的目標并不是還原出整個應用程序的源碼。你的目標是對軟件系統(tǒng)獲得比系統(tǒng)開發(fā)者自身更加深入的理解。一旦你能做到這一點,無論目標以何種形式出現(xiàn),你將最終成功地滲透它,獲得炙手可熱的漏洞利用(exploit)。這也意味著你需要成為可視化、遠程同步、圖論、線性方程求解、靜態(tài)分析技術以及其他很多方面的專家。因此,Immunity決定將這些都標準化實現(xiàn)在Python平臺上,這樣一旦我們編寫了一個圖論算法,這個算法將在我們所有的工具中通用。 在第6章中,Justin向你演示了如何使用一個鉤子竊取Firefox瀏覽器中輸入的用戶名與密碼。這正是一個惡意軟件作者所做的事——從之前的一些相關報道中可以看出,惡意軟件作者通常使用一些更為高級語言來編寫此類程序(http://philosecurity.org/2009/01/12/interviewwithanadwareauthor)。然而你同樣可以使用Python在15分鐘內(nèi)編寫出一個樣例程序,用于向你的開發(fā)人員演示,讓他們明白他們對自己的產(chǎn)品所做的安全假設并不成立?,F(xiàn)在的一些軟件公司出于他們所聲稱的安全考慮,在保護軟件內(nèi)部數(shù)據(jù)方面的投資花費不菲。而實際上他們所做的往往只是實現(xiàn)了一些版權保護和數(shù)字版權管理機制而已?! ∵@正是本書試圖教你的東西:快速創(chuàng)建安全工具的能力。你應當能夠借助這種能力為你個人或者整個團隊帶來成功。而這也是安全工具開發(fā)的未來:快速實現(xiàn)、快速修改,以及快速互聯(lián)。我想,最后你唯一剩下的問題也許就是:“搞定了嗎?” ImmunityIne的創(chuàng)始人兼CTODaveAitel 2009年2月于美國佛羅里達州,邁阿密海灘
內(nèi)容概要
本書是由知名安全機構ImmunityInc的資深黑帽JustinSeitz先生主筆撰寫的一本關于編程語言Python如何被廣泛應用于黑客與逆向工程領域的書籍.老牌黑客,同時也是Immunity
Inc的創(chuàng)始人兼首席技術執(zhí)行官(CT0)Dave
Aitel為本書擔任了技術編輯一職。本書的絕大部分篇幅著眼于黑客技術領域中的兩大經(jīng)久不衰的話題:逆向工程與漏洞挖掘,并向讀者呈現(xiàn)了幾乎每個逆向工程師或安全研究人員在日常工作中所面臨的各種場景,其中包括:如何設計?構建自己的調(diào)試工具,如何自動化實現(xiàn)煩瑣的逆向分析任務,如何設計與構建自己的fuzzing工具,如何利用fuzzing測試來找出存在于軟件產(chǎn)品中的安全漏洞,一些小技巧諸如鉤子與注入技術的應用,以及對一些主流Python安全工具如PyDbg、Immunity
Debugger、Sulley、IDAPython、PyEmu等的深入介紹。作者借助于如今黑客社區(qū)中備受青睞的編程語言Python引領讀者構建出精悍的腳本程序來——應對上述這些問題。出現(xiàn)在本書中的相當一部分Python代碼實例借鑒或直接來源于一些優(yōu)秀的開源安全項目,諸如Pedram
Amini的Paimei,由此讀者可以領略到安全研究者?是如何將黑客藝術與工程技術優(yōu)雅融合來解決那些棘手問題的。
本書適合熱衷于黑客技術,特別是與逆向工程與漏洞挖掘領域相關的讀者,以及所有對Python編程感興趣的讀者閱讀與參考。
作者簡介
作者:(美國)塞茲(Justin Seitz) 譯者:丁赟卿 注釋 解說詞:崔孝晨
書籍目錄
第1章 搭建開發(fā)環(huán)境
1.1 操作系統(tǒng)要求
1.2獲取和安裝Python 2.5
1.2.1 在Windows下安裝Python
1.2.2 在Linux下安裝Python
1.3 安裝Eclipse和PyDev
1.3.1 黑客摯友:ctype庫
1.3.2 使用動態(tài)鏈接庫
1.3.3 構建C數(shù)據(jù)類型
1.3.4 按引用傳參
1.3.5 定義結(jié)構體和聯(lián)合體
第2章 調(diào)試器原理和設計
2.1 通用寄存器
2.2 棧
2.3 調(diào)試事件
2.4 斷點
2.4.1 軟斷點
2.4.2 硬件斷點
2.4.3 內(nèi)存斷點
第3? 構建自己的Windows調(diào)試器
3.1 Debugee,敢問你在何處
3.2 獲取寄存器狀態(tài)信息
3.2.1 線程枚舉
3.2.2功能整合
3.3 實現(xiàn)調(diào)試事件處理例程
3.4 無所不能的斷點
3.4.1 軟斷點
3.4.2 硬件斷點
3.4.3 內(nèi)存斷點
3.5 總結(jié)
第4章 PyDbg——WindoWS下的純Python調(diào)試器
4.1 擴展斷點處理例程
4.2 非法內(nèi)存操作處理例程
4.3 進程快照
4.3.1 獲取進程快照
4.3.2匯總與整合
第5章 Immunity Debugger一兩極世界的最佳選擇
5.1 安裝Immunity Debugger
5.2 Immunity Debugger l01
5.2.1 PyCommand命令
5.2.2 PyHooks
5.3 Exploit(漏洞利用程序)開發(fā)
5.3.1 搜尋exploit友好指令
5.3.2“壞”字符過濾
5.3.3 繞過Windows下的DEP機制
5.4 破除惡意軟件中的反調(diào)試例程
5.4 1 lsDebuugerPresent
5.4.2 破除進程枚舉例程
第6章 鉤子的藝術
6.1 使用PyDbg部署軟鉤子
6.2 使用Immunity Debugger部署硬鉤子
第7章 DLL注入與代碼注入技術
7.1 創(chuàng)建遠程線程
7.1.1 DLL注入
7.1.2 代碼注入
……
第8章 Fuzzing
第9章 Sulley
第10章 面向Windows驅(qū)動的Fuzzing測試技術
第11章 IDAPyrhon——IDA PRO環(huán)境下的Pyrhon
第12章 PYEmu——腳本驅(qū)動式仿真器
章節(jié)摘錄
版權頁:插圖:緩沖區(qū)溢出是最為普遍的一種軟件漏洞。所有那些看似無辜純良的內(nèi)存管理函數(shù)、字符串處理例程、甚至是某些編程語言所固有的內(nèi)建函數(shù)都有可能成為引發(fā)緩沖區(qū)溢出的潛在元兇。簡而言之,當你試圖向某一內(nèi)存區(qū)域中存入超負荷量的數(shù)據(jù)時,便會發(fā)生緩沖區(qū)溢出。用一個形象的比喻來解釋這個現(xiàn)象,你可以將數(shù)據(jù)緩沖區(qū)想象成一個容積為一加侖的水桶。如果你只是向這個桶內(nèi)倒上兩滴或者半加侖水,甚至是直接滿上,你和水桶都還會相安無事。然而我們都清楚如果向水桶內(nèi)傾倒上兩加侖的水會導致什么后果,你恐怕得勞煩自己清理濺溢到地板上的那額外一加侖的水了。本質(zhì)上相同的事情也會發(fā)生在軟件程序中,當你試圖向一塊數(shù)據(jù)緩沖區(qū)(水桶)寫入過量的數(shù)據(jù)(水)時,額外的寫入數(shù)據(jù)將越過緩沖區(qū)的邊界并覆蓋那些位于邊界之外的數(shù)據(jù)。如果這些被殃及的內(nèi)存區(qū)域的內(nèi)容最終能被惡意攻擊者完全控制,那么這就意味著惡意攻擊者獲得了一條潛在渠道用以控制程序內(nèi)部的代碼執(zhí)行路徑,并以某種方式最終成功滲透主機。你需要了解兩種最基本形式的緩沖區(qū)溢出:基于棧的溢出與基于堆的溢出。這兩種形式的溢出在形成機理上存在著本質(zhì)區(qū)別,然而卻往往招致相同的后果——攻擊者接管目標程序內(nèi)部的代碼執(zhí)行流。棧溢出的一個標志性特征就是會引發(fā)棧上數(shù)據(jù)遭受污染,這為攻擊者接管后續(xù)的代碼執(zhí)行流向創(chuàng)造了絕佳機會。惡意攻擊者可能會通過重寫當前函數(shù)棧幀中的返回地址,或者改寫存于棧上的函數(shù)指針,或者篡改棧上變量的取值,或者修改當前的異常處理例程執(zhí)行鏈等各種手段來設法掌控后續(xù)的代碼執(zhí)行方式。由棧溢出所引發(fā)的錯誤內(nèi)存數(shù)據(jù)訪問距離溢出事件本身往往僅幾步之遙,因此通常在棧溢出發(fā)生后不久,系統(tǒng)就會拋出一個非法內(nèi)存訪問異常,這使得測試人員在一輪Fuzzing測試過后要找出事發(fā)源頭相對容易一些。
編輯推薦
《Python灰帽子:黑客與逆向工程師的Python編程之道》:安全技術大系
圖書封面
圖書標簽Tags
無
評論、評分、閱讀與下載