您当前的位置:首页 >> 数码
专栏丨一个“彩蛋”引发的惨案
发布时间:2019-09-14
 

一、谶曰


大东:小白,你知道吗?2018年的12月25日跟以往可有些不一样哦,对有些前端开发者来说,可以算是比较糟糕的一天了。


小白:啊,为什么?


大东:因为他们网站上按钮,莫名其妙地就和往常不一样了,多了一块东西,title 居然还是 HO HO HO。


受影响的UI界面显示


小白:哈哈哈哈哈,这是发生了啥?看起来怎么跟被狗啃了一样!


大东:来,听我慢慢道来~


二、话说事件


小白:大东,大东,快别卖关子了,这到底是咋回事呢?


大东:究其原因,是因为这些网站用了一个开源项目 Ant Design,而该开源项目埋了一个在12月25日触发的“彩蛋”。这个彩蛋会在25日当天给所有的按钮增加积雪的效果,并增加“Ho Ho Ho!”的浏览器默认提示信息。


小白:Ant Design 是啥呀?


大东:Ant Design 是阿里旗下蚂蚁金服的一个开源项目,是服务于企业级产品的设计体系,在 GitHub 上有着 38k+ Star,13k+ fork。从这 2 个数据来看,就知道是一个用户量大的开源项目,而且还有阿里的招牌背书。


Ant Design


小白:那这个彩蛋怎么就造成惨案了呢?


大东:大东:虽然使用 Ant Design 的人,基本都是开发者或设计师,但这并不是一个开发者或设计师工具。因为它是一个 UI 项目,经常会被用在企业级的生产项目中。故“彩蛋”的出现对某些网站来说,简直就是灾难。


小白:哇,这锅背的好冤啊!


大东:如果你要问今天开源圈中忙着关闭 issues 的项目是哪个,第一名恐怕要颁给 Ant Design。截至2018年12月25日12时13分50秒为止,他们已关闭了23个 issue。


小白:Ant Design,这不是个企业级的后台开发的底子项目吗,是谁玩得那么大?


大东:这次的彩蛋是由蚂蚁金服前端工程师@afc163 在今年9月10日提交。据吐槽的开发者称,Ant Design并未在之前的更新日志(ChangeLog)中提及这个“彩蛋”且这个“彩蛋”默认是开启,Ant Design 也没有提供关闭“彩蛋”的任何配置。


小白:哇,彩蛋不是找的吗,这个彩蛋咋啥都没说就自己就跳出来了,还不让人关掉,真是有毒!


大东:这位有着“奇思妙想”的程序员@afc 163在最初的回应中理直气壮地表示“早就做好了被骂的准备”,对于为何不在更新日志(changelog)中说明有“彩蛋”,更是霸气回应“changelog”中无需体现。

 

Ant Design 工程师的回应


小白:哇,这可真是看热闹不嫌事大!


大东:虽然 Ant Design 在12月25日中午左右删除了“彩蛋”,@afc163 也在 12 点左右发了一个 issue,做出了新回应,对公众表示了歉意,但一个程序员如此不负责任的行为还是辜负了大家对 Ant Design 的信任。


小白:对呀,Ant Design 既然标榜自己是企业级的后台开发,就不应该做一些个人项目里随意的事情,无论是彩蛋还是幽默,这种东西出现在console 里娱乐娱乐程序员就好了,出现在产品里导致产品出现意料之外的东西就是很不负责任的行为了,特别是内网开发的产品,客户还不得追着问是不是在代码里下毒了。

 


大东:诶,你说到了重点,这次的事件虽然没有造成什么安全性的事故,但如果 Ant Design 的程序员在代码里埋的不是彩蛋而是病毒或者漏洞呢,这可就是炸弹了!而这个问题也就涉及到了软件供应链的安全问题。


小白:哇,那赶紧给我讲讲吧~


三、大话始末


大东:先说说供应链吧,传统的供应链概念是指商品到达消费者手中之前各相关者的连接或业务的衔接,从采购原材料开始,制成中间产品以及最终产品,最后由销售网络把产品送到消费者手中的一个整体的供应链结构。传统商品的供应链概念也完全适用于计算机软硬件,则可以衍生出软件供应链这一概念。


小白:挠挠头~能具体说说嘛?


