代码安全审查_在笔测试和安全代码审查之间进行选择

代码安全审查

安全代码审查( 从团队外部邀请人员来审查/审核安全漏洞代码 )和应用程序笔测试( 再次,从团队外部引入安全专家来测试系统 )都是安全的重要实践软件开发程序。 但是,如果您只能执行其中之一,或者您的时间有限或预算有限,应该选择哪一种? 哪种方法会发现更多问题,并为您提供有关应用程序和团队安全性的更多信息? 什么会给您带来更多收益呢?

笔测试和代码审查是非常不同的事情 –它们需要您进行不同的工作,它们会发现不同的问题并为您提供不同的信息。 而且成本也可以相差很大。

白盒/黑盒

我们都知道白盒和黑盒之间的区别。

因为它们可以在框中查看,所以代码审阅者可以将高风险代码归零:公共接口,会话管理和密码管理,访问控制以及加密和其他安全性,处理机密数据的代码,错误处理,审计。 通过扫描代码,他们可以检查应用程序是否容易受到常见的注入攻击(SQL注入,XSS等),并且可以寻找定时炸弹和后门(实际上是无法从外部进行测试)和其他可疑事件的码。 他们可能会发现并发和时序问题以及其他代码质量问题,这些问题无法利用,但应以任何方式解决。 优秀的审阅者在努力理解系统及其设计并提出问题时,还可以指出设计错误,错误的假设和不一致之处,而不仅仅是编码错误。

笔测试器依靠扫描仪和攻击代理以及其他工具来帮助他们寻找许多相同的常见应用程序漏洞(SQL注入,XSS等)以及运行时配置问题。 当他们入侵系统时,他们将发现信息泄露和错误处理问题。 他们可以测试会话管理,密码处理和用户管理,身份验证和授权绕过漏洞中的问题,甚至可以发现业务逻辑缺陷,尤其是在熟悉的工作流(如在线购物和银行功能)中。 但是,因为他们看不见盒子内部,所以他们-和您-不知道它们是否覆盖了系统的所有高风险部分。

您已经独自进行的安全测试类型可能会影响笔测试或代码审查是否更有用。 您是否正在使用黑盒动态漏洞扫描工具或服务定期测试您的Web应用程序? 还是作为持续集成的一部分运行静态分析检查?

手动笔测试将发现许多与自动动态扫描仪相同的问题,甚至更多。 一个好的静态分析工具至少会发现一些与手动代码审查相同的错误-许多审查者使用静态分析源代码扫描工具来寻找难得的成果(常见的编码错误,不安全的功能,硬编码的密码) ,简单SQL注入,…)。 表面测试或检查所涉及的范围可能不超过运行这些自动扫描工具之一并为您检查和鉴定结果的人员。

因此,如果您一直依赖于动态分析测试,那么有必要进行代码审查来查找尚未为自己测试的问题。 而且,如果您一直在使用静态分析工具扫描代码,那么笔测试可能会更有可能发现其他问题。

成本与麻烦

笔测试易于设置和管理。 即使您做得正确 ,并确保向笔测试团队解释该应用程序的主要功能,并逐步遍历整个体系结构,并为他们提供所有访问权限,即使您做对了 ,也不需要团队花费大量时间和精力。他们需要。

通常,代码审查比笔测试昂贵,并且需要更多的时间和精力–您不能只给局外人一份代码副本,并期望他们自己解决所有问题。 双向都需要更多的握力。 您握着他们的手,解释架构,代码的结构以及系统的工作方式以及合规性和风险驱动因素,并回答有关设计和技术的问题; 他们会牵着你的手,耐心地解释他们发现的东西以及如何解决它,并与您的团队合作,以了解每个发现是否值得解决,消除误报和其他误解。

这个手很重要。 您希望从审阅者的时间中获得最大价值-您希望他们专注于高风险代码,而不会迷失在切线上。 而且您想确保您的团队了解审阅者发现的内容以及每个错误的重要性以及应如何解决。 因此,您不仅需要有人帮助审稿人,而且他们应该是您最好的人。

知识产权和机密性以及其他法律问题很重要,尤其是对于代码审查而言-您正在让外部人员查看代码,并且您希望保持透明以确保审查全面,但同时也可能会冒着冒风险的风险。秘制酱。 扎实的合同以及与信誉良好的公司合作将最大程度地减少这些担忧,但是您可能还需要严格限制审阅者可以看到的代码。

