# 涅槃团队：Xcode幽灵病毒存在恶意下发木马行为

Author: 乌云历史资料库 (@wooyun_archive)
Published: 2015-09-20T13:13:00Z
Canonical: https://wepostx.com/topics/1054

> 乌云历史资料归档
>
> **原始作者：** 360安全卫士
> **原始编号：** superkieran-wooyundrops:777
> **原始发布时间：** 2015-09-20 21:13
> **声明：内容仅用于技术研究和个人使用，版权归 wooyun.org。**

---

360 Nirvan Team
本文是 360 Nirvan Team 团队针对 XcodeGhost 的第二篇分析文章。
我们还原了恶意iOS应用与C2服务器的通信协议，从而可以实际测试受感染的iOS应用可以有哪些恶意行为，具体行为见下文。
最后，我们分析了攻击的发起点：Xcode，分析了其存在的弱点，及利用过程，并验证了该攻击方法。

# 0x01 恶意行为与C2服务器

## 通信密钥分析
恶意程序将其与服务器通信的数据做了加密，如下图所示：

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

密钥的计算方法：

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

通过分析，密钥为：stringWi，生成密钥的方式比较有迷惑性。

## 恶意行为分析

### 恶意行为一：做应用推广
方法是：首先检测用户手机上是否安装了目标应用，如果目标应用没有安装，则安装相应应用，其中目标应用由C2服务器控制。
我们逆向了恶意代码与C2服务器的通信协议，搭建了一个测试的C2服务器。然后通过C2服务器可以控制客户端安装第三方应用（演示应用为测试应用，不代表恶意软件推广该应用），见视频，
视频链接：[http://v.youku.com/v_show/id_XMTMzOTk0NDc2MA==.html](http://v.youku.com/v_show/id_XMTMzOTk0NDc2MA==.html)

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

这是第一个针对 XcodeGhost 能力的视频演示。

### 恶意行为二：伪造内购页面
相关代码如下：

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

### 恶意行为三：通过远程控制，在用户手机上弹提示

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

# 0x02 Xcode 的弱点及利用

## Xcode 的利用过程描述
Xcode 中存在一个配置文件，该配置文件可以用来控制编译器的链接行为，在受感染的 Xcode 中，该文件被修改，从而在链接阶段使程序链接含有恶意代码的对象文件，实现向正常iOS应用中注入恶意代码的目的。
被修改的文件内容如下：

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

从上图可以看到，程序会链接恶意对象文件 CoreService。
从链接过程的 Log 中可以看到其是如何影响链接过程的：

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

注：实际上可以让 CoreService 从文件系统中消失，且在链接Log中没有任何额外信息。
通过在配置文件中添加的链接选项，在工程的编译设置中无法看到，这就增加隐蔽性：

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

## 对恶意代码 CoreService 的分析
首先 CoreService 的文件类型为：Object，即对象文件。
查看 CoreService 中的符号，可以看到：

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

导入的符号有：

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

## 验证概念
首先编写一个 ObjC 的类，测试如下图：

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

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

制作出对象文件 ProteasInjector.o，然后用这个文件替换掉 CoreService 文件，编译程序，然后反汇编，结果如下：

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

可以看到代码被注入到应用中。

## Replies
