如何预防缓冲区溢出攻击?我听说过Stackguard,但是仅仅应用Stackguard技术是否完全解决了这个问题?
作为一名经验丰富的程序员,你认为为何为缓冲区溢出攻击提供足够的防御措施如此困难?
编辑:感谢所有回答并保持安全标签活跃 :)
如何预防缓冲区溢出攻击?我听说过Stackguard,但是仅仅应用Stackguard技术是否完全解决了这个问题?
作为一名经验丰富的程序员,你认为为何为缓冲区溢出攻击提供足够的防御措施如此困难?
编辑:感谢所有回答并保持安全标签活跃 :)
没有安全的万灵药:您必须仔细设计、仔细编码、进行代码审查、测试,并安排及时解决漏洞。
幸运的是,缓冲区溢出已经是一个解决了很长时间的问题。大多数编程语言都有数组界限检查,并且不允许程序随意创建指针。只需不使用少数几个允许缓冲区溢出的语言,如C和C++即可。
当然,这适用于整个软件堆栈,从嵌入式固件¹到您的应用程序。
¹ 对于那些不熟悉涉及技术的人,此漏洞可以允许网络上的攻击者唤醒并控制关闭的计算机。(典型的防火墙配置会阻止有问题的数据包。)
缓冲区溢出漏洞是可以预防的。如果程序员是完美的,就不会有未经检查的缓冲区,因此也不会有缓冲区溢出漏洞。然而,程序员并不完美,未经检查的缓冲区仍然大量存在。
只需要一项技术: 不要相信来自外部来源的数据。
在代码进入生产之前,您可以运行分析器来帮助您找到问题。我们的内存安全检查器将通过仪器化您的代码以在错误发生时监视错误,从而在C代码中找到缓冲区溢出、错误指针故障、数组访问错误和内存管理错误。如果您希望C程序对此类错误不受影响,您可以简单地使用内存安全分析器的结果作为您的代码的生产版本。