作者: Claud Xiao
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使用以下方式进行安装:如果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审查的新方法。
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。
在未越狱的设备上安装应用时,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自动生成私有的开发证书
对于从ZergHelper服务器下载的盗版软件,它要求用户借助XY Helper Windows版本将设备与PC连接,研究人员没有对其Windows版本进行逆向功能,但是猜想这一操作的目的是使用Windows版本冒充iTunes,使iOS设备认为其已经经过PC端的认证。
ZergHelper使用了一种iOS恶意软件惯用的技术滥用企业证书。这类应用使用“install in a second”进行标记,并且使用itms-service协议进行安装。与之前的恶意软件的不同点在于,ZergHelper不仅从C2服务器下载itms-service plist文件,还会打开本地端口在线安装应用。该功能可能是专门用于使用私有证书签名的应用。
图十二 PLIST文件
之前就有一些恶意软件(FindAndCall)或POC应用(Jekyll)成功进入AppStore,最近的例子是XcodeGhost和InstaAgent。与这些相比,ZergHelper中使用更多的用户界面和明显的可疑代码特征。Apple通常不披露任何审查员如何检查应用程序的技术细节,但是ZergHelper仍然使用了一下方法可以绕过苹果审查员审查。
从WireLurker开始,就有许多恶意软件使用企业证书在iOS上进行安装,这类问题最大的风险在于企业证书和私有API的结合。YiSpecter和Youmi就是使用私有API收集私有信息的恶意软件。ZergHelper甚至是自动生成免费的私有证书。这类情况十分危险,因为这可能成为滥用证书的未来攻击的第一步。
在iOS工具的地下市场,AppleID扮演着越来越重要的角色。最近几个月,有研究人员发现窃取Apple ID的恶意软件(KeyRaider)、从中获利的恶意软件(AppBuyer)、共享ID的恶意软件(YiSpecter)。ZergHelper的功能也依赖于有效的Apple ID,它可以为用户提供免费的Apple ID,并且这些ID的来源未知。
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 ,vul_wish编译,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)