今天在看《improve memery-access analysis for x86 executables》时,发现作者给了一个很好的例子,来说明“what you see is not what you execute!”
例子:memset(password, ‘ ’, len);
free(password);
这两行代码,第一行是将指针password指向的内存块清零,然后第二行将这个内存块放入空闲队列。但是真正在执行的时候,编译优化中的无用代码删除算法会认为:给password指针赋值“0”,在后面没有被用到,是无用的代码,因此就会把这个清零的动作删除。这就导致password指向的内存块还没有清零就被放入到了空闲队列,这对存放口令这样敏感信息的程序来说显然是不安全的,引发了程序自身的脆弱性。而发现这样的脆弱性只看源代码是不能发现的,只有在分析可执行代码时才能发现。
这个例子充分说明了分析可执行代码对软件脆弱性分析的重要性!
分析源代码的工具对这些bugs、脆弱性代码以及恶意代码无能为力,必须借助于基于可执行代码的分析工具,因为只有对可执行代码进行分析,才能真正了解程序执行时的情况。
源码分析工具可以发现在所有硬件平台上都可能发生的脆弱性代码,可执行代码分析工具则是发现在特定平台上执行时出现的脆弱性代码。
https://blog.sciencenet.cn/blog-544280-426268.html
上一篇:
基于剖析的数据类型重构思想总结下一篇:
我试用了noteexpress和endnote