软件安全至关重要
随着全球经济和科技的高速发展,软件几乎已经应用到各行各业,软件产品给我们带来便利的同时,也成为黑客攻击的目标。而之所以说软件安全至关重要,是因为软件的特殊性使其在失效时不可量化,一个小小的失误在特定环境下都可能无限放大。黑客总是在寻找应用软件可攻击的漏洞,设想一下,如果他们在软件构建过程中将恶意软件插入到应用程序中,并在应用程序上线后,收集成千上万用户的信息,在当今传媒极其发达的社会里,这无疑会对客户系统和公司声誉造成巨大的损害。
研发速度与安全之间的矛盾
现今社会,快速响应已经成为各行各业的最基本要求,软件行业也不例外,一款软件产品,功能更新迭代快,说明开发的一方对产品及用户的需求非常重视,可以提升用户体验感;同时也体现出公司整体的实力,对外展现出产品优势,提升企业自身核心竞争力。
从前,软件安全一般由特定的安全团队负责,在开发的最后阶段才会介入,这种形式在传统的开发周期较长的瀑布开发模式下,似乎没有什么问题。但是随着市场需求不断变化,需要软件产品实时响应变化,不断快速频繁的交付更新软件产品,如果还采用后置的安全介入,即使采用最高效的DevOps计划,开发速度也会被拖慢。
而长期以来,很多企业为了加快应用程序开发以尽快部署新软件,常常是以牺牲安全性为代价的。不幸的是,如果应用程序存在安全问题,不仅使企业陷入信任危机,同时还意味着需要重写大量的码,这对开发人员来说无疑是一项非常复杂、困难和耗时的工作。
软件快速交付真的需要以安全为代价吗?
2012年,Gartner首次提出DevSecOps理念。四年后,他发布了一份名为《DevSecOps: How toSeamlessly integrate Security into DevOps》的报告。报告的核心思想是:安全是全体IT团队所有成员的责任,要贯穿到业务生命周期的每一个环节。对应DevOps快速交付和灵活响应变化,DevSecOps的价值是在不牺牲安全性的前提下,快速落地和实施安全。
DevSecOps 是“开发(development)、安全(security)和运营(operations)”的缩写,是通过一套包含了人文、流程、技术的框架和方法,把安全能力无缝且柔和地集成到敏捷和 DevOps 流程和工具中。
DevSecOps能做什么?
• 不影响产品迭代升级速度
DevSecOps从一开始就要考虑应用和基础架构的安全性,同时选择合适的工具来持续集成安全防护,实现安全网关 自动化 ,以防止DevOps工作流程变慢。
• 安全漏洞尽早识别
DevSecOps可以在开发阶段而不是发布以后,发现潜在的安全漏洞,并在它们被网络攻击者利用之前加以纠正,构建具有内置安全服务的业务驱动软件。
• 降低漏洞修复成本
DevSecOps有助于在开发过程早期而不是产品发布后识别安全问题,避免因网络攻击引起的损失,同时也避免了为修补产品发布后才发现的漏洞而修改大量代码。可以更轻松、更快速、以更低的成本解决(在投入生产环境之前)安全问题。
• 更安全
DevSecOps在DevOps的基础上通过在软件开发过程的每个层次上对安全的关注,确保软件开发管道中的每个人,每个环节都有责任确保最大程度的IT安全。
DevSecOps怎么做?
DevOps管道包含计划、代码、构建、测试、发布、部署、操作和监控几个阶段,DevSecOps在这些阶段上保持不变,只是对安全性的关注应用于每一个阶段中。
• 威胁建模
在软件开发的计划阶段,进行威胁建模,开发团队对各种最有可能的攻击场景进行头脑风暴,识别潜在的安全漏洞和安全威胁,确定每种威胁的严重性和优先级,并提出可能的 解决方案 。威胁建模还有一个额外的好处,就是可以让团队中的每个人都了解常见的安全问题。
• 安全测试
建立代码审查系统,在CI流程中自动运行安全测试,以确保不受常见漏洞的影响。一般采用自动代码静态 漏洞扫描工具 进行检测,如静态分析安全测试(SAST)和动态应用安全测试 (DAST)工具。
• 安全功能测试
在验收测试过程中添加安全功能的自动测试,通过稳定可靠的测试实践将强大的自动化测试框架全面引入管道当中。
• 安全运维
DevSecOps通过IaC工具快速高效地保护企业自有基础设施。同时,需要使用强大且持续性的监控工具,借此检测安全系统是否能够按预期形式运行。
以上只是DevSecOps实施中的一些基础步骤。根据项目的具体规模与复杂性,路线图可能还需要涵盖另外一些特定附加步骤。
DevSecOps如何落地?
• 全员共担安全责任
要想在源头上控制安全隐患,需要团队成员时刻保持安全意识,日常工作中时刻以安全作为决策的首要考量因素。
• 需求人员:需要完整充分的了解应用程序的安全需求、安全特点、业务特点、对安全的特殊需要以及面临的主要安全风险。
• 开发人员:需要养成良好的安全开发习惯和安全意识,提高安全编码的能力。
• 测试人员:需要具有 渗透测试 的能力和安全问题的敏感性,并尽可能早的介入。
• 运维人员:需要充分了解运维阶段的安全需求,安全特点,并在整个开发过程中,完整的参与讨论和决策。
• 自动化
与DevOps一样,DevSecOps是否可以落地实施,强依赖于企业研发流程的自动化程度。为了在持续集成持续交付的场景中让安全保障速度与代码交付速度相匹配,安全必须实现自动化,否则,无法保证开发者每天提交代码的安全性。
• 持续的安全培训
安全习惯不是一朝一夕能够培养和形成的,没有捷径可寻,只能通过不断的引导,不断的宣传和学习,树立正面榜样,循序渐进。 最终,潜移默化地培养出安全文化,达到DevSecOps所追求的最高境界。
结语
我们生活在一个高度依赖科技的世界,软件开发团队担负着软件安全的重大责任,当我们创建的软件涉及如医疗,金融等包含个人敏感信息的领域时,将面临很高的风险。
幸运的是,DevSecOps的体系正日趋成熟,相关方法论、技术与实践经验都有了明显的提升,配套工具链和技术也日趋完善,在保证快速频繁交付软件的同时,能够确保最大程度的软件安全性,另外作为开发团队中的每个成员,需要时刻保持安全意识,DevSecOps 强调的是人人参与安全,人人为安全负责,安全是大家的事。