帮助中心 >  技术知识库 >  数据库 >  相关技术支持 >  Linux系统是否被植入木马的排查流程梳理

Linux系统是否被植入木马的排查流程梳理

2018-12-11 08:00:25 8447

在日常繁琐的运维工作中,对linux服务器进行安全检查是一个非常重要的环节。今天,分享一下如何检查linux系统是否遭受了入侵?


一、是否入侵检查


1)检查系统日志


检查系统错误登陆日志,统计IP重试次数(last命令是查看系统登陆日志,比如系统被reboot或登陆情况)

[root@bastion-IDC ~]# last

2)检查系统用户


查看是否有异常的系统用户

[root@bastion-IDC ~]# cat /etc/passwd


查看是否产生了新用户,UID和GID为0的用户

[root@bastion-IDC ~]# grep "0" /etc/passwd


查看passwd的修改时间,判断是否在不知的情况下添加用户

[root@bastion-IDC ~]# ls -l /etc/passwd


查看是否存在特权用户

[root@bastion-IDC ~]# awk -F: '$3==0 {print $1}' /etc/passwd


查看是否存在空口令帐户

[root@bastion-IDC ~]# awk -F: 'length($2)==0 {print $1}' /etc/shadow

3)检查异常进程


注意UID为0的进程

使用ps -ef命令查看进程


察看该进程所打开的端口和文件

[root@bastion-IDC ~]# lsof -p pid命令查看


检查隐藏进程

[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)检查异常系统文件


[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)检查系统文件完整性


[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 #注意相关的/sbin,/bin,/usr/sbin,/usr/bin

输出格式说明:

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)检查网络


[root@bastion-IDC ~]# ip link | grep PROMISC(正常网卡不该在promisc模式,可能存在sniffer)

[root@bastion-IDC ~]# lsof –i

[root@bastion-IDC ~]# netstat –nap(察看不正常打开的TCP/UDP端口)

[root@bastion-IDC ~]# arp –a

8)检查系统计划任务


[root@bastion-IDC ~]# crontab –u root –l

[root@bastion-IDC ~]# cat /etc/crontab

[root@bastion-IDC ~]# ls /etc/cron.*

9)检查系统后门


[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)检查系统服务


[root@bastion-IDC ~]# chkconfig —list

[root@bastion-IDC ~]# rpcinfo -p(查看RPC服务)

11)检查rootkit


[root@bastion-IDC ~]# rkhunter -c

[root@bastion-IDC ~]# chkrootkit -q

二、linux系统被入侵/中毒的表象


比较常见的中毒表现在以下三个方面:

1)服务器出去的带宽会跑高这个是中毒的一个特征。

因为服务器中毒之后被别人拿去利用,常见的就是拿去当肉鸡攻击别人;再者就是拿你的数据之类的。

所以服务器带宽方面需要特别注意下,如果服务器出去的带宽跑很高,那肯定有些异常,需要及时检查一下!


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

提交成功!非常感谢您的反馈,我们会继续努力做到更好!

这条文档是否有帮助解决问题?

非常抱歉未能帮助到您。为了给您提供更好的服务,我们很需要您进一步的反馈信息:

在文档使用中是否遇到以下问题: