缓冲区溢出(Buffer Overflow)
原文地址:https://www.imperva.com/learn/application-security/buffer-overflow/
什么是緩沖區(qū)溢出
緩沖區(qū)是內(nèi)存存儲區(qū)域,可在數(shù)據(jù)從一個位置傳輸?shù)搅硪粋€位置時臨時保存數(shù)據(jù)。當數(shù)據(jù)量超過內(nèi)存緩沖區(qū)的存儲容量時,就會發(fā)生緩沖區(qū)溢出(或緩沖區(qū)溢出)。因此,嘗試將數(shù)據(jù)寫入緩沖區(qū)的程序會覆蓋相鄰的內(nèi)存位置。
例如,登錄憑證的緩沖區(qū)可能被設(shè)計為期望輸入 8 個字節(jié)的用戶名和密碼,因此如果事務涉及 10 個字節(jié)的輸入(即比預期多 2 個字節(jié)),程序可能會寫入多余的數(shù)據(jù)超出緩沖區(qū)邊界。
緩沖區(qū)溢出會影響所有類型的軟件。它們通常由格式錯誤的輸入或未能為緩沖區(qū)分配足夠的空間造成。如果事務覆蓋可執(zhí)行代碼,則可能導致程序行為不可預測并生成錯誤結(jié)果、內(nèi)存訪問錯誤或崩潰。
緩沖區(qū)溢出示例
什么是緩沖區(qū)溢出攻擊
攻擊者通過覆蓋應用程序的內(nèi)存來利用緩沖區(qū)溢出問題。這會改變程序的執(zhí)行路徑,觸發(fā)破壞文件或暴露私人信息的響應。例如,攻擊者可能會引入額外的代碼,向應用程序發(fā)送新指令以訪問 IT 系統(tǒng)。
如果攻擊者知道程序的內(nèi)存布局,他們可以故意提供緩沖區(qū)無法存儲的輸入,并覆蓋保存可執(zhí)行代碼的區(qū)域,用自己的代碼替換它。例如,攻擊者可以覆蓋一個指針(一個指向內(nèi)存中另一個區(qū)域的對象)并將其指向一個漏洞利用負載,以獲得對程序的控制。
緩沖區(qū)溢出攻擊的類型
基于堆棧的緩沖區(qū)溢出更為常見,并且利用僅在函數(shù)執(zhí)行期間存在的堆棧內(nèi)存。
基于堆的攻擊更難實施,并且涉及將為程序分配的內(nèi)存空間泛濫到當前運行時操作使用的內(nèi)存之外。
哪些編程語言更容易受到攻擊?
C 和 C++ 是兩種非常容易受到緩沖區(qū)溢出攻擊的語言,因為它們沒有內(nèi)置的保護措施來防止覆蓋或訪問內(nèi)存中的數(shù)據(jù)。Mac OSX、Windows 和 Linux 都使用用 C 和 C++ 編寫的代碼。
PERL、Java、JavaScript 和 C# 等語言使用內(nèi)置的安全機制,可最大限度地減少緩沖區(qū)溢出的可能性。
如何防止緩沖區(qū)溢出
開發(fā)人員可以通過代碼中的安全措施或使用提供內(nèi)置保護的語言來防止緩沖區(qū)溢出漏洞。
此外,現(xiàn)代操作系統(tǒng)具有運行時保護。三種常見的保護措施是:
地址空間隨機化 (ASLR) — 在數(shù)據(jù)區(qū)域的地址空間位置周圍隨機移動。通常,緩沖區(qū)溢出攻擊需要知道可執(zhí)行代碼的位置,而隨機化地址空間使得這幾乎不可能實現(xiàn)。
數(shù)據(jù)執(zhí)行預防——將內(nèi)存的某些區(qū)域標記為不可執(zhí)行或可執(zhí)行,從而阻止攻擊在不可執(zhí)行區(qū)域中運行代碼。
結(jié)構(gòu)化異常處理程序覆蓋保護 (SEHOP) —有助于阻止惡意代碼攻擊結(jié)構(gòu)化異常處理 (SEH),這是一種用于管理硬件和軟件異常的內(nèi)置系統(tǒng)。因此,它可以防止攻擊者利用 SEH 覆蓋利用技術(shù)。在功能層面上,SEH 覆蓋是通過使用基于堆棧的緩沖區(qū)溢出來覆蓋存儲在線程堆棧上的異常注冊記錄來實現(xiàn)的。
代碼和操作系統(tǒng)保護方面的安全措施還不夠。當組織發(fā)現(xiàn)緩沖區(qū)溢出漏洞時,它必須迅速做出反應以修補受影響的軟件,并確保軟件用戶可以訪問補丁。
總結(jié)
以上是生活随笔為你收集整理的缓冲区溢出(Buffer Overflow)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 屏:全贴合工艺之GFF、OGS、Once
- 下一篇: esxi5.5 集成AR8162/816