2012-09-26 77 views
2

過去,我已經爲用戶級進程完成了緩衝區溢出攻擊。但是,如果我嘗試溢出易受攻擊的內核模塊的緩衝區,這似乎不起作用。以下是我所做的:緩衝區溢出攻擊不適用於內核模塊

有一個易受攻擊的內核模塊,我可以打開它作爲文件讀取/寫入它。寫入操作沒有邊界檢查。所以我做了寫操作並溢出了緩衝區,並將返回地址覆蓋爲具有我的shellcode的環境變量的地址。但有些事情出錯了。內核崩潰,重新啓動後,我打開/ var/log/messages,發現eip正確指向我重寫的地址。但它仍然崩潰,說「無法處理虛擬地址處的內核空指針取消引用」 任何原因爲什麼會發生?爲什麼控件不能重定向到覆蓋的返回地址?

注意:我在redhat企業版linux上運行了exec-shield並關閉了ASLR。

+0

可能更適合security.stackexchange.com – bstpierre

+0

@bstpierre不知道它..謝謝! –

回答

4

由於內核運行在特權模式下,其配置與用戶空間不同(例如,不同的分頁表,CPU許可位等),所以內核不能跳轉到用戶地址。因此,爲了將shellcode加入內核,你必須將shellcode打包到寫入驅動程序(並複製到內核)的緩衝區中,並以某種方式獲取它的地址。如果你可以訪問內核映射,這並不難,但是最近Linux發行版已經開始鎖定對這些敏感信息的訪問,以致於難以利用內核錯誤。