今天朋友说他一台要准备上线的生产服务器被挂马,特征ps命令找不到进程,top能看到负载最高的一个程序是一个随机的10位字母的东西,kill掉之后自动再次出现一个随机10位字母的进程。

我让他关闭这个机器的外网,内网放开,在局域网中给我一个跳板。等我拿到权限之后进入机器,先按照朋友说的验证了一遍,果然是那样,木马有自我保护自我恢复。

这时候我想到一个问题居然是能自我开机启动,要么/etc/rc.d/{init.d,rc{1,2,3,4,5}.d}/下有启动脚本,要么有cron计划任务。

于是我发现crontab -l是正常,来到/etc/rc.d/init.d下发现了异常有10位字母的启动脚本,脚本内容如下

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

[root@Xd9BdoAkG ~]# cat /etc/rc.d/init.d/fregonnzkq

#!/bin/sh

# chkconfig: 12345 90 90

# description: fregonnzkq

### BEGIN INIT INFO

# Provides:        fregonnzkq

# Required-Start:

# Required-Stop:

# Default-Start:    1 2 3 4 5

# Default-Stop:

# Short-Description:    fregonnzkq

### END INIT INFO

case $1 in

start)

/usr/bin/fregonnzkq

;;

stop)

;;

*)

/usr/bin/fregonnzkq

;;

esac

看到这我真是佩服这帮人单用户启动模式都不放过啊,尼玛,你这是赶尽杀绝啊。。。。。。。

到了这里我天真的删除了几个这样的启动脚本,然后重启服务器,问题依旧。。。。。。。。。你妹啊。。。不带这样玩的。。。。

到了这时候我多想了下,是不是还有启动脚本?仔细核查发现/etc/rc.d/rc3.d/下还有问题

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

[root@Xd9BdoAkG rc3.d]# ls
-lt

total 0

lrwxrwxrwx  1 root root
20 Sep  8 13:21 S90eviykluziy -> ../init.d/eviykluziy

lrwxrwxrwx  1 root root
20 Sep  8 12:49 S90yuurxgembh -> ../init.d/yuurxgembh

lrwxrwxrwx  1 root root
20 Sep  8 10:37 S90fregonnzkq -> ../init.d/fregonnzkq

lrwxrwxrwx. 1 root root 15
Sep  7 14:08 S85nginx -> ../init.d/nginx

lrwxrwxrwx. 1 root root 24
Sep  7 13:55 S99libvirt-guests -> ../init.d/libvirt-guests

lrwxrwxrwx. 1 root root 19
Sep  7 13:55 S26haldaemon -> ../init.d/haldaemon

lrwxrwxrwx. 1 root root 19
Sep  7 13:54 K10saslauthd -> ../init.d/saslauthd

lrwxrwxrwx. 1 root root 20
Sep  7 13:54 S22messagebus -> ../init.d/messagebus

lrwxrwxrwx. 1 root root 14
Sep  7 13:51 S55sshd -> ../init.d/sshd

lrwxrwxrwx. 1 root root 18
Sep  7 13:51 K15svnserve -> ../init.d/svnserve

lrwxrwxrwx. 1 root root 17
Sep  7 13:44 S10network -> ../init.d/network

lrwxrwxrwx. 1 root root 17
Sep  7 13:44 S12rsyslog -> ../init.d/rsyslog

lrwxrwxrwx. 1 root root 15
Sep  7 13:44 S90crond -> ../init.d/crond

lrwxrwxrwx. 1 root root 19
Sep  7 13:44 K75udev-post -> ../init.d/udev-post

lrwxrwxrwx. 1 root root 17
Sep  7 13:44 K30postfix -> ../init.d/postfix

lrwxrwxrwx. 1 root root 15
Sep  7 13:44 K75netfs -> ../init.d/netfs

lrwxrwxrwx. 1 root root 19
Sep  7 13:44 K85mdmonitor -> ../init.d/mdmonitor

lrwxrwxrwx. 1 root root 22
Sep  7 13:44 K99lvm2-monitor -> ../init.d/lvm2-monitor

lrwxrwxrwx. 1 root root 15
Sep  7 13:44 K80kdump -> ../init.d/kdump

lrwxrwxrwx. 1 root root 18
Sep  7 13:44 K92iptables -> ../init.d/iptables

lrwxrwxrwx. 1 root root 19
Sep  7 13:44 K92ip6tables -> ../init.d/ip6tables

