缓冲区溢出(buffer overflow),在電腦學上是指针对程序设计缺陷,向程序输入缓冲区写入使之溢出的内容(通常是超过缓冲区能保存的最大数据量的数据),从而破坏程序运行、趁著中斷之際并取得程序乃至系统的控制权。

buffer overflow」的各地常用名稱
中國大陸缓冲区溢出
臺灣緩衝區溢位

缓冲区溢出原指当某个数据超过了处理程序回傳堆疊位址限制的范围时,程序出现的异常操作。造成此现象的原因有:

  • 存在缺陷的程序设计
  • 尤其是C语言,不像其他一些高级语言会自动进行数组或者指针的堆疊區塊边界检查,增加溢出风险。
  • C语言中的C标准库还具有一些非常危险的操作函数,使用不当也为溢出创造条件。
  • 不當的堆積操作可能造成迷途指针,可以透過特殊的堆排佈(heap feng shui)取得緩衝區的堆區塊(heap chunk),改變緩衝區邊界並創造堆溢出的條件。

黑客Unix的内核发现通过缓冲区溢出可以控制內核空間劫持控制流程获得系统的最高等级权限,而成为攻击手段之一。也有人发现相同的问题也会出现在Windows操作系统上,以致其成为黑客最为常用的攻击手段,蠕虫病毒利用操作系统高危漏洞进行的破坏与大规模传播均是利用此技术。比较知名的蠕虫病毒冲击波蠕虫,就基于Windows操作系统的缓冲区溢出漏洞。

例如一个用途是对SONY的掌上游戏机PSP-3000的破解,通过特殊的溢出图片,PSP可以运行非官方的程序与游戏。同样在诺基亚智能手机操作系统Symbian OS中发现漏洞用户可以突破限制运行需要DRM权限或文件系统权限等系统权限的应用程序。

缓冲区溢出攻击从理论上来讲可以用于攻击任何有相关缺陷的程序,包括对杀毒软件防火墙等安全产品的攻击以及对银行程序的攻击。在嵌入式设备系统上也可能被利用,例如PSP智能手机等。

在部分情况下,当一般程序(除了驱动和操作系统内核)发生此类问题时,C++运行时库通常会终止程序的执行。

作業系統層級的保護

编辑

目前OpenBSDLinuxWindowsMac OS等作業系統都具有buffer overflow protection(緩衝區溢位保護/記憶體位置重新定向)功能[來源請求],Linux 提供了參數 CONFIG_CC_STACKPROTECTOR 來啟用 stack canary 的對內核進行保護[1],這類機制可以用於檢測堆疊緩衝區是否發溢出,其他的保護機制基於記憶體位址重新定向,如Linux在4.12版本預設啟用核心位址空間組態隨機載入(KASLR)[2],在某種程度上可以保護作業系統,但仍還是有辦法讓溢出的代碼到正確的位置上。其作用原理是:記憶體跟處理程序在memory中受到保護。內對外的access memory對象位置會被核心(排程器)隨機定向,使其無法正確溢出。

参见

编辑

参考文献

编辑
  1. ^ Kernel Self-Protection. kernel.org. [2024-07-17]. (原始内容存档于2024-07-17). 
  2. ^ Linux 4.12 To Enable KASLR By Default - Phoronix. [2017-12-25]. (原始内容存档于2022-06-25). 

外部链接

编辑

📚 Artikel Terkait di Wikipedia

呼叫堆疊

在較底層語言(如組合語言與C語言中),程式控制訊息與資料可能一同被存入呼叫堆疊中,因此造成安全隱患,可能允許惡意程式通過栈缓冲区溢出(stack buffer overflow)來獲取程式的控制權。 記憶體管理 堆疊溢位 面向返回编程 调用约定 协程 負載 (計算)(英语:Overhead (computing))

栈缓冲区溢出

栈缓冲区溢出(stack buffer overflow或stack buffer overrun)是计算机程序把数据写入调用栈上的内存时超出了数据结构的边界。栈缓冲区溢出是缓冲区溢出的一种。 这会损坏相邻数据的值,引发程序崩溃或者修改了函数返回地址从而导致执行恶意的程序。这种攻击方式称为stack

网件

30, 2020).  本文含有此來源中屬於公有领域的内容。 Netgear httpd upgrade_check.cgi stack buffer overflow. [2022-06-14]. (原始内容存档于2021-08-17).  维基共享资源上的相关多媒体资源:网件 美國網站 (页面存档备份,存于互联网档案馆)

通用缺陷列表

[2019-03-11]. (原始内容存档于2021-04-14).  The Mitre Corp. CWE-121: Stack-based Buffer Overflow. [2019-03-11]. (原始内容存档于2021-04-14).  CWE Community. CWE-Compatible

QuickTime

(原始内容存档于2008-11-03).  Apple QuickTime RTSP Content-Type header stack buffer overflow.. [2007-12-06]. (原始内容存档于2007-12-08).  维基共享资源中相关的多媒体资源:QuickTime

Zig

Hello Hello Zig 软件基金会(ZSF)有一个非常活跃的贡献者社区,并且仍处于早期发展阶段。 尽管如此,2024 年的一项 Stack Overflow 调查发现,Zig 软件开发人员的平均年薪为 103,000 美元,使其成为薪资最高的编程语言之一。 然而,只有 0.83% 的受访者表示他们精通

分支預測器

2007-10-30 [2008-08-20]. (原始内容存档于2008-04-17).  Yee, Alexander. What is Branch Prediction? - Stack Overflow Example. [2012-09-09]. (原始内容存档于2016-06-22). 

并行计算

title = What's the opposite of "embarrassingly parallel"?  | website = StackOverflow  | access-date = 2018-05-10 }} {{cite web  | url = https://stackoverflow