入侵者在入侵成功后,往往會(huì)留下后門以便再次訪問被入侵的系統(tǒng),而創(chuàng)建系統(tǒng)賬號(hào)是一種比較常見的后門方式。在做入侵排查的時(shí)候,用戶配置文件/etc/passwd和密碼配置文件/etc/shadow是需要去重點(diǎn)關(guān)注的地方。
查詢特權(quán)用戶特權(quán)用戶(uid 為0)
> awk -F: '$3==0{print $1}' /etc/passwd
查找遠(yuǎn)程可以登錄的賬戶
> awk '/\$1|\$5|\$6/{print $1}' /etc/shadow
檢查sudo權(quán)限
> cat /etc/sudoers | grep -v "^#\|^$" | grep "ALL=(ALL"
刪除或鎖定賬號(hào)
通過上面的步驟可以找到可疑的賬號(hào)
> usermod -L rooot #禁用帳號(hào),帳號(hào)無法登錄,/etc/shadow第二欄為!開頭> userdel rooot #刪除user用戶> userdel -r rooot #將刪除root用戶,并且將/home目錄下的root目錄一并刪除
查看當(dāng)前登錄系統(tǒng)的信息
> who #查看當(dāng)前登錄用戶(tty本地登陸 pts遠(yuǎn)程登錄)> w #查看系統(tǒng)信息,想知道某一時(shí)刻用戶的行為> uptime #查看登陸多久、多少用戶,負(fù)載
檢查異常端口
使用netstat 網(wǎng)絡(luò)連接命令,分析可疑端口、IP、PID等信息。
> netstat -tunlp | less
抓包分析
> tcpdump -c 10 -q //精簡模式顯示 10個(gè)包
使用ps命令檢查可疑的進(jìn)程
> ps -ef
查超系統(tǒng)中占用資源最高的資源
> top
發(fā)現(xiàn)異常進(jìn)一步檢查
> ps eho command -p $PID #查看該進(jìn)程啟動(dòng)的完整命令行> readlink /proc/$PID/cwd #查看該進(jìn)程啟動(dòng)時(shí)候所在的目錄> ls -l /proc/$PID/exe #查看下pid所對(duì)應(yīng)的進(jìn)程文件路徑> strings -f /proc/$PID/environ | cut -f2 -d '' #查看該進(jìn)程啟動(dòng)時(shí)的完整環(huán)境變量:> lsof -p $PID #列出該進(jìn)程所打開的所有文件
檢查系統(tǒng)服務(wù)
Linux系統(tǒng)服務(wù)管理,CentOS7使用systemd控制 CentOS6之前使用chkconfig控制。
檢查開機(jī)自啟的服務(wù)
//對(duì)于systemd服務(wù)管理器來說,可以通過下述方式查看開機(jī)自啟的服務(wù)> systemctl list-unit-files --type=service | grep "enabled"http://chkconfig就是CentOS6以前用來控制系統(tǒng)服務(wù)的工具,查看服務(wù)自啟動(dòng)狀態(tài)> chkconfig --list | grep "3:on\|5:on"
檢查啟動(dòng)項(xiàng)腳本
命令查看下開機(jī)啟動(dòng)項(xiàng)中是否有異常的啟動(dòng)服務(wù)。
> cat /etc/rc.local
檢查計(jì)劃任務(wù)
利用計(jì)劃任務(wù)進(jìn)行權(quán)限維持,可作為一種持久性機(jī)制被入侵者利用。檢查異常的計(jì)劃任務(wù),需要重點(diǎn)關(guān)注以下目錄中是否存在惡意腳本。
/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/*
檢查系統(tǒng)的異常文件
查看敏感目錄,如/tmp目錄下的文件,同時(shí)注意隱藏文件夾,以.為名的文件夾具有隱藏屬性
> ls -al
查找1天以內(nèi)被訪問過的文件
> find /opt -iname "*" -atime 1 -type f
-iname不區(qū)分大小寫,-atime最近一次被訪問的時(shí)間,-type文件類型
檢查歷史命令
查看被入侵后,在系統(tǒng)上執(zhí)行過哪些命令,使用root用戶登錄系統(tǒng),檢查/home目錄下的用戶主目錄的.bash_history文件
默認(rèn)情況下,系統(tǒng)可以保存1000條的歷史命令,并不記錄命令執(zhí)行的時(shí)間,根據(jù)需要進(jìn)行安全加固。
設(shè)置保存1萬條命令
> sed -i 's/HISTSIZE=1000/HISTSIZE=10000/g' /etc/profile
history加固
> vim /etc/profile USER_IP=`who -u am i 2>/dev/null | awk '{print $NF}' | sed -e 's/[()]//g'`if [ "$USER_IP"=="" ]then USER_IP=`hostname`fiexport HISTTIMEFORMAT="%F %T $USER_IP `whoami`"#為防止會(huì)話退出時(shí)覆蓋其他會(huì)話寫到HISTFILE的內(nèi)容shopt -s histappendexport PROMPT_COMMAND="history -a"http://配置生效> source /etc/profile
PROMPT_COMMAND是什么
PS1-PS4介紹了一些用于提示信息控制的環(huán)境變量,而在此之前可以進(jìn)行回調(diào)的一個(gè)環(huán)境變量就是PROMPT_COMMAND,這個(gè)環(huán)境變量中設(shè)定的內(nèi)容將在交互式腳本的提示(PS1)出現(xiàn)之前被執(zhí)行。
檢查系統(tǒng)日志
在Linux上一般跟系統(tǒng)相關(guān)的日志默認(rèn)都會(huì)放到/var/log下面,若是一旦出現(xiàn)問題,用戶就可以通過查看日志來迅速定位,及時(shí)解決問題。常用日志文件如下:
/var/log/btmp
記錄錯(cuò)誤登錄日志,這個(gè)文件是二進(jìn)制文件,不能用vi直接查看,可以用lastb看
/var/log/lastlog
記錄系統(tǒng)中所有用戶最后一次成功登錄系統(tǒng)的時(shí)間,這是一個(gè)二進(jìn)制文件,不能用vi查看,可以用lastlog查看
/var/log/wtmp
永久記錄所有用戶的登錄、注銷信息,同時(shí)記錄系統(tǒng)的啟動(dòng)、重啟、關(guān)機(jī)事件。同樣這個(gè)文件也是一個(gè)二進(jìn)制文件,不能直接vi,而需要使用last命令來查看。
/var/log/utmp
記錄當(dāng)前已經(jīng)登錄的用戶信息,這個(gè)文件會(huì)隨著用戶的登錄和注銷不斷變化,只記錄當(dāng)前登錄用戶的信息。同樣這個(gè)文件不能直接vi,而要使用w,who,users等命令來查詢。
/var/log/secure
記錄驗(yàn)證和授權(quán)方面的信息,只要涉及賬號(hào)和密碼的程序都會(huì)記錄,比如SSH登錄,su切換用戶,sudo授權(quán),甚至添加用戶和修改用戶密碼都會(huì)記錄在這個(gè)日志文件中
查找登錄系統(tǒng)失敗的20個(gè)賬號(hào)
> lastb | awk '{print $1}' | sort | uniq -c | sort -nr | head -n 20
定位有多少IP在爆破主機(jī)的root帳號(hào)
> grep "Failed password for root" /var/log/secure | sort | uniq -c | sort -nr | more
查看所有重啟日志信息
> last reboot
查看系統(tǒng)正常的運(yùn)行時(shí)間
> uptime -s
查看哪些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
查看哪些IP登錄成功了
> grep "Accepted" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more
登錄成功的日期,用戶名,IP
> gerp "Accepted" /var/log/secure | awk '{print $1,$2,$3,$9,$11}'