linux系统被植入木马的排查流程

一、是否入侵检查

1)检查系统日志

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

[root@localhost~]#last

2)检查系统用户

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

[root@localhost~]#cat/etc/passwd

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

[root@localhost~]#grep"0"/etc/passwd

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

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

查看是否存在特权用户

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

查看是否存在空口令帐户

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

3)检查异常进程

注意UID为0的进程

使用ps-ef命令查看进程

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

[root@localhost~]#lsof-ppid命令查看

检查隐藏进程

[root@localhost~]#ps-ef|awk'{print}'|sort-n|uniq>1

[root@localhost~]#ls/porc|sort-n|uniq>2

[root@localhost~]#diff12

4)检查异常系统文件

[root@localhost~]#find/-uid0–perm-4000–print

[root@localhost~]#find/-size+10000k–print

[root@localhost~]#find/-name"…"–print

[root@localhost~]#find/-name".."–print

[root@localhost~]#find/-name"."–print

[root@localhost~]#find/-name""–print

5)检查系统文件完整性

[root@localhost~]#rpm–qf/bin/ls

[root@localhost~]#rpm-qf/bin/login

[root@localhost~]#md5sum–b文件名

[root@localhost~]#md5sum–t文件名

6)检查RPM的完整性

[root@localhost~]#rpm-Va#注意相关的/sbin,/bin,/usr/sbin,/usr/bin

输出格式说明:

S–Filesizediffers

M–Modediffers(permissions)

5–MD5sumdiffers

D–Devicenumbermismatch

L–readLinkpathmismatch

U–userownershipdiffers

G–groupownershipdiffers

T–modificationtimediffers

7)检查网络

[root@localhost~]#iplink|grepPROMISC(正常网卡不该在promisc模式,可能存在sniffer)

[root@localhost~]#lsof–i

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

[root@localhost~]#arp–a

8)检查系统计划任务

[root@localhost~]#crontab–uroot–l

[root@localhost~]#cat/etc/crontab

[root@localhost~]#ls/etc/cron.*

9)检查系统后门

[root@localhost~]#cat/etc/crontab

[root@localhost~]#ls/var/spool/cron/

[root@localhost~]#cat/etc/rc.d/rc.local

[root@localhost~]#ls/etc/rc.d

[root@localhost~]#ls/etc/rc3.d

10)检查系统服务

[root@localhost~]#chkconfig—list

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

11)检查rootkit

[root@localhost~]#rkhunter-c

[root@localhost~]#chkrootkit-q

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

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

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

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

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

2)系统里会产生多余的不明的用户

中毒或者被入侵之后会导致系统里产生一些不明用户或者登陆日志,所以这方面的检查也是可以看出一些异常的。

3)开机是否启动一些不明服务和crond任务里是否有一些来历不明的任务?

因为中毒会随系统的启动而启动的,所以一般会开机启动,检查一下启动的服务或者文件是否有异常,一般会在/etc/rc.local和crondtab-l显示出来。

三、顺便说下一次Linux系统被入侵/中毒的解决过程

在工作中碰到系统经常卡,而且有时候远程连接不上,从本地以及远程检查一下这个系统,发现有不明的系统进程。

初步判断就是可能中毒了!!!

解决过程:

1)在监控里检查一下这台服务器的带宽,发现服务器出去的带宽跑很高,所以才会导致远程连接卡甚至连接不上,这是一个原因。

为什么服务器出去的带宽这么高且超出了开通的带宽值?这个原因只能进入服务器系统里检查了。

2)远程进入系统里检查了下,ps-aux查到不明进程,立刻关闭它。

3)检查一下开机启动项:

#chkconfig--list|grep3:on

服务器启动级别是3的,我检查一下了开机启动项,没有特别明显的服务。

然后检查了一下开机启动的一个文件

#more/etc/rc.local

看到这个文件里被添加了很多未知项,注释了它。

4)然后在远程连接这台服务器的时候,还是有些卡。

检查了一下系统的计划任务crond,使用crondtab-l命令进行查看,看到很多注释行。

这些注释行与/etc/rc.local的内容差不多。最后备份下/var/spool/cron/root文件(也就是root下的crontab计划任务内容),就删除了crontab内容,然后停止crond任务,并chkconfigcrondoff禁用它开机启动。

5)为了彻底清除危害,我检查了一下系统的登陆日志(last命令查看),看到除了root用户之外还有其它的用户登陆过。

检查了一下/etc/passwd,看到有不明的用户,立刻用usermod-LXXX禁用这些用户。

然后更新了下系统的复杂密码。

----------------------------------------------------

禁用/锁定用户登录系统的方法

1.usermod-Lusername锁定用户

usermod-Uusername解锁

2.passwd-lusername锁定用户

passwd-uusername解锁

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设置

#echo1>/proc/sys/net/ipv4/icmp_echo_ignore_all

---------------------------------------------------------

发现一次服务器被getshell渗透的解决办法:

1)使用top命令发现一个python程序占用了95%的cpu

2)使用ps-ef|greppython发现下面程序:

python-cimportpty;pty.spamn("/bin/sh")

这个程序命令表示通过webshell反弹shell回来之后获取真正的ttyshell进行渗透到服务器里。kill掉这个进程!

3)发现在/var/spool/cron下面设置了一个nobody的定时执行上面获取getshell的渗透命令!果断删除这个任务!

4)ss-a发现一个可疑ip以及它的进程,果断在iptables里禁止这个ip的所有请求:

