病毒的基礎排查
1. 檢查計劃任務
- 黑客入侵服務器后,為了讓病毒腳本持續執行,通常會在計劃任務配置文件里面寫入定時執行的腳本任務。
檢查命令 | 說明 |
---|---|
ls -l /var/spool/cron/* | 查看用戶級計劃任務配置。有的人喜歡用 crontab -l 命令來排查,這樣做不全面,因為 crontab -l 命令只是查看當前登錄用戶的計劃任務,無法查看其他用戶的計劃任務。而用左側這個命令,可以查看所有用戶設置的計劃任務。 |
ls -l /etc/cron.d/ | 如果發現該目錄下存在未見過的腳本要格外留意。 |
ls -l /etc/cron.hourly/ | 該目錄下的腳本會每小時執行一次。 |
ls -l /etc/cron.daily/ | 該目錄下的腳本會每天執行一次。 |
ls -l /etc/cron.weekly/ | 該目錄下的腳本會每周執行一次。 |
ls -l /etc/cron.mouthly/ | 該目錄下的腳本會每月執行一次。 |
cat /etc/crontab | 查看系統級計劃任務配置。 |
2. 解鎖系統文件
檢查命令 | 說明 |
---|---|
chattr -iRa /usr/ /etc/ | 黑客入侵系統后,經常會執行chattr命令為惡意腳本文件加上隱藏屬性,從而導致我們無法修改、刪除這些惡意腳本。此時需要用chattr命令先去掉這些隱藏屬性,然后再修改、刪除。![]() |
3. 檢查開機啟動文件
檢查命令 | 說明 |
---|---|
cat /etc/rc.d/rc.local | 由于系統會在開機時自動執行/etc/rc.d/rc.local文件里面的命令,因此也常常被黑客利用。 |
4. 檢查開機啟動服務
檢查命令 | 說明 |
---|---|
ls -l /etc/systemd/system/ 和 ls -l /etc/systemd/system/multi-user.target.wants/ | 黑客通常會把惡意命令做成一個開機啟動服務項,讓其隨著系統重啟自動執行。我們一定要仔細觀察這兩個目錄下面的每個啟動項。 |
ls -lA /etc/rc.d/init.d/ | 這個目錄有時也會被黑客放入惡意腳本,也記得查看。 |
5. 檢查環境變量文件
檢查命令 | 說明 |
---|---|
cat /etc/profile 和 cat /etc/bashrc 和 cat ~/.bash_profile 和 cat ~/.bash_login 和 cat ~/.bashrc | 這些文件都是系統和用戶的環境變量配置文件,黑客有時會在里面寫入惡意命令,當系統加載環境變量配置文件時,惡意命令也會隨之運行。 |
cat /etc/ld.so.preload | 通過配置該文件,可以讓程序在運行之前,優先加載某些動態鏈接庫。部分木馬正是利用此文件的功能,修改該了文件,在里面添加惡意so文件,從而達到了隱藏挖礦進程的目的。這也就是為什么服務器中毒了,CPU使用率很高,但是卻看不到占用CPU高的進程的原因。 默認該文件是空的,如果發現該文件里面有內容,則可能是黑客植入的,我們需要把該文件中列出的對應路徑下的so文件全部刪除掉,最后再清空ld.so.preload文件即可。 ![]() |
6. 檢查二進制命令文件
檢查命令 | 說明 |
---|---|
ls -Athl /usr/bin 和 ls -Athl /usr/sbin | 根據修改時間來查看二進制命令,新文件在最前,舊文件在后。通常黑客入侵服務器后,會植入一些二進制命令,這些命令文件的日期較新,我們可以根據這個特征,把新文件優先列出來,仔細辨別是否為惡意命令。 |
ls -AShl /usr/bin 和 ls -AShl /usr/sbin | 根據文件大小來查看二進制命令,大文件在最前,小文件在后。通常黑客入侵服務器后,會植入一些二進制命令,這些二進制命令的體積往往比較大,遠超過系統命令的大小。我們可以根據這個特征,把大文件優先列出來,仔細辨別是否為惡意命令。 |
find /usr/bin/ -iname “." -ls 和 find /usr/sbin/ -iname ".” -ls | 列出/usr/bin/、/usr/sbin/等目錄下的隱藏文件。黑客有時會把惡意命令進行隱藏,我們可以通過左側這兩個查找命令,把隱藏文件全部列出來。 |
- 根據處理經驗,筆者列出了一些常見的惡意命令,供大家參考:
/usr/local/bin/pnscan
/usr/bin/masscan
/usr/bin/execute
/usr/bin/where
/usr/bin/crond
/usr/bin/bioset
/usr/bin/bsd-port
7. 檢查內核文件
檢查命令 | 說明 |
---|---|
cat /etc/sysctl.conf | 黑客入侵服務器后,還會修改內核配置文件,有時會添加如下參數:vm.nr_hugepage 該參數的作用是用來設置大內存頁,默認該參數的值是0。黑客有時會設置該參數來優化內存性能,來為挖礦程序的運行提供最大內存資源。也正是由于該參數的存在,會導致系統重啟之后,很多服務無法正常加載運行,從而導致系統長時間卡在服務加載界面。![]() |
8. 檢查密鑰登錄文件
檢查命令 | 說明 |
---|---|
cat /root/.ssh/authorized_keys | 黑客入侵系統后,通常會在此文件中寫入公鑰,以便黑客可以免密登錄系統。我們需要仔細辨別該文件的公鑰內容,去偽留真。 |
9. 檢查賬戶信息
檢查命令 | 說明 |
---|---|
cat /etc/passwd | grep -i /bin/bash |
10. 檢查DNS設置文件
檢查命令 | 說明 |
---|---|
cat /etc/hosts 和 cat /etc/resolv.conf | 有時黑客會修改DNS解析設置文件,以便解析某些惡意域名。我們需要檢查該文件進行確認,如果黑客確實修改了,則要進行配置還原,改回成系統默認的DNS地址,否則可能會影響我們訪問網站的速度。 |
11. 檢查臨時目錄
檢查命令 | 說明 |
---|---|
ls -Al /tmp 和 ls -Al /var/tmp | 有時黑客會把惡意病毒文件或惡意腳本,放置到這兩個臨時目錄中,需要我們仔細查看加以辨別。![]() |
ls -Al /dev/shm | /dev/shm是Linux系統利用內存虛擬出來的一個目錄,目錄中的文件都保存在內存中,效率非常高。也就是往這個目錄寫東西,僅寫在內存里,不會持久化到磁盤。系統重啟后,文件消失。有時黑客也會把病毒文件或腳本藏到這個臨時目錄里面。 |
病毒的進階排查
- 做了上述的基礎排查之后,還不一定完全能根除,黑客是很狡猾的。有時黑客還會替換系統的命令,例如替換了ps、top、netstat等系統原有的命令,以假亂真。這時我們每次去執行ps、top、netstat等命令,都相當于運行一次黑客的惡意命令,這些被替換了的命令會讓我們看不到占用CPU高的惡意進程。此時我們可以安裝clamav軟件,來檢測黑客是否植入(篡改)了二進制命令。
1. 安裝clamav
yum -y install epel-release
yum -y install clamav clamd clamav-update clamav-devel clamav-data
2. 更新clamav病毒庫
freshclam
3. 使用clamav掃描指定的目錄
clamscan –ri /usr/sbin/ --move=/root/infected -l /var/log/clamscan.log
- 命令常用參數解釋:
參數 | 說明 |
---|---|
-r | 遞歸掃描,也就是掃描指定的目錄及其所有的子目錄。 |
-i | 只顯示被感染的可疑文件。 |
-l “FILE” | 將掃描的結果保存到指定的文件中,以便事后查看。 |
–move=DIRECTORY | 將掃描到的可疑文件移動到指定的目錄中。 |
![]() |
4. 重新安裝系統命令
- 假如我們用clamscan掃描到了被篡改的二進制命令,并利用–move參數將其移動到了指定的目錄中,此時我們需要重新安裝這些二進制命令,從而再去發現被隱藏的惡意進程。
yum -y install glibc e2fsprogs procps lsof iproute net-tools coreutils curl wget findutils procps-ng util-linux rsyslog
說明:
ss命令屬于iproute軟件包。
chattr命令屬于e2fsprogs軟件包。
w、ps、top、pkill、sysctl等命令屬于procps軟件包。
netstat、ifconfig等命令屬于net-tools軟件包。
chmod、chown、ls等命令屬于coreutils軟件包。
黑客是如何入侵
- 筆者總結了大量的案例,黑客入侵的途徑主要有如下幾種:
1. 弱密碼
- 服務器或者應用程序設置的密碼過于簡單,例如密碼設置為了 Aa123456、1qaz2wsx、passwd123 等等,這些密碼極其容易被黑客暴力破解。
2. Redis
- 這是非常常見的一種入侵方式,因此筆者特意拎出來進行說明。很多人在服務器里面安裝了Redis后,由于安全意識薄弱,會把Redis 6379端口對公網開放,從而被黑客掃描到后被入侵進來。
2.1. Redis入侵的原理:
- 攻擊者首先掃描存在未授權訪問或弱密碼的Redis進行入侵。
- 攻擊者入侵成功后,控制機器不僅會去下載惡意腳本,還會直接讀取主機上的/root/.ssh/known_hosts和/root/.ssh/id_rsa.pub文件,從而登錄信任當前主機的其它機器,并控制這些機器執行惡意指令。
2.2. Redis防護的方法:
- 為Redis的訪問添加密碼驗證。
- 禁止外網訪問Redis,或者只允許指定的IP地址訪問Redis端口。
- 以普通用戶身份運行Redis服務。
3. 數據庫
- 很多用戶可能是疏忽大意,也可能是出于遠程訪問的需要,把數據庫端口1433、3306等對公網進行了開放,導致黑客掃描到數據庫端口后,對數據庫進行了注入或提權入侵,進而發生刪庫勒索等情況。
4. 應用程序存在漏洞
- 例如:Gitlab exiftool 遠程命令執行漏洞、Spring Framework遠程代碼執行漏洞、Apache Log4j2 遠程代碼執行漏洞、Grafana 任意文件讀取漏洞、ThinkPHP5遠程代碼執行高危漏洞、Windows Print Spooler遠程代碼執行漏洞 等等,不勝枚舉。