資料溢位的危險究竟有多大?如何被駭客利用的?還得從一個人說起

在軟體安全領域當中,緩衝區溢位是一種比較典型、而且古老的

Bug

。這裡為何不把它說成是一種漏洞利用方式,因為存在緩衝區溢位,未必會威脅到系統/軟體的安全,未必就能利用成功。這是兩碼事。

資料溢位的危險究竟有多大?如何被駭客利用的?還得從一個人說起

超長字元淹沒緩衝區,引起程式崩潰!

簡單的說,緩衝區類似於“容器”,這個容器空間是有限的,當大於這個空間的資料不顧邊界塞滿這個容器,結果是一定會導致資料往外溢位的。溢位的資料會對周邊的“環境”有一些影響。輕則軟體報錯退出,重則會覆蓋重要資料或指令,會被竊取執行權!前者是bug,後者則是安全漏洞。

資料溢位的危險究竟有多大?如何被駭客利用的?還得從一個人說起

覆蓋緩衝區示例,目標就是返回地址!

緩衝區溢位,作為一種“現象”,肯定是無法避免的。它具有安全威脅的根源較為複雜,前面講了,緩衝區溢位是一種“古老”的Bug,有多古老呢? 從電子計算機誕生之初就已經存在了。但是真正被駭客利用,被世人所重視,還是來源於大名鼎鼎的

莫里斯蠕蟲(1988年)

。當年這個超級蠕蟲,只有短短99行程式碼,一共感染6000臺Unix主機,這也是世界上的首例“網路犯罪”。

資料溢位的危險究竟有多大?如何被駭客利用的?還得從一個人說起

莫里斯蠕蟲的原始版本,被博物館收藏,右邊是莫里斯本人

關於緩衝區溢位的學習教程,大家可以向我私信索取,包括堆疊溢位漏洞的完整利用。

世界第一臺電子計算機ENIAC的問世,讓計算機之父(

馮·諾依曼

)意識到,早期的計算機沒有原理性的東西做指導,隨後它開創了一種一直沿用至今的現代計算機體系結構,又叫做:

馮諾依曼結構

。這個結構的詳細資訊就不過多講了,大家有興趣可以自行搜尋。這個體系結構有一個特性:

"程式儲存,共享資料,順序執行

“,需要 CPU 從儲存器取出指令和資料進行相應的計算。由於指令和資料一樣都可以參與計算,這就為以後的緩衝區溢位攻擊埋下安全隱患!

資料溢位的危險究竟有多大?如何被駭客利用的?還得從一個人說起

計算機之父——馮諾依曼

緩衝區溢位是不可避免的,但是

溢位的資料能否被執行

才是關鍵中的關鍵。C/C++儲存字串用的字元陣列,往往都要指定陣列長度,超長資料覆蓋這個buffer後,多餘的資料會一直蔓延,直到淹沒函式返回地址(換句話說:

溢位的資料也會被執行!

)。如果函式不能正常返回,程式就會崩潰(找不到家了!)

資料溢位的危險究竟有多大?如何被駭客利用的?還得從一個人說起

wcscpy字串複製而不做邊界檢查,是溢位的根本原因!

如果是一名駭客,這些溢位的資料會被精心構造,用跳轉指令準確淹沒返回地址。待軟體正常返回時,retn會執行駭客安排的跳轉指令。程式的控制權從此就被駭客掌控了!在緩衝區內部放置ShellCode和平衡堆疊的操作。這樣駭客就能神不知鬼不覺入侵你的電腦。這個ShellCode是一串攻擊程式碼,相當於導彈的彈頭(真正有破壞力的部分),與Exploit(火箭)相結合,就像是製造一枚洲際導彈,只要是包含這個漏洞的主機,百分之百能命中靶心!

資料溢位的危險究竟有多大?如何被駭客利用的?還得從一個人說起

MSF是漏洞自動化滲透平臺,這是在挑選合適的彈頭(Shellcode)

相關領域的資料和試驗程式,可以透過私信找我獲取。

想要學習這方面技術,歡迎關注我!

持續分享軟體安全類知識乾貨,助你成為厲害的Cracker!