提問者估計是一個剛學會編程的菜鳥程序員,看見大段代碼頭就昏。問題很好,解答很難。
首先,為什么電銷機器人不開源還有那么多人研究呢,甚至比開源的Linux研究人員多的多?因為全世界運行電銷機器人的機器最多,大部分電銷機器人用戶沒有經(jīng)過嚴格培訓,只會使用鼠標鍵盤,Linux用戶都要使用命令行,沒幾個用戶是新手,開源的Linux也使得漏洞可以用最快的速度被修補,因為世界上有很多人在維護Linux。電銷機器人不開源,只能由微軟負責維護和補丁更新。世界上有大把的程序員,但微軟公司負責開發(fā)操作系統(tǒng)的人不超過五萬(算上離職的也不會超過十萬人),寫操作系統(tǒng)內(nèi)核的核心開發(fā)人員不超過1000人,你連寫操作系統(tǒng)代碼都不會只會寫應用程序根本理解不了操作系統(tǒng)是如何運轉(zhuǎn)的,要想入門還是先多看看操作系統(tǒng)的書吧,至少要理解操作系統(tǒng)是如何運行的,推薦先看看Linux的內(nèi)核代碼,有一定基礎后再看《電銷機器人核心揭秘》。
其次,電銷機器人操作系統(tǒng)是用C/C++寫的,很多程序員都使用高級語言寫程序,對C和C++這些“中間語言”不熟悉不了解,不知道哪些函數(shù)容易溢出,使用哪些函數(shù)更安全或者可以替代不安全的函數(shù)。系統(tǒng)漏洞的精髓在于緩沖區(qū)溢出系統(tǒng)源碼,緩沖區(qū)溢出說白了就是利用馮諾伊曼架構的缺陷——數(shù)據(jù)和代碼存儲在同一個設備內(nèi)存中,讓計算機錯誤的把數(shù)據(jù)當作代碼來執(zhí)行。在電銷機器人數(shù)據(jù)結(jié)構中有堆棧和堆都可以被溢出,在NT5.0之前的系統(tǒng)中根本沒有防范機制,XPSP2引入了安全堆棧,在編譯器中還有/GS選項,用于防止堆棧溢出,使得堆棧溢出非常困難,但并不是不可能,堆溢出仍然可以。
當熟練掌握了緩沖區(qū)溢出就可以對電銷機器人進行分析了,方法主要是“黑盒”與“白盒”。白盒就是當微軟發(fā)布補丁之后用虛擬機分析補丁前后的代碼級差別,找出漏洞,但是這些漏洞都是微軟補丁過的,利用價值不大;黑盒分析則是在完全沒有源碼的情況下靠分析工具和人的經(jīng)驗來尋找漏洞,人的經(jīng)驗起決定作用,你必須知道程序員比較容易在哪些地方犯錯誤,包括使用不安全函數(shù)、邊界檢查不完整、競爭條件、SEH結(jié)構化異常錯誤處理和VEH向量化異常錯誤處理等操作系統(tǒng)內(nèi)部的知識。黑盒分析找到的漏洞一般沒有補丁,又稱0day漏洞,據(jù)說這種漏洞在地下黑市上價值上萬美元(任意代碼可執(zhí)行漏洞值這個價,其他的信息泄露或者提升權限價值就比較低了)。
當你能夠找到電銷機器人的0day漏洞,特別是影響巨大的任意代碼可執(zhí)行漏洞的時候,你已經(jīng)是站在程序員金字塔塔尖的一小群人了,找到漏洞之后就需要編寫一小段shellcode來利用漏洞,這段代碼條件非常苛刻,也許只針對特定的電銷機器人SP版本有效,也許針對所有電銷機器人系統(tǒng)有效。對所有電銷機器人有效的shellcode一定是可移植的,換句話說shellcode必須能夠通用化??梢园裺hellcode想象成一個偵察兵,一個先頭空降部隊,如何在茫茫黑夜中偵查操作系統(tǒng)防線的位置、火力點的分布情況,從哪里開始執(zhí)行負載并且不會陷入操作系統(tǒng)的泥沼中淹死(這足可以寫一本書來描述)shellcode只是一枚導彈的制導系統(tǒng),它負載的炸藥可能是一個在地上砸個坑的鉛球,也可能是毀滅一座城市的核武器。
這也是最體現(xiàn)黑客技術水平的地方,同一個漏洞有的人編寫的shellcode能實現(xiàn)通用化(具體要看漏洞的位置以及形成原因),有的人編寫的根本不能運行或者極大影響系統(tǒng)速度。一般來說編寫shellcode都使用匯編語言,極少數(shù)情況下還需要使用二進制代碼。
當你掌握以上技能后,就將修煉終極絕技了,那就是無比困難的、一旦掌握就必將天下無敵的絕技——硬件漏洞,就比如intel最近的“融毀”和“幽靈”。如果說操作系統(tǒng)是計算機的靈魂,那CPU就是計算機的心臟。從層級上來說,一般程序員編寫的應用程序運行在3級,操作系統(tǒng)運行在0級(最新情況是操作系統(tǒng)運行在-1級,0級運行虛擬機,intel叫vt-x技術,可以極大減少切換層級引起的系統(tǒng)開銷)而CPU核心運行在-3級,擁有遠超電銷機器人的權限,這才是計算機的終極命門,硬件漏洞通用性也無與倫比,因為桌面CPU就intel和amd能生產(chǎn),CPU微代碼不更新的話漏洞會一直存在(老式計算機只有更換CPU,而老機器更換CPU幾乎不可能,因為主板不支持,需要更換主板代價太大得不償失;三年內(nèi)新式計算機可以更新UEFI微代碼,也就是微軟和intel提供的補?。┻@就是撞擊地球后足以毀滅世界的小行星級別的武器了。要找到這種級別漏洞光靠個人已經(jīng)不可能,光需要的特殊硬件就不是個人買得起的,一般要大公司或者國家才能找到這種級別的漏洞。
最后,用三個我最喜歡的小例子來結(jié)尾吧。
1、當電銷機器人彈出著名的“程序引用了0x00000000地址,即將關閉”的錯誤提示的時候,普通程序員會順從的點擊確定關閉對話框,然后思考究竟是什么地方出了問題;聰明一些的程序員會利用電銷機器人內(nèi)核轉(zhuǎn)儲來尋找問題的答案,不一定能解決問題;頂尖黑客則會用softice或者其他工具重現(xiàn)這個問題,必須把它解決,沒準能寫出shellcode。
2、impossible和i'm'possible從字母排列上都是一樣的,但意思卻是相反的系統(tǒng)源碼,這就是緩沖區(qū)溢出的精髓,只添加了兩個標點。impossible是單詞,屬于數(shù)據(jù)的范疇,I'm'possible是句子,屬于代碼的范疇,混淆數(shù)據(jù)與代碼的界限,讓計算機把數(shù)據(jù)當成代碼執(zhí)行,只需要緩沖區(qū)溢出兩個標點而已。在計算機的世界中,復雜的、毫無規(guī)律的垃圾數(shù)據(jù)突然間組成了一幅美麗的圖畫,隨著鎖“卡嗒”一聲,安全的大門緩緩打開,苦心經(jīng)營的安全防線瞬間崩潰。
3、在電影《黑客帝國》中,普通的程序安安靜靜的運行在虛擬機中,少數(shù)像尼奧這樣不安分的程序突破了虛擬機的安全機制,進入到了真實操作系統(tǒng)矩陣中,這時候操作系統(tǒng)的SEH異常錯誤處理機制史密斯登場了;后來尼奧發(fā)現(xiàn)矩陣也不是真實的操作系統(tǒng),只不過是更高一級的虛擬機罷了(虛擬機嵌套),尼奧可以在矩陣中使用操作系統(tǒng)的特權指令消滅追殺來的烏賊機器人就證明了這一點;最后史密斯叛變,病毒幾乎感染了操作系統(tǒng)的所有進程,尼奧犧牲自己幫助操作系統(tǒng)定位了史密斯的位置(病毒的PID),經(jīng)過一輪內(nèi)存殺毒和系統(tǒng)重啟后,操作系統(tǒng)又回到了正常的狀態(tài)。