偷盗的艺术: Satori 变种正在通过替换钱包地址盗取 ETH 数字代币

在我们2017年12月5日发布的关于Satori的 文章 中，我们提到Satori僵尸网络正在以前所未有的速度快速传播。自从我们的文章发布以后，安全社区、ISP、供应链厂商共同协作，Satori 的控制端服务器被 sinkhole、ISP和供应链厂商采取了行动，Satori的蔓延趋势得到了暂时遏制，但是Satori的威胁依然存在。


从 2018-01-08 10:42:06 GMT+8 开始，我们检测到 Satori 的后继变种正在端口37215和52869上重新建立整个僵尸网络。值得注意的是，新变种开始渗透互联网上现存其他Claymore Miner挖矿设备，通过攻击其3333 管理端口，替换钱包地址，并最终攫取受害挖矿设备的算力和对应的 ETH 代币。我们将这个变种命名为 Satori.Coin.Robber。


这是我们第一次见到僵尸网络替换其他挖矿设备的钱包。这给对抗恶意代码带来了一个新问题：即使安全社区后续接管了 Satori.Coin.Robber 的上联控制服务器，那些已经被篡改了钱包地址的挖矿设备，仍将持续为其贡献算力和 ETH 代币。


到 2018-01-16 17:00 GMT+8 为止，

矿池的 付费记录 显示：


 * Satori.Coin.Robber 当前正在持续挖矿，最后一次更新大约在5分钟之前；
 * Satori.Coin.Robber 过去2天内平均算力大约是 1606 MH/s；账户在过去24小时累积收入 0.1733 个ETH代币；
 * Satori.Coin.Robber 已经在2017年1月11日14时拿到了矿池付出的第一个 ETH 代币，另有 0.76 个代币在账户上；


另外值得一提的是，Satori.Coin.Robber 的作者通过下面这段话宣称自己当前的代码没有恶意，并且留下了一个电子邮箱地址：


Satori dev here, dont be alarmed about this bot it does not currently have any malicious packeting purposes move along. I can be contacted at curtain@riseup.net



Claymore Miner远程管理接口上的系列安全问题


Claymore Miner 是一个流行的的多种代币的挖矿程序，互联网上现存了较多设备正在基于Claymore Miner挖矿。Claymore Miner 提供了远程监控和管理的接口。


按照其 文档 的描述，其 Windows 版本通过 Remote management 子目录下的 EthMan.exe 文件，在3333端口上，提供了远程监控和管理的特性。其早期版本允许远程读取挖矿进程的运行状态，同时也允许执行重启、上传文件等控制行为。


在缺省情况下就可以获得部分控制权，这显然是个脆弱性问题。作为应对，8.1 版本以后，Claymore Miner 缺省使用 -3333 （而不是 3333 ）端口作为启动参数，这意味着远程管理端口是只读的，不再能够执行控制命令。


但是这并不代表这一系列的远程管理接口问题就到此结束了。2017年11月，CVE-2017-16929 被披露，允许远程读写任意文件。对应的 利用代码 也已经批露。


我们这次观察到的漏洞利用代码跟上面列出的均有所不同。这次攻击主要是针对开放了3333端口管理、同时又没有设置远程登录密码的 Claymore Miner挖矿设备。为防止潜在的滥用，我们不会在文章中公布详细细节。


Satori.Coin.Robber 变种正在利用上述脆弱性问题攫取 ETH 代币算力


在 2018-01-08至2018-01-12期间，我们观察到了以下样本：


737af63598ea5f13e74fd2769e0e0405	http://77.73.67.156/mips.satori
141c574ca7dba34513785652077ab4e5	http://77.73.67.156/mips.satori
4e1ea23bfe4198dad0f544693e599f03	http://77.73.67.156/mips.satori
126f9da9582a431745fa222c0ce65e8c	http://77.73.67.156/mips.satori
74d78e8d671f6edb60fe61d5bd6b7529	http://77.73.67.156/mips.satori
59a53a199febe331a7ca78ece6d8f3a4	http://77.73.67.156/b



这组样本是Satori的后续变种，这个变种不仅会扫描早先的 37215 和 52869 端口，还会扫描 3333 端口，三个端口上的扫描载荷分别是：


 * 端口 37215 : 已有，针对漏洞 CVE-2017-17215，华为公司最近发布了相关的声明，并在持续更新；
 * 端口 52869 : 已有，针对漏洞 CVE-2014-8361，这是一个针对 Realtek SDK 的漏洞，网上自2015年就公开了漏洞利用代码
 * 端口 3333 ： 新增，针对上述 Eth 挖矿进程远程管理接口的攻击。




上图是端口 3333 的扫描载荷。这个扫描中，Satori.Coin.Robber 会顺序发出三个包，分别是：


 * 第一个包：miner_getstat1，获取状态；
 * 第二个包：miner_file，更新reboot.bat文件，替换其中的矿池和钱包地址；
 * 第三个包：miner_reboot，重启生效。


在这个上述 reboot_bat 的文件更新过程中：


 * 矿池地址替换为：eth-us2.dwarfpool.com:8008
 * 钱包地址替换为：0xB15A5332eB7cD2DD7a4Ec7f96749E769A371572d


