Linux故障排查思路及常用命令
Liunx應急一直都是安全行業中的重點,
由于是全命令行界面,排查起來也沒那么方便,
也一直想做這方面的筆記,今天抽空來總結一下。
現場環境
如果是Linux系統的話,見過最多的是CentOS ,Linux是全命令界面的,
如果是Windows系統的話,一般是Windows server
常見應急問題
大多數應急常見的問題都是挖礦,或者是被植入菠菜
小部分是中了勒索病毒,如果是勒索病毒的話,看看360、騰訊有沒有什么
排查思路及方法
本節將講解一些基本的流程,以及一些常用的命令。
基本流程
- 接到應急指令后,一般都需要到客戶現場去處理的,最好帶上電腦和筆記本。
- 到達現場后,跟客戶溝通,我方需要確認一些信息(我在Windows安全應急的第三篇有講解一些), 方便定(shuai)位(guo)問題,后面客戶可能會讓你上機操作,或者是使用你自己電腦登錄目標機器查找問題。
- 無論是挖礦還是菠菜,流程都差不多,
找出問題 –> 解決問題 –> 編寫報告
有句傳言道是:掃描一分鐘,報告一個鐘,
如果是菠菜的話,那要多注意注意是不是修改了網站配置文件還是直接在網頁上植入入的鏈接。
進程排查命令
整理一些基本的命令,使用不分先后順序
這里只簡單說明,
服務器被入侵后,攻擊者難免會利用惡意程序來達到自己的目的。
1. 查看當前系統狀態(top)
top命令:可以持續的監視進程的信息。
挖礦應急通常優先使用top命令來查看系統進程,
一般挖礦病毒站用CPU比較大

2. 查看當前系統進程信息(ps)
ps命令:可以查看進程的瞬間信息。
常用參數:
- -a:顯示現行終端機下的所有程序,包括其他用戶的程序。
- -e:列出程序時,顯示每個程序所使用的環境變量。
- -f:顯示UID,PPIP,C與STIME欄位。

3. 查看非root運行的進程(ps)
命令:ps -U root -u root -N

4. 查看用戶root運行的進程(ps)
命令:ps -u root

5. 查看有沒有奇怪進程(ps)
命令:ps -aef | grep inetd
grep 是搜索命令
inetd 程序是一個Linux守護進程.

6. 檢測隱藏進程(ps)
命令:ps -ef | awk '{print}' | sort -n |uniq >1
命令:ls /proc | sort -n |uniq >2
sort 命令將文本文件內容加以排序,可針對文本文件的內容,以行為單位來排序。-n 參數依照數值的大小排序。
uniq 命令用于檢查及刪除文本文件中重復出現的行列,一般與 sort 命令結合使用。

7. 檢測系統守護進程(ls)
命令:ls /etc/crontab

任務及用戶活動排查命令
說明:機器使用過程中難免會留下一些痕跡
1. 查看當前有誰登陸在服務器上(who)
who 命令查看當前登錄用戶(tty本地登陸 pts遠程登錄)
命令:who
w 命令查看系統信息,想知道某一時刻用戶的行為

2. 查看當前登陸用戶的IP信息(who)
命令:who -m

3. 查看近期用戶登陸情況(last)
命令:last -n 5 ## -n 5 表示輸出5條

4. 查看歷史命令(history)
命令:history 5 ## 5 表示輸出最近使用的5條命令

5. 查看空口令賬號(awk)
**awk**是一種編程語言,用于對文本和數據進行處理的
語法:awk [options] ‘pattern{action}’ file
命令:awk -F: '($2=="")' /etc/shadow
沒有的話啥都不輸出

在沒有options和pattern的情況下,可以使用cat命令

6. 查看uid為0的賬號(awk)
命令:awk -F: '($3==0)' /etc/passwd

7. 查看uid為0的賬號(grep)
命令:grep -v -E "^#" /etc/passwd | awk -F: '$3==0{print $1}'

8. 查看進程樹是否所有異常進程存在一個父進程、判斷進程的父子關系(pstree)
命令:pstree -p

網絡排查命令
說明:挖礦病毒避免不了要跟主機通信
1. 列出本機所有的連接和監聽的端口,查看有沒有非法連接(netstat)
netstat 命令用來打印Linux中網絡系統的狀態信息。
常用參數:
- -a或–all:顯示所有連線中的Socket。
- -c或–continuous:持續列出網絡狀態。
- -i或–interfaces:顯示網絡界面信息表單。
- l或–listening:顯示監控中的服務器的Socket。
- -n或–numeric:直接使用ip地址,而不通過域名服務器。
- -t或–tcp:顯示TCP傳輸協議的連線狀況。
- -u或–udp:顯示UDP傳輸協議的連線狀況。
命令:netstat -lntp

2. 查看誰在使用某個端口(lsof)
lsof 命令用于查看你進程開打的文件,打開文件的進程,進程打開的端口(TCP、UDP)。
常用參數:
- -g:列出GID號進程詳情;
- -d<文件號>:列出占用該文件號的進程;
- -i<條件>:列出符合條件的進程。(4、6、協議、:端口、 @ip )
- -p<進程號>:列出指定進程號所打開的文件;
- -u:列出UID號進程詳情;
命令:lsof -i :22 # 看看誰在使用22端口

3. 查看多個進程號對應的文件信息(lsof)
命令:lsof -p 2,3 # 使用逗號分隔

4. 查看所有tcp網絡連接信息(lsof)
命令:lsof -i tcp

5. 查看所有udp網絡連接信息(lsof)
命令:lsof -i udp

文件排查命令
說明:服務器被入侵后,攻擊者基本上都需要修改一些文件來維持腳本的
運行
1. 查看所有文件,包括隱藏的文件(ls)
ls 命令用來顯示目標列表,不同類型的文件顏色也不同
常用參數:
- -a:顯示所有文件及目錄,包括隱藏文件
- -l:以長格式顯示目錄下的內容列表。
- -t:用文件和目錄的更改時間排序
命令:ls -la
2. 查看文件路徑(whereis)
命令:whereis filename
3. 查看文件創建時間(ls)
命令:ls -al filname
4. 查找最近24小時內修改過的文件(find)
命令:find ./ -mtime 0
find 命令用來在指定目錄下查找文件。
參數 -mtime n 按照文件的更改時間來找文件,n為整數。
例:
- -mtime 0 表示文件修改時間距離當前為0天的文件,即距離當前時間不到1天(24小時)以內的文件。
- -mtime 1 表示文件修改時間距離當前為1天的文件,即距離當前時間1天(24小時-48小時)的文件。
- -mtime+1 表示文件修改時間為大于1天的文件,即距離當前時間2天(48小時)之外的文件
- -mtime -1 表示文件修改時間為小于1天的文件,即距離當前時間1天(24小時)之內的文件
5. 查找以.txt結尾的文件名(find)
命令:find / -name "*.txt"
忽略大小寫,命令:find / -iname "*.txt"
6. 查找不是以.txt結尾的文件(find)
命令:find / ! -name "*.txt"