-IINPUT-s180.125.131.192-jDROP

-----------------------------------------------------------------------------------------------------------

比如:

在一台服务器上,已经启动了80端口的nginx进程,但是执行“lsof-i:80”或者"ps-ef"命令后,没有任何信息输出!这是为什么?

怀疑机器上的ps命令被人黑了!执行:

[root@locahost~]#whichps

/bin/ps

[root@locahost~]#ls-l/bin/ps

-rwxr-xr-x.1rootroot853045月112016/bin/ps

[root@locahost~]#stat/bin/ps

File:"/bin/ps"

Size:85304Blocks:168IOBlock:4096普通文件

Device:fc02h/64514dInode:13549Links:1

Access:(0755/-rwxr-xr-x)Uid:(0/root)Gid:(0/root)

Access:2017-05-0717:14:37.862999884+0800

Modify:2016-05-1107:23:09.000000000+0800

Change:2017-05-0717:14:37.146999967+0800

发现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等目录下是否存在以.开头的文件名,发现不少,而且部分程序移除后会自动生成。

[root@localhost~]#ls/usr/bin/.//按Tab键补全

./../.ssh.hmac

这说明还没找到主控程序。

5)接着用strace命令跟踪这些陌生程序:

[root@localhost~]#strace/bin/mei34hu

结果发现在跟踪了这个程序后,它居然自杀了(把自己进程文件干掉了)!然后想用netstat看下网络连接情况,结果居然查不到任何对外的网络连接,于是开始怀疑命令被修改过了。

使用stat查看系统命令ps、ls、netstat、pstree等等:

[root@localhost~]#whichps

/usr/bin/ps

[root@localhost~]#whichls

aliasls='ls--color=auto'

/usr/bin/ls

[root@localhost~]#whichnetstat

/usr/bin/netstat

[root@localhost~]#stat/usr/bin/netstat

[root@localhost~]#stat/usr/bin/ps

[root@localhost~]#stat/usr/bin/ls

......

发现修改时间都是在最近的3天内,这让我猛然想起传说中的rootkit用户态级病毒!!

有可能是这台测试机刚安装好系统后,设置了root密码为123456,之后又把它放到过公网上被人入侵了。

接着查一下它在相关路径中还放了哪些程序:

[root@localhost~]#find/bin-mtime-3-typef|xargsrm-f

[root@localhost~]#find/usr/bin-mtime-3-typef|xargsrm-f

[root@localhost~]#find/use/sbin-mtime-3-typef|xargsrm-f

[root@localhost~]#find/sbin-mtime-3-typef|xargsrm-f

将上面查找出的3天前的程序统统都删掉,并强制断电,重启服务器!然而可恨的是这些程序在机器重启后又好端端的运行以来!

很明显,这些程序都被设置了开机自启动

6)查看系统启动项

[root@localhost~]#find/etc/rc.d/-mtime-3!-typed

果然这些程序都被设置了开机自启动。于是,就再来一次删除,然后暴力重启服务器。

[root@localhost~]#find/bin-mtime-3-typef|xargsrm-f

[root@localhost~]#find/usr/bin-mtime-3-typef|xargsrm-f

[root@localhost~]#find/use/sbin-mtime-3-typef|xargsrm-f

[root@localhost~]#find/sbin-mtime-3-typef|xargsrm-f

[root@localhost~]#find/etc/rc.d/-mtime-3!-typed|xargsrm-f

重启完服务器后,用top命令查看,系统CPU使用率也不高了。居然这样就被干掉了。

7)顾虑到系统常用命令中(如ls,ps等)可能会隐藏启动进程,这样一旦执行又会拉起木马程序。于是再查看下系统中是否创建了除root以外的管理员账号:

[root@localhost~]#awk-F":"'{if($3==0)print$1}'/etc/passwd

root

结果发现只输入了root这一个用户,说明系统用户是正常的。

其实,当系统被感染rootkit后,系统已经变得不可靠了,唯一的办法就是重装系统了。

8)对于一些常用命令程序的修复思路:找出常用命令所在的rpm包,然后强制删除,最后在通过yum安装(由于外网已拿掉,可以通过squid代理上网的yum下载)

[root@localhost~]#rpm-qf/bin/ps

[root@localhost~]#rpm-qf/bin/ls

[root@localhost~]#rpm-qf/bin/netstat

[root@localhost~]#rpm-qf/usr/bin/pstree

然后将上面命令查找出来的rpm包强制卸载

[root@localhost~]#rpm-e--nodeps......

[root@localhost~]#rpm-e--nodeps......

[root@localhost~]#rpm-e--nodeps......

[root@localhost~]#rpm-e--nodeps......

接着再重新安装

[root@localhost~]#yuminstall-yprocpscoreutilsnet-toolspsmisc

最后重启下系统即可。除了上面这次排查之外,还可以:

1)结合服务器的系统日志/var/log/messages、/var/log/secure进行仔细检查。

2)将可疑文件设为不可执行,用chattr+ai将几个重要目录改为不可添加和修改,再将进程杀了,再重启

3)chkrootkit之类的工具查一下

对于以上这些梳理的木马排查的思路要清楚,排查手段要熟练。遇到问题不要慌,静下心,细查系统日志,根据上面的排查思路来一步步处理,这样Hacker就基本"投降"了~~~

转载至:https://cloud.tencent.com/info/7cb7882411bcb115eb702ff5a77c0149.html