lrwxrwxrwx. 1 root root 20
Sep  7 13:44 K90eyshcjdmzg -> ../init.d/eyshcjdmzg

lrwxrwxrwx. 1 root root 26
Sep  7 13:44 K75blk-availability -> ../init.d/blk-availability

lrwxrwxrwx. 1 root root 16
Sep  7 13:44 K88auditd -> ../init.d/auditd

lrwxrwxrwx. 1 root root 17
Sep  7 13:37 K75ntpdate -> ../init.d/ntpdate

lrwxrwxrwx. 1 root root 20
Sep  7 12:15 K50netconsole -> ../init.d/netconsole

lrwxrwxrwx. 1 root root 11
Sep  7 12:15 S99local -> ../rc.local

lrwxrwxrwx. 1 root root 15
Sep  7 12:15 K89rdisc -> ../init.d/rdisc

lrwxrwxrwx. 1 root root 21
Sep  7 12:15 K87restorecond -> ../init.d/restorecond

看到后我只想把这个木马的作者找到然后说收我做徒弟吧。。。。。。。。

于是我又很傻很天真的删除了这些启动脚本,并且kill了相关进程,希望的太阳没有升起,沉重的打击再次来临,木马再次自我复制自我运行了。。。。启动脚本再次出现了。。

我知道我进入了误区,重新想思路。。。

不知道为什么我瞬间想到了我遗漏了一个地方,cron,对。。。我是crontab -l 来查看的,还有个地方的cron任务不会在这个命令下出现/etc/cron.*

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

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

SHELL=/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=root

HOME=/

# For details see man 4
crontabs

# Example of job definition:

# .---------------- minute
(0 - 59)

# |  .-------------
hour (0 - 23)

# |  | 
.---------- day of month (1 - 31)

# |  |  | 
.------- month (1 - 12) OR jan,feb,mar,apr ...

# |  |  | 
|  .---- day of week (0 - 6) (Sunday=0 or 7) OR
sun,mon,tue,wed,thu,fri,sat

# |  |  | 
|  |

# *  *  * 
*  * user-name command to be executed

*/3 * * * *
root /etc/cron.hourly/gcc.sh

你妹啊 啊 啊 啊,不带这样玩的

1

2

3

4

5

6

[root@Xd9BdoAkG ~]# cat
/etc/cron.hourly/gcc.sh

#!/bin/sh

PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/usr/X11R6/bin

for i in `cat /proc/net/dev|grep :|awk -F: {'print $1'}`; do ifconfig $i up& done

cp /lib/libudev.so
/lib/libudev.so.6

/lib/libudev.so.6

1

2

3

4

5

6

[root@Xd9BdoAkG ~]# cat
/proc/net/dev|grep :|awk -F: {'print $1'}

lo

em1

em2

em3

em4

我擦,看到这,再次shit,你还知道主动启动网络和外面联系啊。。。。

1

2

[root@Xd9BdoAkG ~]# file
/lib/libudev.so

/lib/libudev.so: ELF 32-bit
LSB executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.6.9, not stripped

居然不是脚本什么的,想看文件具体内容暂时是没时间了。。。。。。。

到了这里我们可以确认有几个地方有问题/lib/libudev.so /etc/cron.hourly/gcc.sh /etc/crontab
/etc/rc.d/init.d/ /etc/rc.d/rc3.d/

由于对方发送大量数据包,所以开始采取iptables来封禁,发现这玩意直接把output是 state 为new的drop掉。。。。。。。。不想说了,已经被他玩够了,不在乎多一次。。

通过排查可以肯定/lib/libudev.so是主体。其他是协助运行和自我保护自我复制的实现。既然你是个程序还在系统上,我有root,还搞不定么。为了不再多拖时间,直接查杀了。。

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

[root@Xd9BdoAkG ~]# chmod
0000 /lib/libudev.so && rm -rf /lib/libudev.so && chattr +i
/lib/

#在一步一点要这样运行,不然赶不上木马的自我恢复速度。。。。。我在这里坑了很长时间。

[root@Xd9BdoAkG ~]# ls /lib/

cpp  firmware 
kbd  modules  security  terminfo  udev

[root@Xd9BdoAkG ~]# ls /lib/

cpp  firmware 
kbd  modules  security  terminfo  udev

