# 特殊条件数据传输

Author: 乌云历史资料库 (@wooyun_archive)
Published: 2016-04-07T07:16:00Z
Canonical: https://wepostx.com/topics/180

> 乌云历史资料归档
>
> **原始作者：** Beta-TNT
> **原始编号：** superkieran-wooyundrops:1134
> **原始发布时间：** 2016-04-07 15:16
> **声明：内容仅用于技术研究和个人使用，版权归 wooyun.org。**

---

# 0x00 借问酒家

有什么东西想拿却拿不出来？不妨开开脑洞。

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

缘起是2014年底的时候看到金山做的在线恶意代码分析系统“Fire eye”（https://fireeye.ijinshan.com/）。感觉很新鲜，丢了自己攒的几个样本丢了上去，分析的结果还算可以。从分析报告来看，它也是一类沙箱检测工具，把样本丢到虚拟机里跑，再在虚拟机内外布控，监测样本的各种行为，最后生成分析报告并给出判断是否恶意样本，分析报告里还包含样本运行时的截图。

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

# 0x01 柳暗

于是我开始有点好奇，这个沙箱大概是个什么样的，于是自己写了一些小的检测程序丢进去，把环境变量、系统信息、网络配置、进程列表、服务和驱动什么的读出来显示在窗体上，这样从分析报告里的样本截图就能读到这些信息了。
嘛，这里先说一下，本人并不会挖漏洞和逆向，说来惭愧，大学时候的汇编都是补考才过的。就是个小小的.net码农而已。
然后我在系统环境变量里发现一个别的地方没有的玩意：%FEKERNEL%，指向c:\mon\文件夹，想来应该是“FIRE EYE KERNEL”，即包含沙箱内部监控程序的核心文件夹。
有了这个发现自然不会放过，另外专门编写了程序去枚举和读取FEKERNEL里的东西，然而发现只要碰了那个文件夹，样本分析报告就会被隐去大部分内容，和FEKERNEL文件夹直接和间接（比如复制出来之后再读取复制的文件）相关的内容都被删掉了，想来应该是做了某种自我保护。只有读取文件夹大小的操作没被拦截。

# 0x02 花明

不过既然有了目标，路就好找了。试了几次找到了绕过保护的办法，成功读取到了FEKERNEL里的文件并把详细信息。下一步当然就是如何拿到里面的东西咯。
里面是大概几十MB的二进制文件，有EXE有DLL有SYS甚至还有PDB，估计是开发人员方便调试直接把符号文件也一起扔里面了。这么多东西怎么拿出来呢？最初的想法是通过网络传出来，然而沙箱的网络和互联网是不通的，对用户的唯一输出仅限样本分析报告。
然后我发现早几年前有人通过编写样本在注册表里写入HTML代码内容的键值在分析报告页面成功实施了XSS，觉得这个思路是可行的。然而几十MB的东西即便压缩成十几MB再按BASE64编码，写到一个监控程序会监控的地方，仍然没法全部拿出来，因为太多了。就算画在窗体上也…………
……慢着，画在窗体上？
脑袋灵光一闪，这办法可以啊！我先想到的是把BASE64串按能分辨的最小字号写在窗体上，然后进一步想到干脆利用窗体上的像素，一个像素表示一个字节，然后直接想到干脆一个像素用RGB分量存储三个字节，这样可输出的数据量就成几何级数上升。稍微计算了一下，按最高密度的数据传输方案，一个窗体能被截图下来的最大面积足够“画下”压缩过的完整目标数据。
思路有了，东西直接就搞出来了。由于FE只能上传单个可执行文件样本，于是把所有用到的东西打包成一个自解压RAR，并附带解压后执行脚本，先绕过保护读取到FEKERNEL里的所有内容并复制到另外的位置，然后用自带的WINRAR.EXE通过命令行将其压缩，最后把压缩包以二进制打开，把内容“画”在自己窗体上。

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

这样我就顺利拿到了FEKERNEL里的所有东西。当然这还得感谢FE在处理样本截图的时候没有做任何有损压缩，虽然是JPEG格式。
这个漏洞我已在去年提交给乌云：[火眼恶意代码分析系统自保机制绕过导致二进制泄露](http://www.wooyun.org/bugs/wooyun-2015-0101934)

# 0x03 又一村

总结：如果有什么东西你知道在哪，但没法直接拿到，不妨冷静分析一下：

- 你能控制的输入因素有哪些；

- 阻拦你拿到数据的限制因素有什么，有没有绕过的办法；

- 你能拿到的输出数据有哪些，其中哪些可以通过输入数据直接或间接控制，哪些输出数据包含的信息量最大。
综合考虑这三方面因素，并仔细分析，就不难达成目标了。

## Replies
