【TechTarget中国原创】问:手动测试缓冲器溢出的最佳方式是什么?
答:检查程序中的缓冲器溢出有两种方式。首先,应该在编译代码前分析检查源代码。执行这一过程可以使用很多工具。我最喜欢的是Fortify Software Inc.的 Rough Auditing Tools for Security (RATS)和Cigital Inc.的 ITS4。两者都可以免费下载。还可以使用微软Visual C++的‘/analyze’编译器。上面提到的工具的检查都不仅限于缓冲器溢出,而是还可以检查其他的缺陷,例如格式字符串漏洞和堆栈溢出。
第二种测试缓冲器溢出的方式是查看编译代码。很长时间以来,很到安全专家都相信检查漏洞的唯一方式是测试程序的源代码。这是不正确的。有很多工具都可以检查编译器的低层汇编代码中的漏洞。他们还可以利用fuzzing技术,这种技术可以通过输入大量的大量的任意数据并查看是否存在错误来测试软件。
为了检测汇编代码中的编译代码图,可以使用Metasploit project中的msfpescan和mfselfscan工具。
而fuzzing技术中可以查看SPIKE、BreakingPoint Inc.的测试工具和MuDynamic Inc.的分析产品等工具。Spike是免费的,而Breaking Point和Mu的工具是商业的。如果应用安全检查时你工具的延伸,我强烈建议你考虑商业产品。
很多fuzzing产品把输入的数据分割测试应用崩溃。为了手动执行,可以查找应用中的输入并放入尽可能多的字符。如果崩溃了,需要和开发人员通过检测应用和系统登录讨论哪里出错了。很显然,需要在测试前确保有行为权限。
最后问题要比单纯地检查缓冲期溢出广泛的多。缓冲器溢出是因为开发人员没有验证应用中的输入数据。对如输入到应用中的每一个数据,都应该对可以接受的数字和字符类型作限制。验证可以接受的数据的输入是不被允许的。例如,对“State”的域请求不需要允许*、$、@或者^。不管缓冲器溢出是否存在,它都应该设置为只允许标准的Aa-zZ字符。