Linux應急響應小結

smileleooo發表於2024-04-27

目錄
  • 使用者排查
  • 歷史命令
  • 網路排查
  • 程序排查
  • 檔案排查
  • 持久化排查
  • 日誌分析

透過系統執行狀態、安全裝置告警,主機異常現象來發現可疑現象通常的可疑現象有:資源佔用、異常登入、異常檔案、異常連線、異常程序等。

使用者排查

如果發現異常使用者活動,例如嘗試多次登入失敗、執行不正常的命令等,應該及時採取措施,包括禁止使用者登入、修改使用者密碼等。

  1. 檢視 uid 或 gid 為 0 的使用者(預設系統只存在root一個特權賬戶)
grep :0 /etc/passwd
  1. 檢視 passwd 檔案的最後修改記錄
stat /etc/passwd
  1. 統計所有使用者的 shell 相關資訊
cat /etc/passwd | awk -F: '{print $7}' | sort | uniq
  1. 重點檢查有登入許可權的使用者
cat /etc/passwd | grep bash
  1. 檢視使用者登入資訊
last # 檢視使用者最近登入資訊
lastb # 檢視錯誤的使用者登入資訊
lastlog # 檢視所有使用者最後一次登入資訊
  1. 檢視允許 sudo 的使用者
more /etc/sudoers | egrep -v "^#|^$"
  1. 繼續檢查 wheel 組包含的使用者,wheel組通常用於授權使用者擁有使用 sudo
grep wheel /etc/group
  1. 檢視空口令的使用者
awk -F: 'length($2)==0 {print $1}' /etc/passwd
  1. 檢視可以遠端登入的帳號資訊
awk '/\$1|\$6/{print $1}' /etc/shadow

歷史命令

history 記錄位於使用者 home 目錄下的 .bash_history 檔案中,可以直接 cat ~/.bash_history 檢視歷史記錄。

網路排查

檢查系統上正在監聽的網路連線和埠情況,以及使用者的網路活動,發現存在異常的網路行為。

  1. 檢視本機開放的埠資訊
netstat -antulp 或 ss -antulp 或 lsof -i
  1. 檢視當前已建立的 TCP 連線
netstat -antulp | grep ESTABLISHED
  1. 檢視反彈連線
netstat -antulp | grep bash
  1. 檢視某一埠的具體應用
lsof -i:22
  1. 檢視路由表:
route -n
  1. 檢視 DNS 配置資訊:
cat /etc/resolv.conf

程序排查

Linux 預設的程序許可權分離,每個程序有不同的許可權,所以從程序使用者名稱上能給我們很多資訊。比如 webshell 執行反彈連線,會顯示 apache 的使用者許可權。

  1. 檢視資源佔用
top
  1. 檢視所有程序
ps -ef
  1. 根據程序 PID 檢視程序詳細資訊
lsof -p PID
  1. 檢視程序的啟動時間
ps -p PID -o lstart
  1. 對於一些異常的檔案可以用 strings 顯示裡面的可讀字串進行初步判斷
strings /usr/sbin/sshd | more
  1. 檢視程序可執行檔案
ps -eo pid,cmd
  1. 檢視程序樹
pstree

檔案排查

  1. 顯示檔案的詳細資訊
stat filename
  1. 查詢根目錄下,修改時間小於1天的檔案
find / -mtime -1
  1. 結合檔名進一步查詢
find /var/www/html/ -mtime -1 -name *.php
  1. 檢視系統命令是否存在異常,如大小、修改時間、建立時間等
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/*

開機啟動項排查

檢視系統服務

  1. 檢視所有系統服務的狀態和啟動方式
systemctl list-unit-files --type=service
  1. 檢視當前正在執行的服務
systemctl list-units --type=service --all

Linux 開機有多種執行級別,不同級別下載入的啟動檔案也不相同

image

檢視當前啟動級別

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 檔案三劍客從日誌中快速提取資訊。

  1. 定位有多少IP在爆破主機的root帳號:
grep "Failed password for root" /var/log/secure | awk '{print $11}' |  sort | uniq -c | sort -nr | more
  1. 定位有哪些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
  1. 爆破使用者名稱字典:
grep "Failed password" /var/log/secure|perl -e  'while($_=<>){ /for(.*?) from/; print "$1 \n";}'|uniq -c|sort -nr
  1. 登入成功的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( ̄▽ ̄)ブ

相關文章