尽管所有关于成功的网络攻击的新闻报道,开发人员仍然在编写充满安全漏洞的代码。
当然,人无完人。我们都会犯错误,随着软件项目变得越来越复杂,很容易混淆潜在的问题。
但这并不能解释为什么如此多的软件充满了最基本的错误。
根据Veracode本月发布的一份报告,在所有内部开发的应用程序中,有61%的应用程序在第一次通过时没有通过对OWASP top10列表的基本遵从性测试。商业开发的软件表现更差,失败率为75%。
这些都是众所周知的基本问题,如SQL注入和跨站点脚本。
或者使用硬编码密码。现在谁还在这样做?根据Veracode的数据,他们测试的35%的应用程序。
消除这些基本的漏洞对于提高软件的安全性还有很长的路要走。在这个过程中越早被发现,就越容易修复。
安全供应商的首席运营官Ron Arden说,今天的集成开发环境已经可以捕获常见的语法错误,比如缺少分号Fasoo。
“如果你正在使用一个函数,它会显示参数,”他补充道。“但它不会告诉你是否存在SQL注入、跨站点脚本或类似愚蠢的东西。”
如果软件开发人员有一些类似拼写检查器的东西,但它可以捕捉基本的安全问题,而不是拼写错误和简单的语法错误,那不是很好吗?
开发人员将能够立即修复它们,并在此过程中学习编写更安全的代码。
传统的方法是在软件编写完成后对其漏洞进行测试。但是现在,测试已经转移到开发过程的早期,转移到提交的时候,甚至更早,在开发人员实际编写代码的时候。
研究公司分析师道格•卡希尔(Doug Cahill)表示:“在软件开发阶段,我们确实需要实施这种类型的应用程序安全。企业战略集团.“有一些企业正在将这些类型的安全最佳实践到他们的软件的方法,但还不够。一部分是刚刚缺乏意识,一个部分是自动化的需要。如果我们能打到简单易用的按钮,更多的我们将做到这一点。”
Veracode表示,有一些迹象表明,发展正朝着这个方向发展。
虽然应用的40%只得到一次扫描,应用的9%得到扫描更加频繁,这表明这些公司正在运行某种形式的连续测试程序,在开发沙箱中某些应用中得到测试多达六次每天。
根据报告,使用这种方法可以显著提高每个应用程序的漏洞数量。当应用程序扫描添加到开发过程中时,缺陷密度下降了46%。当添加了电子学习功能后,缺陷密度降低了6倍。
企业不仅关注他们的内部开发过程,而且也开始要求他们的软件供应商提高安全性。
卡希尔说:“这种情况越来越多,因为供应链应对安全事故和违规负责。”“他们问的问题之一是,你做软件扫描和安全分析吗?”
该工具也越来越好,他说,与多家供应商提供的软件扫描和协调工具,使企业能够安全检查较早融入发展进程。
他补充说:“但这应该是有背景的。”“如果你只是得到‘你犯了一个编码错误’,这并没有什么特别的帮助。但是,如果你得到一个建议,因为你的代码结构,它可能被SQL注入利用,这里有一些方法来调整你的代码……我们可以改善我们的安全态势。”
重要的是要避免警惕疲劳他补充道,或具有防伪的“大眼夹” - 恼人的和无益的。
卡希尔说:“这类警报需要具有规范性、咨询性和可操作性。”
Citigal,应用安全厂商,第一次看这样做在1999年安全“拼写检查”复出,但制造另一个“大眼夹”是一个严重的问题。
“大家都讨厌Clippy,”该公司的首席技术官约翰·史蒂文(John Steven)说c.人们讨厌它,因为它就在你面前,你在打字,它分散了你的注意力,它的建议总是愚蠢的。它一直在告诉你错误的事情。”
对于应用程序安全性来说,这样做太容易了。
他举例说,采取跨站点脚本。
他说:“你写的每一行代码都可能容易受到交叉脚本的攻击。”
但他说,开发人员现在更愿意考虑帮助他们编写代码的工具。此外,新的早期国家软件安全工具不是用来发现所有可能的漏洞,而是用作培训工具。
说,例如,开发人员正在考虑连接到不安全的开源库。Cigital的提供一个工具,可以赶上这个问题马上提出一个更好的图书馆,甚至自动转换现有的代码。
“我们希望找到的瓶颈,帮助他们作出正确的决定,”他说,“而且切出的机会,后来整个大片创造的问题。”
事实上,在安全教育方面的早期应用测试的顶益之一。
根据一项Sans报告于今年早些时候发布在美国,在资金和管理介入之前,缺乏应用程序安全技能是提高软件安全性的最大挑战。
内置的安全教育
Checkmarx是寻求解决这个问题的几个供应商之一。
“我们获取源代码,对10行或100行代码进行分析,让开发人员在非常早的阶段就能看到漏洞,”Amit Ashbel说Checkmarx.“然后我们会带他们进行5到10分钟的简短会议,讨论如何修改代码。我们向他们展示如何破解密码,他们可以实时尝试。然后他们就会明白,这个漏洞可能会让他们的代码暴露在什么地方。”
他说,结果就是,在开发人员最需要学习的时候,他们就能学到东西。
“他们不需要离开办公桌,也不需要花太多时间坐在教室里听讲座,”他说。“我认为这是进行安全编程教育的途径。”
关于这个产品是更有帮助还是更烦人的问题,他指出Gartner的PeerInsights那里的评价非常正面。
“我最喜欢的是该产品在我们工程部门的使用水平和影响,”一家大型制造公司的首席信息官写道。
一家大型金融公司的技术专家写道:“我们开发人员的反馈非常积极,这有助于我们将代码扫描作为一项常规活动。”
早期的测试可能会错过大问题
安全测试,发生时的代码被写入是一种静态的分析。
对于静态分析,工具只是按照编写代码的方式查看代码,而动态分析实际上遵循逻辑流程。这意味着静态分析可能忽略许多问题。
该公司联合创始人兼首席技术官迈克·米尔纳(Mike Milner)表示:“这些工具只能防止它知道的特定模式的错误。Immunio,它提供运行时应用程序安全检测。
同时,随着越来越多的公司转向敏捷开发,动态分析工具发现问题的速度越来越快。
“你编写和部署,每天数次,”他说,“因此,它成为一个开发工具。”
当公司首次开始从传统的瀑布式开发到敏捷的移动,安全经常缺阵,迈克·凯尔在首席创新官说Cybric,提供无论何时开发其提交至GitHub上或到位桶,使用Veracode的或其他商业和开源漏洞扫描器,扫描代码的服务。
他说:“目前,公司每周或每季度测试一次SQL注入或跨站点脚本。”“我们需要让这个过程持续下去,因为黑客一直在攻击公司。”
将安全测试工具作为软件开发过程的一部分是有意义的,但不是在编写阶段,Brian Doll说SourceClear,它制造了在构建过程中寻找开源安全漏洞的工具。
他说:“从逻辑上讲,打断你的创作过程以获得那些测试的反馈是非常耗时和痛苦的。”
他补充说,在这些早期阶段几乎不可能取得好的结果。
“直到你建立的软件产品,并了解组件之间的关系,你只是猜测,”他说。
这就是静态分析和动态分析的区别,他解释道。
例如,如果一个开发人员调用特定的开源库,这是在没有被锁定,直到生成发生,一旦包管理器解决所有的依赖使用的库的确切版本 - 和依赖的相关性。
他说:“我们可以得到更好的见解,可以准确地告诉你,你在软件的哪个地方链接到了脆弱的方法或脆弱的库。”而且你也不需要每次输入一个单词都建立一个模型。这样做是没有效率的。”
但ESG分析师卡希尔表示,在写作阶段检查问题的工具并不一定要捕捉所有潜在的漏洞。
“这只是第一步,”他说。“在安全方面没有灵丹妙药,但你至少可以减少错误和攻击表面的面积。”
他说,最佳的方法是在每一种安全工具最有效的时候使用它们。
“静态和动态分析应该发生在软件生命周期的适当阶段,”他说。“应该在每个环境中进行扫描。如果你进行分层,就可以大大减少生产中的安全攻击面。”
这篇文章“为什么开发人员没有一个安全的‘拼写检查器’?”最初是由CSO .