应用软件安全代码审查指南(新型网络安全人才培养丛书)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.5 我们不能破解自己的安全性

渗透测试通常是一种黑盒测试,并且在每次源代码发布(或生成)时被不断重复执行。许多持续集成工具(如Jenkins和Hudson)允许重复性测试,包括针对已完成开发和部署版本的产品运行的自动化渗透测试。随着源代码的变更,一个没有维护的渗透测试结果会随着时间的推移变得越来越没有价值。同样,还有隐私、合规性、稳定性和可用性问题,一般无法通过渗透测试解决,但可以得到安全代码审查的覆盖。例如,在云环境中的数据信息泄露可能不会通过渗透测试被发现,甚至不被允许。因此,渗透测试应该被看作组织机构掌握的一种重要工具,但其独立使用是无法确保软件产品的安全性的。

在软件项目中确定漏洞的常用方法如下:

(1)使用自动化工具对源代码库或模块执行源代码扫描,查找到那些被视为有可能导致安全漏洞的字符串模式。

(2)使用渗透测试工具执行自动化的渗透测试(黑盒或灰盒),该工具安装在部署了被测试Web站点的网络中,并对Web站点的URL运行一组预定义测试。

(3)手动渗透测试,同样使用工具,但由具有相关知识的渗透测试人员执行更加复杂的测试。

(4)由安全专家执行安全代码审查。

应该指出的是,没有一种方法能够识别一个软件项目可能存在的所有漏洞。然而,一种纵深防御方法可减少在软件开发过程中包含的未知风险。表2-1、表2-2和表2-3比较了对不同场景检测漏洞的多种方法。

表2-1 针对应用程序高层业务主题的漏洞检测方法能力评估

表2-2 针对CWE/SAN Top 25的漏洞检测方法能力评估

表2-1比较了涵盖高级别主题(如一般的漏洞、隐私、合规性等)的方法能力。表2-2根据 SAN/CWE Top 25的漏洞列表比较了不同的方法。表2-3根据OWASP Top 10的风险列表比较了不同的方法。这些表假设一套相同功能的代码扫描和渗透测试工具,同时还假设进行安全代码审查的人具有相关知识和技能以发现列举的漏洞。在这些表中,关键信息如下。

G代表方法能力好:方法有找到漏洞的好机会。

S代表方法能力一般:方法有机会找到一些漏洞,但不是一个好的选择。

X代表方法能力差:方法有极少机会或没有机会找到列出的漏洞。

表2-3 针对OWASP Top 10的安全风险检测方法能力评估

对不同类型应用软件扫描的类型模式是一致的,而在这方面计算机扫描比人工扫描更有效。在这种情况下,扫描工具可以在大批量的代码中自动搜寻漏洞,并发挥很大的作用。