7个步骤增强应用程序安全性而不减慢开发速度
翻译:RangWu
原文:《7 steps to enhance application security without slowing developer velocity — Julie Byrne》
学习如何逐步启用安全扫描,实践安全左移,同时保持开发速度。
企业组织越来越迫切地需要通过实施网络安全协议来确保其构建的应用程序的安全性。然而,当企业在源代码和相关资产上启用安全分析或扫描工具时,他们发现潜在的安全漏洞数量让开发团队不堪重负。本文提供了七个步骤,以在不显著减慢开发速度的情况下实施安全扫描。这是我与经历过这一难题的客户的经验总结。
增强应用程序安全性的必要性
应用程序安全性已成为企业组织的关注重点,部分原因如下:
- 最近的高调网络攻击 对企业业务产生了重大影响,包括长时间的停机、数据被盗和支付赎金。
- 多国政府发布了一系列专注于软件供应链安全的行政命令,现在要求供应商提供软件物料清单 (SBOM),列出构成软件应用程序的开源库。
- 如SOC2等合规标准在许多行业变得越来越普遍,这些标准要求公司验证其应用程序的安全性。
满足这种对应用程序安全性需求的一种方法是启用安全扫描,但这可能是一个压倒性的难题。例如,考虑一个获得A轮融资的技术初创公司正在构建一个SaaS应用程序。安全扫描对于合规至关重要,但新功能的开发速度同样重要。这些目标有时看起来是矛盾的。在这种情况下,组织往往不知道如何确保符合合规标准并使其应用程序尽可能安全,同时不过多影响开发速度。
如何保持开发的快速和安全
以下步骤可以确保企业组织不过多影响开发速度,同时满足合规和安全要求。
第一步:评估当前开发状态
启用安全扫描的起点取决于企业构建的应用程序的详细信息,包括企业服务的行业和客户群,以及用于构建和部署应用程序的框架、语言和其他技术。例如,生产嵌入式设备的公司将与生产SaaS应用程序的公司有完全不同的关注点。重要的是,通过企业内部的技术领导者、网络安全专家、业务主管和其他具有适当业务和技术专长的人士,以了解:
- 适用于企业应用程序的合规标准。
- 基于行业研究以及企业应用程序和网络架构,找出存在最大威胁的潜在漏洞类型。
了解这些特征将有助于企业识别潜在的网络威胁。
如果企业有多种类型的应用程序,建议从小规模开始,用几个试点应用程序测试安全扫描和漏洞管理程序。选择那些最关键和/或能够提供最佳效果和反馈的应用程序,以便为制定安全策略提供改进信息。
此评估通过在试点项目中测试安全扫描,以便为企业找到合适的安全扫描策略、产品和方案。
译者注:弱点——>关注点,试点——>切入点,切忌盲目。
第二步:启用安全扫描
接下来,可以对第一步中确定的试点应用程序进行初步扫描。初步扫描应对开发流程无侵入性,以免分散正在实施新功能和修复漏洞的开发人员的注意力。在GitLab中,可以使用扫描执行策略启用默认分支的计划扫描。
企业可以根据在第一步中识别的潜在威胁(关注点)仅启用最高优先级的扫描。虽然每个客户会略有不同,但GitLab客户通常从[密钥检测](Secret Detection | GitLab)和[依赖扫描](Dependency Scanning | GitLab)开始。
译者注:随风潜入夜,润物细无声。
第三步:评估扫描结果
当获得了试点应用程序的初步扫描结果,可以基于以下方式进行分析。
是否有误报漏洞?比如依赖扫描发现的一些漏洞,但这些依赖组件仅在开发环境中作为测试框架的一部分使用而不用于生产环境。再比如一些依赖组件(如Maven组件)仅在特定的运行环境(如Java 8)下才会发生,但在实际的运行环境下(如Java 11)不会发生,这些漏洞可以安全地忽略。
是否有噪音漏洞?许多静态应用程序安全测试(SAST)扫描器默认的规则配置会在源代码中找到数百个低严重性漏洞,企业需要决定这些漏洞是不是目前最重要的关注点。
最后,基于企业对应用程序的了解和对执行风险的评估,以及是否有漏扫情况的发生,企业可以判断是否需要其他的安全扫描工具,或者通过一些手动评估手段来弥补其中的差距。
译者注:抓大放小,符合实际。
第四步:调整扫描分析器和使用的规则
评估初步扫描结果,定义漏洞分类和修复流程。然后调整扫描器规则,仅关注最重要的内容。这是一个关键步骤,以确保开发速度不会由于开发团队在实施代码更改时需要处理大量低优先级漏洞而显著减慢。例如,一个SAST分析器规则可能会在运行在IoT设备上的代码中发现严重漏洞。然而,该设备具有其他安全控制措施,可以有效减轻嵌入式代码中潜在漏洞的可利用性。在这种情况下,这些漏洞并不重要,您可以安全地禁用该规则。
同样,如果发现测试人员常常在测试数据中使用个人身份信息,而这些信息有时会不小心提交到代码库中,那么可以创建一个自定义的密钥检测规则,以查找这些PII(个人身份信息personal identifying information)数据。
GitLab允许企业自定义SAST和密钥检测的规则集。设置自定义规则集时,需确保这些规则有清晰的记录和充分的理由,并定期审查。
译者注:量体裁衣,而非削足适履。
第五步:给初始漏洞排优先级
业务、产品和开发管理者应就修复高优先级漏洞的重要性达成一致,并将这一重要性传达给开发团队。开发团队在做工作计划时,需要将最高优先级的漏洞修复列为工作计划的一部分。具有明确攻击行为的漏洞应优先考虑并加入待办事项列表。未优先考虑修复的漏洞可以保持打开并处于待确认状态,或作为可接受的风险或误报被忽略。添加备注和忽略原因以用于后续的审计。这种优先级策略是防止开发速度减慢的另一种方式。
译者注:拿到体检报告,你应该判断哪些问题需要尽快就医,哪些问题需要长期观察,哪些问题需要改变生活习惯。
第六步:在流水线中启用扫描
完成上述五个步骤后,可以有足够的信息来支撑企业正式启用安全扫描程序,引入试点项目的开发人员来实践安全左移。虽然我们希望尽早推动开发人员参与到安全这件事中,但需要通过迭代一步步来。从引入最高优先级的扫描开始,使用在初步扫描中确定的自定义规则,最后在扫描执行策略中配置在流水线中运行安全扫描,即在执行编译、构建、打包等任务的流水线中并行运行安全扫描任务。
监控流水线的运行时长,以确保安全扫描任务不会显著影响流水线的完成时间,并将一些非常慢的扫描(如DAST动态应用程序安全测试)配置为按计划运行,而不是在提交代码时触发。这将确保开发人员在开发新功能和修复漏洞时仍能快速获得安全反馈。
一般来说,我们首先希望为开发人员发现这些安全漏洞,而不采取任何强制措施或阻止代码更改的合并。GitLab的合并请求小部件会显示在功能分支中发现的新漏洞,便于开发人员评估他们代码的风险。如果某些关键漏洞变得普遍,可以考虑仅为新发现的关键漏洞启用合并请求批准策略,它可以阻止这些漏洞代码被合并到目标分支(安全门禁),同时不需要过多额外的流程来减慢开发人员速度。
同时,为了帮助开发人员了解这些安全漏洞的含义以及如何修复它们。GitLab的合作伙伴提供了一些学习资料和相关服务。
最后,在开发、安全和运营之间建立一个协作机制,应用程序安全应该是所有角色的共同责任。通过帮助开发人员在软件开发生命周期的早期了解潜在漏洞并在必要时修复它们,他们将花费更少的精力,而不必在后期阶段修复这些漏洞,从而允许团队继续有能力开发新功能。
译者注:定期体检是成本最低的健康保障手段,或者你可能不关心健康hhh。
第七步:重复进行
现在我们已经为一组试点团队成功启用了安全扫描和漏洞修复流程。但工作还没完成。我们可以专注于持续改进,将从试点团队学到的经验纳入其中并进行迭代。然后遵循以上步骤在第二批团队中推广。继续以小团队为单位,直到在所有相关应用程序中启用安全扫描。
译者注:绞杀者策略。