漏洞的根源
不安全的软件通常从一开始就存在缺陷。“缺陷”是在编写代码时引入的问题,可能导致“漏洞”,形成软件代码中可利用的条件,为攻击打开大门。缺陷会随着时间的推移而累积,从而导致“安全债务”,即在应用程序的生命周期内无法修复的缺陷。安全债务是DevSecOps兴起的重要驱动力,DevSecOps在整个软件开发生命周期中集成了安全性。
根据应用安全机构的“软件安全现状”研究报告,通过超过750,000个应用程序的静态分析中提取的数据,对导致缺陷引入的因素进行了细致的研究。
研究发现,无论规模大小,前五年的申请数量都以每年40%左右的速度稳定增长。但新缺陷引入的速度遵循不同的模式。当新应用程序启动时,缺陷的数量会急剧下降,这很可能是由于最初的扫描发现了累积的缺陷。然后,在第一年半期间,近80%的应用程序没有引入新的缺陷。然而,接下来的时间里,缺陷的引入稳步增长,直到第5年左右趋于平稳。
发现的常见缺陷结果因扫描类型不同而有所差异,因为静态检测、动态检测和软件组成分析涉及不同的技术,可以检测到不同的问题,因此说明使用多种检测的重要性。此外和检测频率也有关系。
更安全的软件
从一开始就防止引入所有缺陷是不切实际的,但可以通过一些方法让软件更加安全。
首先,尽早尽快修复安全缺陷。当软件使用两年时,可以观察到软件积累越来越多地缺陷。由于软件的复杂性随着时间的推移而增加,而对软件安全性关注的降低,这段时间缺陷呈上升趋势。
其次,考虑自动化和培训开发人员。通过使用自动化工具在开发人员编写代码时发现代码中的缺陷及漏洞,通过修复建议及缺陷定位可以及时修复问题。通过培训开发人员了解常见缺陷及如何引入缺陷降低此类缺陷数量。
最后,建立应用程序生命周期管理。从应用程序的概念和规划阶段开始,经过设计、开发、测试、部署、运行和维护等不同阶段进行管理。不仅有助于提高应用程序的质量、可靠性和效率,同时也有助于降低开发和维护成本。通过有效的管理,可以更好地满足用户需求,并快速响应市场的变化。
严谨是要求
在当今的安全环境中,软件安全至关重要。随着国家对网络安全关注增加并不断推出法律法规,对软件开发企业来说,,确保软件的安全性已经成为一项重要任务。了解缺陷是如何产生的,以及如何修复缺陷,可以帮助确保软件产品的安全性和可行性。