■ 北京大学软件工程国家工程研究中心 张世琨 马森 高庆 孙永杰
由于软件应用范围不断扩大,软件安全已经不限于虚拟空间,直接威胁到物理空间的安全,而且,供应链中的任何问题都会导致严重的危害。降低软件安全风险最重要的就是技术沉淀,而技术沉淀最好的方式就是自动化工具,例如美国国防高级研究计划局(DARPA)在2016年举办的网络安全挑战赛(CGC),无任何人为干预,由机器全自动地挖掘二进制程序中的漏洞。笔者认为,这类比赛的意义远大于夺旗赛(CTF)这种证明个人实力的比赛,因为靠人的经验式挖掘永远不能普惠更多的企业和个人,而且经验的传授也不会系统完整。如何将安全分析技术落地,将知识以工具的方式用于实战,才是迫切需要的,这也是阿里软件供应链安全比赛的意义所在。那么,未来,自动化分析技术和安全知识的结合将成为一个重要方向。本文对软件供应链领域的风险和成因进行探讨,并就如何解决问题提出几点建议。
一、软件供应链安全领域存在的最大问题
1.开源软件的数量呈指数级增长,安全问题不容小视
根据Sonatype报告显示,在2017年全年,独立的Java开源组件数量由200万上升至350万,JavaScript开源组件由300万上升至550万,python组件数由87万上升至140万。对中央仓库(Central Repository)中350万个Java组件的分析结果显示,超过10%(351000个)的组件至少包含一个已知漏洞。事实上,研究人员发现,这些组件中有共计300多万个漏洞,任何一个漏洞都可能成为攻击者的攻击目标。
过于巨大的新增开源代码数量,导致单纯通过人力难以发现全部的问题,对漏洞挖掘、安全防范提出了更高的自动化要求。开源软件数量的增长使软件库之间的引用关系变得愈发复杂,如果其中一个环节出现了问题,就会导致所有使用该软件库的下游软件均存在该漏洞。
更重要的是,对于开发过程中引入开源软件的执行细节与其中潜在的风险,大多数开发者都无从获知。一个工程开发数年,人员迭代频繁,新的开发者对于前任开发者使用过的开源组件是否被修改过,无从获知,开发者更加关注的是自己开发代码的质量及安全性。尽管美国有黑鸭(Black Duck)软件这种分析整个工程的组成成分以及对应成分的CVE漏洞工具,但是,其高昂的收费,需要将代码通过网络传输到美国的使用方式,使国内企业很难接受,从而导致开源软件检测成为监管无人区,其风险远大于自行研发的代码。
2.难以处理鼓励敏捷开发、快速迭代的市场需求与必要安全成本间的平衡
随着互联网的不断发展,软件使用者对软件的功能性、实时性、易用性等方面的需求越来越高,软件市场的竞争压力越来越大。这要求开发者在短时间内完成大量功能点的开发,并在后期进行持续不断的高速迭代以抢占并稳固市场。
综合开发速度与成本控制等因素,开发者在开发过程中必然大量使用开源库与外包供应商提供的非公开库。但是,由上文可知,使用外部库时存在大量安全隐患,一旦出现数据泄露等安全问题,将导致极其巨大的经济损失。如何在较短的开发周期内尽量完善软件功能,同时完成相对完备的安全性测试,是所有开发者都面临的问题。
二、造成上述问题的原因分析
1.软件供应链风险传播速度快,攻击面广
软件供应链的安全风险广泛存在于供应内容在开发流程中直接或间接影响最终产品或系统的所有位置。风险将从供应链的每一层继承下来,主要包括:第一,开发过程中包含的编码和设计缺陷,允许未授权方在产品或系统部署时引入代码。此外,存在通过允许未授权访问和执行受保护功能而直接危及安全性的缺陷。第二,在组织之间转移时允许对产品或系统的访问进行不正确的控制,允许未授权方引入代码。第三,不安全的部署配置(例如,使用默认密码的已部署配置)。第四,使用现场产品或系统的操作变化会带来安全风险或配置更改,从而导致安全性受损(配置控制和补丁管理)。第五,在产品或系统处置过程中错误处理信息会损害当前运营和未来产品或系统的安全性。
2.开发人员安全意识以及项目管理水平有限
软件供应链任何一环的开发人员,在开发过程中如果出于方便等原因,下载非官方的软件、工具,并未经完整的安全校验,都可能引入漏洞或木马,带来安全隐患。例如,Xcodeghost事件,就是开发者使用了非官方途径的XCode工具导致。开发者在开发过程中往往更看重所用软件库的功能性,很少关心所用软件库的版本、可能存在的漏洞等信息。2017年9月,流行Java框架Spring发现一个远程执行代码的高危漏洞,此后的一个月内,对存在问题的Spring框架的下载量仅比漏洞曝出前下降了15%。此外,一些小型的开发团队没有完善的软件工程开发流程,当员工流动等情况出现时,可能会出现代码难以维护,难以进行版本更新等情况。
3.保障软件供应链安全的客观难度
黑客只需要找到软件供应链的一个突破口便可以入侵并造成危害,开发者需要对整个软件供应链进行完备的安全防护。即便企业安全意识足够,从漏洞公布,发现安全隐患设计补丁,最终测试并发布安全的新版本,仍然需要一定的周期,而攻击者根据漏洞生成攻击向量的速度可能更快。2018年8月22日,一个新发现的Apache Struts 2远程代码执行漏洞(CVE-2018-11776)被公开披露。仅在一天后,一位Github用户就发布了针对此漏洞的概念验证(PoC)漏洞利用代码。根据报告显示,2017年,漏洞从发现到被黑客利用的平均时间仅为3天,留给开发者的应对时间极短,而且0day漏洞的预防和应对对开发人员提出了更高的要求。
4.技术研究与企业实际需求的脱钩
国内对于漏洞自动发现或者通过开源代码审计的研究很多,但是,并没有实际落地的产品。研究往往都在点上,并没有扩展到整个工具面上,业界对于实现工具的若干技术问题,没有实际解决方案,导致很多想法只停留在理论阶段,没有给企业解决实际问题。

