Smoke Loader:主体、控制台、插件，以及盗版之殇
<p>Smoke Loader 是一个在黑市上公开销售的僵尸网络软件。其活动时间可以追溯到2011年，虽然近年来已经被多次曝光，但保持持续升级，非常活跃。在我们统计中，仅最近半年活跃的样本就超过 1,500 个。</p><p>我们在跟踪这一家族的过程中，捕获了一套完整的恶意程序套件，包括其主体Loader、控制台Panel，以及控制台中包含的插件。对这套样本的分析使我们对其运行机制有了更深入的了解，这将是本文的主要内容之一。</p><p>分析过程中，我们还遇到一组被修改过的特例样本。虽然有人认为这组样本是作者在对抗安全研究人员提取C2主控域名，但仔细分析后，我们认为这是第三方做“盗版”。这部分的分析和研判过程，是本文的主要内容之二。</p><p>Smoke Loader相关的分析文档已经很多，本文不会涉及已经被公开的部分。相关内容，读者可以参阅文末参考部分。</p><h2 id="smoke-loader-">Smoke Loader 套件分析</h2><p>套件中的文件结构见后图，说明如下：</p><ul><li>本体，Loader_new_Cyberbunker.exe</li><li>Web控制台，Panel ，使用未加密的PHP语言编写</li><li>插件，包括 Panel/mods 和 Panel/keylogger，等</li><li>mysql数据库建库脚本 smoke_1.sql，插件规则会存储在这个数据库里</li><li>Smoke Loader的功能介绍，smoke_features.txt</li><li>安装说明</li></ul><figure class="kg-card kg-image-card"><img src="__GHOST_URL__/content/images/2019/02/image.png" class="kg-image" alt loading="lazy"></figure><p><i>图 1. Smoke Loader 目录结构 </i></p><h4 id="-">控制台</h4><p>套件中的 Panel 目录，就是其控制台。将其部署后，得到一个Web控制界面，这是一个标准的Smoke Loader的控件台，样式布局和网上流传的控制台基本一致。</p><p>通过对照恶意软件自带功能说明，可以了解该控制台包括以下12大类功能：</p><ul><li>盗号</li><li>浏览器表单数据收集</li><li>密码嗅探，包括Ftp和邮件</li><li>伪DNS，即域名劫持</li><li>文件搜索，实现全盘文件监控</li><li>进程监控</li><li>DDOS攻击</li><li>键盘记录</li><li>邮件盗窃</li><li>隐藏窗口版TeamViewer</li><li>门罗币挖矿</li><li>用户自定义程序</li></ul><p>其存储位置和执行方式也略有不同：</p><ul><li>前9个功能，从“盗号”到“邮件盗窃”：对应 Panel/mods/plugins中，这是一个自定义格式加密的插件集合。通过逆向可以看到，其中有效的可执行体共计16个。运行时需通过创建进程explorer.exe和内存注入进行加载。</li><li>隐藏窗口版TeamViewer：对应 Panel/mods/tv。运行时由相应的控件插件下载并创建子进程执行。</li><li>门罗币挖矿：对应 Panel/mods/minerXX。运行时由相应的控件插件下载并创建子进程执行。</li><li>用户自定义程序：Smoke Loader的用户还可以指定任意恶意程序进行加载，既可以从控制台直接下发，也可以从指定的URL下载执行。加载的方式也很灵活，可以直接执行也可以作为dll加载，甚至可以直接进程内展开执行。</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="__GHOST_URL__/content/images/2019/02/image-16.png" class="kg-image" alt loading="lazy"><figcaption><i>图 2. Smoke Loader 的Panel控制台，Web界面&nbsp;</i></figcaption></figure><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="__GHOST_URL__/content/images/2019/02/image-2.png" class="kg-image" alt loading="lazy"><figcaption><i>图 3. Smoke Loader 自带功能介绍文件&nbsp;</i></figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="__GHOST_URL__/content/images/2019/02/image-3.png" class="kg-image" alt loading="lazy"><figcaption><i>图 4. Smoke Loader 用户自定义功能界面&nbsp;</i></figcaption></figure><h4 id="--1">插件</h4><p>Smoke Loader的插件系统很灵活，除了首次启动会尝试下载所有自带插件及插件执行规则，还支持通过自带插件和插件规则。</p><p>通过解密plugin共拆解出16个插件，其中若干插件功能相同但适配不同版本操作系统。在我们的测试机上运行时，可以看到Smoke Loader的有效载荷成功创建了9个子进程，每个进程内运行了一个插件。注意，这些进程名虽然是 explorer.exe看似无害，但实际上已经被注入了插件载荷，是恶意进程。具体的注入方式细节，见参考[1]。</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="__GHOST_URL__/content/images/2019/02/image-4.png" class="kg-image" alt loading="lazy"><figcaption><i>图 11. 控制台将数据库中的插件规则下发给 bot</i></figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="__GHOST_URL__/content/images/2019/02/image-5.png" class="kg-image" alt loading="lazy"><figcaption><i>图 12. 测试机中已经运行起来的插件们 </i></figcaption></figure><p>更多插件的细节包括：</p><ul><li><strong>挖矿插件</strong>：它会在收到挖矿指令时下载对应的矿机程序（进程wuauclt.exe）配合启动参数执行挖矿任务。</li><li><strong>DDoS插件</strong>：支持多种常见的DDoS攻击类型，如http get flood, http post flood, download flood, udp flood, syn flood, tcp flood, https get flood, http slowloris flood</li><li><strong>表单信息盗取插件</strong>：支持常见的浏览器，包括 IE, Firefox, Chrom, Opera, Chromium, Yandex browser, Amigo browser, QQ browser, outlook, Thunderbird</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="__GHOST_URL__/content/images/2019/02/image-17.png" class="kg-image" alt loading="lazy"><figcaption><i>图 13. 挖矿插件运行示例&nbsp;</i></figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="__GHOST_URL__/content/images/2019/02/image-18.png" class="kg-image" alt loading="lazy"><figcaption><i><em>图 14. DDoS攻击插件支持的攻击类型</em></i></figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="__GHOST_URL__/content/images/2019/02/image-6.png" class="kg-image" alt loading="lazy"><figcaption><i>图 15. 表单窃取插件支持的浏览器列表 </i></figcaption></figure><h2 id="--2">“对抗”还是“盗版”？</h2><p>有人报告近期流行的Smoke Loader出现了版本[2]，以对抗C2抽取系统，我们也观察到一组类似样本。</p><p>这组样本的目的，实际上不仅可能是“对抗”，我们分析后认为其目的是“盗版”。我们认为这个版本的改动来自第三方而非原作者，目的不是为了对抗安全研究人员分析，而是为了突破原始作者在售出的Loader中写死C2的限制。</p><p>这组样本共88个，有个共同点是其中残存了两个并不生效的C2：</p><ul><li>hxxp://185.35.137.147/mlp/</li><li>hxxp://185.35.137.147/mlp/</li></ul><p>从残存C2出发，我们在手头的其它样本中关联到了有着相同C2、并且生效的样本。我们将后者称为原始样本，前者称为修改版本。通过对比，我们注意到以下特点，并据此认定这组版本是经过二进制Patch的“盗版”：</p><ul><li><strong>相同的残存C2</strong>：所有修改版本中的残存C2是一样的，暗示这组样本同源；</li><li><strong>C2存储方式</strong>：原始样本中是加密存储的，修改样本是明文存储的；</li><li><strong>主备C2机制</strong>：原始样本中是支持的，修改样本是不支持的；</li><li><strong>C2验证机制</strong>：原始样本有验证机制，会通过验证两个C2的CRC32值来决定是否安装启动项以及是否加载插件，修改版本直接用汇编空指令NOP覆盖了验证代码，跳过了验证机制；</li></ul><p>Smoke Loader 在黑市有销售，一套完整的Smoke Loader公开售价约850美元。开发者采用许可证的销售模式，给每个买家发布一套定制好的系统，包含了Loader+Panel。值得注意的是，如果想变更C2就需要重新生成Loader，而每重新生成一个Loader需要10美元。这组“盗版”Loader就可以突破原作者的这个限制。</p><p>Patch后的盗版Loader支持全部功能。但这种Patch方案非常粗暴缺点很明显，硬编码使得一个Loader最多只能支持一个有效C2。样本的网络行为和我们的统计数据也都证实了这一结论。</p><h4 id="-patch-">“盗版”中的三处关键 Patch 代码</h4><p>该版本中有三处关键的Patch代码，分析如下，截图见后：</p><ul><li><strong>第一处Patch</strong>：直接替换了C2配置信息解密函数，将C2明文编码在代码中，调用解密函数时直接返回C2地址。后图可见，每次调用解密函数返回的C2都是代码段中的“hxxp://jsoc8492.us/jd/”；</li><li><strong>第二处Patch</strong>：覆盖了验证第一C2的代码。正版样本会计算第一C2的CRC值，然后和加密key做比较，如果失配则不会加载插件；</li><li><strong>第三处Patch</strong>：与第二处类似，覆盖了验证第二C2的代码。</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="__GHOST_URL__/content/images/2019/02/image-7.png" class="kg-image" alt loading="lazy"><figcaption><i>图 16. Patch 1，替换了C2配置信息的解密函数 </i></figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="__GHOST_URL__/content/images/2019/02/image-8.png" class="kg-image" alt loading="lazy"><figcaption><i>图 17. Patch 2, 使用空指令NOP覆盖以跳过第一C2验证机制 </i></figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="__GHOST_URL__/content/images/2019/02/image-9.png" class="kg-image" alt loading="lazy"><figcaption><i>图 18. Patch 3, 使用空指令NOP覆盖以跳过第二C2验证机制 </i></figcaption></figure><p></p><h2 id="3-">3. 其它有意思的细节</h2><h4 id="loader">Loader</h4><p>套件中的Loader_new_Cyberbunker.exe就是Loader本体。</p><p>Loader由注入器和有效载荷组成。注入器负责一些简单的沙箱和逆向对抗工作，并最终把有效载荷注入explorer进程。有效载荷是真正的工作代码。</p><p>2018版的注入器，会使用PROPagate的加壳注入方案，这一点在Talos的公开文档中已经提及。通常，Smoke Loader的买家在通过各种渠道传播恶意程序之前，还会继续使用自己的加壳方案对Loader加壳。所以，流行的样本基本上都会有两到三层壳。</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="__GHOST_URL__/content/images/2019/02/image-10.png" class="kg-image" alt loading="lazy"><figcaption><i>图 5. 流行的Smoke Loader样本通常会有两到三层壳 </i></figcaption></figure><h4 id="-c2-">上线包和C2指令通信格式</h4><p>样本运行后，会发送一个数据包向控制台注册，称为上线包或者注册包。2018版注册包的数据结构在既往已公开分析中未见清晰定义，我们可以利用控制台代码中相应部分轻松搞定。</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="__GHOST_URL__/content/images/2019/02/image-11.png" class="kg-image" alt loading="lazy"><figcaption><i>图 6. 解密后的上线包 </i></figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="__GHOST_URL__/content/images/2019/02/image-19.png" class="kg-image" alt loading="lazy"><figcaption><i><em>图 7. 控制台代码中定义的上线包数据结构</em></i></figcaption></figure><p>通过分析，我们可以明确该上线包的格式如下：</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="__GHOST_URL__/content/images/2019/02/image-12.png" class="kg-image" alt loading="lazy"><figcaption><i>图 8. Smoke Loader 上线包的格式 </i></figcaption></figure><p>其中部分字段的意义如下：</p><ul><li><strong>AFFID</strong>：也叫Seller ID，这是为了明确分发渠道，用来和合作的团伙分成的标记，在打包的时候硬编码进样本。最常见的取值是 Good, cece 和 new1，不过也有大约15%的样本中这里是空的；</li><li><strong>BOT_WINVER</strong>：感染主机的OS版本，从代码看基本支持当前所有Windows个人版系统，从WinXP到Win10，见下图；</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="__GHOST_URL__/content/images/2019/02/image-13.png" class="kg-image" alt loading="lazy"><figcaption><i>图 9. Smoke Loader 能够感染主机的OS版本 </i></figcaption></figure><p><strong>BOT_RES</strong>：用来确定是否是安装版，因为Smoke Loader发行时会分为可安装版及不可安装版，售价略有不同。这个标记是用来区分版本类型的；</p><ul><li><strong>BOT_CMD</strong>：指令编号，控制台定义的指令共有15个，详见下图。</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="__GHOST_URL__/content/images/2019/02/image-14.png" class="kg-image" alt loading="lazy"><figcaption><i>图 10. Smoke Loader 支持的指令类型 </i></figcaption></figure><p></p><h2 id="4-ioc-">4. IoC统计</h2><p>我们对近半年收集到的 Smoke Loader样本做了一些简单的统计，详细数据请参考附录IOC：</p><ul><li>样本： 1656 个</li><li>C2：  296个</li><li>Affid：42个</li></ul><p>破解版相关统计：</p><ul><li>原始版本 vs 破解版样本：约为1568比88</li><li>破解版中生效的 C2 URL 个数 ： 27 个</li><li>这些C2 URL 涉及到的域名 : 15 个</li></ul><p>按照Affid (Seller ID)进行分组，样本的统计情况如下。其中Good、cece、new1 是这个渠道较大的消费者，三者合计占据了 88%。NA 是样本中该处为空的情况：</p><pre><code>affid   count   %
Good    826     49.9%
cece    395     23.9%
[NA]    238     14.4%
new1    77      4.7%
1501    21      1.3%
0       13      0.8%
Pitt    12      0.7%
1301    9       0.5%
sel1    7       0.4%
Form    5       0.3%
OTHER   52      3.1%
</code></pre><h2 id="5-ioc">5. IoC</h2><p>Malware Sample md5<br>完成的md5列表超过 1,500 行，可以在 <a href="__GHOST_URL__/file/ioc_smoke_loader_md5.txt">这里</a> 下载。下面列出了前十条记录：</p><pre><code>001dacf6608df69d485514a172fff05d
00521a5e800a85de875b703e9bc1f507
00891f91904955fb69fad4488f96741a
008d5eb400e41fcb87ef64db276013dc
009e213b63a4830adf5df372261ae6b0
00b8a47bdf14880ebeba6bebc3ea7dbc
00c5063e13752357b35c097c4c0f7059
00eef71e18381a537b1750c7f2983025
01162c00d54b976536d692173ef3e039
013748c007f80fb7cc2c42ca424e4733
</code></pre><p>Malware C2<br>完整的C2 列表超过 250 行，可以在 <a href="__GHOST_URL__/file/ioc_smoke_loader_c2.txt">这里</a> 下载，下面是前十条记录。其中各字段的含义如下。</p><ul><li>version 版本号</li><li>req_key 发包数据的rc4加密key</li><li>res_key 收包数据的rc4解密key</li><li>remaining_c2 “盗版”中残存的C2</li><li>affid Seller ID</li><li>md5 count 有多少独立样本包含该C2</li></ul><p>关于 C2 列表的一些细节：</p><ul><li>大部分的样本中会有2到5个C2，但也有个别样本中包含 75 个C2 之多；</li><li>有些C2 相关的样本，在升级之后 req_key, res_key 会发生变化；</li></ul><pre><code>#           NA                                             C2                   version  req_key  res_key          remaining_c2_if_exists                            affid md5_count
0                                                          http://makak.bit/2/  2018  0xe5400000  0xa6b397e0                                                         Good  826
1                                                          http://mytter.ru/2/  2018  0xe5400000  0xa6b397e0                                                         Good  826
2                                                       http://svoloch.club/2/  2018  0xe5400000  0xa6b397e0                                                         Good  826
3                                                            http://d3s1.me/2/  2018  0x3b22e540  0xa6b397e0                                                         cece  395
4                                                       http://kiyanka.club/2/  2018  0x3b22e540  0xa6b397e0                                                         cece  395
5                                                      http://proxy-exe.bit/2/  2018  0x3b22e540  0xa6b397e0                                                         cece  395
6                                                     http://5gssghhs2w.org/2/  2018  0xe5400000  0xa6b397e0                                                         new1   77
7                                                          http://dvhwzq.ru/2/  2018  0xe5400000  0xa6b397e0                                                         new1   77
8                                                          http://hdxaet.ru/2/  2018  0xe5400000  0xa6b397e0                                                         new1   77
9                                                      http://hghwwgh6.info/2/  2018  0xe5400000  0xa6b397e0                                                         new1   77
</code></pre><h2 id="--3">参考资料</h2><ul><li> [1] <a href="https://blog.talosintelligence.com/2018/07/smoking-guns-smoke-loader-learned-new.html">https://blog.talosintelligence.com/2018/07/smoking-guns-smoke-loader-learned-new.html</a> </li><li> [2] <a href="https://int0xcc.svbtle.com/a-taste-of-our-own-medicine-how-smokeloader-is-deceiving-dynamic-configuration-extraction-by-using-binary-code-as-bait">https://int0xcc.svbtle.com/a-taste-of-our-own-medicine-how-smokeloader-is-deceiving-dynamic-configuration-extraction-by-using-binary-code-as-bait</a> </li><li> [3] <a href="https://www.cert.pl/en/news/single/dissecting-smoke-loader/">https://www.cert.pl/en/news/single/dissecting-smoke-loader/</a> </li></ul>
Smoke Loader 是一个在黑市上公开销售的僵尸网络软件。其活动时间可以追溯到2011年，虽然近年来已经被多次曝光，但保持持续升级，非常活跃。在我们统计中，仅最近半年活跃的样本就超过 1,500 个。