[root@Xd9BdoAkG ~]# ls /lib/

cpp  firmware 
kbd  modules  security  terminfo  udev

[root@Xd9BdoAkG ~]# ls /lib/

cpp  firmware 
kbd  modules  security  terminfo  udev

[root@Xd9BdoAkG ~]# ls /lib/

cpp  firmware 
kbd  modules  security  terminfo  udev

[root@Xd9BdoAkG ~]# ls /lib/

cpp  firmware 
kbd  modules  security  terminfo  udev

##貌似主体被控制住了,不能再次自我恢复了。。。

[root@Xd9BdoAkG ~]# ls
/etc/rc.d/rc3.d/ | awk '$7>=8 && $NF~/^K90/{print $NF}' | egrep
'^.{10}$'| xargs -i rm -rf /etc/rc.d/rc3.d/{}

chmod 0000 /etc/rc.d/rc3.d/ && chmod 0000
/etc/rc.d/init.d && chattr +i /etc/rc.d/rc3.d/ && chattr +i
/etc/rc.d/init.d

#删除启动脚本 awk '$7>=8 &&
$NF~/^K90/{print $NF}' 这里的8是当天的日期8号的意思,写的不严紧,勿喷~~~

#且控制目录不能写东西了

1

2

[root@Xd9BdoAkG ~]# sed
'/gcc.sh/d' /etc/crontab && chmod 0000 /etc/crontab && chattr
+i /etc/crontab

#删除计划任务且控制计划任务不能写东西

到了这里基本就差不多了。。。。。现在去重启服务器,

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

[root@Xd9BdoAkG ~]# top -b
-n1 | head

top -
18:13:47 up 0 min,  1 user,  load average: 0.11, 0.03, 0.01

Tasks: 178
total,   2 running, 176 sleeping,   0
stopped,   0 zombie

Cpu(s):  1.4%us, 
1.6%sy,  0.0%ni, 95.7%id,  1.3%wa,  0.0%hi, 
0.0%si,  0.0%st

Mem:  32827160k
total,   486308k used, 32340852k free,    
6864k buffers

Swap: 16482300k
total,        0k used, 16482300k
free,    28312k cached

PID
USER      PR  NI  VIRT  RES  SHR
S %CPU %MEM    TIME+ 
COMMAND

1
root      20   0 19232 1512 1224 S 
0.0  0.0   0:01.26
init

2
root      20   0    
0    0    0 S  0.0  0.0  
0:00.00 kthreadd

3
root      RT   0    
0    0    0 S  0.0  0.0  
0:00.00 migration/0

[root@Xd9BdoAkG ~]# top -b
-n1 | head

top -
18:13:51 up 0 min,  1 user,  load average: 0.10, 0.03, 0.01

Tasks: 178
total,   1 running, 177 sleeping,   0
stopped,   0 zombie

Cpu(s):  1.3%us, 
1.5%sy,  0.0%ni, 96.0%id,  1.2%wa,  0.0%hi, 
0.0%si,  0.0%st

Mem:  32827160k
total,   486136k used, 32341024k free,    
6872k buffers

Swap: 16482300k
total,        0k used, 16482300k
free,    28344k cached

PID
USER      PR  NI  VIRT  RES  SHR
S %CPU %MEM    TIME+ 
COMMAND

1414
root      20   0 15020 1232  872
R  2.0  0.0   0:00.01 top

1
root      20   0 19232 1512 1224 S 
0.0  0.0   0:01.26
init

2
root      20   0    
0    0    0 S  0.0  0.0  
0:00.00 kthreadd

[root@Xd9BdoAkG ~]# top -b
-n1 | head

top -
18:14:15 up 1 min,  1 user,  load average: 0.06, 0.03, 0.01

Tasks: 178
total,   1 running, 177 sleeping,   0
stopped,   0 zombie

Cpu(s):  0.8%us, 
0.9%sy,  0.0%ni, 97.6%id,  0.7%wa,  0.0%hi, 
0.0%si,  0.0%st

Mem:  32827160k
total,   483360k used, 32343800k free,    
6900k buffers

Swap: 16482300k
total,        0k used, 16482300k
free,    28360k cached

PID
USER      PR  NI  VIRT  RES  SHR
S %CPU %MEM    TIME+ 
COMMAND

1
root      20   0 19232 1512 1224 S 
0.0  0.0   0:01.26
init

