東窗事發
最近在忙著做一個大專案,幾乎沒有什麼空閒時間用來寫文章了。
這個大專案的測試環境部署在一臺從騰訊雲購買的伺服器上。
伺服器是朋友買的,繫結的是朋友的微訊號。
前兩天的一個凌晨,朋友突然收到一條來自騰訊雲的安全告警通知。
第二天我去控制檯看了下詳情,密碼被人暴力破解了!
第一件事情,我先把密碼改掉了。
之前隨便設了個密碼,只有 8 位,可能太過於簡單,只被試了 1400 多次就被攻破。
這裡我得到一個教訓,有公網 IP 的伺服器一定要設定很複雜的密碼。
騰訊雲最多可以設定 30 位密碼,於是這次我就設定了 30 位的密碼。
改完之後我又開始檢查伺服器是否被注入木馬、檢查資料庫是否被勒索、檢視有沒有近期新檔案、檢視有沒有新開啟的埠、新增加的使用者等等。
經過一番檢查,沒發現什麼問題(實際上這些記錄都被黑客清掉了)。於是我重啟了伺服器,然後沒有繼續理會這件事。但心裡總感覺應該沒有這麼簡單。
鬥智鬥勇
第三天早上,在我部署應用時發現 CPU 佔用率已經 100%了!
於是我檢視了下 CPU 被佔用情況。
ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head
複製程式碼
日誌如下:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 28338 182 0.0 2437008 2732 ? Ssl 15:05 147:05 /usr/local/bin/wordpress
root 25257 14.5 0.9 764436 36020 ? Ssl 16:25 0:00 npm
root 23779 0.4 0.3 711348 14752 ? Sl 14:59 0:23 /usr/bin/ophvyn
mongod 1405 0.1 1.2 989616 47732 ? Sl Mar30 6:28 /usr/bin/mongod -f /etc/mongod.conf
root 9 0.0 0.0 0 0 ? R Mar30 0:09 [rcu_sched]
root 8 0.0 0.0 0 0 ? S Mar30 0:00 [rcu_bh]
root 789 0.0 0.0 4388 556 ? Ss Mar30 0:00 /usr/sbin/acpid
root 775 0.0 0.0 26380 1740 ? Ss Mar30 0:00 /usr/lib/systemd/systemd-logind
root 748 0.0 0.0 55528 1100 ? S<sl Mar30 0:05 /sbin/auditd
root 7 0.0 0.0 0 0 ? S Mar30 0:00 [migration/0]
複製程式碼
一個名為 wordpress 的程式已經佔用了 182 的 CPU。
但我並沒有在伺服器上安裝過 wordpress,看來這個就是黑客植入的木馬了。
初步預測,我認為這是一個挖礦程式。
接著,我開始處理這個挖礦木馬。
首先殺掉這個執行緒。
kill -9 28338
複製程式碼
然後刪除 wordpress 檔案。
CPU 佔用率立馬降下來了,但我覺得事情並沒結束,人家既然有本事搞我的伺服器,不可能就只有這麼兩下子。
於是我開始耐心的等待是否有其他變化。
果不其然,在幾分鐘後,伺服器的 CPU 佔用率再次飄升 100%。
當我再次檢視佔用 CPU 最高的程式時,又看到了那個 wordpress。我估計它是有一個守護程式或者定時任務。
我開始找守護程式。
ps -eo ppid,pid,sid,stat,tty,comm | awk '{ if ($2 == $3 && $5 == "?") {print $0}; }'
複製程式碼
日誌如下:
0 1 1 Ss ? systemd
1 454 454 Ss ? systemd-journal
1 481 481 Ss ? systemd-udevd
1 484 484 Ss ? lvmetad
1 748 748 S<sl ? auditd
1 772 772 Ssl ? polkitd
1 775 775 Ss ? systemd-logind
1 776 776 Ss ? dbus-daemon
1 778 778 Ss ? ntpd
1 783 783 Ss ? lsmd
1 789 789 Ss ? acpid
1 1054 1054 Ss ? dhclient
1 1126 1126 Ssl ? tuned
1 1135 1135 Ss ? vsftpd
1 1249 1249 Ssl ? rsyslogd
1 1255 1255 Ss ? atd
1 1258 1258 Ss ? crond
1 1555 1555 Ss ? sshd
1555 1956 1956 Ss ? sshd
1956 2009 2009 Ss ? bash
1 2380 2380 Ss ? nginx
1 2860 2860 Ssl ? node
1 28338 28338 Ssl ? wordpress
2860 30275 30275 Ssl ? node
複製程式碼
果然有一個 wordpress 的守護程式,而且奇怪的是,竟然有兩個 node 程式。我的伺服器上明明只執行了一個 node 程式。從 PID 來看,後面這個 30275 的 node 程式是在 wordpress 之後啟動的。
看來這個 node 和 wordpress 必然存在某種關係。
於是我把這三個程式都殺掉了,同時刪除了 wordpress 檔案。
在觀察了半小時後,伺服器好像恢復正常了。
當天我睡了個好覺。
死灰復燃
今天早上,當我再次開啟伺服器時,發現 CPU 又被佔用 100%了!
黑客的手段果然足夠高明。
這次我重複昨天的步驟,然後觀察伺服器的變化。
過了一會,我發現 IO 有波動,然後 CPU 再次飄升 100%。
然後檢視埠占用情況。
netstat -nlpt
複製程式碼
日誌如下:
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:43575 0.0.0.0:* LISTEN 23779/ophvyn
tcp 0 0 0.0.0.0:27017 0.0.0.0:* LISTEN 1405/mongod
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 2380/nginx: master
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1555/sshd
tcp6 0 0 :::21 :::* LISTEN 1135/vsftpd
複製程式碼
當我看到那個名為 ophvyn 、PID 為 23779 的 43575 的埠,就像是看到了黎明的曙光。
看來它的作用就是從遠端伺服器上下載木馬。
在這裡又得到一個教訓,配置安全組一定要慎重,一定不要全部開放。
由於這個是測試伺服器,當時為了除錯方便,就開放了所有埠。
接下來要殺掉 ophvyn。
首先檢視 ophvyn 的詳細資訊。
ps 23779
複製程式碼
找到了它的所在位置。
PID TTY STAT TIME COMMAND
23779 ? Sl 0:31 /usr/bin/ophvyn
複製程式碼
我把相關的所有程式全部關閉,並把所有相關檔案全部刪除。
等了大半天,沒有再出現什麼么蛾子。
世界好像清淨了。
從頭再來
一切都恢復了往日的平靜,就好像什麼都沒發生過。
在第三天的下午,我決定把伺服器上的資料備份下來,重新安裝系統,和黑客徹底說再見。
在接到警告的第一天,我就可以備份資料,重灌系統的。之所以沒那麼做,就是想看看黑客到底會對我的伺服器做些什麼。現在看也看了,折騰也折騰了,最後仍然選擇重灌伺服器。