大东:我们可以将软件供应链简单抽象成如下几个环节:开发环节、交付环节以及使用环节。其中,开发环节涉及到的软硬件开发环境、开发工具、第三方库、软件开发实施等等,并且软件开发实施的具体过程还包括需求分析、设计、实现和测试等,软件产品在这一环节中形成最终用户可用的形态。而交付环节是指用户通过在线商店、免费网络下载、购买软件安装光盘等存储介质、资源共享等方式获取到所需软件产品的过程。最后使用环节是指用户使用软件产品的整个生命周期,包括软件升级、维护等过程。


小白:哦哦,原来是这样啊。


大东:显而易见的是,攻击者如果针对上述各个环节进行攻击,那么都有可能影响到最终的软件产品和整个使用场景的安全。


小白:哇,那大东东能说说针对各个环节的攻击案例吗?


大东:好的,我们现在就从开发环节说起,软件开发涉及到软硬件开发环境部署、开发工具、第三方库等的采购/原料供应、软件开发测试等等,各环节都可能被恶意攻击,在针对软件开发环境的攻击中就有开发机器被感染病毒木马、开发工具植入恶意代码、第三方库被污染等攻击方式。其中针对开发工具进行攻击,影响最为广泛的莫过于 XcodeGhost(Xcode非官方版本恶意代码污染事件)。


XcodeGhost事件


小白:Xcode是啥?


大东:Xcode 是由苹果公司发布的运行在操作系统 Mac OS X 上的集成开发工具(IDE),是开发 OS X 和 iOS 应用程序的最主流工具。2015年9月14日起,一例 Xcode 非官方版本恶意代码污染事件逐步被关注,并成为社会热点事件。多数分析者将这一事件称为“XcodeGhost”。攻击者通过向非官方版本的 Xcode 注入病毒 Xcode Ghost,它的初始传播途径主要是通过非官方下载的 Xcode 传播,通过 CoreService 库文件进行感染。当应用开发者使用带毒的 Xcode 工作时,编译出的 App 都将被注入病毒代码,从而产生众多携带病毒的 APP。当时,至少692种 APP 受污染,过亿用户受影响,受影响的包括了微信、滴滴、网易云音乐等著名应用。

  

小白:哇,这么恐怖~


大东:现在,我们来说说针对源代码的污染。软件产品如果在源代码级别被攻击者植入恶意代码将非常难以被发现,并且这些恶意代码在披上正规软件厂商的合法外衣后更能轻易躲过安全软件产品的检测,或许会长时间潜伏于用户机器中不被察觉,最近曝光的远程终端管理工具 Xshell 被植入后门代码则属于这类攻击中的经典案例。


小白:哇,这个事件我知道,这个后门代码会收集主机信息往 DGA 的域名发送,黑客极有可能入侵了相关开发人员的电脑,在源码植入后门,导致官方版本也受到影响。并且由于dll文件已有官方签名,众多杀毒软件依据白名单机制没有报毒。该后门代码可导致用户远程登录的信息泄露。当时预测有十万级别的用户受到影响。

 

xshell被植入后门代码事件


大东:诶,不错呦!开发环节还有一个问题就是厂商预留后门,软件厂商在开发过程中出于方便测试或后续技术支持的考虑可能会预留一些超级管理员账户在软件产品中,而当软件正式发布时忘记删除或故意留下这些“后门”,导致产品发布后被攻击者利用造成巨大危害,多个厂商的家庭路由设备都曝光过此类安全事件,比如 Arris 为 AT&T 家庭用户定制版调制解调器内置后门事件、惠普笔记本音频驱动内置键盘记录后门事件以及 Juniper VPN 后门事件。而某些厂商处于国家安全的需要,可能也会为国家安全部门预留一些“接口”,方便获取用户敏感数据,比如曝光的“棱镜门”。

 

棱镜门事件


小白:哇,这些厂商也太不严谨了吧。


大东:现实中,具体的软件开发更是一个复杂的过程,不单单是源码的编写,还涉及到诸如需求分析、开源/商业库使用、算法、外包开发等等复杂环节,其中的各个环节都有可能被攻击并造成严重后果。


小白:像这次的 Ant Design 事件就属于开源库的使用吧!


大东:是的,对于大部分的开源软件,与安全相关的问题和漏洞在多数情况下都会被默默的修补而没有进行公开披露,而由于开源的持续集成和持续交付的特性,bug也更易被合并到主线中,造成一定的安全隐患。根据SourceClear 的统计数据,53%开源库中的漏洞没有通过 CVE 进行公开披露。在当今敏捷软件开发的世界中,开发人员越来越依赖并扩展免费的开源库来快速完成任务,许多人甚至无法跟踪他们使用了哪个开源库,更不要说去注意开源库中隐藏修复的漏洞了,所以即使漏洞修复在 commit 信息和 bug 报告中可见,开发人员也不会意识到这些问题,并继续使用旧版本,这将使他们的项目处于被攻击的风险下。