三、解决上述问题的建议和对策
目前,现有的市场环境对快速迭代、高创新性的需求,不允许花费大量的人力物力进行人工排查,因而对内建立稳定高效的软件开发规范,对上游软件供应链采取高自动化手段进行自动排查,是较好综合时间和人力的选择。
第一,采用开源代码审计,充分了解软件供应链中各个环节使用的开源版本库。实时关注软件所涉及的开源库的最新漏洞信息,当有新漏洞发布时,第一时间下载补丁。
第二,开发人员应尽可能从官方渠道获取程序组件,利用签名验证机制等方式降低软件开发工具和开发库被恶意植入漏洞的隐患。当对软件库植入恶意代码后,一般情况下,签名校验难以通过,通过软件发布的软件库版本与官方版本的校验分析,可以发现大部分恶意植入代码问题。国家应建设国家代码库,保证更多经过验证的版本供软件开发者下载。
第三,当使用开源或不公开软件库时,尽可能遵守可修改性、可维护性等软件工程原则。对不同的软件开发库给予合理权限,记录库使用的关键事件,方便快速排查问题。
第四,软件发布前通过静态分析工具进行完整的自动化安全漏洞检测。对常见的缓冲区溢出等漏洞进行分析,能够发现部分隐藏的安全漏洞。通过对恶意代码的特征分析,可以定位发现部分开发者恶意植入的后门。
第五,在充分防护且0day漏洞仍然难以避免的前提下,需要及时止损机制。可以设计合理的运行保护框架,通过对输入输出、网络传播等敏感过程的实时监控,当程序出现恶意行为时及时,发现并预防。或通过制度建立、定期培训等方式,增强软件开发人员的安全意识。在发现问题时能够迅速反应并解决问题,防止损失进一步扩大。
四、保障软件供应链安全的重点
从代码自动分析技术研究看,保障软件供应链安全的重点在于对于已知漏洞和未知漏洞的发现,表现在研发更好的同源分析与静态代码安全漏洞自动检测工具两个方面。
第一,对已知漏洞的检测,可以通过使用开源软件安全审计工具,即同源分析工具,快速发现工具中使用的开源构件,通过对已知开源构件的匹配,可以知道构件是否被篡改或者通过CVE、NVD等已知漏洞库的匹配。当然,很多已知漏洞并没有完全在网上公布,这也是潜在的问题之一。
第二,代码安全性检测,与传统代码漏洞检测类似,缓冲区溢出等漏洞本就是代码漏洞的重要检测内容。在漏洞检测外,可以针对软件供应链的常见后门攻击方式进行特征提取,自动扫描并发现同类恶意植入,对开发人员进行风险警告。静态分析技术是分析这类漏洞的最佳方式,但是,潜在的问题在于静态分析技术的圈子和安全圈并不重合。
(本文刊登于《中国信息安全》杂志2018年第11期)

关键词:信息安全丨供应链安全丨漏洞检测丨同源分析

