华为云的软件供应链安全

2024-07-21 08:03   北京  

软件的安全,在研发段,以前叫SDL,后来逐步发展,到DevSecOps,近几年有个更响亮的名字,软件供应链安全。以SolarWinds为代表的供应链攻击,影响越来越大,软件供应链的安全显得越来越重要。

华为从大约20多年前就开始引入代码扫描工具,2010年前后引入STRIDE的威胁分析消减方法,并陆续引入各种先进的理念和工具,应该说始终走在产业前边。

华为云的流程方法已经从IPD变成DevSecOps,对软件供应链安全有比较完整的实践。主要内容包括以下部分:

开源软件管理

云的生态兼容性,决定了云对开源软件的应用是丰富多样的。据初步统计,华为云直接应用的开源软件超过5000种,如何管理好开源软件,其实是个非常大的挑战,在实际操作中,开源软件的管理是从下边几个方面进行的。

  1. 严格的选型。对开源软件的选型引入,要考虑很多因素,主要包括:1)License友好性,不影响商业使用的,不强制开源的,象MIT,Apache,BSD等比较受欢迎,而象GPL,尤其是V2,V3选择会非常慎重。
    2)社区活跃度,活跃的,持续更新的社区更受欢迎,防止后续无法更新。
    3)漏洞补丁响应能力,查看其历史上对漏洞的响应时间和速度,作为重要考量指标。
    4)代码质量也是重要考虑因素,引入前,会有人评估。

  2. 引入流程。在对开源软件做评估后,会有开源管理的相关组织评估批准,批准后引入。由于开源数量巨大,历史长,所以,历史上引入的,都可以直接用。几乎所有开源都有依赖,引入一个开源,其实同时也引入了其依赖软件,所以,引入流程只能对重点软件引入。有一段时间,华为整体搞了开源软件的Owner机制,一个开源软件有一个Owner,负责跟踪社区并对华为整体进行支持,但该方案过于理想,希望大家都做雷锋,互相帮助,实际执行并不理想。

  3. 分级分类管理。华为云把开源软件分为ABC三类。A类是对云的发展至关重要的软件,象OpenStack,KVM等,这些软件会安排专人实际投入开源社区一起工作,贡献开源,理解开源,确保自身规划与开源不冲突,这类软件不太多。B类软件是次重要的,但应用广泛,类似Nginx,Mysql这种,会对开源社区进行跟踪,有非常及时的响应机制,内部有严格的管理机制。C类软件是指相对小众,使用不多,管理相对松散。

  4. 基于SBOM的跟踪管理。由于开源软件众多,安全漏洞持续发现,如何管理好这些软件,是很大的问题。华为云自己建立了SBOM系统,要求所有的编译,必须从SBOM里获取代码,而不是从开源社区直接获取。SBOM会跟踪所有的编译和发布,并有系统与现网的部署关联,这样,在重要漏洞发现时,影响哪些版本,现网有多少服务器部署了该软件,可以迅速统计,并快速制定升级替换计划。

  5. 漏洞管理。每一次发布,都要做漏洞扫描,如果有CVSS>7的漏洞,必须处理掉才能发布。实际上,开源软件很多漏洞并不能得到及时处理,这种情况,要保证开源社区有BUG跟踪列表里有计划,如果没有,使用部门要主动向社区提交漏洞。在相关工作完成后,评估漏洞的风险,如果风险大,需要有解决或消减方案,如果风险小,带着漏洞也可以发布,具体情况具体对待。

  6. 变动。部分软件,引入时社区很活跃,但后来不活跃了,对漏洞等响应也不及时,这种情况,或者把该软件移除,或者把代码当成自研代码管理。

自研代码管理

自研代码的管理在华为云已经非常成熟,重点提两点:

  1. Committer机制 。什么是Committer机制,就是代码提交的审核机制。软件质量是由代码质量决定的,而写代码的,相对是低级别的员工,甚至是外包。为解决软件低质量的问题,引入Committer机制,其实就是代码审核机制。开发人员写的代码不能直接入库,要Committer审核后方可入库。而Committer是通过考试、级别限制等选择出来的,并要对代码质量负责。二者合一,能够较好地提升软件质量。同时,Committer只能决定提交还是打回,不修改,也是一种内部安全机制,开发人员想在软件里留个后门,基本是不现实的。

  2. 代码扫描。这一块现在基本是研发过程的必备环节,华为在被制裁之前,一般会用国外的好的工具,比如PC-lint,Coverity,Fortify等,后来逐步换成国产及自研。代码扫描本身不难,但严格的管理流程,确保它落到实处,其实不是每个公司都能做到的。


测试、发布、升级

华为云走DevSecOps流程,其流水线是自研的,实际的测试、发布、现网升级均自动化。流水线上有门禁,其中有一个是专门的安全门禁,与门禁配合的,是安全测试云。

安全测试云里集成了安全扫描的相关工具,包括代码扫描,漏洞扫描,Web扫描,以及一些自研的扫描工具,类似日志扫描,敏感数据扫描等。扫描报告会自动提交给门禁,如果满足门禁要求,则可以发布,否则自动拦截。

云的整体质量要求里,有对发布成功率的要求,同时,虽然自动化,发布升级过程仍然是有人值守的,这种情况下,发布失败会对各方有影响。所以,测试分为小Beta和大Beta。先在小Beta里把问题解决掉,然后发布走大Beta,基本能保证一次性通过门禁,保证安全的要求能够覆盖到所有发布版本。

持续改善的机制建立在安全测试云上。现网,蓝军,或SIRT收到外部漏洞,会做根因分析,如果问题存在普遍性,则需要找到自动化的解决手段,可能是在现有扫描器上增加策略,也可能是新建一个扫描工具,系统性的解决该问题。相关能力持续积累,则安全会持续得到增强。


END


AI与安全
理清逻辑,找到规律,看清趋势。作者前华为云高级安全专家,现为独立顾问。
 最新文章