小白:哇,我可是 github 的重度依赖者,你这样讲的我好怕怕~


大东:引用开源项目、调用第三方库以及使用公开组件等手段使得开源代码从不同渠道进入到各类项目中,含有漏洞的代码(脆弱性代码)也将被同时引入。Black Duck 公司在《开源软件安全与威胁分析报告》 中指出,超过 67% 的使用开源组件的商用软件中存在已知的漏洞代码;Korolov 估计 2017 年基于开源代码漏洞的攻击总量比上年增加 20%。


小白:哇,看来我不能无脑地 git clone了~


大东:开发环节已经讲完了,现在让我们来讲讲交付环节。软件从开发商到达用户手中的过程都属于软件交付环节,在互联网时代,这个过程主要是通过购买/共享存储介质、网络下载等方式实施。


而基于我国的“国情”,国内针对软件交付环节进行攻击的案例最为广泛,因为攻击成本最低,主要体现在软件捆绑下载安装这类攻击手法中,另外还有诸如下载劫持(域名劫持、城域网缓存毒化)、物流链劫持等攻击手法。


小白:啥啥啥,我又听不懂了~


大东:我们将所有这类针对用户获取软件产品的源头进行恶意代码植入的攻击统称为“捆绑下载”。


众多的未授权的第三方下载站点、云服务、共享资源、破解版软件等共同组成了灰色软件供应链,而通过灰色软件供应链获取的软件极易被攻击者植入恶意代码,比如2012年初的汉化版 Putty 后门事件,因为非官方汉化后被植入后门木马导致大量系统管理员账号密码泄露引发重大安全威胁。


小白:啊~这个我知道。


大东:其实不仅灰色供应链中获取的软件极易被植入恶意代码,就连某些正规的下载站、应用市场,由于审核不严等因素也被攻击者植入过含有恶意代码的“正规”软件,比如 WireX Android Botnet 污染 Google Play 应用市场事件。


小白:那什么是下载劫持呢?


大东:软件从各种网络渠道下载过程中也可能受到攻击,比如被捆绑恶意软件、篡改、劫持下载的域名等,一些实际的攻击方式有域名劫持、CDN污染、P2P 缓存毒化以及物流链劫持等。其中,域名劫持是指攻击者通过劫持下载站点的域名,使得用户访问到攻击者指定的下载站点下载恶意软件,而用户却全然不知,比如2010年百度域名劫持事件。

 

百度域名劫持事件


小白:那那个啥 CDN 污染和 P2P 缓存毒化呢?


大东:这种方式会使得用户在使用某些下载软件提供的缓存加速功能时下载到攻击者事先毒化后的文件块,而前面提到的“Xcode非官方版本恶意代码污染”事件所涉及的软件版本就有通过被P2P缓存毒化后植入非官方版本的可能。


小白:那物流链劫持呢?


大东:在软硬件交付环节中,针对物流链层面的攻击也有不少相关案例,攻击者可能通过替换、植入、修改等方式在软硬件产品送达消费者之前的整个物流环节中进行攻击。常见的攻击方式有:软硬件产品代理生产环节攻击(生产安装光盘等存储介质时植入木马)、运输环节对产品进行掉包替换等等。“方程式”组织硬盘固件程序攻击就是这个类型的攻击事件。


小白:啊,我懂了,现在该讲讲软件供应链中最后的使用环节了吧。


大东:哈哈哈哈,你小子,还有点迫不及待了呀!软硬件产品抵达消费者手中后则属于软件使用环节,而用户在使用过程中,除了产品本身的安全缺陷造成的威胁以外,还可能遭受使用环境等带来的威胁,针对使用环节常见的攻击方式主要有软件升级劫持等。


小白:啥是升级劫持?


大东:软件产品在整个生命周期中几乎都要对自身进行更新,常见的有功能更新升级、修复软件产品 bug 等等。攻击者可以通过劫持软件更新的“渠道”,比如通过预先植入用户机器的病毒木马重定向更新下载链接、运营商劫持重定向更新下载链接、软件产品更新模块在下载过程中被劫持替换(未校验)等等方式对软件升级过程进行劫持进而植入恶意代码。之前的 Kuzzle 病毒就是这种类型的攻击事件,该病毒感染电脑后会劫持浏览器首页牟利,同时接受病毒作者的远程指令进行其他破坏活动。

 