我们在跟踪这一家族的过程中，捕获了一套完整的恶意程序套件，包括其主体Loader、控制台Panel，以及控制台中包含的插件。对这套样本的分析使我们对其运行机制有了更深入的了解，这将是本文的主要内容之一。

分析过程中，我们还遇到一组被修改过的特例样本。虽然有人认为这组样本是作者在对抗安全研究人员提取C2主控域名，但仔细分析后，我们认为这是第三方做“盗版”。这部分的分析和研判过程，是本文的主要内容之二。

Smoke Loader相关的分析文档已经很多，本文不会涉及已经被公开的部分。相关内容，读者可以参阅文末参考部分。


Smoke Loader 套件分析

套件中的文件结构见后图，说明如下：

 * 本体，Loader_new_Cyberbunker.exe
 * Web控制台，Panel ，使用未加密的PHP语言编写
 * 插件，包括 Panel/mods 和 Panel/keylogger，等
 * mysql数据库建库脚本 smoke_1.sql，插件规则会存储在这个数据库里
 * Smoke Loader的功能介绍，smoke_features.txt
 * 安装说明

图 1. Smoke Loader 目录结构

控制台

套件中的 Panel 目录，就是其控制台。将其部署后，得到一个Web控制界面，这是一个标准的Smoke Loader的控件台，样式布局和网上流传的控制台基本一致。

