白盒测试
白盒测试又称为结构测试,它需要了解程序内部的设计结构及具体的代码实现过程,并设计相应的测试用例对程序进行调试,程序是否有bug。与侧重于功能的黑盒测试相反,白盒测试方法的目标是对软件的内部结构、及其背后的逻辑进行分析。
源代码审计
源代码审计是指检查源代码中的安全缺陷,检查程序源代码是否存在安全隐患,或者有编码不规范的地方,通过自动化工具或者人工审查的方式,对程序源代码逐条进行检查和分析,发现这些源代码缺陷引发的安全漏洞,并提供代码修订措施和建议。
源代码审计常常作为一种白盒测试应用于网络安全渗透中。不同于黑盒测试的渗透,源代码审计代码可见,要求安全人员运用专业知识,以及源代码分析与调试专用工具,在弄清软件的内部结构和代码细节的基础上,逐步检查语句和条件、代码的路径、数据流、以及各种有效或无效的输入,对整个站点或程序的代码进行安全测试,挖掘程序代码漏洞。
但是此类方法比较耗时,并且要求测试人员具有强大的编程能力,能够对所测站点及软件进行全面了解,并且可以访问到所有的源代码、以及体系架构的相关文档。否则,测试人员将无法设计出适当的测试用例。
接下来,我们从五个角度详细讲解一下:
一、代码安全测试简介
代码安全测试是从安全的角度对代码进行的安全测试评估。 结合丰富的安全知识、编程经验、测试技术,利用静态分析、动态跟踪和人工审核的方法寻找代码在架构和编码上的安全缺陷,在代码形成软件产品前将业务软件的安全风险降到最低。
二、代码漏洞产生的原因
- 变量控制不严(输入有害原理)。
- 变量带入的有利用价值的函数中(进入函数的变量有害原理)。
当然漏洞的利用效果取决于最终函数的功能。
三、代码安全测试方法
-
人工审核
既能解决内部问题也能解决外部问题。这也是目前最有效率的解决方案,并且在理论上手工代码审核是非常有效的,但人工审核的效率不高,所以我们会采用自动化分析工具辅助人工的方式来提高审核效率。这里给大家推荐一款小巧实用的文件检索工具——XSearch,它能够快速检索出包含搜索的关键字的文件,节省人工查找时间,提高人工审计的效率。另外再结合windows自带的快捷搜索方式Ctrl+F,可以快速定位关键函数。
-
静/动态分析工具结合
原理:通过一组全面规则、测试机制和方针在软件开发过程、测试中发现软件的安全缺陷。使用工具:
- Seay PHP(静态分析)
免费!免费!免费!重要的事情说三遍。。。
它支持关键字扫描和综合扫描,会对静态分析的可能存在漏洞的扫描结果进行红色标注。但同样它也会存在一些误报与漏报,因此进行人工审计是必不可少的环节!而且它*只针对.php代码
*,在适用范围上具有很大局限性。 - HP_Fortify(静态分析+动态跟踪)
这款工具我想会成为大多数从事代码审计人员的最爱!它所分析的代码漏洞整合性强,对每个漏洞的成因与解决都有详细说明,非常适合职场小白。
然而因其功能强大,其软件也是费用高昂,推荐大家找找绿色软件(可私信我)。
软件使用可以看这里:HP Fortify使用方法
- Seay PHP(静态分析)
四、代码审计通用思路
- 通读全文代码,从功能函数代码开始阅读,例如include文件夹下的common_fun.php,或者有类似关键字的文件。
- 看配置文件,带有config关键字的文件,找到mysql.class.php文件的connect()函数,查看在数据库连接时是否出现漏洞。
- 跟读首页文件index.php,了解程序运作时调用了哪些函数和文件。 以index.php文件作为标线,一层一层去扩展阅读所包含的文件,了解其功能,之后进入其功能文件夹的首页文件,进行扩展阅读。
五、审计工具的局限性
工具不是万能的,它只是起到了提高效率的辅助作用,在一定程度上具有很大的局限性:
- 工具本身存在一定量的误报或者漏报。
- 扫描结果需要大量人工确定甄别。
- 使用工具缺乏规范化的编码规范。
- 如用多种语言开发的软件,则需单独分析。
- 不能自动收集常见的代码安全问题。
如果这篇文章对你有所帮助,希望大家多多支持,会持续跟新!