Kuzzle病毒事件


小白:听完东东说了这么多真是受益匪浅呀,从目前多个现实攻击的案例来看,第三方库、开发工具、开发软硬件环境、到达用户的渠道、使用软硬件产品的过程等供应链相关的安全风险,并不低于针对软件应用本身、相应操作系统的安全漏洞导致的安全风险。


四、小白内心说


小白:大东东,你说了这么多,那我们作为最终用户要怎么防御呢?


大东:在软硬件供应链中最终用户基本涉及交付和使用环节,首先要尽可能使用正版和官方渠道输出的软件。上面的分析可以看到软件捆绑恶意代码是供应链攻击的最主要渠道,除了极少数的特例(如 Xshell 后门代码事件),如果完全使用正版软件可以抵抗绝大部分供应链攻击。使用搜索引擎搜索下载软件注意辨别下载链接是否是官方链接,如果是第三方下载站则需要注意是否为常用下载站,并点击正确的下载链接。下载使用各类非官方、盗版、破解以及来源不明的软件需要非常谨慎,使用360安全卫士之类的防病毒木马流氓软件的工具进行扫描以尽可能降低风险,如果有条件尽量使用虚拟机运行此类软件。对于企业用户,如果有资源,软硬件上线使用前委托有能力的测评机构进行安全性评估,尽可能发现可能存在的安全隐患。


小白:安装杀毒软件也是必不可少的吧?


大东:是的,安装防病毒软件,打开实时防护,设置自动病毒库更新。尽管现在安全业界一股唱衰传统病毒防护方案的风气,然而我们不得不面对的现实是作为终端上最主要的一道防线其作用依然不可取代,特别是基于云安全架构的解决方案可以非常有效地应对已知的大规模威胁,比如 WannaCry 和 Petya 这类勒索蠕虫。


小白:那对于企业级的用户呢?


大东: 企业用户需要建设态势感知,完善资产管理及持续监控能力,并积极引入威胁情报。


小白:是呀,对于企业用户,由于保存了大量高价值数据并集成了强大的处理能力,一旦基于供应链的攻击得逞可能导致敏感信息的泄露和关键系统非授权受控,相应的业务和声誉损失远超个人用户。


大东:尽管必须努力阻止供应链攻击的进入,但过往的安全实践也已经证明基于单点防御的银弹思维是失败的。基于某些环节必然被突破的假设,组织机构需要建立自己的纵深防御和持续监控机制,处理发现的异常,挖掘值得深入调查的事件。对组织自身的软硬件信息资产情况有完备的跟踪,当有供应链相关的威胁情报被通报时,组织就可以根据当前资产的匹配情况立即定位到受影响的资产加以处置,这时,如果有强大的集中管理工具则可以成百倍地提升处置效率,减少暴露在威胁下的时间把损失降低到最小程度。


小白:对哦,Xshell 后门代码事件中,如果受影响的组织订阅了相关的情报,则有可能快速采取补救措施。并且这时如果组织内有360天擎这样的集中化的终端管控工具,就可以快速了解哪些终端使用着有后门的 Xshell 工具,批量化地进行软件升级并对受影响的终端做进一步的处理。


大东:除此之外,还需遵循权限最小化原则缩减攻击面,这也同样基于供应链的开发和交付环节必然被突破的假设。假设组织所使用的交换机路由器存在厂商有意无意植入的后门账号或安全漏洞,那么就会提醒我们至少需要保证其接口的访问来源是尽可能受限的,最低限度要防止资产直接暴露在互联网上而又不对访问来源 IP 进行限制,这样即使系统存在后门或漏洞也无法被大多数人利用。进行防御性的访问权限配置,缩小攻击面事实上是应对未知威胁最有效的方法论,但它对 IT 系统的管理能力提出了很高的要求,真正做到并不容易。


小白:那对那些软硬件厂商,大东有什么建议吗?


大东:XshellGhost、棱镜门等真实案例证明了软件开发交付环节被攻击后的巨大危害,故软件开发及交付环节的安全防范至关重要。首先,要建立可信的开发环境,这包括可控可信任的软硬件环境,诸如正规渠道购买、下载的软硬件,可信的第三方开源/商业库、算法等,采购安全可信的软件外包服务。关注所用组件的安全通告,如被揭露出严重安全问题,通过配置或加入其他安全性控制作为缓解措施,必要时升级相关的组件。


小白:嗯嗯,然后呢?


