logo Parasoft 行业资讯(二) 我也要发布文档

有益于质量和安全性的6条测试技巧


最近,我在LinkedIn上阅读了一篇帖子,其中有人问了几个静态分析安全厂商之间的区别。一个人,毫无疑问是供应商,回答说他们的解决方案更好,因为尽管其他公司专注于质量和安全性,但他们严格执行安全性。

当然,这是一个荒谬的说法。也许这种想法表明了当前行业中应用程序安全的猖ramp问题。例如,尝试运行其安全组的组织与SDLC的其余部分完全分开(包括开发和测试工作)。在此模型中,安全团队运行自己的测试,主要是尝试破坏软件,然后将安全错误反馈给开发团队。换句话说,尝试在其代码中测试安全性。我可以向您保证,这仅比测试代码质量有效。

当然,这种安全测试是必要的,但仅仅是不够的。虽然破坏软件确实很有用,但是依靠它作为提高安全性的方法会导致在太晚的时候发现错误,并最终将其抑制。尤其是,诸如日程安排之类的根源问题,如不适当的框架和算法,已被扫地出门,因为日程安排赢得了重写代码和发布版本之间的冲突。

在上面我提到的Linkedin评论中,供应商声称自己的软件更好,但却没有说出任何关于如何更好的理由,这实际上是在误导一个毫无戒心的潜在客户。我并不是要选择任何特定的工具供应商,尤其是因为我为一个供应商工作。但是,我对这种稻草人的论点感到沮丧,这些论点给人以卖蛇油的感觉。在这种情况下,供应商的产品确实可能具有有趣的独特功能,但给我们留下的印象是安全性与质量在某种程度上有着神奇的区别,这降低了我们对应用程序安全性的理解,使我们所有人的安全性降低了一点。

必须将安全性视为质量,并且质量必须基于成熟的工程实践,因为事实是,如果您遇到质量问题,那么您就会遇到安全问题。研究表明,安全缺陷的50-70%都是质量缺陷。换句话说,良好的老式质量漏洞正在变成入侵者/黑客/不良行为者用来渗透您的应用程序的漏洞(我们称为“零日”)。

“研究人员一致认为,至少有一半(也许多达70%)的常见软件漏洞是基本的代码质量问题,可以通过编写更好的软件来避免。马虎的编码。”

Jim Bird“构建真实软件”

如果您仍然不确定质量和安全性如何重叠,请查看CWE Top 25中的几个示例。以下可能的安全结果来自CWE技术影响工作:

  • 3 CWE 120 –未经检查输入大小的缓冲区复制(“经典缓冲区溢出”)–可能导致执行未授权的代码或命令,可能的未授权数据访问,可能的拒绝服务(DoS

  • 20 CWE 131 –缓冲区大小的错误计算(导致缓冲区溢出)–可能的DoS,执行未授权的代码或命令,可能的未授权读取/修改内存

  • 25 CWE 190 –整数溢出或环绕(导致未定义的行为并因此崩溃)–可能的DoS,可能的内存修改,可能的未授权代码或命令执行,可能的任意代码执行

如果您进一步进入完整的CWE列表(超过800个项目),则会发现许多其他问题,即各种形式的上溢/下溢,初始化,不受控制的递归等。这些都是常见的安全攻击以及明显的质量问题。


建立

软件系统的复杂性增长非常迅速。试图快速测试每种可能的变化几乎变得不可能。正如理查德·本德(Richard Bender)所说,“潜在测试的数量超过了宇宙中分子的数量”,这只是一种有趣的说法,说您将永远无法完成它。或者从吉姆·伯德(Jim Bird)那里,“对于一个大型系统,您需要在无数个键盘上使用无数个笔测试器,并且它们需要工作数小时才能找到所有的错误。”

因此,必须同时设计和设计安全性和可靠性。您无法对其进行测试。只要安全性是“额外”的东西,它就会遭受损失。


该怎么办?

您可以采取以下几项措施来开始同时提高软件质量和安全性。

  1. 培训开发人员进行安全开发。对您的开发人员进行安全的开发实践培训,意味着他们可以预防(或至少找到并解决)安全问题。

  2. 在设计和构建系统时要特别关注质量和安全性。避免使用“有效”的代码,因为它存在潜在的安全问题,因此并不是一个很好的选择。 (或者安全问题。)静态分析将通过检查代码中的错误,以及是否符合已知的最佳做法来帮助您完成此任务。

  3. 不再依赖边缘工具。识别您的实际暴露和攻击面。防火墙和防病毒软件无法弥补不安全的代码-您必须加固您的应用程序。

  4. 收集/测量缺陷数据,并将其用于评估和改进您的开发实践。哪些代码或组件产生最多的问题?什么代码是最好的?他们是如何测试的?重复好主意,然后冲洗坏主意。

  5. 使用严格的静态分析。不要仅仅接受某人对已报告的缺陷不是重要问题或误报的评估。获得包括检测和预防在内的一系列良好规则,并遵守这些规则。最好的方法是采用围绕最佳实践的工程方法(诸如CWECERTOWASP等编码标准的作用)。静态分析是确保遵循最佳实践的方法。

  6. 使用运行时分析。它会发现实际的问题(尤其是令人讨厌的内存问题),并且可以准确地向您显示出错误的出处,没有任何误报。

因此,我们需要开始在代码中构建安全性。这是真正加固它的最佳方法,而不仅仅是修补已知的孔。将来自编码,构建和测试的所有软件开发结果集成到中央存储库中,即可提供控制,度量和可跟踪性。这是未来改进的基础。

请记住,可靠防护的成本低于处理不良或不安全软件的成本。因此,实际上没有任何借口再不重视测试了。

在线咨询
联系我们

客服热线
023-68661681

QQ客服

意见反馈


添加微信获专业服务

TOP