浅谈华为SDL软件安全工程能力

2020-07-24 15:02:42 浏览数 (1)

  • 网络安全和隐私保护是公司的最高纲领
  • 安全支撑组织架构
  • SDL实践
    • 需求
    • 设计
    • 开发阶段
    • 上线前测试时
    • 应急响应
    • 供应链安全
  • 白盒代码扫描
    • 目标
    • 建设
    • 运营层面
    • 代码权限管控
  • 安全专家
  • 参考资料

浅谈华为SDL实践

谈华为安全,缺一漏万,笔者认为其是在SDL领域国内最强的公司,其建设的难点也同互联网公司迥然不同,在于历史债务如何处理,如何做工程化,下面简单介绍下软件安全能力建设的部分。笔者希望华为可以更多分享一些安全设计的机制、内部的PSIRT运营、全球网络隐私合规、商业安全工具平台、对客户提供的安全解决方案等。以下内容均基于网络公开信息,笔者已脱敏处理:)

网络安全和隐私保护是公司的最高纲领

年初华为有任正非签发文《全面提升软件工程能力与实践,打造可信的高质量产品------致全体员工的一封信》,这是一篇最被安全界低估的文章,十年后再看此文的历史地位会堪比亚马逊老板贝佐斯发出的服务化宣言,彻底改变了IT行业。安全圈已经被“以攻促防”思维主导太久了,要转变观念变外挂安全为内生,就得看看华为倡导的扎实的安全工程思想:

安全性(Security)产品有良好的抗攻击能力,保护业务和数据的机密性、完整性和可用性。

韧性(Resilience)系统受攻击时保持有定义的运行状态,包括降级,以及遭遇攻击时快速恢复的能力。

隐私性(Privacy)遵从隐私保护既是法律法规的要求,也是价值观的体现。用户应该能够适当地控制他们的数据的使用方式。信息的使用政策应该是对用户透明的。用户应该根据自己的需要来控制何时接收以及是否接收信息。用户的隐私数据要有完善的保护能力和机制。

可靠性和可用性(Reliability& Availability)产品能在生命周期内长期保障业务无故障运行,具备快速恢复和自我管理的能力,提供可预期的、一致的服务。

要转变观念,追求打造可信的高质量产品,不仅仅是功能、特性的高质量,也包括产品开发到交付过程的高质量;要从最基础的编码质量做起,视高质量代码为尊严和个人声誉;要深刻理解架构的核心要素,基于可信导向来进行架构与设计;要重构腐化的架构及不符合软件工程规范和质量要求的历史代码;要深入钻研软件技术,尤其是安全技术;要遵守过程的一致性;要改变行为习惯,追求精品;将通过变革形成一套适应上述变化的流程、组织与考核机制。

互联网公司不要被DevSecOps忽悠瘸了,只有扎扎实实为用户交付安全的软件,才能从源头上解决安全问题。华为和互联网公司有什么不同呢?它所使用的技术除了云计算、大数据领域外,还会有SDN、5G、IoT,但是和互联网公司一样面临自己(和客户的)攻击面扩大,防护边界模糊、数据泄露风险、隐私保护的问题,华为在网络安全遇到的挑战更甚,面向产品的安全做得也不算差,安全方面专利超过1000件,加入CSA、TCG、TC260等多个安全标准组织、 获10 个主席/副主席安全组织席位。在国际市场上安全方面的应对措施无可挑剔。

安全支撑组织架构

还记得,之前怼BBC记者的安迪·帕迪吗?他曾是负责网络安全的白宫高级官员,如今身为华为美国的首席安全官,他的上司John Suffolk是华为全球网络安全和隐私官,曾担任英国政府首席信息官。华为在全球有7个研发团队,此外还有两个专门投入安全研究的实验室。其中谢尔德实验室负责面向未来的安全技术的研究,未然实验室对攻防、渗透、漏洞挖掘、情报积累负责,还有云安全,2012都有安全实验室。不得不佩服华为竟然让外国人当安全大boss,对国外人才的开放透明精神彰显文化自信。