2
root      20   0    
0    0    0 S  0.0  0.0  
0:00.00 kthreadd

3
root      RT   0    
0    0    0 S  0.0  0.0  
0:00.00 migration/0

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

[root@Xd9BdoAkG ~]# ls
/etc/cron.hourly/

0anacron

[root@Xd9BdoAkG ~]# ls -lt
/etc/rc.d/rc3.d/

total 0

lrwxrwxrwx. 1 root root 15
Sep  7 14:08 S85nginx -> ../init.d/nginx

lrwxrwxrwx. 1 root root 24
Sep  7 13:55 S99libvirt-guests -> ../init.d/libvirt-guests

lrwxrwxrwx. 1 root root 19
Sep  7 13:55 S26haldaemon -> ../init.d/haldaemon

lrwxrwxrwx. 1 root root 19
Sep  7 13:54 K10saslauthd -> ../init.d/saslauthd

lrwxrwxrwx. 1 root root 20
Sep  7 13:54 S22messagebus -> ../init.d/messagebus

lrwxrwxrwx. 1 root root 14
Sep  7 13:51 S55sshd -> ../init.d/sshd

lrwxrwxrwx. 1 root root 18
Sep  7 13:51 K15svnserve -> ../init.d/svnserve

lrwxrwxrwx. 1 root root 17
Sep  7 13:44 S10network -> ../init.d/network

lrwxrwxrwx. 1 root root 17
Sep  7 13:44 S12rsyslog -> ../init.d/rsyslog

lrwxrwxrwx. 1 root root 15
Sep  7 13:44 S90crond -> ../init.d/crond

lrwxrwxrwx. 1 root root 19
Sep  7 13:44 K75udev-post -> ../init.d/udev-post

lrwxrwxrwx. 1 root root 17
Sep  7 13:44 K30postfix -> ../init.d/postfix

lrwxrwxrwx. 1 root root 15
Sep  7 13:44 K75netfs -> ../init.d/netfs

lrwxrwxrwx. 1 root root 19
Sep  7 13:44 K85mdmonitor -> ../init.d/mdmonitor

lrwxrwxrwx. 1 root root 22
Sep  7 13:44 K99lvm2-monitor -> ../init.d/lvm2-monitor

lrwxrwxrwx. 1 root root 15
Sep  7 13:44 K80kdump -> ../init.d/kdump

lrwxrwxrwx. 1 root root 18
Sep  7 13:44 K92iptables -> ../init.d/iptables

lrwxrwxrwx. 1 root root 19
Sep  7 13:44 K92ip6tables -> ../init.d/ip6tables

lrwxrwxrwx. 1 root root 26
Sep  7 13:44 K75blk-availability -> ../init.d/blk-availability

lrwxrwxrwx. 1 root root 16
Sep  7 13:44 K88auditd -> ../init.d/auditd

lrwxrwxrwx. 1 root root 17
Sep  7 13:37 K75ntpdate -> ../init.d/ntpdate

lrwxrwxrwx. 1 root root 20
Sep  7 12:15 K50netconsole -> ../init.d/netconsole

lrwxrwxrwx. 1 root root 11
Sep  7 12:15 S99local -> ../rc.local

lrwxrwxrwx. 1 root root 15
Sep  7 12:15 K89rdisc -> ../init.d/rdisc

lrwxrwxrwx. 1 root root 21
Sep  7 12:15 K87restorecond -> ../init.d/restorecond

开机后发现进程没异常了,世界貌似平静了。。。。

然后再次恢复/etc/crontab /etc/rc.d/init.d/ /etc/rc.d/rc3.d/ /lib文件夹的权限。然后再次重启。。。。。世界真的清静。。。。

