首先我们来定义漏洞修复这个概念。开发人员和安全团队为了防止外部恶意攻击,使用一些方法来识别、优先考虑、修复和监控漏洞,这个过程就是漏洞修复了。
在检测方面,企业可以使用各种应用程序安全测试 (Application Security Testing, AST) 工具来识别软件应用程序和其他系统中的漏洞。例如,软件成分分析 (SCA) 工具通过对开源软件组件与软件开发环境中的漏洞数据库、安全公告或问题跟踪器进行检查,来验证其完整性,以确保不包含漏洞。
当 AST 工具发现问题时,安全团队会尝试拦截或消除漏洞,这一步就被称为修复。修复有时可以像应用软件补丁一样简单,有时也会像更换一组物理服务器或硬件设备一样棘手困难。
补救的目的是在漏洞成为安全威胁之前对其进行修补或修复。这一步骤并不容易达成,因此需要开发团队、系统所有者、安全团队和运营人员共同构建有效的漏洞修复流程。
修复(Remediation)和缓解(mitigation)之间的主要区别在于,Remediation 修复了漏洞,而 Mitigation 解决了漏洞带来的安全威胁,而不必修复底层漏洞。
虽然修复是更彻底和全面的解决方案,但在某些情况下,这可能没有必要也无法实现,比如:
有时部分企业由于技术原因无法修复漏洞。例如,某些硬件设备可能不支持软件升级或修复。这对于连接的医疗设备很常见。
还有一部分情况是不同团队对修复存在意见冲突。比如,开发团队担心他们没有充足的时间实施漏洞修复措施,而面向客户的团队则担心所涉及的停机时间可能对客户活动的造成干扰。
当企业将优先级评分应用于漏洞管理时,安全团队可能会选择缓解漏洞风险而不是修复构成威胁较小的低风险漏洞。这使他们能够优先处理更严重的威胁,或者腾出开发人员的时间来专注于构建应用程序的主要目标。
在这些无法实施修复的情况下,缓解措施提供了替代方案。缓解措施降低了漏洞被利用的可能性,并给企业在修复漏洞之前提供了缓冲时间。在选择是修复漏洞还是缓解漏洞风险时,需要时刻记住缓解漏洞风险只能减少漏洞带来的威胁并不能让漏洞完全消失。因此只要有可能,修复应当是首选解决方案,从根本解决漏洞带来的安全风险。
漏洞修复流程
漏洞修复过程包括以下四个步骤:
1.漏洞检测
这一步涉及识别攻击者可以利用的代码或系统配置中的任何已知缺陷。安全团队可以通过测试和扫描来检测漏洞,了解暴露的资产或系统至关重要。
软件漏洞的其中一个例子是访问控制配置不足,例如单因素身份验证。不严格的身份验证会让未经授权的用户更容易获得访问权限,并获取敏感信息或发起恶意攻击。
理想情况下,DevSecOps 团队应当在整个 SDLC 中执行漏洞扫描,在此阶段,可以利用 SCA、SAST 或 DAST 等工具。当然并不是所有的漏洞都需要修复。 例如,如果在产品代码实际未调用的函数中发现漏洞,则无法利用该漏洞,自然也就无需修复。
2. 优先级排序
这一步需要识别漏洞带来的风险,并确定哪些问题更紧迫或需要更多关注,并为这些漏洞做优先级排序。企业往往面临许多漏洞又无法快速管理,而安全团队的人员又十分有限,这时优先级排序的重要性便凸显出来了。
安全团队可以根据系统配置、潜在漏洞利用的可能性、实际事件的业务影响以及任何现有的安全控制来确定风险的优先级。需要特别注意,企业应当隔离其最重要的资产。如果 DevSecOps 团队发现关键核心系统存在风险,可以优先修复相关漏洞并在整个团队中分配工作优先级。 这可以帮助企业避免开发生命周期中断的情况发生。
在管理开源漏洞时,建议使用工具来汇总来自列出已知漏洞的各种存储库的信息,因为这能够帮助过滤安全警报,有效节省时间。比如使用 SCA 工具来确定代码是否容易受到易受攻击的组件的影响。当然如之前所提,并不是所有的漏洞都会带来重大风险。使用合适的方式来识别影响代码的漏洞,并用有效的工具进行分析,这些能够帮助企业深入了解实际影响代码的开源组件。
3. 整治
当判断漏洞可能会影响代码时,就需要进行修复。这一步涉及应用补丁、删除或禁用易受攻击的组件、更新系统或其配置,或阻止某些操作。
对于专有代码,需要确定漏洞的根本原因才能进行修复。企业可以尝试使用 SAST 来执行此操作。安全团队需要结合自动和手动来进行修复,在此过程中可以添加额外的安全措施来强化边界。需要注意的是,企业需要在安全、隔离的环境(例如沙盒)中测试修复工作,而不是完全在生产环境中进行此步骤。
对于开源漏洞,企业需要考虑开源社区的去中心化和协作性质,因为开源社区经常跨多个平台发布修复程序,因此可能很难在一个地方找到所有相关支持。
最可靠的风险缓解策略之一是不断修补开源组件,以避免暴露于已知漏洞。实践和维护该策略的最佳方法是使用自动修复工具,这个工具能够自动进行修复并在发布新修复时进行提醒。不过值得注意的是,仅仅更新单个源文件是无法有效解决复杂的漏洞威胁,因此企业需要更新整个组件。然而在某些情况下新版本可能与其它组件不兼容,所以企业可能需要更改系统配置并阻止执行组件中易受攻击的操作。
4. 持续监控
企业应该持续监控代码以查找新的漏洞。这里企业可以使用自动化工具提供实时警报,并允许持续进行漏洞修复过程。 有效的监控工具应根据上下文对漏洞进行优先级排序,这样能够有效减少 DevSecOps 团队处理低优先等级警报所耽误的时间。在连续修复的循环周期中,这一步也就是下一个循环的第一步了。