大数跨境
0
0

【年度报告连载十八】软件空间的元素异常分析

【年度报告连载十八】软件空间的元素异常分析 奇安信技术研究院
2021-12-06
0
导读:现代软件功能日益丰富,软件依赖的元素种类和个数丰富多样,例如开发过程中复用的功能代码、部署过程中依赖的动态链接库、运行过程中依赖的IP/URL等网络资源。而这些不同的元素都可能成为攻击面……

编者按

《互联网基础设施与软件安全年度发展研究报告(2020)》第三章《软件供应链安全分析报告》,共七个小节,分别为:背景介绍、分析方法与分析系统介绍、代码特性分析、软件空间的元素异常分析、软件元素之间的风险调用、固件生态安全评估、总结。我们已经发布了前两章的内容,本文为第三章第四小节《 软件空间的元素异常分析》。


本文共4391字。文末有惊喜!


(注:本文数据均为截至2020年7月的数据)

01

软件空间的复杂性

现代软件功能日益丰富,软件依赖的元素种类和个数丰富多样,例如开发过程中复用的功能代码、部署过程中依赖的动态链接库、运行过程中依赖的IP/URL等网络资源。而这些不同的元素都可能成为攻击面。例如,复用的功能代码可能有后门或漏洞,依赖的域名可能已经被黑客攻陷或挂马等。这些暴露的攻击面(软件的组成元素)不仅是种类多、数量多,互相之间还存在错综复杂的依赖关系,如图3-15所示,unacev2.dll在市场应用中的依赖关系,如果考虑更深层次的依赖路径,将变得更加复杂。仅针对Windows系统而言,我们收集了十多个国内热门软件下载市场上的265,829款进行分析,拆解出了15种元素共3,655,919项,构建依赖关系25,257,890条,即软件、元素、依赖关系的比例几乎达到1∶10∶100。

图3-15 unacev2.dll在市场应用中的复杂依赖关系


这种复杂的依赖关系,除了在Windows系统软件中存在,其实Android系统中也是类似,如图3-16所示。同时,我们对多个厂商的约5,200个IoT固件也进行了类似的分析,通过代码相似性分析可以发现,IoT固件也存在明显的基础代码复用情况,如图3-17所示。

图3-16  Android中的curl依赖关系(一层深度) 

图3-17 IoT固件相似性分析


接下来,本文针对软件空间中这些错综复杂的元素依赖关系进行分析,从数据异常的角度发现其中一些可能带来较大安全隐患的“关键节点”,并结合具体案例进行分析和说明。


02

异常的域名依赖

通过依赖关系分析发现,一些并非特别常见的域名,却被一系列不同类别的软件访问或依赖。部分域名及其影响的软件类别和数量如表3-5所示。

表3-5 相同域名影响不同类别的软件(部分)


对于这些域名,一旦发生安全问题,例如被挂马或者被拒绝服务,带来的影响就可能会比较广泛。


案例:后门木马植入


我们针对上述域名进行了深入分析,发现其中有些本身就是恶意域名。例如通过威胁情报核查,我们发现amsa****.com一直存在sality后门木马活动行为,根据相关软件的发布时间可以推断,该域名从2014年开始被植入各种类别的市场软件中,并活跃于各大热门网站,如表3-6所示。

表3-6 sality后门木马被植入市场软件中


其实类似amsa****.com这样的情况并不是个例,由于这些域名一开始就是被攻击者植入软件供应链中的恶意模块,并不关注宿主软件本身的业务类别,因此自然就会被不同类型的大量软件所依赖。我们使用天问系统进行动态分析,抓取了所有被多种类别软件依赖的、结构非常相似的URL链接,其中部分如图3-18所示。

图3-18  被植入市场软件中的恶意URL访问(部分)


这些散播在不同软件中、却结构相似的URL访问吸引了我们的注意。我们统计了这些域名地址的访问情况,发现这些不同域名的访问情况高度一致,即它们几乎被相同的用户、在相同的时间访问,如图3-19所示。 

图3-19 结构相似的可疑域名访问情况


通过威胁情报对这些可疑域名和URL进行复查和鉴定,发现他们确实是恶意的,如表3-7所示,即攻击者植入市场软件中的恶意模块导致了这些恶意域名被访问。

表3-7  恶意域名威胁情报核查鉴定


我们在2020年3月,针对其中已经被植入了5年以上的部分恶意域名进行了访问量统计,发现这些域名依然非常活跃,如表3-8所示,其中部分域名每个月的访问量高达百万级,通过对受害者的IP地址定位,发现基本上集中在我国西南地区。

