几个月前,我读了一本关于安全实践的书,并提出了以下方法来保护我们的课程免受覆盖,例如:溢出等:
至少这是我记得的。我正在编写文件encryptor
以用于学习目的,我正在尝试使此代码异常安全。
那么,在哪些情况下它是有用的,什么时候我应该使用这种方法,或者这是完全无用的东西值得信赖?它取决于编译器还是操作系统?
PS:我忘记了这篇文章中提到的那本书的名字,所以我不能再检查一下,如果你们中的任何一个人知道它是哪一个,请告诉我。
答案 0 :(得分:1)
您所描述的内容听起来像Canary,但在您的程序中,而不是编译器。默认情况下,在使用gcc或g ++时(除了一些其他缓冲区溢出对策),这通常是打开的。
如果你正在对你的班级进行可变操作,并且你想确保你没有副作用,我不知道是否有一个神奇的数字是非常有用的。为什么在有更多可能成功的方法时依靠自制有效性检查呢?
Checksums:我认为散列未加密的文本并将其添加到加密文件的末尾更有用。解密时,删除哈希值并将哈希值(解密文本)与应该的哈希值进行比较。
我认为大多数(如果不是全部)广泛使用的加密器/解密器存储某种校验和以验证数据是否未发生变化。
答案 1 :(得分:1)
这种类型的金丝雀将部分保护您免受特定类型的溢出攻击。每次运行程序时,都可以通过随机化canary值来使其更加健壮。
如果您担心缓冲区溢出攻击(如果您曾经解析用户输入,那么您应该这样做),那么请继续执行此操作。每次检查你的金丝雀的速度可能不会花费太多 。总会有其他方法来攻击您的程序,甚至可能会出现麻烦的缓冲区溢出攻击,但这是一种便宜的措施,因此可能值得添加到您的课程中。