SDL实践

华为是卖产品的,所以主要风险从单产品到集成解决方案系统越来越复杂,以前单产品交付,只要关心安全需求问题、设计和开发引入的问题;逐步多产品交付除了要关心单产品的漏洞外,更要关注产品间的安全依赖,比如从网元到网管系统到本地维护终端到系统集成;后来为用户提供解决方案时,要解决业务功能漏洞、引入的标准化的技术、组件漏洞,设计层面的可信边界扩大、风险增加。华为的是SDL方面的老师,交付的大数据、云、IoT都要端到端有对应的安全解决方案,从初始概念到产品设计、开发、测试、生命周期管理,每个阶段产品的安全性都得到较好的实现:

需求

在产品概念阶段时,聚焦目标市场(如欧美、国内、俄罗斯)、客户(如终端、家庭用户),行业(如如基站、消费者、安防、云)的安全需求形成需求基线,识别产品需要交付的网络安全需求。

安全需求划分

设计

设计阶段遵循安全设计原则和设计规范,开展产品安全架构和特性设计。

经典的安全设计

这个时候微软的威胁建模体系还是可靠的:

威胁建模,一个都不能少

开发阶段

以安全基线、规范、标准、指导书为基准,关注配置管理、交付安全、第三方软件安全是华为进行安全技术检查的checkpoint。遵循安全编码规范,并进行代码的安全扫描和人工检视,确保代码的安全质量。具体措施有安全编码规范里的安全培训、安全SDK、开发中的交叉review、核心代码组织专家开展专项检查、编译时使用安全编译选项。下面会详细讲到。

上线前测试时

内部专职安全测试团队提前识别产品安全问题,并通过独立第三方对产品进行安全验证和渗透测试,确保产品交付的安全。内部构建安全测试用例库和安全测试平台,确保安全测试能力统一,降低漏测率,自动化执行安全测试用例,提升测试效率。

安全测试流程

应急响应

上线后有对外通过PSIRT建立预警流程,对内通过DTS工单跟踪解决。PSIRT负责接受、处理和公开披露华为产品和解决方案相关的安全漏洞,同时华为PSIRT是公司对漏洞信息进行披露的唯一出口。内部漏洞由ctr处理。

供应链安全

产品使用开源/第三方软件之前必须申请,发布前必须通过认证和审核,以确保来源可靠使用可追溯。第三方组件具备产品组件用途反查的能力,发现安全漏洞可迅速查找到关联产品。二进制溯源能力要求对线上版本的二进制,在指定镜像,指定源码下可以编译出来具备一致性。

第三方组件引入机制

白盒代码扫描

《全面提升软件工程能力与实践》中提到“代码就像是高楼大厦的一砖一瓦,没有高质量的代码,可信的产品就是空中楼阁。我们要优化并遵循公司各种编程规范,遵从架构与设计原则,熟练使用各种编程库和API,编写出简洁、规范、可读性强、健壮安全的代码”。虽然近年华为因为美国禁令被Synopsys公司限制了不能再采购coverity,但是类似芯片,已经在代码扫描方面提前布局投入了足够多的资源。

华为公司做安全编码的对标对象是什么呢?是谷歌、阿里、腾讯等国际大厂的安全编码质量规范,20亿美元的研发投入,高标准目标极其依赖于软件工程能力。下面来具体看下怎么实现累计支持7万亿行代码,日均扫描5万项目,扫描次数13万次,日均扫描313亿行代码,平均每小时扫描百万行,平均误报率小于10%的最佳实践:)

目标

要解决的问题

从目标可以看到华为的思考,目前华为的商业安全工具能力已经将部分的能力移植到华为的devsecops平台,白盒扫描是各项安全措施中效果最快的,但是软件安全没有银弹,根据gartner的报告,代码检查只能发现20%的安全漏洞,SAST和DAST共能发现40%的漏洞。规则是基于已知的策略的限制,或者依赖于功能业务逻辑不能发现问题,笔者认为也许阿里的PRECFIX是未来白盒扫描的方向。

建设