表3-8 活跃5年以上的恶意域名如今一个月的访问情况分析


03

异常的模块依赖

类似异常的域名依赖,更加普遍的其实是异常的模块依赖,即被大量软件,特别是大量不同类别的软件共同依赖的相同链接库或复用的相同代码,如表3-9所示。一旦这些“关键节点”出现安全问题,影响范围往往就难以评估。

表3-9  跨类型依赖的部分模块示例


1. 案例:unacev2.dll漏洞


如表3-9所示,表格中的第一行unacev2.dll,即开篇提到的高危漏洞(CVE-2018-20250~20253),影响了WinRAR等众多常用压缩软件的模块,大量同类软件进行了紧急修补。但通过我们的分析知道,该软件不仅影响压缩软件,还影响了大量的非压缩软件,至少涉及400多个模块、220多款应用软件,其中有55%的软件是非压缩工具,如图3-20所示。这也正是该漏洞难以全面、及时完成修补的主要原因,时至今日,被该漏洞影响的应用软件依然大量存在。

图3-20 unacev2.dll漏洞时至今日依然影响大量非压缩软件


unacev2.dll模块的主要功能是解压ACE格式压缩包,我们分析验证,该模块影响大量非压缩软件的原因其实有很多,例如,某文件浏览器调用该模块实现对压缩包的内容预览、某软件管家市场上的压缩工具未能更新、某播放器软件捆绑安装受漏洞影响的解压工具、某Android ROM镜像解压工具集成有漏洞的WinRAR版本进行固件解包操作等,如图3-21所示。

图3-21 非压缩软件受漏洞影响的原因示例


该漏洞在这些非压缩工具中往往更加隐蔽,因为从软件的功能需求上来讲,不仅用户,甚至开发商都可能不知道自身软件受到该漏洞的影响,导致该漏洞长期存在。因此,掌握软件空间错综复杂的元素依赖关系,对安全检测和攻击防御工作至关重要,利用这些依赖关系信息,防御者能够准确、全面、快速地评估漏洞影响范围,实现应急响应,具有非常积极的意义。而对攻击者来讲,利用类似的依赖关系信息,能发现更多的攻击路径和漏洞利用方式,从而最大化漏洞的价值。


2. 案例:Chromium依赖隐患


Google Chrome是美国Google公司的一款Web浏览器,其核心源于Chromium开源项目。我们通过依赖关系分析,发现第三方软件中也有1,000多个模块依赖了chrome.exe、chrome.dll、chrome_child.dll等Chromium项目文件,这些模块又被490多个软件依赖,其中有大量浏览器软件。由此可以发现,第三方软件中的大部分浏览器是基于Chromium内核开发的,其中截至2020年7月部分常用浏览器如表3-10所示。

表3-10 依赖Chromium的部分浏览器软件

除基于Chromium研发的浏览器以外,也有部分非浏览器软件集成Chrome模块实现UI展示、用户交互等功能,如图3-22所示。 

图3-22  集成Chrome的部分软件


在这种情况下,一旦Chromium发生安全问题,影响范围往往就非常大。例如,在80.0.3987.87之前版本中存在的JavaScript类型混淆漏洞,远程攻击者可借助特制HTML页面利用该漏洞造成堆破坏。通过版本比对分析发现,该漏洞横跨了134个不同版本。


另外,还有一个比较严重的隐患,当Chromium出现安全漏洞时,依赖Chromium内核的其他软件也需要同步打上相关补丁来防御相关漏洞。然而,不同厂商的软件,其Chromium内核版本其实并不同步。这主要是因为厂商对该问题的重视程度不一样,或者是对Chromium的定制使保持内核版本同步比较困难。


我们在2020年7月对市面上的部分主流浏览器进行测量,包括内核版本以及受已披露CVE漏洞的影响情况,发现除了奇安信安全浏览器和微软Edge浏览器等少量产品与Chromium官方内核版本保持一致,其他浏览器或多或少都存在版本落后的问题,个别浏览器甚至还在使用2016年初的Chromium内核。图3-23展示了受测浏览器受到已披露漏洞影响的情况,大多数浏览器受到上百个高危漏洞的威胁。

图3-23 不同浏览器受影响的漏洞数量


除浏览器以外,对于集成Chrome模块实现用户交互的非浏览器软件而言,可能更加不会同步更新,更重要的是,如果出现新的浏览器漏洞,即便用户电脑上的默认浏览器更新到了最新版本,这些软件也依然会受到影响,因此也是比较大的安全隐患。


