搜索 Unity

UPM依赖混淆与AssetBundle安全

2021年6月9日 类别 Engine & platform | 8 分 阅读
涵盖的主题
分享

Is this article helpful for you?

Thank you for your feedback!

安全是所有软件开发的一个重要方面,Unity项目也不例外。在Unity Responsible Disclosure政策的指导下,我们与外部研究人员展开了紧密合作,研究了Unity环境中可能出现的漏洞或问题。在最近的一次合作中,我们联系上了IncludeSecurity的安全专家。通过采取协调排查(Coordinated Vulnerability Disclosure,CVD)的方法,我们希望揭示出Unity开发者可能会碰到的几种不安全开发实践。本篇博文的两个主题是依赖混淆和AssetBundle安全性。

依赖混淆

依赖供应链安全漏洞是一个值得所有开发者仔细考虑的重要问题。

这其中,就有一个被称为依赖混淆(Dependency Confusion)的漏洞。依赖混淆是指攻击者通过篡改开发者的环境和工具来下载恶意软件。这种攻击利用了几种不安全的软件包管理器和私有资源库默认行为。 

Unity编辑器有自己的Unity Package Manager,它支持根据NPM注册表抓取软件包。而使用私人NPM注册表的Unity开发者也可能面临上述的依赖混淆漏洞。

举例来说,有这么一个Unity项目须从私人注册表和公共注册表(如npm.io)中提取软件包。作为标准的开发实践,开发者可以将包A上传到私人注册表。这时若包管理器的注册表范围太广,或使用了私人注册表来提取公共注册表的内容,那么攻击者可以把伪装成高版本的恶意软件包A上传到公共资源库。更高版本的恶意软件在更新时可能会被下载到Unity项目中,让开发设备或运行设备在加载依赖时执行其中的恶意代码。

注意Unity不建议使用NPM等公共注册表。Unity编辑器不支持这些公共资源库中的大多数软件包,Unity Package Manager也不支持包的许多功能。

如果开发者在Unity编辑器中使用了私人软件包或代理公共资源库的私人注册表,便有可能遭受依赖混淆攻击。IncludeSecurity曾在这篇文章中描述过此类攻击。

重要提示:Unity Package Manager的默认配置不会受依赖混淆漏洞的影响。开发者只有像下文那样修改manifest.json文件才有可能受到攻击。请在下方的“对策”部分对照查看你的本地软件包配置是否有风险、了解怎样消除风险。大多数开发人员并不用担心,但最好熟悉相关内容,防止代码库和客户方出现风险。

在下方易受攻击的配置示例中,项目使用了一个代理注册表作为其唯一的范围注册表,它从私有注册表和公共NPM注册表中提取信息。由于该范围内的包共享同一个注册表,攻击者可以伪装成高版本的 "com.private.vulnerable.package "上传到NPM注册表,让开发者在更新时下载恶意软件。

易受攻击的配置示例。

对策

Unity Package Manager并不支持NPM的范围注册表这类典型对策。但使用管理器的范围注册表 可以有效防止此类问题。在注册表的scopes中明确定义软件包的条目,让包的来源严格锁定在配置文件定义好的范围内。 

注意,如果注册表代理了NPM,那么Unity Package Manager将无法区分私人包和公开包。这项对策需应用在注册表层面,这点IncludeSecurity在他们的文章中有作详述

下方配置将注册表分割成一个个独立的范围注册块来修复了此类问题,并明确定义了每条注册项使用哪些包。这时恶意软件包将无法被下载到开发环境中,即便公共注册表上有更高的软件版本。

安全配置示例:

AssetBundle安全性

AssetBundle是Unity引擎传输资源的一种标准化格式。它们通常用于在需要时将额外的资源下载到游戏客户端中,减少游戏初次启动所需的数据量。在特定情况下,AssetBundles甚至可以用来分发修改或定制Unity项目所需的自定义内容。 

在使用AssetBundles时,保证下载源的安全性非常重要。尽管AssetBundles不包含可执行代码,IncludeSecurity发现攻击者仍旧能借助特制的AssetBundle文件来利用游戏代码或Unity运行时的漏洞。IncludeSecurity所描述的问题尚属首次发现。

对策

在这个前提下,网上下载的资源包应与任何其他软件一样受到重视。

  • 请尽量使用来源可靠的资源包, 
  • 保证AssetBundles使用TLS等安全的传输渠道。

总结

作为创作者,我们需要明确依靠他人的工具和服务来辅助创造是有一定风险的。开发者完全有必要花点时间来检查自己的工具链是否安全、配置是否得当,从而保证自己和用户的安全。

其他阅读资源:

更多关于Unity Security和Unity安全建议的信息请在此处了解

2021年6月9日 类别 Engine & platform | 8 分 阅读

Is this article helpful for you?

Thank you for your feedback!

涵盖的主题