供应链安全 | 北京大学软件工程国家工程研究中心 张世琨:软件供应链安全的风险和成因分析相关推荐

  1. 大数据系统软件国家工程研究中心给大家拜年啦!

    关于我们 大数据系统软件国家工程研究中心成立于2017年9月.清华大学作为承担单位,联合北京理工大学.国防科技大学.中山大学.北京大学.中国人民大学.百度.腾讯.阿里巴巴等相关单位共同建设.研究中心是 ...

  2. 域名国家工程研究中心(ZDNS)培训认证中心正式成立

    近日,互联网域名系统国家工程研究中心(ZDNS)培训认证中心落地金华,正式成立,并举办了第一期"技术服务培训先锋营".基于ZDNS积累的丰富用户场景,通过线上模拟环境,线下真机实操 ...

  3. 域名国家工程研究中心再次成功入围央采

    近日,中央政府采购网正式公布了<2020-2021年中央国家机关信息类产品(硬件)和空调产品协议供货采购项目>中标结果.互联网域名系统国家工程研究中心(ZDNS)凭借出色的产品性能和企业综 ...

  4. 公开报名|CCPTP云渗透测试认证专家第二期培训班,将在云网基础设施安全国家工程研究中心举办

    CCPTP云渗透测试认证专家由云安全联盟大中华区发布,是全球首个云渗透测试能力培养课程及人才培养认证,弥补了国内云渗透测试认知的差距和技能型人才培养的空白.4月1日-13日,CCPTP 首期班成功举办 ...

  5. 自主可控—保障软件供应链安全的“重中之重”

    近日人民网发布了一篇由中科院院士撰写的文章<自主可控方得网络安全(大家手笔)>,其中明确的提到"为了保障网络安全,必须实现技术.产品.服务.系统的自主可控,需要在质量测评.安全测 ...

  6. 浅谈软件供应链安全治理与应用实践

    随着容器.微服务等新技术日新月异,开源软件成为业界主流形态,软件行业快速发展.但同时,软件供应链也越来越趋于复杂化和多样化,软件供应链安全风险不断加剧,针对软件供应链薄弱环节的网络攻击随之增加,软件供 ...

  7. 『功守道』软件供应链安全大赛·C源代码赛季启示录

    背景 软件供应链安全,这可以说是一个新近的人造的概念热词.泛泛来讲,如今的软件系统中任何一方都不是孤立的:套用到企业的场景,就有了供应链的概念. 以典型互联网企业为例.线上生产环境所依赖的操所系统,配 ...

  8. 「功守道」软件供应链安全大赛·C源代码赛季启示录

    背景 软件供应链安全,这可以说是一个新近人造的概念热词.泛泛来讲,如今的软件系统中任何一方都不是孤立的:套用到企业的场景,就有了供应链的概念. 以典型互联网企业为例.线上生产环境所依赖的操所系统,配套 ...

  9. 开放下载丨悬镜安全携手中国信通院发布《软件供应链安全白皮书(2021)》

    引言                                                                                <软件供应链安全白皮书(202 ...

最新文章

  1. 解决Windows与虚拟机ubuntu之间相互直接拖动文件
  2. 清华大学车辆刚才专业大佬教你如何写SCI论文(转)
  3. [置顶] 2013腾讯编程马拉松初赛第4场(3月24)(HDU 4520 HDU4521 HDU4522 HDU4523 HDU4524)...
  4. python列表元素之和_python实现计算列表元素之和
  5. Visual Studio 2015正式企业(Enterprise)版
  6. 在PaddlePaddle框架下通过两层全连接网络实现IRIS数据分类
  7. python3-知识扩展扫盲易忘-generator的用法
  8. 设计模式--责任链模式
  9. 网页点击按钮返回顶部代码
  10. 智能手机的硬件组成部分及结构图
  11. KVM虚拟化技术(理论理解以及虚拟化平台搭建步骤)
  12. Java参数校验工具validation
  13. push notifications step1 打不开
  14. JME3教程:Android创建一个简单的示例
  15. 新浪微博、腾讯微博、QQ空间、人人网、豆瓣 一键分享API代码参数
  16. 使用PS制作旋转星空
  17. 支付宝 收款通知 mysql_基于支付宝微信通知的一种个人收款回调方案(转)
  18. 2021-08-15 minikube在阿里云centos系统上的安装实践
  19. 功利性地去多读书 (现实版)
  20. Outlook邮箱无法登录

热门文章

  1. linux bios 禁用usb设备,当USB在UEFI / BIOS中工作时,为什么USB在Linux中不工作?
  2. 真实案件之:意料之外的 RAC 宕机罪犯 - 子游标
  3. 商业插画师走尺印象:只为做生活的设计师
  4. [虚拟机][linux]虚拟机VMware桥接模式无法上网问题
  5. Win7交互式服务编程,不弹出交互式服务检测
  6. OpenLayers3基础教程——OL3 介绍control
  7. maven 光速入门攻略01
  8. order by排序出现问题
  9. Innovus中useful skew的设置
  10. 已解决SyntaxError: Non-UTF-8 code starting with ‘\xe8‘ in file