ZergHelper:成功绕过iOS App Store的代码审查的风险软件
Apple 官方的 iOS App Store 一直以来都以严格的代码审查著称,这项强制性的措施已经成为 iOS 安全生态系统中确保 iOS 用户的隐私和安全的一项重要机制。但是近期有安全人员发现,有一款 APP 成功绕过了 Apple 的代码审查机制。这款 APP 在 App Store 中的名称为“开心日常英语(HappyDaily English)”,目前 Apple 已经删除了该款 APP。这是一个针对中国大陆 iOS 用户的非常复杂的、第三方应用商店客户端,并且已经发现了企业签名版本。
研究人员暂时还未发现该软件的任何恶意功能,因此将其归为 Riskware(风险软件),并命名为 ZergHelper。
图一 AppStore 中的“开心日常英语”
ZergHelper 中存在以下安全风险:
伪造 App Store,提供没有安全保障的 iOS 应用
滥用企业证书和个人证书签名和分发应用,其中可能包含未审查的代码,或滥用私有 API
要求用户输入 AppleID,并为用户提供 Apple ID,可能使用这些 ID 登陆 Apple 服务器,并在后台执行操作
创造者试图通过动态更新代码扩展其功能,可能会绕过 iOS 安全限制
使用敏感并且具有风险的技术,这些技术可能会被恶意软件用于攻击 iOS 生态系统
ZergHelper 已经通过了 Apple 的代码审查,它通过在不同的地理位置执行不同的操作来实现这一功能。在中国以外的地区,它就是一个英语学习软件,然而当在中国使用该软件时,它真正的功能就显现出来。
2015 年 10 月 30 日,ZergHelper 在 App Store 上架,但是,直到 2016 年 2 月 19 日,它的隐藏功能才被人发现。随后,苹果在其 App Store 中删除了该软件。ZergHelper 的主要功能是提供一个包含盗版和崩溃的 iOS 应用和游戏的 App Store。它由中国的一家公司开发,其主要产品为 XY Helper,ZergHelper 是 XY Helper 的未越狱版本和“official App Store”版本。
除了滥用企业证书,ZergHelper 使用了一些新技术在未越狱的设备上安装软件,它实现了 Apple iTunes 的基于 Windows 的版本,用于登录、购买和下载应用。同时还实现了 Xcode IDE 的功能,可以自动生成免费的开发证书,这意味着攻击者已经可以分析 Apple 的专有协议和 8 个月前才公布的开发计划。ZergHelper 还会将一些 ID 分享给用户。
ZergHelper 的代码十分复杂,并且目前尚不清楚它是否会盗取账户信息,并将其发回服务器。不过,可以确定的是,它确实会向服务器发送设备信息,用于静态追踪,它的作者似乎尝试使用 Lua 变成语言使其更加具有扩展性。根据对 ZergHelper 使用的框架的分析,它的代码可以在不需要 Apple 进一步审查的情况下进行更新。
目前已经确定超过 50 个 ZergHelper 应用使用企业证书,并且使用不同的渠道进行传播。
ZergHelper 的传播和功能
ZergHelper 使用以下方式进行安装:如果 iOS 用户在中国访问 XYHelper 的官方网站,页面首部的广告标题会提示用户可以去 App Store 安装他们的产品 XY Apple Helper,如图二左。点击确定按钮后,官方 App Store 会自动打开,并且会显示 Happy Daily English 的安装界面,如图二右。
图二官网上的引导和 App Store 中的安装界面
原始的 Happy DailyEnglish 是开源的,并且以工程名 HappyEnglishSentences8k 托管在 OSChina 网站。ZergHelper 的作者重新编辑,并且嵌入了就有风险的代码。项目的内部名称为 XYFactory,应用的内部名称为 AppStore_4.0.1。
如果用户使用桌面浏览器或任何平台的 iTunes 客户端浏览该应用程序,它的名称为“开心日常英语”,但是一旦在 iPhone 或 iPad 上安装,就会变成“XY 助手”,就想 Info.plist 配置文件中的 CFBundleDisplayName 值,如图三。分析表明,作者在向 Apple 以 Web 表单的形式提交应用时,输入了不同的名称,并且 Apple 的代码审查并没有发现不一致。
图三 ZergHelper 名称的不一致
当应用启动时,会立刻连接到[.]xyzs.com,并且根据 HTTP 请求的返回结果提供不同的功能,如图四。如果 IP 地址位于中国以外的地区,网页就会返回 404-not-found 错误。在这种情况下,该应用只会显示一个英语学习页面,如图五左。
图四根据 HTTP 的返回结果提供不同的功能
图五不同地区的使用显示不同的界面
如果审查员不在中国,这种方法会使他们认为这是一个合法的应用,如果在中国也没有关系,作者可以在审查期间关闭网站,审查员同样看不到它的实际功能。
对于位于中国的用户,它会显示不同的用户界面,如图五右。它会引导安装两个用于“解决稳定性问题”的配置文件。但实际情况下是安装了设备的 Enrollment challenge(用于向相关的 MDM 系统注册设备)和 web clip 如图六。这些配置文件使用 xyzs.com 的证书签名,该证书由 Go Daddy Secure Certificate Authority 在 2015 年 12 月 2 日签发。
图六安装的两个配置文件
该应用可以直接在设备上安装大量应用和游戏,它包含热门应用、热门游戏、和排名应用等页面,类似于 App Store,如图七。唯一的区别是,ZergHelper 提供的应用都是免费的,也就是说,这些都是合法应用的盗版。
图七主界面与 App Store 的对比
在设置标签中,对于使用 iOSpre-9.0 版本的用户,可以输入 Apple ID 和密码,ZergHelper 会记住该密码。在界面下方,有一个“没有 Apple ID,免费领取一个”的按钮,如图八。目前研究人员尚不清楚这些 Apple ID 的来源。
图八设置标签
在未越狱的设备上创建第三方应用商店的新方法
ZergHelper 使用一种新方法在未越狱的设备上创建第三方应用商店,他们可以用于传播盗版的或者有问题的 iOS 应用。其中包含两个通过 App Store 审查的新方法。
假冒 iTunes 客户端
ZergHelper 实现了 PC 上的 iTunes 客户端与 Apple AppStore 服务器之间的协议,应用程序具体可以实现以下功能:
l 登录 App Store,缓存认证数据,注销账户
l 点击服务条款
l 获取其他应用的信息
l 购买应用,如图九
l 下载购买的应用
当与 Apple 服务器通信时,ZergHelper 使用如下用户代理:
l iTunes/12.0.1(Windows; Microsoft Windows 7 x64 Business Edition iTunes/12.0.1)(Windows;Microsoft Windows 7 x64 Business Edition)
因此 ZergHelper 试图充当 Windows 7 平台上的 iTunes12.0.1 客户端。
图九通过模拟 iTunes 协议购买应用
目前还不太清楚 ZergHelper 如何使用这些功能,它们可能用于用户提供的 Apple ID,也可能是该应用提供的免费 Apple ID。
模拟 Xcode 申请私有开发证书
在未越狱的设备上安装应用时,ZergHelper 使用了非常巧妙的方法滥用免费的私有开发证书。
以前,Apple 只为付年费的注册人员提供 iOS 开发证书。开发人员想要签名应用并保证其在物理设备上正常运行必须使用该证书。从 2015 年 6 月,Apple 提供了一个新机制:拥有 Apple ID 的人都可以免费获取证书。该功能嵌入了 Xcode 7.0 版本中,并且目前为止,Xcode 是使用该方法的唯一官方平台。
然而,ZergHelper 可以冒充 Xcode,从 Apple 的认证服务器获取免费的私有开发证书。由于 Apple 并没有公布 Xcode 实现该过程的原理,研究人员分析可能是有人对 Xcode 实施了逆向工程,分析出了这部分代码。
图十登录 Apple 服务器
图十一获取开发证书
通过使用该开发证书,ZergHelper 可以签名 iOS 设备上的应用并安装。在分析 ZergHelper 时,发现有人贩卖以下源代码:
l 通过互换手机和电脑上的协议自动注册 Apple ID
l 提供用于“辅助工具”的 PC 端的应用数字版权管理认证
l 使用 Apple ID 自动生成私有的开发证书
从 PC 端授权盗版软件
对于从 ZergHelper 服务器下载的盗版软件,它要求用户借助 XY Helper Windows 版本将设备与 PC 连接,研究人员没有对其 Windows 版本进行逆向功能,但是猜想这一操作的目的是使用 Windows 版本冒充 iTunes,使 iOS 设备认为其已经经过 PC 端的认证。
滥用企业证书
ZergHelper 使用了一种 iOS 恶意软件惯用的技术滥用企业证书。这类应用使用“install in a second”进行标记,并且使用 itms-service 协议进行安装。与之前的恶意软件的不同点在于,ZergHelper 不仅从 C2 服务器下载 itms-service plist 文件,还会打开本地端口在线安装应用。该功能可能是专门用于使用私有证书签名的应用。
图十二 PLIST 文件
潜在的安全风险1、Apple 代码审查
之前就有一些恶意软件(FindAndCall)或 POC 应用(Jekyll)成功进入 AppStore,最近的例子是 XcodeGhost 和 InstaAgent。与这些相比,ZergHelper 中使用更多的用户界面和明显的可疑代码特征。Apple 通常不披露任何审查员如何检查应用程序的技术细节,但是 ZergHelper 仍然使用了一下方法可以绕过苹果审查员审查。
2、企业证书
从 WireLurker 开始,就有许多恶意软件使用企业证书在 iOS 上进行安装,这类问题最大的风险在于企业证书和私有 API 的结合。YiSpecter 和 Youmi 就是使用私有 API 收集私有信息的恶意软件。ZergHelper 甚至是自动生成免费的私有证书。这类情况十分危险,因为这可能成为滥用证书的未来攻击的第一步。
3、Apple ID
在 iOS 工具的地下市场,AppleID 扮演着越来越重要的角色。最近几个月,有研究人员发现窃取 Apple ID 的恶意软件(KeyRaider)、从中获利的恶意软件(AppBuyer)、共享 ID 的恶意软件(YiSpecter)。ZergHelper 的功能也依赖于有效的 Apple ID,它可以为用户提供免费的 Apple ID,并且这些 ID 的来源未知。
4、代码动态加载
Apple 要求每一个在 AppStore 上更新的应用都接受再次审核。对于 ZergHelper,再次审核增加了其暴露的风险。其作者使用了一种脚本语言解决该问题。
ZergHelper 使用名为 wax(使用 Lua 脚本编写原始 iPhone 应用的框架)的开源项目。在该应用中,存在一个只包含两个函数的 XYLib.lua 文件。当应用首次启动时,会加载并执行该 Lua 文件,通过 wax 库,该脚本会在 Objective-C 运行时调用多个方法。
图十三 Lua 文件
Apple 不允许 iOS 应用动态加载新代码或动态升级。这是降低一些漏洞和恶意软件风险的十分有效的安全机制。但是 wax 框架提供了一种绕过该机制的方法。
动态代码加载是恶意软件隐藏真实功能的十分经典的方法。近几年,出现了许多可以提供 Objective-C 运行时的脚本(JavaScript,Lua 等)接口的 iOS SDK,在这类语言中写入代码十分容易,但是分析和检测则十分困难。
缓解
Apple 已经于 2 月 20 日删除了该应用。对于已经安装的用户,建议立即删除,并检查 iOS 设备上的配置文件(设置-通用-配置文件和设备管理),如果存在 xyzs.com 网站的任意配置文件,请立即删除。
原文地址:paloaltonetworks,作者:Claud Xiao,vul_wish 编译
来自: cnBeta