通过对照恶意软件自带功能说明，可以了解该控制台包括以下12大类功能：

 * 盗号
 * 浏览器表单数据收集
 * 密码嗅探，包括Ftp和邮件
 * 伪DNS，即域名劫持
 * 文件搜索，实现全盘文件监控
 * 进程监控
 * DDOS攻击
 * 键盘记录
 * 邮件盗窃
 * 隐藏窗口版TeamViewer
 * 门罗币挖矿
 * 用户自定义程序

其存储位置和执行方式也略有不同：

 * 前9个功能，从“盗号”到“邮件盗窃”：对应 Panel/mods/plugins中，这是一个自定义格式加密的插件集合。通过逆向可以看到，其中有效的可执行体共计16个。运行时需通过创建进程explorer.exe和内存注入进行加载。
 * 隐藏窗口版TeamViewer：对应 Panel/mods/tv。运行时由相应的控件插件下载并创建子进程执行。
 * 门罗币挖矿：对应 Panel/mods/minerXX。运行时由相应的控件插件下载并创建子进程执行。
 * 用户自定义程序：Smoke Loader的用户还可以指定任意恶意程序进行加载，既可以从控制台直接下发，也可以从指定的URL下载执行。加载的方式也很灵活，可以直接执行也可以作为dll加载，甚至可以直接进程内展开执行。

