當企業發生黑客入侵、系統崩潰或其它影響業務正常執行的安全事件時,急需第一時間進行處理,使企業的網路資訊系統在最短時間內恢復正常工作,進一步查詢入侵來源,還原入侵事故過程,同時給出解決方案與防範措施,為企業挽回或減少經濟損失。
針對常見的攻擊事件,結合工作中應急響應事件分析和解決的方法,總結了一些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