靜網PWA視頻評論

黑客為什麼可以做到無需知道源碼的情況下找出系統漏洞?

2023年09月25日

- txt下載

專業回答


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

其他回答1


感謝邀請。
每天活躍在網際網路上的應用成百上千萬,包括PC端以及目前越來越主流的移動端,不僅有通過瀏覽器訪問的,還有需要安裝客戶端的,不僅有與伺服器強交互的,還有獨立運行的本地軟體。
而這其中,開源的(包括開放源碼的)產品少之又少。但,這並不妨礙一個黑客找出其中的漏洞。換句話說,找漏洞並不需要源碼。
當然了,在有源碼的情況下,挖洞是一件難度係數指數下降的事情。雖然讀懂一個大型軟體源碼耗時又耗力,但對於黑客來說,可以略去其中大半的代碼來閱讀,只關心可能造成危險的部分。就像一名建築工程師看一份大樓的施工圖,要看懂大樓的結構、建築材料、水電線路等等各方各面,而對於《Prison Break》中的Michael Scofield可能只關心地下管道的分布。
那麼,在沒有源碼的情況下,黑客怎麼挖洞呢?這種情況,我們可以稱之為黑盒。而挖洞,的確需要與程序編輯者持有完全相反的角度和看法。對於輸入輸出點,程序猿考慮的是正確的輸入獲得正確的輸出,而黑客則考慮特殊的非法輸入獲得異常的有價值輸出。那系統登錄來說,程序猿考慮的是用戶輸入註冊的用戶名、口令能夠在登錄時與資料庫中的數據匹配成功,而黑客則會嘗試引起資料庫查詢異常的輸入作為用戶名、口令內容,希望應用返回更多資料庫中的有效數據。
對於黑客來說,不知道源碼情況下,只要有輸入就可以了,不管是應用具有的功能頁面,還是一個輸入接口,通過一種叫做模糊測試的技術就可以開始你的挖洞之旅。模糊測試可以構造一系列正常和異常的輸入值,根據應用的返回來判斷脆弱點的存在。
在黑客的武器庫中,模糊測試只是其中一個利器,像什麼漏掃、逆向、脫殼、注入、暴破等等不一而足。
作為程序猿,在編寫程序時不僅要從正向角度完成應用的功能,還需要從黑客角度逆向分析應用在處理異常輸入時的反應,才能做出高安全的應用。

其他回答2


針對Web方面


在網絡滲透工程師眼裡,你說的這種行為通常被稱為「黑盒測試」,這也是大部分黑(script)客(kid)最常用的測試手段。
在這種情況下,黑客進行黑盒測試的首要任務就是收集信息,儘可能的收集web網站的DNS、程序結構、資料庫信息等等,為之後的滲透測試奠定基礎。
下一步便是使用一些專業的掃描器如awvs nessus等,進行一些高危漏洞的掃描,同時進行手工檢測,找一些掃描器容易忽略的地方進行利用。
最後把這些信息綜合總結來進行利用。

上面是2017年總結的Owasp Top 10,也就是近幾年間最流行的高危漏洞。


在我看來,黑盒測試為首當測試,沒有什麼特別的問題的話,白盒測試便更能挖掘出藏在深處的漏洞。

收藏

相關推薦

清純唯美圖片大全

字典網 - 試題庫 - 元問答 - 简体 - 頂部

Copyright © cnj8 All Rights Reserved.