插件

Smoke Loader的插件系统很灵活，除了首次启动会尝试下载所有自带插件及插件执行规则，还支持通过自带插件和插件规则。

通过解密plugin共拆解出16个插件，其中若干插件功能相同但适配不同版本操作系统。在我们的测试机上运行时，可以看到Smoke Loader的有效载荷成功创建了9个子进程，每个进程内运行了一个插件。注意，这些进程名虽然是 explorer.exe看似无害，但实际上已经被注入了插件载荷，是恶意进程。具体的注入方式细节，见参考[1]。

更多插件的细节包括：

 * 挖矿插件：它会在收到挖矿指令时下载对应的矿机程序（进程wuauclt.exe）配合启动参数执行挖矿任务。
 * DDoS插件：支持多种常见的DDoS攻击类型，如http get flood, http post flood, download flood, udp flood, syn flood, tcp flood, https get flood, http slowloris flood
 * 表单信息盗取插件：支持常见的浏览器，包括 IE, Firefox, Chrom, Opera, Chromium, Yandex browser, Amigo browser, QQ browser, outlook, Thunderbird


“对抗”还是“盗版”？

有人报告近期流行的Smoke Loader出现了版本[2]，以对抗C2抽取系统，我们也观察到一组类似样本。

这组样本的目的，实际上不仅可能是“对抗”，我们分析后认为其目的是“盗版”。我们认为这个版本的改动来自第三方而非原作者，目的不是为了对抗安全研究人员分析，而是为了突破原始作者在售出的Loader中写死C2的限制。

这组样本共88个，有个共同点是其中残存了两个并不生效的C2：

 * hxxp://185.35.137.147/mlp/
 * hxxp://185.35.137.147/mlp/

从残存C2出发，我们在手头的其它样本中关联到了有着相同C2、并且生效的样本。我们将后者称为原始样本，前者称为修改版本。通过对比，我们注意到以下特点，并据此认定这组版本是经过二进制Patch的“盗版”：

 * 相同的残存C2：所有修改版本中的残存C2是一样的，暗示这组样本同源；
 * C2存储方式：原始样本中是加密存储的，修改样本是明文存储的；
 * 主备C2机制：原始样本中是支持的，修改样本是不支持的；
 * C2验证机制：原始样本有验证机制，会通过验证两个C2的CRC32值来决定是否安装启动项以及是否加载插件，修改版本直接用汇编空指令NOP覆盖了验证代码，跳过了验证机制；

Smoke Loader 在黑市有销售，一套完整的Smoke Loader公开售价约850美元。开发者采用许可证的销售模式，给每个买家发布一套定制好的系统，包含了Loader+Panel。值得注意的是，如果想变更C2就需要重新生成Loader，而每重新生成一个Loader需要10美元。这组“盗版”Loader就可以突破原作者的这个限制。

Patch后的盗版Loader支持全部功能。但这种Patch方案非常粗暴缺点很明显，硬编码使得一个Loader最多只能支持一个有效C2。样本的网络行为和我们的统计数据也都证实了这一结论。

“盗版”中的三处关键 Patch 代码

该版本中有三处关键的Patch代码，分析如下，截图见后：

 * 第一处Patch：直接替换了C2配置信息解密函数，将C2明文编码在代码中，调用解密函数时直接返回C2地址。后图可见，每次调用解密函数返回的C2都是代码段中的“hxxp://jsoc8492.us/jd/”；
 * 第二处Patch：覆盖了验证第一C2的代码。正版样本会计算第一C2的CRC值，然后和加密key做比较，如果失配则不会加载插件；
 * 第三处Patch：与第二处类似，覆盖了验证第二C2的代码。




3. 其它有意思的细节

Loader

套件中的Loader_new_Cyberbunker.exe就是Loader本体。

Loader由注入器和有效载荷组成。注入器负责一些简单的沙箱和逆向对抗工作，并最终把有效载荷注入explorer进程。有效载荷是真正的工作代码。

2018版的注入器，会使用PROPagate的加壳注入方案，这一点在Talos的公开文档中已经提及。通常，Smoke Loader的买家在通过各种渠道传播恶意程序之前，还会继续使用自己的加壳方案对Loader加壳。所以，流行的样本基本上都会有两到三层壳。

上线包和C2指令通信格式

样本运行后，会发送一个数据包向控制台注册，称为上线包或者注册包。2018版注册包的数据结构在既往已公开分析中未见清晰定义，我们可以利用控制台代码中相应部分轻松搞定。