04

基础模块安全隐患

另一个比较有趣的现象是,不少软件出于兼容性等方面的考虑,并不直接使用系统提供的基础程序、基础链接库、运行时库(Runtime)等系统模块,而是把自己所需的、特定版本的基础模块集成到自己的运行环境中。经过分析,部分容易被市场应用打包的系统模块如表3-11和表3-12所示。

表3-11  部分常见的被打包系统库模块

表3-12  部分常见的被打包运行库模块


如果这些系统模块都由操作系统统一管理,那么出现安全漏洞也可以伴随系统更新修复。但由于部分系统模块被第三方软件打包到自身运行环境中,导致的最明显的安全隐患就是,系统更新难以覆盖这些软件,这些软件如果不更新自身打包的运行库,那么相关漏洞将会一直存在。


1.案例:jscript.dll漏洞影响


jscript.dll负责IE浏览器的JavaScript语言解析,也是比较容易出现安全问题的模块,例如近两年与该代码模块相关的高危漏洞包括以下几种。


CVE-2020-0674:IE中的jscript.dll存在漏洞,可导致远程代码执行以及在野利用。


CVE-2019-1429:jscript.dll脚本引擎漏洞,可导致网页挂马攻击。


CVE-2019-1367:影响各个版本Windows操作系统的IE9/10/11浏览器。


其中CVE-2020-0674高危漏洞爆发时,经过天问系统的元素依赖关系分析,发现该漏洞影响第三方软件至少1.3万款,影响面巨大。虽然Micosoft进行了紧急漏洞更新,但通过动态分析发现,至少有50款软件会在运行时动态释放受漏洞影响的jscript.dll模块,对于这些软件而言,即使用户具有良好的安全习惯,及时打上了系统补丁,以为自己不再受到漏洞影响,但只要这些软件本身没有进行相应的修补,其实依然会暴露在漏洞攻击范围内。图3-24显示某播放器动态释放jscript.dll实现搜索功能,我们的分析过程识别出了其捆绑并动态释放的jscript.dll文件。 

图3-24 某播放器动态释放jscript.dll实现搜索功能


2.案例:OpenSSL安全隐患


与Chrome类似,OpenSSL也是被大量应用且经常出现安全漏洞的组件。由于OpenSSL更加底层和通用,因此不仅被桌面软件大量依赖,在Android系统和IoT固件里也被广泛使用,一旦出现安全问题,就可能会出现跨平台的影响。近些年影响比较恶劣的相关漏洞示例如下。


CVE-2020-1967:影响OpenSSL1.1.1的多个版本,可被用于发起DoS攻击。


CVE-2016-8610:OpenSSL“红色警戒”漏洞,可造成拒绝服务或任意代码执行。


CVE-2014-0160:引起广泛关注的“心脏滴血”漏洞。


在Android系统和IoT固件里,OpenSSL除了以单独模块的形式存在,更多的是相关功能代码静态链接到可执行程序中。我们通过相关字符串分析构建OpenSSL的依赖关系,对于Android系统,OpenSSL在我们收集的各个ROM中的所有so文件里,占比约2%,如表3-13所示。

表3-13 Android ROM中so文件的OpenSSL依赖


对于IoT系统,在我们收集的不同厂商的IoT固件中,70%以上固件依赖OpenSSL,如图3-25所示。 

图3-25  不同厂商IoT固件中的OpenSSL依赖


另外,由于IoT固件底层代码大量复用,固件聚类存在厂商混合的情况,因此一旦出现安全问题,就容易造成跨固件、跨厂商,甚至跨具体设备类型的安全影响。这部分内容在第三章第六小节还会进一步分析说明。


(未完待续……)


版权声明:本研究报告由清华大学(网络研究院)-奇安信集团网络安全联合研究中心撰写完成,版权属于双方共有,并受法律保护。转载、摘编或利用其它方式使用本研究报告文字或者观点的,应注明来源。

相关阅读

【年度报告连载十五】软件供应链安全分析背景介绍


【年度报告连载十六】软件供应链安全分析方法与分析系统介绍


【年度报告连载十七】软件供应链安全代码特性分析

本报告剩余最后100册,关注公众号七折优惠,欢迎订阅!


【声明】内容源于网络
0
0
奇安信技术研究院
网安技术研究国内外前沿动态,相关技术研究发展报告。
内容 99
粉丝 0
奇安信技术研究院 网安技术研究国内外前沿动态,相关技术研究发展报告。
总阅读28
粉丝0
内容99