安全性测试??Buffer overrun
作者:网络转载 发布时间:[ 2013/7/15 10:33:48 ] 推荐标签:
安全性测试——Buffer overrun
什么是BO?
BO的概念很容易理解,只需要C语言的基本知识足够了。申请了一段内存,而填入的数据大于这块内存,填入的数据覆盖掉了这段内存之外的内存了。比如,
void foo(char* input)
{
char buf[100];
strcpy(buf, input);
}
没有进行长度检查,如果黑客通过操作input,可能重写返回地址,从而产生安全性问题。
为什么BO是一个安全问题?
当copy的数据大于在stack声明的buffer,导致buffer被overwritten,从而产生基于stack的buffer overrun。在stack声明的变量位于函数调用者的返回地址,返回地址被攻击者重写,利用BO执行恶意代码从而控制计算机。
X86 EBP Stack Frame
Highest address
Arguments
Return address
Previous EBP
Saved rigisters
local storageLowest address
在C语言中,当调用一个函数的时候,在汇编或者机器码的level是如何实现的呢?假设调上边的函数foo的时候,程序的stack将会是下边图表的样子。首先,输入参数会放到栈中去,然后是这个函数执行完的下一个指令的地址,也是return address, 然后是EBP,再然后是这个函数的本地变量的内存空间。比如这个函数申请了100个字节的空间。当BO发生的时候,数据会覆盖掉buf之后的内存,关键的部分是return address可以被覆盖。那么黑客可以把return address的值修改成这个buf的一个地址,比如起始地址buf[0]的地址,而这个buf里边填入黑客自己的代码。这样当这个函数退出的时候,程序会执行return address所指定的代码,也是黑客的代码了。
安全性测试
在高的层次上,安全漏洞发掘方法可被分为白盒、黑盒和灰盒测试方法三大类。测试者可以获得的资源决定了这三种方法的差别。白盒测试需要使用所有可用的资源,包括源代码,而黑盒测试只访问软件的输入和观察到的输出结果。介于两者之间的是灰盒测试,它在黑盒测试的基础上通过对可用的二进制文件的逆向工程而获得了额外的分析信息。
白盒测试包括各种不同的源代码分析方法。可以人工完成也可以通过利用自动化工具完成,这些自动化工具包括编译时检查器、源代码浏览器或自动源代码审核工具。
灰盒测试定义是首先它包括了黑盒测试审核,此外还包括通过逆向工程(RE)获得的结果,逆向工程也被称为逆向代码工程(RCE)。分析编译后得到的汇编指令能够帮助阐明类似的故事,但是要付出更多的努力。在汇编代码层次上进行安全评估而不是在源代码层次上进行安全评估,这种安全评估典型地被称作二进制审核(binary auditing)。二进制审核也被称为是一种”从里向外”的技术:研究者首先识出反汇编结果中令其感兴趣的可能存在的漏洞,然后反向追溯到源代码中以确定漏洞是否可以被别人所利用。
调试器能够显示应用程序正在运行时CPU寄存器的内容和内存状态。Win32平台下的流行调试器包括OllyDbg18,其运行时的一个屏幕快照。此外还有Microsoft WinDbg(也被人称做”wind bag”)19。WinDbg是Windows软件调试工具包20中的一部分,可从Microsoft的网站上免费下载。OllyDbg是一个由Oleh Yuschuk开发的调试器,用户友好性稍好于WinDbg。这两个调试器都允许用户创建自定制的扩展功能组件,有许多第三方插件可用于扩展OllyDbg的功能21。UNIX环境下也有各种各样的调试器,GNU Project Debugger22(GDB)是流行的也是容易被移植的调试器。GDB是一个命令行调试器,许多UNIX/Linux产品中都包含这个调试器。
在执行黑盒测试时,源代码是不可用的,通过黑盒测试来执行。可以考虑结合模糊测试来进行。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11