通过这种方式，Satori.Coin.Robber 将其他设备上 ETH 挖矿进程的算力攫取为己用。


Satori.Coin.Robber 与之前版本的异同


我们对比两个版本的 Satori.Coin.Robber，寻找其中的异同：


 * 737af63598ea5f13e74fd2769e0e0405 Satori.Coin.Robber
 * 5915e165b2fdf1e4666a567b8a2d358b satori.x86_64, 2017年10月版本，VT报告地址


相同点：


 * 代码：均使用了UPX加壳，并且使用了相同的幻数 0x4A444E53，脱壳后大量代码结构类似。
 * 配置信息：配置信息均加密，加密方式相同，且大量配置字符串是一致的。例如 /bin/busybox SATORI，bigbotPein，81c4603681c46036，j57*&jE，等等；
 * 扫描载荷：两者均扫描 37215 和 52869 端口，并且使用了相同的扫描载荷


我们认为这些证据够强，足以将这次的新变种与之前的 Satori 联系起来。


不同点：


 * 扫描载荷：Satori.Coin.Robber 新增了 3333 端口上针对 Claymore Miner的攻击
 * 扫描过程：Satori.Coin.Robber 使用了异步网络连接(NIO)方式发起连接，这种方式会提高扫描效率
 * C2 协议：Satori.Coin.Robber 启用了一组新的C2 通信协议，会基于DNS协议与54.171.131.39通信。后面会有专门的一节来描述。


下面是一些详细的截图证据展示：


两个版本的样本公用了相同的UPX加壳幻数：




Satori.Coin.Robber 在扫描过程中使用了异步网络连接方式：




Satori.Coin.Robber 的新的C2 通信协议


Satori.Coin.Robber 的 C2 ：


 * 硬编码的IP地址，54.171.131.39，位于爱尔兰都柏林。
 * 通信协议是基于DNS修改的，可以使用 dig @54.171.131.39 $DNS-QNAME any +short 的方式做一个简单测试，每个$DNS-QNAME对应不同的功能。


整体C2协议列表如下：




协议释义如下：


 * 客户端请求 w.sunnyjuly.gq，服务器返回 0xB15A5332eB7cD2DD7a4Ec7f96749E769A371572d
 * 客户端请求 p.sunnyjuly.gq，服务器返回 eth-us2.dwarfpool.com:8008
 * 客户端请求 s.sunnyjuly.gq，服务器返回一段字符串 "Satori dev here, dont be alarmed about this bot it does not currently have any malicious packeting purposes move along. I can be contacted at curtain@riseup.net."
 * 客户端请求 f.sunnyjuly.gq，服务器返回 213.74.54.240。这个请求并不是样本中出现的，是我们的研究人员尝试 fuzzing 后得到的。


最前面两个请求的回应，恰好是 bot 篡改别的挖矿设备后使用的矿池和钱包地址。但是目前阶段，样本中的扫描载荷仍然是硬编码的，并没有使用这里的服务器返回值；

服务器返回的那段英文，翻译成中文的大意是“我是Satori的作者，现在这个bot还没有什么恶意的代码，所以暂时放轻松。联系我的话，邮件写给curtain@riseup.net”


Satori.Coin.Robber 的感染趋势


我们大体上可以使用三个扫描端口在 ScanMon 上的扫描趋势来度量 Satori.Coin.Robber 的感染范围和趋势。


37215、52869 和 3333 端口上过去30 天的扫描趋势依次如下：











总体来看，三个端口上均有扫描暴涨，与本次样本表现能够对应。


 * 初始出现时间都在 2018年1月8日附近；
 * 高峰时间都在都在 2018年1月8日～2018年1月8日附近；
 * 最近几天扫描量逐渐下降；
 * 主要扫描来源在 AS4766 Korea Telecom ；
 * 独立扫描源IP地址，约为 4.9k；


噪音方面，37215与52869 端口上，依据1月8日以前的表现，可能有部分扫描来源不属于 Satori.Coin.Robber；但是 3333 端口比较干净，依据1月8日以前的表现来看，噪音较小。考虑到三个端口上的扫描表现趋于一致，我们认为上述数据可以表现当前 Satori.Coin.Robber 的感染趋势。


结语


Satori 的最初版本虽然已经被安全社区抑制，但是新的继任者已经出现。


新的Satori.Coin.Robber，会扫描别的设备上的挖矿程序，并将钱包地址替换成自己的。这是我们在botnet领域第一次看到这种行为模式。


尽管作者宣称自己当前没有恶意，但是传播恶意代码、未经授权修改他人计算机上的信息、攫取他人计算机算力为自己挖取数字代币，这些行为都是恶意行为。


考虑到12月5日附近Satori在12小时内感染了超过26万IoT设备，当前 Satori.Coin.Robber的感染速度已经远远变低，暂时不用恐慌。


上述感染速度的降低，不应该归因为攻击者刻意降低了扫描的速度，特别是考虑到攻击者启用了NIO技术来加速扫描阶段的效率；而应该归因为安全公司、ISP、供应链设备厂商共同的协作和努力。