一 文件排查
查看tmp目錄下的文件 la -alt /tmp/ 如圖,發現多個異常文件,疑似挖礦程序病毒。對已發現的惡意文件進行分析,查看 559.sh 腳本內容:腳本先是殺掉服務器
上 cpu 占用大於 20%的進程,然后從遠程 27.155.87.26(福建,黑客所控制的一
個 IDC 服務器)下載了病毒程序並執行;
2 查看開機啟動項內容:➜ls -alt /etc/init.d/,/etc/init.d 是 /etc/rc.d/init.d 的軟鏈接 在 Linux 文件時間戳中,ls 命令默認列出的時間為“修改時間”(Modify
time),攻擊者可以對該時間進行偽造。 在這種情況下,可以使用 stat * 命令列出當前目錄下的所有文件時間戳:
其中,Change Time 是最新的修改時間戳(包括文件屬性、內容修改時間),該時間戳無法直接通過系統工具進行偽造
(1)Access Time:簡寫為 atime,表示文件的訪問時間。當文件內容被訪問時,更新這個時間。
(2)Modify Time:簡寫為 mtime,表示文件內容的修改時間,當文件的數據內容被修改時,更新這
個時間。
(3)Change Time:簡寫為 ctime,表示文件的狀態時間,當文件的狀態被修改時,更新這個時間,例如文件的鏈接數,大小,權限,Blocks 數。
3查看歷史命令記錄文件~/.bash_history cat /root/.bash_history |more
查找~/.bash_history 命令執行記錄,主要分析是否有賬戶執行過惡意操作系統;命令在 linux 系統里,只要執行過命令的用戶,那么在這個用戶的 HOME
目錄下,都會有一個.bash_history 的文件記錄着這個用戶都執行過什么命令;
那么當安全事件發生的時候,我們就可以通過查看每個用戶所執行過的命令, 來分析一下這個用戶是否有執行惡意命令,如果發現哪個用戶執行過惡意命令,
那么我們就可以鎖定這個線索,去做下一步的排查;
4查看操作系統用戶信息文件/etc/passwd
查找/etc/passwd 文件, /etc/passwd 這個文件是保存着這個 linux 系統所有用戶的信息,通過查看這個文件,我們就可以嘗試查找有沒有攻擊者所創建的用戶,或者存在異常的用戶。我們主要關注的是第 3、4 列的用戶標識號和組標識 號,和倒數一二列的用戶主目錄和命令解析程序。一般來說最后一列命令解析程序如果是設置為 nologin 的話,那么表示這個用戶是不能登錄的,所以可以結合我們上面所說的 bash_history 文件的排查方法。首先在/etc/passwd 中查找命令解釋程序不是 nologin 的用戶,然后再到這些用戶的用戶主目錄里,找到 bash_history,去查看這個用戶有沒執行過惡意命令
5 查看新增文件 PS:-ctime 內容未改變權限改變時候也可以查
find ./ -mtime 0 -name "*.php"(查找 24 小時內被修改的 php 文件)
find / -ctime 2
6 特殊權限的文件查看 find / -perm 777 |more
7 隱藏的文件(以 "."開頭的具有隱藏屬性的文件)
二 進程排查
(1)使用 top 命令實時動態地查看系統的整體運行情況,主要分析 CPU 和內存多的進程,是一個綜合了多方信息監測系統性能和運行信息的實用工具 ,了解服務器健康狀況
字段含義如下表:列名 含義 PID 進程id
PPID 父進程 id
UID 進程所有者的用戶 id
USER 進程所有者的用戶名
GROUP 進程所有者的組名
TTY 啟動進程的終端名
PR 優先級
NI nice 值;負值表示高優先級,正值表示低優先級
RES 進程使用的、未被換出的物理內存大小,單位 kb。RES=CODSHR 共享內存大小,單位 kbS進程狀態:D=不可中斷的睡眠狀態R=運行S=睡眠T=跟蹤/停止Z=僵屍進程
%CPU 上次更新到現在的 CPU 時 間占用百分比
%MEM 進程使用的物理內存百分比TIME 進程使用的 CPU 時間總計 ,單位秒TIME+ 進程使用的 CPU 時間總計 ,單位 1/100 秒COMMAND 命令名/
(2)用 netstat 網絡連接命令,分析可疑端口、可疑 IP、可疑 PID 及程序 netstat –antlp | more
netstat 用於顯示與 IP、TCP、UDP 和 ICMP 協議相關的統計數據,一般用於檢驗
本機各端口的網絡連接情況。
選項參數:
-a 顯示所有連線中的 Socket。
-n 直接使用 IP 地址,而不通過域名服務器。
-t 顯示 TCP 傳輸協議的連線狀況。
-u 顯示 UDP 傳輸協議的連線狀況。
-v 顯示指令執行過程。
-p 顯示正在使用 Socket 的程序識別碼和程序名稱。
-s 顯示網絡工作信息統計表。
(3)根據 netstat 定位出的 pid,使用 ps 命令,分析進程 ps aux | grep pid
可以使用 lsof -i:1677 查看指定端口對應的程序;
lsof(list open files)是一個列出當前系統打開文件的工具。在 linux 環境下,
任何事物都以文件的形式存在,通過文件不僅僅可以訪問常規數據,還可以訪問
網絡連接和硬件。所以如傳輸控制協議 (TCP) 和用戶數據報協議 (UDP) 套接字
等,系統在后台都為該應用程序分配了一個文件描述符,無論這個文件的本質如
何,該文件描述符為應用程序與基礎操作系統之間的交互提供了通用接口。因為
應用程序打開文件的描述符列表提供了大量關於這個應用程序本身的信息
(4)使用 ls 以及 stat 查看系統命令是否被替換
兩種思路:
1 查看命令目錄最近的時間排序
2 根據確定時間去匹配
ls -alt /usr/bin | head -10
ls -al /bin /usr/bin /usr/sbin/ /sbin/ | grep "Jan 15
備注:如果日期數字<10,中間需要兩個空格。比如 1 月 1 日,grep “Jan 1”
(5)隱藏進程查看
ps -ef | awk '{print}' | sort -n | uniq >1
ls /proc | sort -n |uniq >2
diff 1 2
三 系統信息排查
1查看分析用戶相關分析
a) useradd userdel 的命令時間變化(stat),以及是否包含可疑信息
b) cat /etc/passwd 分析可疑帳號,可登錄帳號
查看 UID 為 0 的帳號➜➜➜awk -F: '{if($3==0)print $1}' /etc/passwd
查看能夠登錄的帳號➜➜➜cat /etc/passwd | grep -E "/bin/bash$"
2查看分析任務
crontab -u <-l, -r, -e>
-u 指定一個用戶
-l 列出某個用戶的任務計划
-r 刪除某個用戶的任務
-e 編輯某個用戶的任務(編輯的是/var/spool/cron 下對應用戶的 cron 文件,也可以直接修改
/etc/crontab 文件)
通過 crontab –l 查看當前的任務計划有哪些,是否有后門木馬程序啟動相
關信息;
查看 etc 目錄任務計划相關文件,ls /etc/cron*
3查看 linux 開機啟動程序
查看 rc.local 文件(/etc/init.d/rc.local /etc/rc.local)
ls –alt /etc/init.d/
4查看系統用戶登錄信息
a)使用 lastlog 命令,系統中所有用戶最近一次登錄信息
b) 使用 lastb 命令,用於顯示用戶錯誤的登錄列表
c) 使用 last 命令,用於顯示用戶最近登錄信息(數據源為/var/log/wtmpvar/log/btmp) last -10
5 日志 分析
總結:
處置建議 :
斷網或 ACL 隔離;
結束惡意進程;
提取木馬樣本;
刪除木馬;
防御措施 :
安裝殺毒軟件,對被感染機器進行安全掃描和病毒查殺;
對系統進行補丁更新,封堵病毒傳播途徑;
制定嚴格的口令策略,避免弱口令;
結合備份的網站日志對網站應用進行全面代碼審計,找出攻擊者利用的漏洞