白盒测试之源代码审计

白盒测试

白盒测试又称为结构测试,它需要了解程序内部的设计结构及具体的代码实现过程,并设计相应的测试用例对程序进行调试,程序是否有bug。与侧重于功能的黑盒测试相反,白盒测试方法的目标是对软件的内部结构、及其背后的逻辑进行分析。

源代码审计

源代码审计是指检查源代码中的安全缺陷,检查程序源代码是否存在安全隐患,或者有编码不规范的地方,通过自动化工具或者人工审查的方式,对程序源代码逐条进行检查和分析,发现这些源代码缺陷引发的安全漏洞,并提供代码修订措施和建议。

在这里插入图片描述

源代码审计常常作为一种白盒测试应用于网络安全渗透中。不同于黑盒测试的渗透,源代码审计代码可见,要求安全人员运用专业知识,以及源代码分析与调试专用工具,在弄清软件的内部结构和代码细节的基础上,逐步检查语句和条件、代码的路径、数据流、以及各种有效或无效的输入,对整个站点或程序的代码进行安全测试,挖掘程序代码漏洞。

但是此类方法比较耗时,并且要求测试人员具有强大的编程能力,能够对所测站点及软件进行全面了解,并且可以访问到所有的源代码、以及体系架构的相关文档。否则,测试人员将无法设计出适当的测试用例。

接下来,我们从五个角度详细讲解一下:

一、代码安全测试简介

代码安全测试是从安全的角度对代码进行的安全测试评估。 结合丰富的安全知识、编程经验、测试技术,利用静态分析、动态跟踪和人工审核的方法寻找代码在架构和编码上的安全缺陷,在代码形成软件产品前将业务软件的安全风险降到最低。

二、代码漏洞产生的原因
  1. 变量控制不严(输入有害原理)。
  2. 变量带入的有利用价值的函数中(进入函数的变量有害原理)。
    当然漏洞的利用效果取决于最终函数的功能。

三、代码安全测试方法

  • 人工审核
    既能解决内部问题也能解决外部问题。这也是目前最有效率的解决方案,并且在理论上手工代码审核是非常有效的,但人工审核的效率不高,所以我们会采用自动化分析工具辅助人工的方式来提高审核效率。

    这里给大家推荐一款小巧实用的文件检索工具——XSearch,它能够快速检索出包含搜索的关键字的文件,节省人工查找时间,提高人工审计的效率。另外再结合windows自带的快捷搜索方式Ctrl+F,可以快速定位关键函数。

  • 静/动态分析工具结合
    原理:通过一组全面规则、测试机制和方针在软件开发过程、测试中发现软件的安全缺陷。

    使用工具:

    • Seay PHP(静态分析)
      免费!免费!免费!重要的事情说三遍。。。
      它支持关键字扫描和综合扫描,会对静态分析的可能存在漏洞的扫描结果进行红色标注。但同样它也会存在一些误报与漏报,因此进行人工审计是必不可少的环节!而且它*只针对.php代码 *,在适用范围上具有很大局限性。
    • HP_Fortify(静态分析+动态跟踪)
      这款工具我想会成为大多数从事代码审计人员的最爱!它所分析的代码漏洞整合性强,对每个漏洞的成因与解决都有详细说明,非常适合职场小白。
      然而因其功能强大,其软件也是费用高昂,推荐大家找找绿色软件(可私信我)。
      软件使用可以看这里:HP Fortify使用方法
四、代码审计通用思路
  1. 通读全文代码,从功能函数代码开始阅读,例如include文件夹下的common_fun.php,或者有类似关键字的文件。
  2. 看配置文件,带有config关键字的文件,找到mysql.class.php文件的connect()函数,查看在数据库连接时是否出现漏洞。
  3. 跟读首页文件index.php,了解程序运作时调用了哪些函数和文件。 以index.php文件作为标线,一层一层去扩展阅读所包含的文件,了解其功能,之后进入其功能文件夹的首页文件,进行扩展阅读。
五、审计工具的局限性

工具不是万能的,它只是起到了提高效率的辅助作用,在一定程度上具有很大的局限性:

  • 工具本身存在一定量的误报或者漏报。
  • 扫描结果需要大量人工确定甄别。
  • 使用工具缺乏规范化的编码规范。
  • 如用多种语言开发的软件,则需单独分析。
  • 不能自动收集常见的代码安全问题。

如果这篇文章对你有所帮助,希望大家多多支持,会持续跟新!

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
白盒测试是一种软件测试方法,它基于对被测试代码的内部结构和实现细节的了解来设计测试用例。在Java中进行白盒测试时,可以通过以下几个方面来介绍: 1. 单元测试:单元测试是白盒测试的一种常见形式,它针对代码中的最小单元(如方法、函数)进行测试。在Java中,可以使用JUnit等单元测试框架来编写和执行单元测试用例。 2. 代码覆盖率:代码覆盖率是衡量白盒测试效果的指标之一,它表示被测试代码中被测试到的部分占总代码量的比例。常见的代码覆盖率指标包括语句覆盖率、分支覆盖率和路径覆盖率等。在Java中,可以使用工具如JaCoCo来计算代码覆盖率。 3. 控制流测试:控制流测试是一种白盒测试技术,它通过测试不同的控制流路径来检测代码中的错误和缺陷。在Java中,可以使用条件语句(如if-else、switch)和循环语句(如for、while)来设计控制流测试用例。 4. 数据流测试:数据流测试是一种白盒测试技术,它关注数据在程序中的传递和处理过程。在Java中,可以通过设计测试用例来覆盖不同的数据流路径,包括变量的定义、赋值、使用和传递等。 5. 异常处理测试:异常处理是Java中的重要特性之一,它可以帮助程序在出现错误或异常情况时进行适当的处理。在白盒测试中,可以设计测试用例来验证代码对各种异常情况的处理是否正确。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值