當企業發生黑客入侵、系統崩潰或其它影響業務正常執行的安全事件時,急需第一時間進行處理,使企業的網路資訊系統在最短時間內恢復正常工作,進一步查詢入侵來源,還原入侵事故過程,同時給出解決方案與防範措施,為企業挽回或減少經濟損失。

針對常見的攻擊事件,結合工作中應急響應事件分析和解決的方法,總結了一些Linux伺服器入侵排查的思路。

一。入侵排查思路

本次linux系統版本為:centos6.5

1.賬號安全

使用者資訊檔案 cat /etc//passwd ,如果裡面內容比較多使用more  /etc/passwd

需要注意的是:無密碼只允許本機登入,遠端不允許登入

cat和more指令說明

cat

cat命令是整個檔案的內容從上倒下顯示在螢幕上。還可以將多個檔案連結起來顯示,他常與重定向符號配合使用,適用於檔案內容少的情況

more

more命令會以一頁一頁的顯示方便使用者逐頁閱讀,而最基本的指令就是按空白鍵(space)就往下一頁顯示,按 b 鍵就會往回(back)一頁顯示,而且還有搜尋字串的功能 。more命令從前向後讀取檔案,因此在啟動時就載入整個檔案。

效果:將後面有nologin的排除,因為有nologin的表示不能遠端登入的,剩下的賬號需要讓運維人員排查一下

2.歷史命令

基本使用:

通過.bash_history檢視帳號執行的系統命令

①root的歷史命令

history

②開啟/home各長高目錄下的。bash_history,檢視普通賬號的歷史命令

為歷史命令增加登入的ip地址,執行命令時間等資訊:

1)儲存1萬條命令,預設只儲存1000條

sed -i 's/^HISTSIZE=1000/HISTSIZE=10000/g' /etc/profile

2)在/etc/profile的檔案尾部新增如下行數配置資訊:

######jiagu history xianshi#########
USER_IP=`who -u am i 2>/dev/null | awk '{print $NF}' | sed -e 's/[()]//g'`
if [ "$USER_IP" = "" ]
then
USER_IP=`hostname`
fi
export HISTTIMEFORMAT="%F %T $USER_IP `whoami` "
shopt -s histappend
export PROMPT_COMMAND="history -a"
######### jiagu history xianshi ##########

3)source /etc/profile讓配置生效

再執行history指令,生成效果:

1   2018-07-10 19:45:39 192.168.204.1 root source /etc/profile
第一條記錄 什麼時候執行的 哪個ip地址過來執行的 用的哪個使用者 執行的什麼指令

③歷史操作命令的清楚:history -c

但此命令並不會清除儲存在檔案中的記錄,因此需要手動刪除.bash_profile檔案中的記錄。入侵者如果能力比較強的,也會把這個檔案情況。

入侵排查:

進入使用者目錄下

cat .bash_history >> his.txt

3.埠

使用netstat 網路連線命令,分析可以埠,IP,PID

netstat -antlp|more

檢視下pid所對應的程序檔案路徑,

執行ls -l /proc/$PID/exe或file /proc/$PID/exe($PID 為對應的pid 號)

4.程序

使用ps命令,分析程序

ps  aux | grep pid

5.開機啟動項

基本使用:

系統執行級別示意圖:

執行級別 含義
0 關機
1 單使用者模式,可以想象為windows的安全模式,主要用於系統修復
2 不完全的命令列模式,不含NFS服務
3 完全的命令列模式,就是標準字元介面
4 系統保留
5 圖形介面
6 重啟動

檢視執行級別命令 runlevel

系統預設允許級別

vi /etc/inittab
id=3:initdefault 系統開機後直接進入哪個執行級別

開機啟動配置檔案

/etc/rc.local
/etc/rc.d/rc[0~6].d

例子:當我們需要開機啟動自己的指令碼時,只需要將可執行指令碼丟在/etc/init.d目錄下,然後在/etc/rc.d/rc*.d中建立軟連結即可

root@localhost ~]# ln -s /etc/init.d/sshd /etc/rc.d/rc3.d/S100ssh

此處sshd是具體服務的指令碼檔案,S100ssh是其軟連結,S開頭代表載入時自啟動;如果是K開頭的指令碼檔案,代表執行級別載入時需要關閉的。

入侵排查:

啟動項檔案:

more /etc/rc.local /etc/rc.d/rc[0~6].d ls -l /etc/rc.d/rc3.d/

6.定時任務

基本使用

①利用crontab建立計劃任務

基本命令

crontab -l 列出某個使用者cron服務的詳細內容
Tips:預設編寫的crontab檔案會儲存在 (/var/spool/cron/使用者名稱 例如: /var/spool/cron/root
crontab -r 刪除每個使用者cront任務(謹慎:刪除所有的計劃任務)
crontab -e 使用編輯器編輯當前的crontab檔案

如:/1 * echo "hello world" >> /tmp/test.txt 每分鐘寫入檔案

②利用anacron實現非同步定時任務排程

使用案例

每天執行 /home/backup.sh指令碼:vi /etc/anacrontab @daily 10 example.daily /bin/bash /home/backup.sh

當機器在 backup.sh 期望被執行時是關機的,anacron會在機器開機十分鐘之後執行它,而不用再等待 7天。

入侵排查

重點關注以下目錄中是否存在惡意指令碼

/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/*

小技巧:

more /etc/cron.daily/*  檢視目錄下所有檔案

7.服務

服務自啟動

第一種修改方法:

chkconfig [--level 執行級別] [獨立服務名] [on|off]
chkconfig –level 2345 httpd on 開啟自啟動
chkconfig httpd on (預設level是2345)

第二種修改方法:

修改/etc/re.d/rc.local 檔案
加入 /etc/init.d/httpd start

第三種修改方法:

使用ntsysv命令管理自啟動,可以管理獨立服務和xinetd服務。

入侵排查

①查詢已安裝的服務:

chkconfig --list 檢視服務自啟動狀態,可以看到所有的RPM包安裝的服務
ps aux | grep crond 檢視當前服務

系統在3與5級別下的啟動項
中文環境
chkconfig --list | grep "3:啟用\|5:啟用"
英文環境
chkconfig --list | grep "3:on\|5:on"

RPM包安裝的服務

chkconfig --list 檢視服務自啟動狀態,可以看到所有的RPM包安裝的服務
ps aux | grep crond 檢視當前服務

系統在3與5級別下的啟動項
中文環境
chkconfig --list | grep "3:啟用\|5:啟用"
英文環境
chkconfig --list | grep "3:on\|5:on"

原始碼包安裝的服務

檢視服務安裝位置 ,一般是在/user/local/
service httpd start
搜尋/etc/rc.d/init.d/ 檢視是否存在

8.系統日誌

日誌預設存放位置:/var/log/

檢視日誌配置情況:more /etc/rsyslog.conf

日誌檔案 說明
/var/log/cron 記錄了系統定時任務相關的日誌
/var/log/cups 記錄列印資訊的日誌
/var/log/dmesg 記錄了系統在開機時核心自檢的資訊,也可以使用dmesg命令直接檢視核心自檢資訊
/var/log/mailog 記錄郵件資訊
/var/log/message 記錄系統重要資訊的日誌。這個日誌檔案中會記錄Linux系統的絕大多數重要資訊,如果系統出現問題時,首先要檢查的就應該是這個日誌檔案
/var/log/btmp 記錄錯誤登入日誌,這個檔案是二進位制檔案,不能直接vi檢視,而要使用lastb命令檢視
/var/log/lastlog 記錄系統中所有使用者最後一次登入時間的日誌,這個檔案是二進位制檔案,不能直接vi,而要使用lastlog命令檢視
/var/log/wtmp 永久記錄所有使用者的登入、登出資訊,同時記錄系統的啟動、重啟、關機事件。同樣這個檔案也是一個二進位制檔案,不能直接vi,而需要使用last命令來檢視
/var/log/utmp 記錄當前已經登入的使用者資訊,這個檔案會隨著使用者的登入和登出不斷變化,只記錄當前登入使用者的資訊。同樣這個檔案不能直接vi,而要使用w,who,users等命令來查詢
/var/log/secure

記錄驗證和授權方面的資訊,只要涉及賬號和密碼的程式都會記錄,比如SSH登入,su切換使用者,sudo授權,甚至新增使用者和修改使用者密碼都會記錄在這個日誌檔案中

日誌分析技巧:

1、定位有多少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

2、登入成功的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}'

3、增加一個使用者kali日誌:
Jul 10 00:12:15 localhost useradd[2382]: new group: name=kali, GID=1001
Jul 10 00:12:15 localhost useradd[2382]: new user: name=kali, UID=1001, GID=1001, home=/home/kali
, shell=/bin/bash
Jul 10 00:12:58 localhost passwd: pam_unix(passwd:chauthtok): password changed for kali
#grep "useradd" /var/log/secure

4、刪除使用者kali日誌:
Jul 10 00:14:17 localhost userdel[2393]: delete user 'kali'
Jul 10 00:14:17 localhost userdel[2393]: removed group 'kali' owned by 'kali'
Jul 10 00:14:17 localhost userdel[2393]: removed shadow group 'kali' owned by 'kali'
# grep "userdel" /var/log/secure

5、su切換使用者:
Jul 10 00:38:13 localhost su: pam_unix(su-l:session): session opened for user good by root(uid=0)

sudo授權執行:
sudo -l
Jul 10 00:43:09 localhost sudo: good : TTY=pts/4 ; PWD=/home/good ; USER=root ; COMMAND=/sbin/shutdown -r now