借助许多内置(非用户添加)的安全措施,缓冲区溢出漏洞仍然是一种实用的入侵方法吗?
避免缓冲区溢出的主要安全措施是什么?
绝对地。检查您的操作系统中修复的错误,您会看到已修补的缓冲区溢出。有关示例,请参见http://support.apple.com/kb/HT5130 。
操作系统和编译器做了很多尝试来防止缓冲区溢出,但它们肯定仍然存在问题。
避免缓冲区溢出的最简单方法是首先避免使用 C 等语言来强制您管理缓冲区(及其大小)。如果很可能您无法避免使用类 C 语言,那么有很多方法可以帮助缓解潜在问题:
这是一个开始:http ://en.wikipedia.org/wiki/Buffer_overflow_protection
缓冲区溢出仍然是闯入本机应用程序的一种常见方式,尽管我怀疑由于 ASLR 和 DEP 等 OS 保护机制以及 GS 等编译器保护机制,实际攻击性地利用它们进行实际入侵的人数仍然很少饼干(堆栈金丝雀)。
如今,堆栈溢出通常无法利用,因为现代编译器的进步意味着在函数执行期间检测到大多数(但不是全部)堆栈溢出会导致进程崩溃,而不是让攻击者执行。
堆溢出非常容易被利用,即使在现代操作系统上也是如此,并且必须始终将其视为关键。
不幸的是,对于任何给定的特定堆栈或堆溢出是否实际上可以利用并没有硬性规定,但是从防御的角度来看,所有编译器和操作系统缓解措施都只是缓解措施。它们会减慢攻击者的速度而不是阻止它们,如果您是安全研究人员,您需要将堆栈溢出和堆溢出都报告为严重问题,而作为开发人员,您需要立即修复它们。