大东:其次, 要培养开发人员的安全意识,在开发过程的各个环节建立检查点把安全性的评估作为一个必要评审项。开发环节严格遵守开发规范,防止类似调试后门等安全威胁的产生。开发完成的软硬件发布前交给独立的内部或外部测评组织进行安全性评估,及时解决所发现的问题。最后,要在正规渠道发布软件,提供给用户可以验证安装包是否正确的数据,比如软件包的校验和信息。软件安装时校验自身的完整性,升级更新自身时校验下载回来安装包的签名,保证不运行被劫持的升级包。


小白:长期以来,安全厂商大多以软硬件、操作系统本身的漏洞为中心提供产品和服务的解决方案,针对供应链环节的安全问题似乎并没有投入足够的关注。通过上述对软件供应链各环节的重大安全事件分析可以看到,软件开发、交付、使用等环节都存在巨大的安全威胁,其导致的危害并不低于安全漏洞所导致的情况,因此仅关注软件及操作系统本身的安全威胁是远远不够的。对于安全厂商,他们要怎么做呢?


大东:安全厂商需要从完整的软件供应链角度形成全景的安全视野,才能解决更多纵深的安全风险。基于最终用户和软硬件厂商的需求,安全厂商可以加强如下几点:第一,提升发现软硬件产品中安全问题的能力,不仅限于通常意义上的安全漏洞,需要拓展到后门及默认内置账号类的隐藏访问机制的发现,及时输出相应的威胁情报协助厂商和最终用户消除威胁;第二,提供创新型的产品和服务,为用户实现全面细致的态势感知,提供有效的资产管理和持续监控工具,并提供威胁情报能力帮助用户完成安全事件的快速检测和响应。揭示企业IT环境中安全相关的异常情况,给组织内安全团队提供值得调查分析的精准事件线索,发现可能的未知攻击。如Xshell后门事件,安全厂商先通过非正常域名的访问流量定位到相关的终端,最终在机器上找到发出相应网络请求的恶意代码。


小白:真是听君一席话,胜读十年书!


五、大东新语


大东:针对目前软件供应链攻击的现状,从事件数量来看,大量的软件捆绑、流氓推广等针对供应链下游(交付环节)攻击的安全事件占据了供应链攻击的大头,受影响用户数多在百万级别,并且层出不穷,而这几类针对供应链的攻击可能事实上比流行漏洞导致的安全事件还要多。蠕虫级别的漏洞(MS08-067、MS17-10等)所导致的大规模的安全事件已经很少了,IOT 类设备的安全问题导致的大规模 Botnet 构建活动在近期却非常活跃,但前两者的影响其实还远没有来自供应链的大。


小白:那从影响的层面来看呢?


大东:由于基于软件捆绑进行流氓推广的供应链攻击大多采用了白签名绕过查杀体系的机制,其行为也介于黑白之间,因此从影响用户数来说远超一般的漏洞利用类攻击。而类似于 XcodeGhost 这类污染开发工具针对软件供应链上游(开发环境)进行攻击的安全事件虽然数量上不及针对交付环节的攻击,但攻击一旦成功,却可能影响上亿用户。所以,从整体上说供应链安全事件影响的用户数远比一般的漏洞影响还要大。


小白:啧啧啧


大东:此外,从软件供应链的环节来看,大部分针对供应链攻击的安全事件主要集中在供应链下游(交付环节),这个环节出现最多的就是软件捆绑一类的攻击,而在开发环境/开发环节进行攻击的事件却偏少,不过这类攻击一旦发生则更为隐蔽,影响更为深远,并且发生在这一环节的攻击多属于国家行为。


小白:那未来软件供应链安全的趋势是怎么样的呢?


大东:针对供应链各环节被揭露出来的攻击在近几年都呈上升趋势,在趋于更加复杂化的互联网环境下,软件供应链所暴露给攻击者的攻击面越来越多,并且越来越多的攻击者也发现针对供应链的攻击相对针对产品本身的漏洞攻击可能更加容易,成本更低。


小白:路漫漫其修远兮,希望人们能提高对软件供应链安全的关注,也希望网安界的有志之士能继续求索吧!


来源:中国科学院计算技术研究所


温馨提示:近期,微信公众号信息流改版。每个用户可以设置 常读订阅号,这些订阅号将以大卡片的形式展示。因此,如果不想错过“中科院之声”的文章,你一定要进行以下操作:进入“中科院之声”公众号 → 点击右上角的 ··· 菜单 → 选择「设为星标」