通过分析，我们可以明确该上线包的格式如下：

其中部分字段的意义如下：

 * AFFID：也叫Seller ID，这是为了明确分发渠道，用来和合作的团伙分成的标记，在打包的时候硬编码进样本。最常见的取值是 Good, cece 和 new1，不过也有大约15%的样本中这里是空的；
 * BOT_WINVER：感染主机的OS版本，从代码看基本支持当前所有Windows个人版系统，从WinXP到Win10，见下图；

BOT_RES：用来确定是否是安装版，因为Smoke Loader发行时会分为可安装版及不可安装版，售价略有不同。这个标记是用来区分版本类型的；

 * BOT_CMD：指令编号，控制台定义的指令共有15个，详见下图。




4. IoC统计

我们对近半年收集到的 Smoke Loader样本做了一些简单的统计，详细数据请参考附录IOC：

 * 样本： 1656 个
 * C2：  296个
 * Affid：42个

破解版相关统计：

 * 原始版本 vs 破解版样本：约为1568比88
 * 破解版中生效的 C2 URL 个数 ： 27 个
 * 这些C2 URL 涉及到的域名 : 15 个

按照Affid (Seller ID)进行分组，样本的统计情况如下。其中Good、cece、new1 是这个渠道较大的消费者，三者合计占据了 88%。NA 是样本中该处为空的情况：

affid   count   %
Good    826     49.9%
cece    395     23.9%
[NA]    238     14.4%
new1    77      4.7%
1501    21      1.3%
0       13      0.8%
Pitt    12      0.7%
1301    9       0.5%
sel1    7       0.4%
Form    5       0.3%
OTHER   52      3.1%



5. IoC

Malware Sample md5
完成的md5列表超过 1,500 行，可以在 这里 下载。下面列出了前十条记录：

001dacf6608df69d485514a172fff05d
00521a5e800a85de875b703e9bc1f507
00891f91904955fb69fad4488f96741a
008d5eb400e41fcb87ef64db276013dc
009e213b63a4830adf5df372261ae6b0
00b8a47bdf14880ebeba6bebc3ea7dbc
00c5063e13752357b35c097c4c0f7059
00eef71e18381a537b1750c7f2983025
01162c00d54b976536d692173ef3e039
013748c007f80fb7cc2c42ca424e4733


Malware C2
完整的C2 列表超过 250 行，可以在 这里 下载，下面是前十条记录。其中各字段的含义如下。

 * version 版本号
 * req_key 发包数据的rc4加密key
 * res_key 收包数据的rc4解密key
 * remaining_c2 “盗版”中残存的C2
 * affid Seller ID
 * md5 count 有多少独立样本包含该C2

关于 C2 列表的一些细节：

 * 大部分的样本中会有2到5个C2，但也有个别样本中包含 75 个C2 之多；
 * 有些C2 相关的样本，在升级之后 req_key, res_key 会发生变化；

#           NA                                             C2                   version  req_key  res_key          remaining_c2_if_exists                            affid md5_count
0                                                          http://makak.bit/2/  2018  0xe5400000  0xa6b397e0                                                         Good  826
1                                                          http://mytter.ru/2/  2018  0xe5400000  0xa6b397e0                                                         Good  826
2                                                       http://svoloch.club/2/  2018  0xe5400000  0xa6b397e0                                                         Good  826
3                                                            http://d3s1.me/2/  2018  0x3b22e540  0xa6b397e0                                                         cece  395
4                                                       http://kiyanka.club/2/  2018  0x3b22e540  0xa6b397e0                                                         cece  395
5                                                      http://proxy-exe.bit/2/  2018  0x3b22e540  0xa6b397e0                                                         cece  395
6                                                     http://5gssghhs2w.org/2/  2018  0xe5400000  0xa6b397e0                                                         new1   77
7                                                          http://dvhwzq.ru/2/  2018  0xe5400000  0xa6b397e0                                                         new1   77
8                                                          http://hdxaet.ru/2/  2018  0xe5400000  0xa6b397e0                                                         new1   77
9                                                      http://hghwwgh6.info/2/  2018  0xe5400000  0xa6b397e0                                                         new1   77