Linux之在CentOS上一次艰难的木马查杀过程的更多相关文章

  1. Linux下 XordDos(BillGates)木马查杀记录

    最近朋友的一台服务器突然网络异常,cpu占用率暴表,登录上去一查,cpu占用300% 左右,流量异常,经过看查进程,获取信息最终确认为中了dos木马,经过几天的研究,基本上已经清除,以下是清理记录. ...

  2. 木马入侵查杀 linux

     目 录: 一.问题现象: 二.问题排查: 1.netstat 排查: 2.top查看: 3.lsof -c 命令排查: 4.确定中木马了. 三.木马查杀: 木马1,清除: 木马2,清除: 四.后续处 ...

  3. NoSql1 在Linux(CentOS)上安装memcached及使用

    前言:       今天是初五,生活基本要从过年的节奏中回归到正常的生活了,所以想想也该想想与工作有关的事情了.我之前在工作中会经常使用memcached和redis,但是自己一直没有时间系统的好好看 ...

  4. 在Linux CentOS上编译并安装Clang 3.5.0

    编译CoreCLR需要Clang 3.5,而CentOS上安装的是Clang 3.4.2(yum repos中最新版也是这个),只能自己手工编译LLVM的源代码进行安装. (注:CentOS的版本是6 ...

  5. Linux系统入门学习:在CentOS上安装phpMyAdmin

    问题:我正在CentOS上运行一个MySQL/MariaDB服务,并且我想要通过网络接口来用phpMyAdmin来管理数据库.在CentOS上安装phpMyAdmin的最佳方法是什么? phpMyAd ...

  6. linux CentOS 安装rz和sz命令 lrzsz 实现windows和linux之间的文件上传 下载

    https://blog.nbhao.org/1902.html https://bbs.csdn.net/topics/391989523 https://www.cnblogs.com/zhoul ...

  7. Azure的CentOS上安装LIS (Linux Integration Service)

    Azure上虚拟化技术都是采用的Hyper-v,每台Linux虚拟机都安装了LIS(Linux Integration Service).LIS的功能是为VM提供各种虚拟设备的驱动.所以LIS直接影响 ...

  8. 如何在linux CentOS 上安装chrome 谷歌浏览器?

    获得linux命令的root权限:http://blog.csdn.net/mddy2001/article/details/76521101. 更改密码在终端中输入:sudo passwd root ...

  9. 在Linux CentOS上编译CoreCLR

    经过几天的努力,终于解决了在CentOS上编译CoreCLR的问题.最终发现问题是CMAKE_C_FLAGS的设置引起的. 只要在“src/pal/tools/clang-compiler-overr ...

随机推荐

  1. hdu 5461 Largest Point 暴力

    Largest Point Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid= ...

  2. 笔记本禁用自带键盘攻略-------针对shift默认按下的解决方案

    长期以来楼主一直被一个问题困扰,就是win8进入界面,输密码时开大写其实是小写,开小写是大写.进入系统以后shift键是默认按下的.一直以为是电脑中毒了.上网查了一些东西,发现可能是因为键盘硬件方面的 ...

  3. android学习日记23--Android XML解析

    一.简述 XML语言是跨平台,JAVA对XML语言支持得比较好,android系统的应用层平台是JAVA做的,所以用XML.XML解析比较简单.XML解析就是将获取到的数据分离出来,基本的网络数据传输 ...

  4. C#_数据库交互_SqlHelper

    using System; using System.Collections.Generic; using System.Text; using System.Data.SqlClient; usin ...

  5. CCS5 建立SYS/BIOS工程时报错“cannot find file "./configPkg/linker.cmd" bios”的解决方法

    CCS5 建立SYS/BIOS工程时报错“cannot find file "./configPkg/linker.cmd" bios”的解决方法 报错 #10008-D cann ...

  6. eclipse中不能找到dubbo.xsd解决方法

    使用dubbo时遇到问题: org.xml.sax.SAXParseException: schema_reference.4: Failed to read schema document 'htt ...

  7. 数据结构与算法分析(2)——表、栈和队列

      抽象数据类型     抽象数据类型(ADT)是一系列操作的集合.诸如表.集合.图和他们的操作一起可以看做是抽象数据类型 表 List 表的实现有两种:数组和链表.数组实现的表在插入和删除操作上的花 ...

  8. ajax数据保存及解析

    1.   $('#frmCam').serialize():serialize() 方法通过序列化表单值,创建 URL 编码文本字符串. 2.自动对应ID和值 window.camConfig = [ ...

  9. java基础学习总结一(java语言发展历史、jdk的下载安装以及配置环境变量)

    最近一段时间计划复习一下java基础知识,使用的视频课程是尚学堂高淇老师的,上课过程中的心得体会直接总结一下,方便以后复习. 一:计算机语言的发展 1:机器语言,最原始的语言,主要有“01”构成,最早 ...

  10. DHCP 服务器

    简介: DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一个局域网的网络协议,使用UDP协议工作,主要用途:给内部网络或网络服务供应商自动分配 I ...