# KeyRaider：迄今最大规模的苹果账号泄露事件

Author: 乌云历史资料库 (@wooyun_archive)
Published: 2015-09-08T06:08:00Z
Canonical: https://wepostx.com/topics/1021

> 乌云历史资料归档
>
> **原始作者：** 小饼仔
> **原始编号：** superkieran-wooyundrops:748
> **原始发布时间：** 2015-09-08 14:08
> **声明：内容仅用于技术研究和个人使用，版权归 wooyun.org。**

---

from:[KeyRaider: iOS Malware Steals Over 225,000 Apple Accounts to Create Free App Utopia](http://researchcenter.paloaltonetworks.com/2015/08/keyraider-ios-malware-steals-over-225000-apple-accounts-to-create-free-app-utopia/)

# 摘要

最近，WeipTech（威锋技术组）分析了一些用户报告的可疑iOS应用，发现了存储在某服务器上超过22,5000个有效的Apple账户和密码。
通过与WeipTech的合作，我们（Paloalto）识别了92个尚未发现过的恶意软件样本。为了找出恶意软件作者的意图，我们对样本进行了分析，并将这个恶意软件家族命名为“KeyRaider”。从结果来看，我们相信这是有史以来因恶意软件所造成的最大Apple账号泄露事件。
在中国，KeyRaider 将目标锁定在已越狱的iOS设备上，并通过第三方Cydia源传播。并且这个恶意软件很可能已经影响到了18个国家的用户，包括中国、法国、俄罗斯、日本、英国、美国、加拿大、德国、澳大利亚、以色列、意大利、西班牙、新加坡和韩国等。
KeyRaider 通过MobileSubstrate框架来hook系统进程，拦截iTunes通信来窃取Apple账户用户名、密码和设备GUID。 它还会窃取iPhone 和 iPad设备上的Apple 推送通知服务证书和私钥、App Store购买凭证，并禁用本地和远程解锁功能。
KeyRaider已经成功窃取了超过22，5000个有效的Apple账户、输千个证书、私钥和购买凭证。恶意软件将窃取到的数据上传到了存在漏洞的C2(command and control)服务器上，因此暴露了用户信息。
此次攻击的目的是为了让用户通过使用两款iOS越狱应用（越狱后通过Cydia源安装的应用）来免费下载官方App Store的任意应用，且不需要付款就可以在应用内进行购买服务。越狱应用是能够让用户执行在正常设备上无法进行的操作的软件包。
这两款越狱应用会劫持app购买请求，下载存放在C2 服务器中被窃取的账户和购买凭证，然后模拟iTunes协议登陆到Apple服务器，购买app或其他用户请求的项目。这两款越狱应用已经被下载超过20,000次，这意味着大约20,000名用户正在滥用其他225,000个被窃取的证书。
一些受害者已经报告了他们的Apple账户存在非正常app购买记录和其他一些勒索行为。
Palo Alto Networks和WeipTech 已经提供了能够检测KeyRaider 恶意软件和识别被窃取的证书的服务。在接下来的内容中，我们会提供恶意软件和攻击的细节。

# 发现KeyRaider

此次攻击最早由i_82发现，他是一名来自扬州大学的学生、WeipTech成员。WeipTech是一个非职业技术团体，由WeiPhone(中国最大的Apple粉丝网站)的用户组成。之前WeipTech与我们合作，披露了iOS和OS X上的恶意软件AppBuyer、WireLurker。
从2015-07-01开始，WeipTech 开始调查一些用户Apple账户在未经授权的情况下，购买和安装了iOS app。再对用户安装的越狱应用进行调查后，他们发现了一款越狱应用收集用户信息，并上传到一个未知的网站。他们发现这个网站存在SQL注入，能够查看到所有的数据记录。Figure 1是”top 100”数据库的截图

![原文图片](/media/2016/06/105084f951b69c322ab3cf609212af78)

Figure 1. WeipTech 发现在C2服务器上存在SQL注入(from WeipTech)
在数据库中，WeipTech 发现了标明为“aid”字段一共有225,941 条记录。大约2万条记录包含明文用户名、密码、GUIDs。剩余的记录是加密的。
通过逆向恶意应用，WeipTech 发现了一段代码，这段代码中使用静态key为“mischa07”的AES加密算法对数据进行加密。利用静态key，我们能够解密用户名和密码。经过登陆验证，他们确信记录中的信息都是有效的Apple账户。在网站管理员发现、关闭服务之前，WeipTech调查人员下载了大约一半的数据库记录。
8月25日，WeipTech在微博发布漏洞预警，将漏洞提交到WooYun（乌云漏洞报告平台），并后续转交第三方合作机构CNCERT/CC（国家互联网应急响应中心）处理。
当 Palo Alto Networks研究人员在分析WeipTech 报告的恶意软件时，我们发现它没有包含恶意代码来窃取密码并上传数据到C2 服务器。然而，通过WeipTech 提供的其他信息，我们发现存在其他的恶意越狱应用，存在窃取用户信息并上传到相同的服务器上。
我们将这个新的iOS恶意软件家族命名为 “KeyRaider” ，因为它会窃取密码、私钥和证书。

# KeyRaider 来源

据我们了解，KeyRaider仅通过 Weiphone’Cydia 仓库在越狱iOS设备上来进行传播。不像其他的Cydia源，如BigBoss、ModMyi。WeiPhone为注册用户提供私有仓库，用户可以直接上传他们的越狱应用app，并与其他人进行共享
在2015年，一个名为“mischa07”的用户，上传了至少15款KeyRaider 应用到它的私人仓库([http://apt.so/index.php?r=cydiaTa/index&user_id=8676626](http://apt.so/index.php?r=cydiaTa/index&user_id=8676626))，如Figure 2. 此外，他的名字也被作为加解密key，硬编码在恶意软件中，如Figure 3。我们高度怀疑此人为KeyRaider’s 的开发者。

![原文图片](/media/2016/06/c8889349a73c50ca32bdf25fc471a384)

Figure 2. mischa07’s 个人Cydia 仓库

![原文图片](/media/2016/06/ed39b61ac319e1c967863801b09eddcd)

Figure 3. “mischa07″ 作为加密key被硬编码在恶意软中
根据Weiphone的网页显示，一些由mischa07 上传的越狱应用已经被下载过上万次，如Figure 4。这些app和工具提供如游戏作弊、系统调优和app广告过滤等功能。
在mischa07的仓库中，有两款特别的应用
●iappstore (Figure 5): 能够让用户从Apple官方应用商店免费下载需要付费的应用
●iappinbuy：能够让用户在一些官方应用商店下载的app中免费购买付费道具或服务
Mischa07也在 Weiphone 社区中对这两款越狱应用进行推广，如Figure 6，但一些用户并不相信这些所谓神奇的功能。然而，根据Weiphone’s 网站上显示，iappinbuy 仍人有20,199次下载，如Figure 4，而iappstore 有62次下载(仅对最新版进行统计)

![原文图片](/media/2016/06/eb460c537323372fb1f826dfb9cdb563)

Figure 4. 一个恶意样本被下载超过30,000 次

![原文图片](/media/2016/06/7bfef75109858e6906490fd83ff8afb5)

Figure 5.  iappstore 恶意软件能够直接从App Store安装需要付费的 apps

![原文图片](/media/2016/06/0ef3a09d4c536520edf015b7cbf9327d)

Figure 6. 作者推广它的iappstore 应用
另一名以“氵刀八木” 或 “bamu”.的身份的Weiphone 用户也在传播 KeyRaider  恶意软件。因为Bamu的个人仓库([http://apt.so/aptso](http://apt.so/aptso))提供许许多有用的应用，这使得它在社区中非常受欢迎。在这次攻击被揭露之后，bamu已经删除了仓库中他所上传的所有恶意软件，并关闭了它。在Weiphone的帮助下，我们对Bamu上传的所有应用进行了检查，其中77款应用中都包含了KeyRaider 恶意软件。与mischa07 开发不同版本的恶意软件不同，bamu是通过对已存在app(如iFile, iCleanPro 和 avfun)进行重新打包，并在其中加入恶意代码。
当KeyRaider 将窃取到的用户密码上传到C2 服务器时， HTTP URL中会包含一个名为 “flag”或”from”的参数，用来追踪受感染的来源。在mischa07的代码中，这个参数的值通常为app应用的名字，如’letv’。而在bamu的应用中，则是“bamu”。从泄露的数据的统计得出，超过67%的被窃取信息来至与bamu.
因为bamu 仅仅是一个分销者(distributor)，后面的行为分析主要集中在来至mischa07的应用样本

# 窃取用户数据

KeyRaider收集三种用户数据，通过HTTP请求上传到C2服务器，这里发现了两个不同的C2服务器

```text
•<top100.gotoip4.com> •<www.wushidou.cn>
```
在分析的过程中，这些域名都被解析到了113.10.174.167这个IP地址。在C2服务器上的 “top100” 数据库里有三张表 “aid”, “cert” 和 “other”。 在server端，KeyRaider 利用4个PHP脚本来存取数据库，aid.php, cert.php, other.php 和 data.php 通过分析代码和WeipTech下载的泄露数据，我们发现aid表存储225,941条记录，包含Apple ID的用户名、密码、设备GUID。 Cert表存储了5,841条受感染设备的证书和私钥，而这些信息用于Apple推送消息通知服务，如Figure 7。最后other表存储了超过3,000条设备的GUID和来至app store server 的app购买凭证

![原文图片](/media/2016/06/fcd2cf06bd67517a6bb6ecad64cf3ebe)

Figure 7. 泄露cert表中的一条记录
我们对泄露的Apple ID邮箱地址进行了整理，有超过一半的用户使用QQ邮箱，下是排名前十的账户邮箱地址域名（其中6个主要由中国用户在使用）

```text
[email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected]
```
然而，我们也发现一些属于其他国家或地区的邮箱地址域名，这包括

```text
•tw: Taiwan •fr: France •ru: Russia •jp: Japan •uk: United Kingdom •ca: Canada •de: Germany •au: Australia •us: United States •cz: Czech Republic •il: Israel •it: Italy •nl: Netherlands •es: Spain •vn: Vietnam •pl: Poland •sg: Singapore •kr: South Korea
```

# 恶意行为

KeyRaider恶意代码存在于 Mach-O 动态库中，作为MobileSubstrate 框架的插件。通过MobileSubstrate API，恶意软件能够hook系统进程或其他iOS apps的任意API
之前许多iOS恶意软件家族也同样滥用MobileSubstrate。比如由Reddit用户发现，SektionEins  分析的the Unflod (aka SSLCreds or Unflod Baby Panda) ，会拦截SSL加密通信，窃取Apple账户密码。去年发现的AppBuler也利用了同样的技术来窃取密码、在app store中购买app。KeyRaider 进一步利用了次技术。KeyRaider 主要实现了一下恶意行为

```text
●窃取Apple账户(用户名、密码)和设备GUID ●窃取被用于Apple推送通知服务的证书和私钥 ●阻住受感染的设备通过密码和iCloud 服务来解锁设备
```
注：MobileSubstrate是一个框架，允许第三方的开发者在系统的方法里打一些运行时补丁以扩展一些方法，类似于OS X上的Application Enhancer。所以iOS系统越狱环境下安装绝大部分插件，必须首先安装MobileSubstrate

# 窃取Apple账户数据

大部分KeyRaider 样本hook itunesstored进程的 SSLRead和SSLWrite函数(Figure 8). itunesstored 是系统守护进程，负责与app store进行通信(使用 iTunes 协议)。

![原文图片](/media/2016/06/7324f7084dc25fd7ea78c281a014c2bb)

Figure 8. KeyRaider hooks SSLRead and SSLWrite in itunesstored
当App Store 客户端像用户请求输入Apple账户登录时，登录信息会通过SSL加密会话发送到App Store server。在SSLwrite的替换函数中，KeyRaider 会寻找此类会话，通过特定的pattern在发送的数据中搜寻Apple 账户的用户名、密码和设备 GUID(Figure 9). 接下来，在SSLRead替换函数中，这些凭证会通过AES加密算法，使用静态的key “mischa07”来加密，然后发送到KeyRaider  C2 服务器(Figure 10).

![原文图片](/media/2016/06/fef77bd9c005b7b32422fc060abcb1cc)

Figure 9. Searching for Apple account information in SSL data

![原文图片](/media/2016/06/7d172ca722eccc6cd4bf5f940c391d63)

Figure 10. Uploading stolen credentials to the C2 server
除了hook SSLRead和SSLWrite，KeyRaider 需要调用MGCopyAnswer(“UniqueDeviceID”) 来读取设备的GUID。

# 窃取证书和私钥

在一些样本中，KeyRaider 也会hook apsd守护进程 – 负责iOS系统的Apple推送通知服务。它hook 定义在Security 框架的SecItemCopyMatching 函数。这个API用于搜寻匹配给定查询的 keychain items。
当搜索查询有值为“APSClientIdentity”的label ，KeyRaider 会执行原来SecItemCopyMatching函数，然后调用SecIdentityCopyCertificate 和 SecIdentityCopyPrivateKey，从原本函数执行返回结果中来拷贝证书和私钥 (Figure 11). 之后，这些信息和GUID一起被发送到C2服务器上(Figure 12). 在iOS keychain中，被标记APSClientIdentity 的key用于推送通知。通过这些信息，攻击者可以在系统上伪造推送通知。

![原文图片](/media/2016/06/69a0b90841ecfedac6d07bd99a8cfd76)

Figure 11. Copy push service’s certificate and private key

![原文图片](/media/2016/06/2c700bc61b1e5b3191c6236b7305ec66)

Figure 12. Upload certificate and key

# 锁定设备

当KeyRaider  hook SecItemCopyMatching，除了拦截通知证书，它也会将当前查询的label和特定的字符串 “com.Apple.lockdown.identity.activation”进行比较。如果匹配，KeyRaider 会将查询结果的值设置为0. (Figure 13)
再发布文章之前，网上还没有关于com.apple.lockdown.identity.activation 查询的公开文档。我们相信这个查询是用于解锁设备的。通过将返回值设置为0，KeyRaider 会阻止用户解锁他们的设备，即使通过手机输入了正确的解锁码或通过iCloud服务远程解锁设备。
在我们目前发现的所有样本信息中，这段代码是独立的，没有被其它代码调用。它仅仅是被实现，然后被导出为一个函数。然而，我们已经有证据表明，利用这个函数来进行实际攻击已经发生了。

# 免费的APPS

一些KeyRaider 样本实现了从C2服务器下载购买凭证和Apple账户的功能。但这个功能仅仅在 iappstore 和 iappinbuy 两个应用中被真正使用过。 根据用户的描述，iappstore 能够免费从app store中下载任意应用。让我们来看一下他们是如何实现的.
这个app hook SSLWrite 两次，第一次用于窃取密码。第二次hook 会尝试判断当前的HTTP请求是否是“POST /WebObjects/MZBuy.woa/wa/buyProduct”。以此来判断当前会话是否是使用iTunes协议进行购买。(Figure 14).

![原文图片](/media/2016/06/fcd23acccd60f4a006d60d146f7abf81)

Figure 14. Hooking app purchase session
如果请求是购买行为，SSLWrite会被调用，hooking代码会尝试在发送的数据(用于获取当前app的付款信息)中匹配一些关键词，如“salableAdamId”, “appExtVrsId”, “vid”, “price”, “guid”, “installedSoftwareRating” and “pricingParameters” 。如果这个app是需要付费的，fire()函数会被调用。
Fire 函数会调用readAid()函数，readAid函数会读取位于/var/mobile/Documents/iappstore_aid.log的本地文件。这个文件包含了用户账户的用户名、密码、设备GUID，相关的iTunes会话token、cookie、电话号码、运营商、操作系统信息、iTunes CDN 服务器号。然后解析数据，创建一个账户对象。
如果文件不存在，它会调用 readAidUrl()，readAidUrl会从KeyRaider C2服务器下载新的账户信息，然后创建一个账户对象。(Figure 15). Figure 16 展示了一个从服务器下载的账户。

![原文图片](/media/2016/06/885f372ff761898c923c67a9bd2b8f9f)

Figure 15. Downloads apple account from C2 server

![原文图片](/media/2016/06/60bc036aefeaac447a907eb7294afb17)

Figure 16. Stolen apple account was downloaded from C2 server
创建账户对象之后，fire()会生成plist格式的字符串，里面包含账户信息，接着调用 login()和sendBuy().
Login()函数会创建一个连接到以下URL的HTTP连接，URL中会带上plist字符串和一个类似Appstore客户端用户代理的值

```text
•p*-buy.itunes.Apple.com/WebObjects/MZFinance.woa/wa/authenticate
```
这会造成使用远程Apple账户来登陆当前的iTunes会话(Figure 17)

![原文图片](/media/2016/06/749587bbf438d8d5583b53779706d875)

Figure 17. Emulating login protocol
发起Login请求之后，login()会解析返回的结果，获取cookie、token和其他信息，然后将这些信息和账户密码保存到本地iappstore_aid.log文件中，供后续购买时使用。如果因为密码错误导致登陆失败，它会再一次调用readAidUrl() ，从C2 server中获取一个不同的Apple账户。
sendBuy()函数的工作与login()函数类似，但请求了另一个URL，用于app购买验证

```text
•p*-buy.itunes.apple.com/WebObjects/MZBuy.woa/wa/buyProduct
```
通过这个过程，iappstore 应用可以使用窃取到的账户成功购买任意app 除了这些操作之外，在两个独立的函数verifySF() 和verifySF2() 中，KeyRaider 也会尝试获取Apple账户密码找回问题和答案。这个函数在我们的分析样本中还未完成。
iappinpay的功能和iappstore类似。唯一的不同是购买接口改变了。(Figure 18)。在C2服务器数据库中也存储了一些之前在app内购买（ In-App-Purchase）的凭证，作者似乎计划实现重用这些凭证的功能，如将这些凭证发送到Apple server，以证明他们之前已经购买过此服务。

# 电话勒索

除了窃取Apple账户来购买app，KeyRaider 拥有内置的锁定功能来进行勒索。
之前的一些iPhone勒索软件工具基于通过iCloud服务来远程控制iOS设备。这类攻击可以通过重置账号密码来解决。而对于KeyRaider ，它在本地禁用了所有解锁操作，及时是输入的正确的解锁码或密码。此外，它也能使用窃取的证书和私钥来发送通知消息来索要赎金，而推送通知消息不需要经过Apple推送服务器。因此，之前使用的解决方法不再有效。
下面是一名受害者报告的被勒索截图

![原文图片](/media/2016/06/8644c9a04f4615d3c8fbfaa541de4100)

Figure 19. Ransom message on locked iPhone

# 其他潜在的风险

下面是一些攻击者利用你泄露的用户名、密码等信息能够做的事情
应用推广：在受害者手机中安装指定的app，来提升App Store rankings
Cash Back：使用的账户来购买付费应用
垃圾邮件：使用iMessage来发送垃圾信息
勒索：利用账户密码，窃取隐私信息来进行勒索 等等

# 保护和预防

需要注意，KeyRaider 仅影响越狱的iOS设备，未越狱设备不受影响。 WeipTech上线了查询服务 <http://www.weiptech.org/ >，你可以输入自己的Apple账户邮箱，了解它是否被泄露。Palo Alto Networks 在8月26日将窃取的账户信息反馈给了Apple。还需要注意的是，因为攻击者发现并修复了其接收数据服务器的漏洞，WeipTech 只能还原约一半的被窃取数据。因此，从不受信任的Cydia 源安装过这类越狱应用的用户可能都会受影响。
用户可以通过下列方法来判断自己的iOS设备是否受影响

```text
1.通过Cydia安装openssh 2.通过SSH连接到device 3.到 /Library/MobileSubstrate/DynamicLibraries/ 目录，对目录下的所有文件grep以下字符串 •wushidou •gotoip4 •bamu •getHanzi
```
如果任何dylib 文件包含任意一个字符串，删除这些文件和同名的plist文件，然后重新启动
除此之外，我们也建议用户在移除恶意软件之后，修改Apple账户的密码，并开启双因素认证功能。[https://support.apple.com/en-us/HT204152](https://support.apple.com/en-us/HT204152) 最后，如果你想避免遭遇 KeyRaider 以及类似恶意软件，请尽量避免越狱。Cydia 源不会对上传应用进行严格的安全检查，通过它安装应用存在风险。

# 样本信息

```text
9ae5549fdd90142985c3ae7a7e983d4fcb2b797f CertPlugin.dylib bb56acf8b48900f62eb4e4380dcf7f5acfbdf80d MPPlugin.dylib 5c7c83ab04858890d74d96cd1f353e24dec3ba66 iappinbuy.dylib 717373f57ff4398316cce593af11bd45c55c9b91 iappstore.dylib 8886d72b087017b0cdca2f18b0005b6cb302e83d 9catbbs.GamePlugin_6.1-9.deb 4a154eabd5a5bd6ad0203eea6ed68b31e25811d7 9catbbs.MPPlugin_1.3.deb e0576cd9831f1c6495408471fcacb1b54597ac24 9catbbs.iappinbuy_1.0.deb af5d7ffe0d1561f77e979c189f22e11a33c7a407 9catbbs.iappstore_4.0.deb a05b9af5f4c40129575cce321cd4b0435f89fba8 9catbbs.ibackground_3.2.deb 1cba9fe852b05c4843922c123c06117191958e1d repo.sunbelife.batterylife_1.4.1.deb
```

### 致谢
特别感谢来自WeipTech的i_82向我们共享数据、报告以及其它有用的信息。 感谢来自WeipTech的CDSQ向我们提供样本，感谢来自WooYun的Xsser、FengGou的信息共享。 感谢Palo Alto Networks的Sereyvathana Ty、Zhaoyan Xu、Rongbo Shao几位对恶意软件进行的分析，感谢Palo Alto Networks的Ryan Olson对本报告的审校。

## Replies
