在日常繁琐的运维工作中,检查linux服务器的安全性是一个非常重要的环节。今天分享一下如何检查linux系统是否被入侵。
1.检查系统是否被入侵。1)检查系统日志,检查系统错误日志,并计算IP重试次数(最后一个命令是检查系统日志,如系统正在重新启动或已登录)
# last2)检查系统用户,看是否有异常的系统用户。
# cat /etc/passwd查看是否生成了UID和GID为0的新用户。
# grep '0' /etc/passwd检查passwd的修改时间,确定是否在不知情的情况下添加用户。
# ls -l /etc/passwd查看是否有特权用户。
# awk-f : ' $ 3==0 { print $ 1 } '/etc/passwd查看是否有空的密码账户。
# awk-f : ' length $ 2)==0 { print $ 1 } '/etc/shadow 3)检查异常进程。注意UID为0的进程。
使用ps -ef命令查看该过程。
检查由此进程打开的端口和文件。
# lsof -p pid #命令来检查隐藏的进程
# PS-ef | awk“{ print }”| sort-n | uniq 1 # ls/porc | sort-n | uniq 2 # diff 1 24)检查异常系统文件# find/-uid 0perm-4000print # find/-size 10000kprint # find/-name '…'print # find/-name ' . '打印# find/-name ' . 'print 5)检查系统文件的完整性# RPMqf/bin/Ls # Ls # RPM-qf/bin/log in # MD 5 sum-bfilename b # MD 5 sumfilename t 6)检查rpm # rpm -Va #的完整性注意相关的/sbin、/bin、/usr/sbin、 /usr/bin输出格式描述:s文件大小扩散器模式扩散器(权限)5MD5 sum differsD设备号不匹配lread link路径不匹配u用户所有权扩散器g组所有权扩散器ST修改时间扩散器Rs7)检查网络# ip link | grep PROMISC(正常网卡不应处于PROMISC模式,可能存在嗅探器)# lsofI # netstatnap(查看未正常打开的TCP/UDP端口)# arp -a8)检查* 9)检查系统的后门# cat/etc/Crontab # ls/var/spool/cron/# cat/etc/RC . d/RC . local # ls/etc/RC . d # ls/etc/rc3 . D10)检查系统服务# chkconfig —list# rpcinfo -p(检查RPC服务)1
1)检查rootkit所以服务器带宽方面需要特别注意下,如果服务器出去的带宽跑很高,那肯定有些异常,需要及时检查一下!
2)系统里会产生多余的不明的用户中毒或者被入侵之后会导致系统里产生一些不明用户或者登陆日志,所以这方面的检查也是可以看出一些异常的。
3)开机是否启动一些不明服务和crond任务里是否有一些来历不明的任务?因为中毒会随系统的启动而启动的,所以一般会开机启动,检查一下启动的服务或者文件是否有异常,一般会在/etc/rc.local和crondtab -l 显示出来。
三、Linux系统被入侵/中毒的解决过程在工作中碰到系统经常卡,而且有时候远程连接不上,从本地以及远程检查一下这个系统,发现有不明的系统进程。初步判断就是可能中毒了!!!
解决过程:1)检查服务器带宽在监控里检查一下这台服务器的带宽,发现服务器出去的带宽跑很高,所以才会导致远程连接卡甚至连接不上,这是一个原因。
为什么服务器出去的带宽这么高且超出了开通的带宽值?这个原因只能进入服务器系统里检查了。
2)远程进入系统里检查了下, ps -aux查到不明进程 ,立刻关闭它。3)检查一下开机启动项:#chkconfig --list | grep 3:on服务器启动级别是3的,我检查一下了开机启动项,没有特别明显的服务。
然后检查了一下开机启动的一个文件
#more /etc/rc.local看到这个文件里被添加了很多未知项,注释了它。
4)然后在远程连接这台服务器的时候,还是有些卡。检查了一下系统的计划任务crond,使用crondtab -l 命令进行查看,看到很多注释行。这些注释行与/etc/rc.local的内容差不多。最后备份下/var/spool/cron/root文件(也就是root下的crontab计划任务内容),就删除了crontab内容,然后停止crond任务,并chkconfig crond off 禁用它开机启动。
5)检查系统的登陆日志last命令查看),看到除了root用户之外还有其它的用户登陆过。检查了一下/etc/passwd ,看到有不明的用户,立刻用usermod -L XXX 禁用这些用户。然后更新了下系统的复杂密码。
禁用/锁定用户登录系统的方法
1. usermod -L username 锁定用户usermod -U username 解锁2. passwd -l username 锁定用户passwd -u username 解锁3.修改用户的shell类型为/sbin/nologin(/etc/passwd文件里修改)4.在/etc/下创建空文件nologin,这样就锁定了除root之外的全部用户四、怎样确保linux系统安全1)从以往碰到的实例来分析,密码太简单是一个错用户名默认,密码太简单是最容易被入侵的对象,所以切忌不要使用太过于简单的密码,先前碰到的那位客户就是使用了太简单的且规则的密码 1q2w3e4r5t, 这种密码在扫描的软件里是通用的,所以很容易被别人扫描出来的。
2)不要使用默认的远程端口,避免被扫描到扫描的人都是根据端口扫描,然后再进行密码扫描,默认的端口往往就是扫描器的对象,他们扫描一个大的IP 段,哪些开放22端口且认为是ssh服务的linux系统,所以才会猜这机器的密码。更改远程端口也是安全的一个措施!
3)使用一些安全策略进行保护系统开放的端口使用iptables或者配置/etc/hosts.deny 和/etc/hosts.allow进行白名单设置
可以对/etc/passwd、/etc/group、/etc/sudoers、/etc/shadow等用户信息文件进行锁定(chattr +ai)
4)禁ping设置# echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all---------------------------------------------------------
发现一次服务器被getshell渗透的解决办法:
1)使用top命令发现一个python程序占用了95%的cpu2)使用ps -ef|grep python发现下面程序:python -c import pty;pty.spamn("/bin/sh")
这个程序命令表示通过webshell反弹shell回来之后获取真正的ttyshell进行渗透到服务器里。kill掉这个进程!
3)发现在/var/spool/cron下面设置了一个nobody的定时执行上面获取getshell的渗透命令!果断删除这个任务!4)ss -a发现一个可疑ip以及它的进程,果断在iptables里禁止这个ip的所有请求:iptables -I INPUT -s 180.125.131.192 -j DROP
-----------------------------------------------------------------------------------------------------------
比如:
在一台服务器上,已经启动了80端口的nginx进程,但是执行“lsof -i:80”或者"ps -ef"命令后,没有任何信息输出!这是为什么?
怀疑机器上的ps命令被人黑了!执行:
解决办法:可以拷贝别的机器上的/bin/ps二进制文件覆盖本机的这个文件。
-------------------------记一次Linux操作系统被入侵的排查过程--------------------------------------
某天突然发现IDC机房一台测试服务器的流量异常,几乎占满了机房的总带宽,导致其他服务器程序运行业务受阻!
意识到了这台测试机被人种了木马,于是开始了紧张的排查过程:
1)运行ps和top命令发现了两个陌生名称的程序(比如mei34hu)占用了大部分CPU资源,显然这是别人植入的程序!
果断尝试kill掉这两个进程,kill后,测试机流量明显降下去。然而不幸的是,不一会儿又恢复了之前的状态。
2)将IDC这台测试机的外网关闭。远程通过跳板机内网登陆这台机器。3)查看这些陌生程序所在路径查找程序路径:
ls /proc/进程号/exe,然后再次kill掉进程,又会生成一个新的进程名,发现路径也是随机在PATH变量的路径中变换,有时在/bin目录,有时在/sbin,有时在/usr/bin目录中。
看来还有后台主控程序在作怪,继续查找。
4)尝试查找跟踪程序查看/bin,/sbin,/usr/bin等目录下是否存在以.开头的文件名,发现不少,而且部分程序移除后会自动生成。
./ ../ .ssh.hmac
这说明还没找到主控程序。
5)接着用strace命令跟踪这些陌生程序:
使用stat 查看系统命令ps、ls 、netstat、pstree等等:
有可能是这台测试机刚安装好系统后,设置了root密码为123456,之后又把它放到过公网上被人入侵了。
接着查一下它在相关路径中还放了哪些程序:
很明显,这些程序都被设置了开机自启动
6)查看系统启动项
7)顾虑到系统常用命令中(如ls,ps等)可能会隐藏启动进程,这样一旦执行又会拉起木马程序。于是再查看下系统中是否创建了除root以外的管理员账号:
其实,当系统被感染rootkit后,系统已经变得不可靠了,唯一的办法就是重装系统了。
8)对于一些常用命令程序的修复思路:找出常用命令所在的rpm包,然后强制删除,最后在通过yum安装(由于外网已拿掉,可以通过squid代理上网的yum下载)
1)结合服务器的系统日志/var/log/messages、/var/log/secure进行仔细检查。
2)将可疑文件设为不可执行,用chattr +ai将几个重要目录改为不可添加和修改,再将进程杀了,再重启
3)chkrootkit之类的工具查一下对于以上这些梳理的木马排查的思路要清楚,排查手段要熟练。遇到问题不要慌,静下心,细查系统日志,根据上面的排查思路来一步步处理,这样Hacker就基本"投降"了~~~