- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
防止缓冲区溢出攻击的思路是什么?我听说过 Stackguard,但到目前为止这个问题是通过应用 stackguard 还是与其他技术相结合来完全解决的?
热身之后,作为一名经验丰富的程序员
Why do you think that it is so difficult to provide adequate defenses for buffer overflow attacks?
编辑:感谢您的所有回答并保持安全标记处于事件状态:)
最佳答案
您可以做很多事情。排名不分先后...
首先,如果您的语言选择在允许直接内存访问的语言和不允许直接内存访问的语言之间平均分配(或接近平均分配),请选择不允许的语言。也就是说,使用 Perl、Python、Lisp、Java 等而不是 C/C++。这并不总是一个选择,但它确实有助于防止您搬起石头砸自己的脚。
其次,在可以直接访问内存的语言中,如果有可以为您处理内存的类(例如 std::string),请使用它们。与用户较少的类(class)相比,更喜欢练习良好的类(class)。更多的使用意味着更简单的问题更有可能在常规使用中被发现。
第三,使用 ASLR 和 DEP 等编译器选项。使用您的应用程序提供的任何与安全相关的编译器选项。这不会防止缓冲区溢出,但有助于减轻溢出的影响。
第四,使用静态代码分析工具(例如 Fortify、Qualys 或 Veracode 的服务)来发现您无意编码的溢出。然后修复发现的问题。
第五,了解溢出是如何工作的,以及如何在代码中发现它们。你所有的同事也应该学习这一点。制定一项组织范围内的政策,要求人们接受关于超限(和其他漏洞)如何工作的培训。
第六,将安全代码审查与常规代码审查分开进行。定期进行代码审查可确保代码有效、通过功能测试并符合编码策略(缩进、命名约定等)。安全代码审查是专门、明确且仅旨在查找安全问题的。尽可能对所有代码进行安全代码审查。如果您必须确定优先级,请从关键任务的东西开始,从可能出现问题的地方开始(跨越信任边界的地方(了解数据流图和威胁模型并创建它们),使用解释器的地方,特别是传递用户输入的地方/存储/检索,包括从数据库检索的数据)。
第七,如果你有钱,请聘请像Neohapsis、VSR、Matasano等好的顾问来审查你的产品。他们会发现不仅仅是超支,而且您的产品也会因此而变得更好。
第八,确保您的 QA 团队了解超限是如何工作的以及如何对其进行测试。 QA 应该有专门设计的测试用例来发现所有输入中的超限。
第九,进行模糊测试。模糊测试在许多产品中发现了数量惊人的溢出。
编辑添加:我误读了这个问题。标题说“有什么技巧”,但文字说“为什么很难”。
这很难,因为很容易犯错误。小错误(例如相差一错误或数字转换)可能会导致溢出。程序是复杂的野兽,具有复杂的交互。哪里有复杂性,哪里就会出现问题。
或者,把问题转回到你身上:为什么编写无错误的代码如此困难?
关于security - 缓冲区溢出攻击的防范技术有哪些?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3705547/
我正在使用 MongoDB作为我的数据库,并且作为新手后端开发人员,删除整个数据库/集合的轻松程度确实困扰着我。 只需输入 db.collection.remove()从该集合中删除所有记录! 我知道
我在项目中使用 Require.js。如果您正在定义一个模块,变量 define 将被添加到全局命名空间。 最近我有一个变量名冲突[但奇怪的是,只在 Safari 中],因为有一个 ID 为 defi
我是一名优秀的程序员,十分优秀!