在笔测试和代码审查之间进行选择的其他因素

系统的类型及其体系结构也会影响您的决策。

很容易找到在测试Web门户和在线商店方面有丰富经验的笔测试员-他们将熟悉通用体系结构并识别常见的功能和工作流程,并且可以依靠现成的扫描和模糊测试工具帮助他们测试。 这已成为一种基于商品的服务,您可以期望以合理的价格完成一份好工作。

但是,如果您要使用专有的系统间API或专有的客户端来构建应用程序,或者您是在高度专业化的技术领域中工作,则很难找到合格的笔测试仪,而且成本更高。 他们将需要更多的时间并帮助他们了解体系结构和应用程序,一切如何融合以及在测试中应关注的重点。 而且他们将无法使用标准工具,因此他们将不得不自己滚动一些东西,这将花费更长的时间并且可能效果不佳。

在这些情况下,代码审查可能会告诉您更多信息。 但是审阅者必须精通您的应用程序所使用的语言–并且,要做一个透彻的工作,他们还应该熟悉您所使用的框架和库。 由于并非总能找到具有适当知识和经验的人,因此您可能最终会付钱给他们以在工作中学习,而很大程度上取决于他们的学习速度。 当然,如果您使用的许多第三方代码没有源代码,那么笔测试确实是您的唯一选择。

您是否处于开发的后期,准备发布? 此时,您最关心的是验证正在运行的系统的安全性,包括运行时配置,并且,如果您确实处于开发后期,则找到任何可利用的高风险漏洞,因为您将有足够的时间来修复这些漏洞。 这是很多笔测试的地方。

如果您处于开发的初期,最好选择代码审查。 笔测试没有太大意义(您没有足够的系统来进行实际的系统测试),并且代码审查可以帮助团队为他们必须编写的其余代码设定正确的路径。

从结果中学习和使用

除了查找漏洞并帮助您评估风险之外,代码审查或笔测试都提供学习机会–开发团队有机会了解和改善他们编写和测试软件的方式。

笔测试可以告诉您哪些漏洞是可以利用的-开发人员不能说问题不是真实的,因为外部攻击者可以找到问题,并且攻击者可以解释发现漏洞的难易程度,发现了什么?真正的风险是。 开发人员知道他们必须修复某些东西–但尚不清楚在哪里以及如何修复它。 目前尚不清楚他们如何检查是否已正确修复。 与大多数错误不同,开发人员没有简单的步骤可以自己重现错误:他们必须依靠笔测试器来重新进行测试。 它效率低下,并且没有很好的紧密反馈循环来加强理解。

笔测试的另一个缺点是,它们是在开发的后期完成的,通常很晚。 除了将结果分类并修复在系统上线之前必须修复的所有内容,团队可能没有时间做任何事情。 开发人员没有时间反思,学习和整合他们所学到的知识。

笔测试人员和开发人员之间也可能存在沟通差距。 在漏洞利用和攻击方面,大多数笔测试人员都像黑客一样思考和交谈。 或者他们像审核员一样讨论,关注合规性,将其发现映射到漏洞分类法和风险管理框架,这对开发人员没有任何意义。

代码审阅者像程序员一样思考和交谈,这使得代码审阅更加容易学习–只要审阅者和您团队中的开发人员有时间共同努力并理解发现。 代码审阅者可以引导开发人员找出问题所在,解释其原因和解决方法,并立即以开发人员可以理解的方式回答开发人员的问题,这意味着可以更快地解决问题并正确解决问题。

您不会通过代码审查或笔测试找到一个应用程序中的所有安全漏洞,甚至也不会通过两者都找到 (尽管您会有更大的机会)。 如果我只能做一个或另一个,除了所有其他因素,我会选择进行代码审查。 审查将需要更多的工作,并且可能会花费更多,并且可能甚至找不到那么多的安全漏洞。 但是从长期来看,您将从代码审查中获得更多价值。 开发人员将学到更多和更快的知识,希望有足够的知识来了解如何独自寻找和解决安全问题,更重要的是,首先要避免这些问题。


翻译自: https://www.javacodegeeks.com/2013/06/choosing-between-a-pen-test-and-a-secure-code-review.html

代码安全审查

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值