参考资料

 * [1] https://blog.talosintelligence.com/2018/07/smoking-guns-smoke-loader-learned-new.html
 * [2] https://int0xcc.svbtle.com/a-taste-of-our-own-medicine-how-smokeloader-is-deceiving-dynamic-configuration-extraction-by-using-binary-code-as-bait
 * [3] https://www.cert.pl/en/news/single/dissecting-smoke-loader/
{"version":"0.3.1","atoms":[["soft-return","",{}],["soft-return","",{}]],"cards":[["image",{"src":"__GHOST_URL__/content/images/2019/02/image.png"}],["image",{"src":"__GHOST_URL__/content/images/2019/02/image-16.png","caption":"<i>图 2. Smoke Loader 的Panel控制台，Web界面&nbsp;</i>"}],["image",{"src":"__GHOST_URL__/content/images/2019/02/image-2.png","cardWidth":"wide","caption":"<i>图 3. Smoke Loader 自带功能介绍文件&nbsp;</i>"}],["image",{"src":"__GHOST_URL__/content/images/2019/02/image-3.png","caption":"<i>图 4. Smoke Loader 用户自定义功能界面&nbsp;</i>"}],["image",{"src":"__GHOST_URL__/content/images/2019/02/image-4.png","caption":"<i>图 11. 控制台将数据库中的插件规则下发给 bot</i>"}],["image",{"src":"__GHOST_URL__/content/images/2019/02/image-5.png","caption":"<i>图 12. 测试机中已经运行起来的插件们 </i>"}],["image",{"src":"__GHOST_URL__/content/images/2019/02/image-17.png","caption":"<i>图 13. 挖矿插件运行示例&nbsp;</i>"}],["image",{"src":"__GHOST_URL__/content/images/2019/02/image-18.png","caption":"<i><em>图 14. DDoS攻击插件支持的攻击类型</em></i>"}],["image",{"src":"__GHOST_URL__/content/images/2019/02/image-6.png","caption":"<i>图 15. 表单窃取插件支持的浏览器列表 </i>"}],["image",{"src":"__GHOST_URL__/content/images/2019/02/image-7.png","caption":"<i>图 16. Patch 1，替换了C2配置信息的解密函数 </i>"}],["image",{"src":"__GHOST_URL__/content/images/2019/02/image-8.png","caption":"<i>图 17. Patch 2, 使用空指令NOP覆盖以跳过第一C2验证机制 </i>"}],["image",{"src":"__GHOST_URL__/content/images/2019/02/image-9.png","caption":"<i>图 18. Patch 3, 使用空指令NOP覆盖以跳过第二C2验证机制 </i>"}],["image",{"src":"__GHOST_URL__/content/images/2019/02/image-10.png","caption":"<i>图 5. 流行的Smoke Loader样本通常会有两到三层壳 </i>"}],["image",{"src":"__GHOST_URL__/content/images/2019/02/image-11.png","caption":"<i>图 6. 解密后的上线包 </i>"}],["image",{"src":"__GHOST_URL__/content/images/2019/02/image-19.png","caption":"<i><em>图 7. 控制台代码中定义的上线包数据结构</em></i>"}],["image",{"src":"__GHOST_URL__/content/images/2019/02/image-12.png","caption":"<i>图 8. Smoke Loader 上线包的格式 </i>"}],["image",{"src":"__GHOST_URL__/content/images/2019/02/image-13.png","caption":"<i>图 9. Smoke Loader 能够感染主机的OS版本 </i>"}],["image",{"src":"__GHOST_URL__/content/images/2019/02/image-14.png","caption":"<i>图 10. Smoke Loader 支持的指令类型 </i>"}],["code",{"code":"affid   count   %\nGood    826     49.9%\ncece    395     23.9%\n[NA]    238     14.4%\nnew1    77      4.7%\n1501    21      1.3%\n0       13      0.8%\nPitt    12      0.7%\n1301    9       0.5%\nsel1    7       0.4%\nForm    5       0.3%\nOTHER   52      3.1%\n"}],["code",{"code":"001dacf6608df69d485514a172fff05d\n00521a5e800a85de875b703e9bc1f507\n00891f91904955fb69fad4488f96741a\n008d5eb400e41fcb87ef64db276013dc\n009e213b63a4830adf5df372261ae6b0\n00b8a47bdf14880ebeba6bebc3ea7dbc\n00c5063e13752357b35c097c4c0f7059\n00eef71e18381a537b1750c7f2983025\n01162c00d54b976536d692173ef3e039\n013748c007f80fb7cc2c42ca424e4733\n"}],["code",{"code":"#           NA                                             C2                   version  req_key  res_key          remaining_c2_if_exists                            affid md5_count\n0                                                          http://makak.bit/2/  2018  0xe5400000  0xa6b397e0                                                         Good  826\n1                                                          http://mytter.ru/2/  2018  0xe5400000  0xa6b397e0                                                         Good  826\n2                                                       http://svoloch.club/2/  2018  0xe5400000  0xa6b397e0                                                         Good  826\n3                                                            http://d3s1.me/2/  2018  0x3b22e540  0xa6b397e0                                                         cece  395\n4                                                       http://kiyanka.club/2/  2018  0x3b22e540  0xa6b397e0                                                         cece  395\n5                                                      http://proxy-exe.bit/2/  2018  0x3b22e540  0xa6b397e0                                                         cece  395\n6                                                     http://5gssghhs2w.org/2/  2018  0xe5400000  0xa6b397e0                                                         new1   77\n7                                                          http://dvhwzq.ru/2/  2018  0xe5400000  0xa6b397e0                                                         new1   77\n8                                                          http://hdxaet.ru/2/  2018  0xe5400000  0xa6b397e0                                                         new1   77\n9                                                      http://hghwwgh6.info/2/  2018  0xe5400000  0xa6b397e0                                                         new1   77\n"}]],"markups":[["i"],["strong"],["a",["href","__GHOST_URL__/file/ioc_smoke_loader_md5.txt"]],["a",["href","__GHOST_URL__/file/ioc_smoke_loader_c2.txt"]],["a",["href","https://blog.talosintelligence.com/2018/07/smoking-guns-smoke-loader-learned-new.html"]],["a",["href","https://int0xcc.svbtle.com/a-taste-of-our-own-medicine-how-smokeloader-is-deceiving-dynamic-configuration-extraction-by-using-binary-code-as-bait"]],["a",["href","https://www.cert.pl/en/news/single/dissecting-smoke-loader/"]]],"sections":[[1,"p",[[0,[],0,"Smoke Loader 是一个在黑市上公开销售的僵尸网络软件。其活动时间可以追溯到2011年，虽然近年来已经被多次曝光，但保持持续升级，非常活跃。在我们统计中，仅最近半年活跃的样本就超过 1,500 个。"]]],[1,"p",[[0,[],0,"我们在跟踪这一家族的过程中，捕获了一套完整的恶意程序套件，包括其主体Loader、控制台Panel，以及控制台中包含的插件。对这套样本的分析使我们对其运行机制有了更深入的了解，这将是本文的主要内容之一。"]]],[1,"p",[[0,[],0,"分析过程中，我们还遇到一组被修改过的特例样本。虽然有人认为这组样本是作者在对抗安全研究人员提取C2主控域名，但仔细分析后，我们认为这是第三方做“盗版”。这部分的分析和研判过程，是本文的主要内容之二。"]]],[1,"p",[[0,[],0,"Smoke Loader相关的分析文档已经很多，本文不会涉及已经被公开的部分。相关内容，读者可以参阅文末参考部分。"]]],[1,"h2",[[0,[],0,"Smoke Loader 套件分析"]]],[1,"p",[[0,[],0,"套件中的文件结构见后图，说明如下："]]],[3,"ul",[[[0,[],0,"本体，Loader_new_Cyberbunker.exe"]],[[0,[],0,"Web控制台，Panel ，使用未加密的PHP语言编写"]],[[0,[],0,"插件，包括 Panel/mods 和 Panel/keylogger，等"]],[[0,[],0,"mysql数据库建库脚本 smoke_1.sql，插件规则会存储在这个数据库里"]],[[0,[],0,"Smoke Loader的功能介绍，smoke_features.txt"]],[[0,[],0,"安装说明"]]]],[10,0],[1,"p",[[0,[0],1,"图 1. Smoke Loader 目录结构 "]]],[1,"h4",[[0,[],0,"控制台"]]],[1,"p",[[0,[],0,"套件中的 Panel 目录，就是其控制台。将其部署后，得到一个Web控制界面，这是一个标准的Smoke Loader的控件台，样式布局和网上流传的控制台基本一致。"]]],[1,"p",[[0,[],0,"通过对照恶意软件自带功能说明，可以了解该控制台包括以下12大类功能："]]],[3,"ul",[[[0,[],0,"盗号"]],[[0,[],0,"浏览器表单数据收集"]],[[0,[],0,"密码嗅探，包括Ftp和邮件"]],[[0,[],0,"伪DNS，即域名劫持"]],[[0,[],0,"文件搜索，实现全盘文件监控"]],[[0,[],0,"进程监控"]],[[0,[],0,"DDOS攻击"]],[[0,[],0,"键盘记录"]],[[0,[],0,"邮件盗窃"]],[[0,[],0,"隐藏窗口版TeamViewer"]],[[0,[],0,"门罗币挖矿"]],[[0,[],0,"用户自定义程序"]]]],[1,"p",[[0,[],0,"其存储位置和执行方式也略有不同："]]],[3,"ul",[[[0,[],0,"前9个功能，从“盗号”到“邮件盗窃”：对应 Panel/mods/plugins中，这是一个自定义格式加密的插件集合。通过逆向可以看到，其中有效的可执行体共计16个。运行时需通过创建进程explorer.exe和内存注入进行加载。"]],[[0,[],0,"隐藏窗口版TeamViewer：对应 Panel/mods/tv。运行时由相应的控件插件下载并创建子进程执行。"]],[[0,[],0,"门罗币挖矿：对应 Panel/mods/minerXX。运行时由相应的控件插件下载并创建子进程执行。"]],[[0,[],0,"用户自定义程序：Smoke Loader的用户还可以指定任意恶意程序进行加载，既可以从控制台直接下发，也可以从指定的URL下载执行。加载的方式也很灵活，可以直接执行也可以作为dll加载，甚至可以直接进程内展开执行。"]]]],[10,1],[10,2],[10,3],[1,"h4",[[0,[],0,"插件"]]],[1,"p",[[0,[],0,"Smoke Loader的插件系统很灵活，除了首次启动会尝试下载所有自带插件及插件执行规则，还支持通过自带插件和插件规则。"]]],[1,"p",[[0,[],0,"通过解密plugin共拆解出16个插件，其中若干插件功能相同但适配不同版本操作系统。在我们的测试机上运行时，可以看到Smoke Loader的有效载荷成功创建了9个子进程，每个进程内运行了一个插件。注意，这些进程名虽然是 explorer.exe看似无害，但实际上已经被注入了插件载荷，是恶意进程。具体的注入方式细节，见参考[1]。"]]],[10,4],[10,5],[1,"p",[[0,[],0,"更多插件的细节包括："]]],[3,"ul",[[[0,[1],1,"挖矿插件"],[0,[],0,"：它会在收到挖矿指令时下载对应的矿机程序（进程wuauclt.exe）配合启动参数执行挖矿任务。"]],[[0,[1],1,"DDoS插件"],[0,[],0,"：支持多种常见的DDoS攻击类型，如http get flood, http post flood, download flood, udp flood, syn flood, tcp flood, https get flood, http slowloris flood"]],[[0,[1],1,"表单信息盗取插件"],[0,[],0,"：支持常见的浏览器，包括 IE, Firefox, Chrom, Opera, Chromium, Yandex browser, Amigo browser, QQ browser, outlook, Thunderbird"]]]],[10,6],[10,7],[10,8],[1,"h2",[[0,[],0,"“对抗”还是“盗版”？"]]],[1,"p",[[0,[],0,"有人报告近期流行的Smoke Loader出现了版本[2]，以对抗C2抽取系统，我们也观察到一组类似样本。"]]],[1,"p",[[0,[],0,"这组样本的目的，实际上不仅可能是“对抗”，我们分析后认为其目的是“盗版”。我们认为这个版本的改动来自第三方而非原作者，目的不是为了对抗安全研究人员分析，而是为了突破原始作者在售出的Loader中写死C2的限制。"]]],[1,"p",[[0,[],0,"这组样本共88个，有个共同点是其中残存了两个并不生效的C2："]]],[3,"ul",[[[0,[],0,"hxxp://185.35.137.147/mlp/"]],[[0,[],0,"hxxp://185.35.137.147/mlp/"]]]],[1,"p",[[0,[],0,"从残存C2出发，我们在手头的其它样本中关联到了有着相同C2、并且生效的样本。我们将后者称为原始样本，前者称为修改版本。通过对比，我们注意到以下特点，并据此认定这组版本是经过二进制Patch的“盗版”："]]],[3,"ul",[[[0,[1],1,"相同的残存C2"],[0,[],0,"：所有修改版本中的残存C2是一样的，暗示这组样本同源；"]],[[0,[1],1,"C2存储方式"],[0,[],0,"：原始样本中是加密存储的，修改样本是明文存储的；"]],[[0,[1],1,"主备C2机制"],[0,[],0,"：原始样本中是支持的，修改样本是不支持的；"]],[[0,[1],1,"C2验证机制"],[0,[],0,"：原始样本有验证机制，会通过验证两个C2的CRC32值来决定是否安装启动项以及是否加载插件，修改版本直接用汇编空指令NOP覆盖了验证代码，跳过了验证机制；"]]]],[1,"p",[[0,[],0,"Smoke Loader 在黑市有销售，一套完整的Smoke Loader公开售价约850美元。开发者采用许可证的销售模式，给每个买家发布一套定制好的系统，包含了Loader+Panel。值得注意的是，如果想变更C2就需要重新生成Loader，而每重新生成一个Loader需要10美元。这组“盗版”Loader就可以突破原作者的这个限制。"]]],[1,"p",[[0,[],0,"Patch后的盗版Loader支持全部功能。但这种Patch方案非常粗暴缺点很明显，硬编码使得一个Loader最多只能支持一个有效C2。样本的网络行为和我们的统计数据也都证实了这一结论。"]]],[1,"h4",[[0,[],0,"“盗版”中的三处关键 Patch 代码"]]],[1,"p",[[0,[],0,"该版本中有三处关键的Patch代码，分析如下，截图见后："]]],[3,"ul",[[[0,[1],1,"第一处Patch"],[0,[],0,"：直接替换了C2配置信息解密函数，将C2明文编码在代码中，调用解密函数时直接返回C2地址。后图可见，每次调用解密函数返回的C2都是代码段中的“hxxp://jsoc8492.us/jd/”；"]],[[0,[1],1,"第二处Patch"],[0,[],0,"：覆盖了验证第一C2的代码。正版样本会计算第一C2的CRC值，然后和加密key做比较，如果失配则不会加载插件；"]],[[0,[1],1,"第三处Patch"],[0,[],0,"：与第二处类似，覆盖了验证第二C2的代码。"]]]],[10,9],[10,10],[10,11],[1,"p",[]],[1,"h2",[[0,[],0,"3. 其它有意思的细节"]]],[1,"h4",[[0,[],0,"Loader"]]],[1,"p",[[0,[],0,"套件中的Loader_new_Cyberbunker.exe就是Loader本体。"]]],[1,"p",[[0,[],0,"Loader由注入器和有效载荷组成。注入器负责一些简单的沙箱和逆向对抗工作，并最终把有效载荷注入explorer进程。有效载荷是真正的工作代码。"]]],[1,"p",[[0,[],0,"2018版的注入器，会使用PROPagate的加壳注入方案，这一点在Talos的公开文档中已经提及。通常，Smoke Loader的买家在通过各种渠道传播恶意程序之前，还会继续使用自己的加壳方案对Loader加壳。所以，流行的样本基本上都会有两到三层壳。"]]],[10,12],[1,"h4",[[0,[],0,"上线包和C2指令通信格式"]]],[1,"p",[[0,[],0,"样本运行后，会发送一个数据包向控制台注册，称为上线包或者注册包。2018版注册包的数据结构在既往已公开分析中未见清晰定义，我们可以利用控制台代码中相应部分轻松搞定。"]]],[10,13],[10,14],[1,"p",[[0,[],0,"通过分析，我们可以明确该上线包的格式如下："]]],[10,15],[1,"p",[[0,[],0,"其中部分字段的意义如下："]]],[3,"ul",[[[0,[1],1,"AFFID"],[0,[],0,"：也叫Seller ID，这是为了明确分发渠道，用来和合作的团伙分成的标记，在打包的时候硬编码进样本。最常见的取值是 Good, cece 和 new1，不过也有大约15%的样本中这里是空的；"]],[[0,[1],1,"BOT_WINVER"],[0,[],0,"：感染主机的OS版本，从代码看基本支持当前所有Windows个人版系统，从WinXP到Win10，见下图；"]]]],[10,16],[1,"p",[[0,[1],1,"BOT_RES"],[0,[],0,"：用来确定是否是安装版，因为Smoke Loader发行时会分为可安装版及不可安装版，售价略有不同。这个标记是用来区分版本类型的；"]]],[3,"ul",[[[0,[1],1,"BOT_CMD"],[0,[],0,"：指令编号，控制台定义的指令共有15个，详见下图。"]]]],[10,17],[1,"p",[]],[1,"h2",[[0,[],0,"4. IoC统计"]]],[1,"p",[[0,[],0,"我们对近半年收集到的 Smoke Loader样本做了一些简单的统计，详细数据请参考附录IOC："]]],[3,"ul",[[[0,[],0,"样本： 1656 个"]],[[0,[],0,"C2：  296个"]],[[0,[],0,"Affid：42个"]]]],[1,"p",[[0,[],0,"破解版相关统计："]]],[3,"ul",[[[0,[],0,"原始版本 vs 破解版样本：约为1568比88"]],[[0,[],0,"破解版中生效的 C2 URL 个数 ： 27 个"]],[[0,[],0,"这些C2 URL 涉及到的域名 : 15 个"]]]],[1,"p",[[0,[],0,"按照Affid (Seller ID)进行分组，样本的统计情况如下。其中Good、cece、new1 是这个渠道较大的消费者，三者合计占据了 88%。NA 是样本中该处为空的情况："]]],[10,18],[1,"h2",[[0,[],0,"5. IoC"]]],[1,"p",[[0,[],0,"Malware Sample md5"],[1,[],0,0],[0,[],0,"完成的md5列表超过 1,500 行，可以在 "],[0,[2],1,"这里"],[0,[],0," 下载。下面列出了前十条记录："]]],[10,19],[1,"p",[[0,[],0,"Malware C2"],[1,[],0,1],[0,[],0,"完整的C2 列表超过 250 行，可以在 "],[0,[3],1,"这里"],[0,[],0," 下载，下面是前十条记录。其中各字段的含义如下。"]]],[3,"ul",[[[0,[],0,"version 版本号"]],[[0,[],0,"req_key 发包数据的rc4加密key"]],[[0,[],0,"res_key 收包数据的rc4解密key"]],[[0,[],0,"remaining_c2 “盗版”中残存的C2"]],[[0,[],0,"affid Seller ID"]],[[0,[],0,"md5 count 有多少独立样本包含该C2"]]]],[1,"p",[[0,[],0,"关于 C2 列表的一些细节："]]],[3,"ul",[[[0,[],0,"大部分的样本中会有2到5个C2，但也有个别样本中包含 75 个C2 之多；"]],[[0,[],0,"有些C2 相关的样本，在升级之后 req_key, res_key 会发生变化；"]]]],[10,20],[1,"h2",[[0,[],0,"参考资料"]]],[3,"ul",[[[0,[],0," [1] "],[0,[4],1,"https://blog.talosintelligence.com/2018/07/smoking-guns-smoke-loader-learned-new.html"],[0,[],0," "]],[[0,[],0," [2] "],[0,[5],1,"https://int0xcc.svbtle.com/a-taste-of-our-own-medicine-how-smokeloader-is-deceiving-dynamic-configuration-extraction-by-using-binary-code-as-bait"],[0,[],0," "]],[[0,[],0," [3] "],[0,[6],1,"https://www.cert.pl/en/news/single/dissecting-smoke-loader/"],[0,[],0," "]]]]],"ghostVersion":"3.0"}