對于緩沖區(qū)溢出,有三件事令我印象深刻:第一次成功地在Linux的imapd上利用一個緩沖區(qū)溢出;第一次在本地的Linux中獨立發(fā)現(xiàn)和利用了緩沖區(qū)溢出;第一次通過編寫緩沖區(qū)溢出成功進(jìn)入別人的主機(jī)。在讀過Aleph1的關(guān)于緩沖區(qū)溢出的重要論文“Buffer overflows for fun and profit”后,大多數(shù)人想到的主要是由此帶來的好處。因為精通編寫緩沖區(qū)溢出程序的人在該行業(yè)任何一家大公司中做咨詢師的年薪都可以達(dá)到9~12萬美元。但另一方面,許多人對獲得這種技能有一個很大的誤區(qū),認(rèn)為學(xué)會這種技能,就可以一勞永逸了。確實,在IT領(lǐng)域許多訣竅是可以學(xué)會的,一旦了解了這些訣竅,也就擁有這些訣竅了。但是編寫緩沖區(qū)溢出程序卻并不如此,從書本中或者速成班中可以學(xué)會基礎(chǔ)知識,但是編程的環(huán)境總是在變化。一方面,黑客在不停地尋找新的方法來更好的利用漏洞,尋找發(fā)現(xiàn)新的漏洞方法;另一方面,微軟公司每天都在給它的代碼增加保護(hù),如果3個月不寫緩沖區(qū)溢出代碼,原有的技巧也就過時了。編寫緩沖區(qū)溢出中最難的就是要地根據(jù)不斷變化的環(huán)境給出新對策。用于編寫溢出程序的工具也在不斷變化著,以前編寫溢出程序只需要一份Softice或GDB的拷貝,就可以由某個人單獨完成。但是今天,即使是一個簡單的緩沖區(qū)溢出,Immunity公司也會有相當(dāng)大的投入。例如,需要有專門的調(diào)試器來查詢、腳本化正在運行的程序;專門的編譯器來創(chuàng)建和調(diào)整克服弱點所需求的shellcode;購買或產(chǎn)生用于專門解決各種不同問題的反向工程工具;用Python語言編寫的完整的mySQL和SSL庫。一個相對復(fù)雜的漏洞利用需要整個工作小組協(xié)調(diào)完成。每種復(fù)雜的漏洞利用都會有相應(yīng)的文章介紹,這些漏洞利用來自于整個團(tuán)隊在不同漏洞利用過程中所得到的經(jīng)驗。最好的緩沖區(qū)溢出程序決不會是蠕蟲。攻擊者定制的漏洞利用會使被攻擊者身陷其中。如果一個頂級黑客要攻擊某個人,則會完全掌握目標(biāo)主機(jī)的工作環(huán)境,目的只有一個,產(chǎn)生一個只使用一次的緩沖區(qū)溢出。編寫緩沖區(qū)溢出程序有幾個階段。本書作者James Foster介紹了一些基礎(chǔ)的知識和技巧,對初學(xué)者進(jìn)行基礎(chǔ)的訓(xùn)練,確定專攻的方向,然后就可以獨自編寫緩沖區(qū)溢出程序。雖然本書不能使讀者站到技術(shù)的最前沿,但是能夠確信自己掌握了基礎(chǔ)知識,能夠做出正確的決定。也許讀者可能投身于此項工作,致力于編寫代碼、提高技能。對于選擇這一行的讀者,請記住下面的座右銘:● 永遠(yuǎn)不要害怕。微軟的銷售人員在不停地告誡人們發(fā)現(xiàn)微軟的新軟件的緩沖區(qū)溢出漏洞和編寫相應(yīng)的漏洞利用程序是件非常困難的事情。激勵自己繼續(xù)做下去的對策就是想像一旦漏洞利用成功,自己將會如何處理這個漏洞。編寫漏洞利用程序需要掌握很多單調(diào)枯燥的技術(shù),例如,HP-UX所用的少見的扇形內(nèi)存訪問方式;Irix帶有的笨拙的高速緩沖存儲器。雖然編寫緩沖區(qū)溢出程序需要數(shù)千條的匯編語句,學(xué)起來并不是一件容易的事情,但只要自己覺得能做到,那就一定能做到?!?不要太把自己當(dāng)回事。無論自己多么優(yōu)秀,在遙遠(yuǎn)的地方可能還有一些十五歲的年輕人每天花20小時來爭取做得更好。不要把編寫緩沖區(qū)溢出程序當(dāng)成一場競爭,否則你不久就會崩潰?!?找一些伙伴。編寫緩沖區(qū)溢出程序不是獨自能不斷進(jìn)步的一個技能,需要別人的幫助,找出自己在哪方面還比較薄弱。● 不管目標(biāo)是什么,要把這本書當(dāng)作工作表,而不是一本小說。要一邊讀一邊在電腦上操作。一本緩沖區(qū)溢出的書不能造就出一個高明的黑客。在逐章學(xué)習(xí)的過程中,會發(fā)現(xiàn)在漏洞利用不起作用時,自己會去不斷地嘗試,會廢寢忘食,會不惜花金錢來更準(zhǔn)確地掌握所學(xué)到的知識?!?我的觀點是:漏洞利用是事實的復(fù)雜陳述,如果你贊同這個觀點,將使編寫緩沖區(qū)溢出程序變得更加美妙。希望有一天能像欣賞藝術(shù)品一樣欣賞你的代碼?!狣ave AitelImmunity公司創(chuàng)始人兼CEO