- 使用者排查
- 歷史命令
- 網路排查
- 程序排查
- 檔案排查
- 持久化排查
- 日誌分析
透過系統執行狀態、安全裝置告警,主機異常現象來發現可疑現象通常的可疑現象有:資源佔用、異常登入、異常檔案、異常連線、異常程序等。
使用者排查
如果發現異常使用者活動,例如嘗試多次登入失敗、執行不正常的命令等,應該及時採取措施,包括禁止使用者登入、修改使用者密碼等。
- 檢視 uid 或 gid 為 0 的使用者(預設系統只存在root一個特權賬戶)
grep :0 /etc/passwd
- 檢視 passwd 檔案的最後修改記錄
stat /etc/passwd
- 統計所有使用者的 shell 相關資訊
cat /etc/passwd | awk -F: '{print $7}' | sort | uniq
- 重點檢查有登入許可權的使用者
cat /etc/passwd | grep bash
- 檢視使用者登入資訊
last # 檢視使用者最近登入資訊
lastb # 檢視錯誤的使用者登入資訊
lastlog # 檢視所有使用者最後一次登入資訊
- 檢視允許 sudo 的使用者
more /etc/sudoers | egrep -v "^#|^$"
- 繼續檢查 wheel 組包含的使用者,wheel組通常用於授權使用者擁有使用 sudo
grep wheel /etc/group
- 檢視空口令的使用者
awk -F: 'length($2)==0 {print $1}' /etc/passwd
- 檢視可以遠端登入的帳號資訊
awk '/\$1|\$6/{print $1}' /etc/shadow
歷史命令
history 記錄位於使用者 home 目錄下的 .bash_history 檔案中,可以直接 cat ~/.bash_history
檢視歷史記錄。
網路排查
檢查系統上正在監聽的網路連線和埠情況,以及使用者的網路活動,發現存在異常的網路行為。
- 檢視本機開放的埠資訊
netstat -antulp 或 ss -antulp 或 lsof -i
- 檢視當前已建立的 TCP 連線
netstat -antulp | grep ESTABLISHED
- 檢視反彈連線
netstat -antulp | grep bash
- 檢視某一埠的具體應用
lsof -i:22
- 檢視路由表:
route -n
- 檢視 DNS 配置資訊:
cat /etc/resolv.conf
程序排查
Linux 預設的程序許可權分離,每個程序有不同的許可權,所以從程序使用者名稱上能給我們很多資訊。比如 webshell 執行反彈連線,會顯示 apache 的使用者許可權。
- 檢視資源佔用
top
- 檢視所有程序
ps -ef
- 根據程序 PID 檢視程序詳細資訊
lsof -p PID
- 檢視程序的啟動時間
ps -p PID -o lstart
- 對於一些異常的檔案可以用 strings 顯示裡面的可讀字串進行初步判斷
strings /usr/sbin/sshd | more
- 檢視程序可執行檔案
ps -eo pid,cmd
- 檢視程序樹
pstree
檔案排查
- 顯示檔案的詳細資訊
stat filename
- 查詢根目錄下,修改時間小於1天的檔案
find / -mtime -1
- 結合檔名進一步查詢
find /var/www/html/ -mtime -1 -name *.php
- 檢視系統命令是否存在異常,如大小、修改時間、建立時間等
ls -altS /usr/sbin | head -30
持久化排查
Linux的持久化方式通常有以下這幾種方式:定時任務、開機服務、開機啟動、驅動載入。
定時任務排查
列出當前使用者的定時任務列表:
crontab -l
定時任務還應檢查以下檔案和資料夾:
/var/spool/cron/*
/etc/crontab
/etc/cron.d/*
/etc/cron.daily/*
/etc/cron.hourly/*
/etc/cron.monthly/*
/etc/cron.weekly/
/etc/anacrontab
/var/spool/anacron/*
開機啟動項排查
檢視系統服務
- 檢視所有系統服務的狀態和啟動方式
systemctl list-unit-files --type=service
- 檢視當前正在執行的服務
systemctl list-units --type=service --all
Linux 開機有多種執行級別,不同級別下載入的啟動檔案也不相同
檢視當前啟動級別
runlevel
不同啟動級別會載入不同啟動檔案,需要關注檢查啟動指令碼目錄
/etc/rc.d/*
/etc/rc.local
/etc/rc[0-6].d
/etc/inittab
日誌分析
Linux 使用 rsyslog 管理日誌,包括系統登入日誌、服務訪問日誌、網站日誌、資料庫日誌等。
日誌預設存放位置 /var/log/
目錄,檢視日誌配置情況 vim /etc/rsyslog.conf
。
通常關注的系統日誌有:
-
/var/log/messages:核心及公共訊息日誌,會記錄linux系統的絕大多數重要資訊
-
/var/log/cron:系統定時任務相關的日誌
-
/var/log/dmesg:系統引導日誌,系統在開機時核心自檢的資訊,dmesg命令直接檢視
-
/var/log/boot.log:記錄系統在引導過程中發生的,包含系統啟動時的日誌,包括自啟動的服務
-
/var/log/secure:使用者驗證相關的安全性事件,如SSH登入,su切換使用者,sudo授權等
-
/var/run/utmp:正在登入系統的使用者資訊,預設由who和w記錄當前登入使用者的資訊
-
/var/log/wtmp:當前登入使用者詳細資訊,二進位制檔案,使用last命令來檢視
-
/var/log/btmp:記錄錯誤登入日誌,二進位制檔案,使用lastb命令檢視
-
/var/log/lastlog:使用者最後一次登入時間的日誌,二進位制檔案,使用lastlog命令檢視
-
/var/log/maillog:郵件系統日誌
應用日誌:
Nginx日誌:
- /var/log/nginx/access.log
Apache日誌:
-
/var/log/httpd/access.log
-
/var/log/apache/ access.log
-
/var/log/apache2/ access.log
-
/var/log/httpd-access.log
Mysql日誌:
- /var/log/mysql/
Linux 可以使用 sed、awk、grep 檔案三劍客從日誌中快速提取資訊。
- 定位有多少IP在爆破主機的root帳號:
grep "Failed password for root" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more
- 定位有哪些IP在爆破:
grep "Failed password" /var/log/secure|grep -E -o "(25[0-5]|2[0- 4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0- 9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0- 9]|[01]?[0-9][0-9]?)"|uniq -c
- 爆破使用者名稱字典:
grep "Failed password" /var/log/secure|perl -e 'while($_=<>){ /for(.*?) from/; print "$1 \n";}'|uniq -c|sort -nr
- 登入成功的IP有哪些:
grep "Accepted " /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more
登入成功的日期、使用者名稱、IP:
grep "Accepted " /var/log/secure | awk '{print $1,$2,$3,$9,$11}'
若有錯誤,歡迎指正!o( ̄▽ ̄)ブ