如果说BAT将pmd、p3c、coverity、foritify视为单独的工具,华为建立的自研平台更类似于sonarqube的能力,工程经验是很值得大家学习的,扫描方面做了如下拆解:

措施

说明

工程拆分

将大工程拆分为小工程

检查引擎拆分

按引擎拆分,并行扫描

规则拆分

按规则拆分,并行扫描

增量分析

只对变更部分扫描

与构建协同

复用构建过程

差异化调度

小规模拆分本地化扫描,减少调度开销

多地域,就近调度

与代码仓库构建等服务就近部署,解决网络带宽问题

缓存

避免代码每次下载

规则方面支持owasp topN,CWE编码问题、GDPR风险排查、NVD已知漏洞排查。扫描架构如下:

架构细节

防误报模型是为了提高缺陷修复的效率,所以对误报类增加了屏蔽处理自动继承、AI自动屏蔽、代码自动修复、智能修复建议。

运营层面

上图中其他文字介绍基本上大家都懂,但是有个3*3运营是什么呢?

华为的员工有点像亚马逊,由一群并不是天才的软件工程师构成,虽然早期开发电信级的软件,也有使用cppcheck、checkstyle、cpplint这样的工具类代码检查功能。但是在这时候安全检查工具依赖于新员工入职时的口口相传,具体配置的规则在各个不同的bg、产品线是不同的,而这样原始的技术栈在编译构建完,再跨模块进行审查需要花费大量的时间,这也是SDL太重了的通病,3*3运营体系应运而生。

3*3体系是指3级检查:IDE检查、门禁级检查、版本级检查。对开发人员在编码、入库、持续集成阶段对检测速度和能力的要求不同,在不同的阶段配置不同的检测规则,较好地兼顾了对检测时间和检测能力的要求。华为是同互联网公司不同的,现在开发的产品可能需要数年时间才面市,所以有时间在最后的大版本发布时,进行全面全量的检测。

IDE

门禁

版本

原则

快速、精准

快速、精准、增量

全面、全量

检查效率

秒级

分钟级

小时级

检查频道

随时

1次/代码提交

1次/天

3层运营:产品、产品线、公司层。产品做具体产品的规则集,例行的工单、缺陷修复,产品线有制定产品线的规则要求,搭建运营平台和人员沟通机制,公司层负责构建总体的代码检测能力,规定,通过数据和服务,实现工具、规则的可视化运营。在扩展性方面,类似于Google的Tricorder,支持插件、引擎的、DSL的多项扩展,为云核、无线、网络等产品线提供能力。

代码权限管控

严格的管控措施

安全专家

安全是奢饰品,没有钱搞什么SDL,华为专门针对安全的岗位配备了安全SE,简单贴一下JD看下要求吧,恐怖的是华为拥有一大批这样的安全专家。职责描述:

  1. 对软件版本安全设计质量负责,负责产品安全特性的分析与设计,对非安全特性的安全性设计进行把关。
  2. 对公司及产品线下发和本产品/解决方案发生的安全设计问题组织分析排查,避免问题重犯。
  3. 负责公司安全设计要求传递、安全漏洞应急响应技术分析。
  4. 负责本产品/解决方案的安全设计能力提升,对特性SE开展安全设计培训。

任职要求:

  1. 熟悉安全设计流程和安全设计原则、典型安全架构。
  2. 精通安全设计及威胁分析工具使用,熟悉常见的安全威胁及对应的消减方案。
  3. 安全知识全面,具备安全管理,安全协议,密码算法,认证管理,会话管理、身份管理、隐私保护、可信计算相关能力。
  4. 具备安全漏洞影响分析、漏洞挖掘、漏洞修复能力。

参考资料

http://xinsheng.huawei.com/cn/index.php?app=forum&mod=Detail&act=index&id=4134815 https://www.guancha.cn/politics/2019_05_27_503288.shtml

给Twitter设计个安全修复方案

从微软、FB、华为的网络安全备忘录说开去

【翻译】英国HCSEC对华为产品安全方面的调查报告

0 人点赞