2009-10-21 55 views
1

我想弄清楚Windows與Unix中緩衝區溢出之間的安全問題。緩衝區溢出 - Windows vs Unix

據我所知,緩衝區溢出Windows hack不能在Unix中實現,因爲每個進程都有自己的內存空間。這是否意味着Windows中的進程共享內存空間?

+0

Windows和Unix都在單獨的內存空間中運行進程。你指的是哪種緩衝區溢出攻擊? – 2009-10-21 23:55:00

回答

2

共享內存空間不是大多數緩衝區溢出漏洞的原因。自從Win 3.0(或者Win 3.1在80286上運行)以來,Windows沒有共享內存,所以距離Windows上次發佈支持共享內存模型已經有將近20年的時間了。

緩衝區溢出允許攻擊者在正在被利用的進程中更改內存。通過這樣做,攻擊者可以使用目標進程的特權級別來執行系統操作(例如啓動進程,加載動態庫或更改特定用戶的權限等)。

這可能在Win *平臺,* nix平臺以及其他許多平臺上。操作系統和正在被利用的應用程序是如何處理這種嘗試的,是什麼改變了這一點。在應用程序方面,仔細檢查緩衝區大小是通常需要避免的。像ASLR(地址空間佈局隨機化,防止攻擊者猜測她需要打電話給害了一個函數的地址)和DEP(數據執行保護,防止攻擊者注入的可執行代碼到您的數據區)技術,提供由操作系統,幫助巨大。在操作系統方面,不以root /管理員身份運行應用程序也許是最重要的防線。

2

Windows和Unix進程都有內存隔離。緩衝區溢出攻擊可能發生在兩種環境中。

+0

啊,我沒有意識到這一點。謝謝! – 2009-10-22 03:52:50

1

也許你應該澄清你的意思是「緩衝區溢出Windows黑客」。緩衝區溢出不一定需要修改其他進程的代碼。

示例:從cin讀取到一個固定大小的字節陣列可被用於運行的自定義代碼。如果程序本身以root身份運行,那麼Unix和Windows都不能做任何事情來防止黑客行爲 - 內存隔離不會有任何幫助。正如託德指出的那樣,Windows和Unix都能夠進行內存隔離(這與DEPASLR相比是非常基本的東西)。

+0

公平地說,除非底層機器支持它,否則操作系統根本無法執行進程隔離和DEP。 IBM-PCs無法做到這一點,直到最近DEP才成爲可能。完整的ASLR在性能方面付出了代價,這就是爲什麼許多操作系統懶洋洋地執行它的原因。直到Snow Leopard之前,IIRC Mac在ASLR上遠遠落後。 – jbcreix 2010-02-14 06:39:57