1

特殊条件数据传输 | WooYun知识库

 6 years ago
source link:
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

特殊条件数据传输

0x00 借问酒家


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

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

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通过命令行将其压缩,最后把压缩包以二进制打开,把内容“画”在自己窗体上。

这样我就顺利拿到了FEKERNEL里的所有东西。当然这还得感谢FE在处理样本截图的时候没有做任何有损压缩,虽然是JPEG格式。

这个漏洞我已在去年提交给乌云:火眼恶意代码分析系统自保机制绕过导致二进制泄露

0x03 又一村


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

  1. 你能控制的输入因素有哪些;
  2. 阻拦你拿到数据的限制因素有什么,有没有绕过的办法;
  3. 你能拿到的输出数据有哪些,其中哪些可以通过输入数据直接或间接控制,哪些输出数据包含的信息量最大。

综合考虑这三方面因素,并仔细分析,就不难达成目标了。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK