Linux手工入侵排查思路
當(dāng)Linux主機(jī)發(fā)生安全事件需要進(jìn)行入侵排查時(shí),一般可以使用常見(jiàn)的shell命令,通過(guò)分析主機(jī)的異常現(xiàn)象、進(jìn)程端口、啟動(dòng)方式、可疑文件和日志記錄等信息以確認(rèn)主機(jī)是否被入侵。
在這里,結(jié)合工作中Linux安全事件分析處理辦法,總結(jié)了Linux手工入侵排查過(guò)程中的分析方法。
01、檢查系統(tǒng)賬號(hào)
從攻擊者的角度來(lái)說(shuō),入侵者在入侵成功后,往往會(huì)留下后門(mén)以便再次訪問(wèn)被入侵的系統(tǒng),而創(chuàng)建系統(tǒng)賬號(hào)是一種比較常見(jiàn)的后門(mén)方式。在做入侵排查的時(shí)候,用戶配置文件/etc/passwd和密碼配置文件/etc/shadow是需要去重點(diǎn)關(guān)注的地方。
(1)查詢特權(quán)用戶特權(quán)用戶(uid 為0)
- awk -F: '$3==0{print $1}' /etc/passwd
(2)查詢可以遠(yuǎn)程登錄的帳號(hào)信息
- awk '/\$1|\$6/{print $1}' /etc/shadow
(3)除root帳號(hào)外,其他帳號(hào)是否存在sudo權(quán)限。如非管理需要,普通帳號(hào)應(yīng)刪除sudo權(quán)限
- more /etc/sudoers | grep -v "^#\|^$" | grep "ALL=(ALL)"
(4)禁用或刪除多余及可疑的帳號(hào)
- usermod -L user 禁用帳號(hào),帳號(hào)無(wú)法登錄,/etc/shadow第二欄為!開(kāi)頭
- userdel user 刪除user用戶
- userdel -r user 將刪除user用戶,并且將/home目錄下的user目錄一并刪除
(5)當(dāng)前登錄當(dāng)前系統(tǒng)的用戶信息
- who 查看當(dāng)前登錄用戶(tty本地登陸 pts遠(yuǎn)程登錄)
- w 查看系統(tǒng)信息,想知道某一時(shí)刻用戶的行為
- uptime 查看登陸多久、多少用戶,負(fù)載
02、檢查異常端口
(1)使用netstat 網(wǎng)絡(luò)連接命令,分析可疑端口、IP、PID等信息。
- netstat -antlp|more
(2)如發(fā)現(xiàn)異常的網(wǎng)絡(luò)連接需要持續(xù)觀察,可抓包分析
- tcpdump -c 10 -q //精簡(jiǎn)模式顯示 10個(gè)包
03、檢查可疑進(jìn)程
(1)使用ps命令列出系統(tǒng)中當(dāng)前運(yùn)行的那些進(jìn)程,分析異常的進(jìn)程名、PID,可疑的命令行等。
- ps aux / ps -ef
(2)通過(guò)top命令顯示系統(tǒng)中各個(gè)進(jìn)程的資源占用狀況,如發(fā)現(xiàn)資源占用過(guò)高
- top
(3)如發(fā)現(xiàn)異常,可使用一下命令進(jìn)一步排查:
- 查看該進(jìn)程啟動(dòng)的完整命令行: ps eho command -p $PID
- 查看該進(jìn)程啟動(dòng)時(shí)候所在的目錄: readlink /proc/$PID/cwd
- 查看下pid所對(duì)應(yīng)的進(jìn)程文件路徑:ls -l /proc/$PID/exe
- 查看該進(jìn)程啟動(dòng)時(shí)的完整環(huán)境變量: strings -f /proc/1461/environ | cut -f2 -d ''
- 列出該進(jìn)程所打開(kāi)的所有文件: lsof -p $PID
04、檢查系統(tǒng)服務(wù)
Linux系統(tǒng)服務(wù)管理,CentOS7使用systemd控制 CentOS6之前使用chkconfig控制。
(1)對(duì)于systemd服務(wù)管理器來(lái)說(shuō),可以通過(guò)下述方式查看開(kāi)機(jī)自啟的服務(wù):
- systemctl list-unit-files --type=service | grep "enabled"
(2)chkconfig就是CentOS6以前用來(lái)控制系統(tǒng)服務(wù)的工具,查看服務(wù)自啟動(dòng)狀態(tài):
- chkconfig --list
- chkconfig --list | grep "3:on\|5:on"
05、檢查開(kāi)機(jī)啟動(dòng)項(xiàng)
(1)檢查啟動(dòng)項(xiàng)腳本
- more /etc/rc.local /etc/rc.d/rc[0~6].d ls -l /etc/rc.d/rc3.d/
(2)例子:當(dāng)我們需要開(kāi)機(jī)啟動(dòng)自己的腳本時(shí),只需要將可執(zhí)行腳本丟在/etc/init.d目錄下,然后在/etc/rc.d/rc*.d中建立軟鏈接即可
- ln -s /etc/init.d/sshd /etc/rc.d/rc3.d/S100ssh
此處sshd是具體服務(wù)的腳本文件,S100ssh是其軟鏈接,S開(kāi)頭代表加載時(shí)自啟動(dòng);如果是K開(kāi)頭的腳本文件,代表運(yùn)行級(jí)別加載時(shí)需要關(guān)閉的。
06、檢查計(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/*
07、檢查異常文件
1、查看敏感目錄,如/tmp目錄下的文件,同時(shí)注意隱藏文件夾,以“..”為名的文件夾具有隱藏屬性
2、得到發(fā)現(xiàn)WEBSHELL、遠(yuǎn)控木馬的創(chuàng)建時(shí)間,如何找出同一時(shí)間范圍內(nèi)創(chuàng)建的文件?
- 可以使用find命令來(lái)查找,如 find /opt -iname "*" -atime 1 -type f 找出 /opt 下一天前訪問(wèn)過(guò)的文件
3、針對(duì)可疑文件可以使用stat進(jìn)行創(chuàng)建修改時(shí)間。
08、檢查歷史命令
一般而言,入侵者獲取shell之后,會(huì)執(zhí)行一些系統(tǒng)命令從而在主機(jī)上留下痕跡,我們可以通過(guò)history命令查詢shell命令的執(zhí)行歷史。
(1)查詢某個(gè)用戶在系統(tǒng)上執(zhí)行了什么命令
使用root用戶登錄系統(tǒng),檢查/home目錄下的用戶主目錄的.bash_history文件
(2)默認(rèn)情況下,系統(tǒng)可以保存1000條的歷史命令,并不記錄命令執(zhí)行的時(shí)間,根據(jù)需要進(jìn)行安全加固。
a)保存1萬(wàn)條命令sed -i 's/^HISTSIZE=1000/HISTSIZE=10000/g' /etc/profileb)在/etc/profile的文件尾部添加如下行數(shù)配置信息:######jiagu history xianshi#########USER_IP=`who -u am i 2>/dev/null | awk '{print $NF}' | sed -e 's/[()]//g'`if [ "$USER_IP" = "" ]thenUSER_IP=`hostname`fiexport HISTTIMEFORMAT="%F %T $USER_IP `whoami` "shopt -s histappendexport PROMPT_COMMAND="history -a"######### jiagu history xianshi ##########c)source /etc/profile讓配置生效
09、檢查系統(tǒng)日志
在Linux上一般跟系統(tǒng)相關(guān)的日志默認(rèn)都會(huì)放到/var/log下面,若是一旦出現(xiàn)問(wèn)題,用戶就可以通過(guò)查看日志來(lái)迅速定位,及時(shí)解決問(wèn)題。常用日志文件如下:
/var/log/btmp:記錄錯(cuò)誤登錄日志,這個(gè)文件是二進(jìn)制文件,不能直接vi查看,而要使用lastb命令查看。/var/log/lastlog:記錄系統(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命令來(lái)查看。/var/log/utmp:記錄當(dāng)前已經(jīng)登錄的用戶信息,這個(gè)文件會(huì)隨著用戶的登錄和注銷不斷變化,只記錄當(dāng)前登錄用戶的信息。同樣這個(gè)文件不能直接vi,而要使用w,who,users等命令來(lái)查詢。/var/log/secure:記錄驗(yàn)證和授權(quán)方面的信息,只要涉及賬號(hào)和密碼的程序都會(huì)記錄,比如SSH登錄,su切換用戶,sudo授權(quán),甚至添加用戶和修改用戶密碼都會(huì)記錄在這個(gè)日志文件中
一般,我們需要重點(diǎn)去關(guān)注secure安全日志,檢查系統(tǒng)錯(cuò)誤登陸日志,統(tǒng)計(jì)IP重試次數(shù),成功登錄的時(shí)間、用戶名和ip,確認(rèn)賬號(hào)是否存在暴力破解或異常登錄的情況。
1、定位有多少I(mǎi)P在爆破主機(jī)的root帳號(hào):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 -nr2、登錄成功的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}'