在日常繁瑣的運(yùn)維工作中,對(duì)linux服務(wù)器進(jìn)行安全檢查是一個(gè)非常重要的環(huán)節(jié)。今天,分享一下如何檢查linux系統(tǒng)是否遭受了入侵?
一、是否入侵檢查
1)檢查系統(tǒng)日志
檢查系統(tǒng)錯(cuò)誤登陸日志,統(tǒng)計(jì)IP重試次數(shù)(last命令是查看系統(tǒng)登陸日志,比如系統(tǒng)被reboot或登陸情況)
[root@bastion-IDC ~]# last
2)檢查系統(tǒng)用戶(hù)
查看是否有異常的系統(tǒng)用戶(hù)
[root@bastion-IDC ~]# cat /etc/passwd
查看是否產(chǎn)生了新用戶(hù),UID和GID為0的用戶(hù)
[root@bastion-IDC ~]# grep "0" /etc/passwd
查看passwd的修改時(shí)間,判斷是否在不知的情況下添加用戶(hù)
[root@bastion-IDC ~]# ls -l /etc/passwd
查看是否存在特權(quán)用戶(hù)
[root@bastion-IDC ~]# awk -F: '$3==0 {print $1}' /etc/passwd
查看是否存在空口令帳戶(hù)
[root@bastion-IDC ~]# awk -F: 'length($2)==0 {print $1}' /etc/shadow
3)檢查異常進(jìn)程
注意UID為0的進(jìn)程
使用ps -ef命令查看進(jìn)程
察看該進(jìn)程所打開(kāi)的端口和文件
[root@bastion-IDC ~]# lsof -p pid命令查看
檢查隱藏進(jìn)程
[root@bastion-IDC ~]# ps -ef | awk '{print }' | sort -n | uniq >1
[root@bastion-IDC ~]# ls /porc |sort -n|uniq >2
[root@bastion-IDC ~]# diff 1 2
4)檢查異常系統(tǒng)文件
[root@bastion-IDC ~]# find / -uid 0 –perm -4000 –print
[root@bastion-IDC ~]# find / -size +10000k –print
[root@bastion-IDC ~]# find / -name "…" –print
[root@bastion-IDC ~]# find / -name ".." –print
[root@bastion-IDC ~]# find / -name "." –print
[root@bastion-IDC ~]# find / -name " " –print
5)檢查系統(tǒng)文件完整性
[root@bastion-IDC ~]# rpm –qf /bin/ls
[root@bastion-IDC ~]# rpm -qf /bin/login
[root@bastion-IDC ~]# md5sum –b 文件名
[root@bastion-IDC ~]# md5sum –t 文件名
6)檢查RPM的完整性
[root@bastion-IDC ~]# rpm -Va #注意相關(guān)的/sbin,/bin,/usr/sbin,/usr/bin
輸出格式說(shuō)明:
S – File size differs
M – Mode differs (permissions)
5 – MD5 sum differs
D – Device number mismatch
L – readLink path mismatch
U – user ownership differs
G – group ownership differs
T – modification time differs
7)檢查網(wǎng)絡(luò)
[root@bastion-IDC ~]# ip link | grep PROMISC(正常網(wǎng)卡不該在promisc模式,可能存在sniffer)
[root@bastion-IDC ~]# lsof –i
[root@bastion-IDC ~]# netstat –nap(察看不正常打開(kāi)的TCP/UDP端口)
[root@bastion-IDC ~]# arp –a
8)檢查系統(tǒng)計(jì)劃任務(wù)
[root@bastion-IDC ~]# crontab –u root –l
[root@bastion-IDC ~]# cat /etc/crontab
[root@bastion-IDC ~]# ls /etc/cron.*
9)檢查系統(tǒng)后門(mén)
[root@bastion-IDC ~]# cat /etc/crontab
[root@bastion-IDC ~]# ls /var/spool/cron/
[root@bastion-IDC ~]# cat /etc/rc.d/rc.local
[root@bastion-IDC ~]# ls /etc/rc.d
[root@bastion-IDC ~]# ls /etc/rc3.d
10)檢查系統(tǒng)服務(wù)
[root@bastion-IDC ~]# chkconfig —list
[root@bastion-IDC ~]# rpcinfo -p(查看RPC服務(wù))
11)檢查rootkit
[root@bastion-IDC ~]# rkhunter -c
[root@bastion-IDC ~]# chkrootkit -q
二、linux系統(tǒng)被入侵/中毒的表象
比較常見(jiàn)的中毒表現(xiàn)在以下三個(gè)方面:
1)服務(wù)器出去的帶寬會(huì)跑高這個(gè)是中毒的一個(gè)特征。
因?yàn)榉?wù)器中毒之后被別人拿去利用,常見(jiàn)的就是拿去當(dāng)肉雞攻擊別人;再者就是拿你的數(shù)據(jù)之類(lèi)的。
所以服務(wù)器帶寬方面需要特別注意下,如果服務(wù)器出去的帶寬跑很高,那肯定有些異常,需要及時(shí)檢查一下!
2)系統(tǒng)里會(huì)產(chǎn)生多余的不明的用戶(hù)
中毒或者被入侵之后會(huì)導(dǎo)致系統(tǒng)里產(chǎn)生一些不明用戶(hù)或者登陸日志,所以這方面的檢查也是可以看出一些異常的。
3)開(kāi)機(jī)是否啟動(dòng)一些不明服務(wù)和crond任務(wù)里是否有一些來(lái)歷不明的任務(wù)?
因?yàn)橹卸緯?huì)隨系統(tǒng)的啟動(dòng)而啟動(dòng)的,所以一般會(huì)開(kāi)機(jī)啟動(dòng),檢查一下啟動(dòng)的服務(wù)或者文件是否有異常,一般會(huì)在/etc/rc.local和crondtab -l 顯示出來(lái)。
三、順便說(shuō)下一次Linux系統(tǒng)被入侵/中毒的解決過(guò)程
在工作中碰到系統(tǒng)經(jīng)常卡,而且有時(shí)候遠(yuǎn)程連接不上,從本地以及遠(yuǎn)程檢查一下這個(gè)系統(tǒng),發(fā)現(xiàn)有不明的系統(tǒng)進(jìn)程。
初步判斷就是可能中毒了!!!
解決過(guò)程:
1)在監(jiān)控里檢查一下這臺(tái)服務(wù)器的帶寬,發(fā)現(xiàn)服務(wù)器出去的帶寬跑很高,所以才會(huì)導(dǎo)致遠(yuǎn)程連接卡甚至連接不上,這是一個(gè)原因。
為什么服務(wù)器出去的帶寬這么高且超出了開(kāi)通的帶寬值?這個(gè)原因只能進(jìn)入服務(wù)器系統(tǒng)里檢查了。
2)遠(yuǎn)程進(jìn)入系統(tǒng)里檢查了下, ps -aux查到不明進(jìn)程 ,立刻關(guān)閉它。
3)檢查一下開(kāi)機(jī)啟動(dòng)項(xiàng):
#chkconfig --list | grep 3:on
服務(wù)器啟動(dòng)級(jí)別是3的,我檢查一下了開(kāi)機(jī)啟動(dòng)項(xiàng),沒(méi)有特別明顯的服務(wù)。
然后檢查了一下開(kāi)機(jī)啟動(dòng)的一個(gè)文件
#more /etc/rc.local
看到這個(gè)文件里被添加了很多未知項(xiàng),注釋了它。
4)然后在遠(yuǎn)程連接這臺(tái)服務(wù)器的時(shí)候,還是有些卡。
檢查了一下系統(tǒng)的計(jì)劃任務(wù)crond,使用crondtab -l 命令進(jìn)行查看,看到很多注釋行。
這些注釋行與/etc/rc.local的內(nèi)容差不多。最后備份下/var/spool/cron/root文件(也就是root下的crontab計(jì)劃任務(wù)內(nèi)容),就刪除了crontab內(nèi)容,然后停止crond任務(wù),并chkconfig crond off 禁用它開(kāi)機(jī)啟動(dòng)。
5)為了徹底清除危害,我檢查了一下系統(tǒng)的登陸日志(last命令查看),看到除了root用戶(hù)之外還有其它的用戶(hù)登陸過(guò)。
檢查了一下/etc/passwd ,看到有不明的用戶(hù),立刻用usermod -L XXX 禁用這些用戶(hù)。
然后更新了下系統(tǒng)的復(fù)雜密碼。
----------------------------------------------------
禁用/鎖定用戶(hù)登錄系統(tǒng)的方法
1. usermod -L username 鎖定用戶(hù)
usermod -U username 解鎖
2. passwd -l username 鎖定用戶(hù)
passwd -u username 解鎖
3.修改用戶(hù)的shell類(lèi)型為/sbin/nologin(/etc/passwd文件里修改)
4.在/etc/下創(chuàng)建空文件nologin,這樣就鎖定了除root之外的全部用戶(hù)
----------------------------------------------------
四、怎樣確保linux系統(tǒng)安全
1)從以往碰到的實(shí)例來(lái)分析,密碼太簡(jiǎn)單是一個(gè)錯(cuò)
用戶(hù)名默認(rèn),密碼太簡(jiǎn)單是最容易被入侵的對(duì)象,所以切忌不要使用太過(guò)于簡(jiǎn)單的密碼,先前碰到的那位客戶(hù)就是使用了太簡(jiǎn)單的且規(guī)則的密碼 1q2w3e4r5t, 這種密碼在掃描的軟件里是通用的,所以很容易被別人掃描出來(lái)的。
2)不要使用默認(rèn)的遠(yuǎn)程端口,避免被掃描到
掃描的人都是根據(jù)端口掃描,然后再進(jìn)行密碼掃描,默認(rèn)的端口往往就是掃描器的對(duì)象,他們掃描一個(gè)大的IP 段,哪些開(kāi)放22端口且認(rèn)為是ssh服務(wù)的linux系統(tǒng),所以才會(huì)猜這機(jī)器的密碼。更改遠(yuǎn)程端口也是安全的一個(gè)措施!
3)使用一些安全策略進(jìn)行保護(hù)系統(tǒng)開(kāi)放的端口
使用iptables或者配置/etc/hosts.deny 和/etc/hosts.allow進(jìn)行白名單設(shè)置
可以對(duì)/etc/passwd、/etc/group、/etc/sudoers、/etc/shadow等用戶(hù)信息文件進(jìn)行鎖定(chattr +ai)
4)禁ping設(shè)置
# echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all