朋友的阿里云服务器一早上报木马入侵,找我处理,登陆阿里云查看警告信息“恶意进程(云查杀)-XorDDoS木马”,

本文也可以作为服务器处理木马排查的步骤的参考文章

排查原则:

1.一般的木马都有多个守护进程,不一定可以短时间停掉,或者处理好,要注意备份业务数据

2.如果木马运行影响到业务运行,首先要恢复业务的访问,同时进行排查处理,但是并不建议

3.如果没有太大影响,可以先停掉相关业务进程,防止查杀过程的操作对业务产生影响

生产环境注意根据实际情况决策

处理木马病毒的顺序:

1.关闭对外访问
2.停止定时任务
3.关闭木马的守护进程
4.禁止木马程序运行
5.删除开机自启动的木马程序
6.重启服务器测试木马是否清理完成

1.确认木马类型,关闭对外访问

从阿里云平台得知是DDOS的木马,可能对服务器性能造成影响,对业务数据不一定有影响

1.1.检查服务器对外的访问,获取相关IP地址

先登录到服务器上查看进程:

[root@web ~]# netstat -anptl
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0.0.0.0: 0.0.0.0:* LISTEN /mysqld
tcp 0.0.0.0: 0.0.0.0:* LISTEN /nginx
tcp 0.0.0.0: 0.0.0.0:* LISTEN /sshd
tcp 1.1.1.1: 2.2.2.2: ESTABLISHED /sshd
tcp 1.1.1.1: 104.166.89.67: ESTABLISHED /bash # 异常IP
tcp 1.1.1.1: 106.11.68.13: ESTABLISHED /AliYunDun

可以看到有一个对外访问的IP:104.166.89.67,明显这个是有问题的,记录下来

我这里业务的访问量不大,暂时停掉服务,排除干扰

[root@web ~]# service mysqld stop
Shutting down MySQL.. [ OK ]
[root@web ~]# service nginx stop
Stopping nginx: [ OK ]

结束掉相关进程,再次查看

[root@web ~]# !net
netstat -anptl
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0.0.0.0: 0.0.0.0:* LISTEN /sshd
tcp 1.1.1.1: 2.2.2.2: ESTABLISHED /sshd
tcp 1.1.1.1: 91.195.240.82: SYN_SENT /sh
tcp 1.1.1.1: 106.11.68.13: ESTABLISHED /AliYunDun

这次更换的IP是91.195.240.82,记录下来

多次杀掉相关异常进程,确认对外连接的只有这两个IP,顺便查询下归属地

104.166.89.67    美国
91.195.240.82 德国

1.2.利用防火墙禁用本机对外的IP访问

为了防止对外访问造成数据问题,首先要禁用这些IP的出入站访问

iptables -I INPUT -s 104.166.89.67/ -j DROP
iptables -I OUTPUT -s 104.166.89.67/ -j DROP
iptables -I INPUT -s 91.195.240.82/ -j DROP
iptables -I OUTPUT -s 91.195.240.82/ -j DROP

查看并保存下防火墙规则

chkconfig iptables on
service iptables save
cat /etc/sysconfig/iptables
service iptables start
iptables -nL

以下是保存生效的防火墙规则

[root@web ~]# cat /etc/sysconfig/iptables
# Generated by iptables-save v1.4.7 on Wed Jul ::
*nat
:PREROUTING ACCEPT [:]
:POSTROUTING ACCEPT [:]
:OUTPUT ACCEPT [:]
COMMIT
# Completed on Wed Jul ::
# Generated by iptables-save v1.4.7 on Wed Jul ::
*filter
:INPUT ACCEPT [:]
:FORWARD ACCEPT [:]
:OUTPUT ACCEPT [:]
-A INPUT -s 91.195.240.0/ -j DROP
-A INPUT -s 104.166.89.0/ -j DROP
-A OUTPUT -s 91.195.240.0/ -j DROP
-A OUTPUT -s 104.166.89.0/ -j DROP
COMMIT
# Completed on Wed Jul ::
[root@web ~]# iptables -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP all -- 91.195.240.0/ 0.0.0.0/
DROP all -- 104.166.89.0/ 0.0.0.0/ Chain FORWARD (policy ACCEPT)
target prot opt source destination Chain OUTPUT (policy ACCEPT)
target prot opt source destination
DROP all -- 91.195.240.0/ 0.0.0.0/
DROP all -- 104.166.89.0/ 0.0.0.0/

1.3.防火墙处理完,再查看进程访问状态

[root@web ~]# !net
netstat -anptl
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0.0.0.0: 0.0.0.0:* LISTEN /sshd
tcp 1.1.1.1: 2.2.2.2: ESTABLISHED /sshd
tcp 1.1.1.1: 91.195.240.82: SYN_SENT /sh
tcp 1.1.1.1: 106.11.68.13: ESTABLISHED /AliYunDun

可以看到该IP已经无法对外建立连接,多次kill掉,虽然会重建,但无法对外进行访问,不过进程名会变化

用 iptables 封禁向外请求的 ip 后,该清理木马了

2.停止定时任务

对于所有的木马或病毒,必定会创建定时任务,以便定时重建进程,或者在被杀掉后重建

2.1.检查系统级别的定时任务配置

vim /etc/crontab
------------------------------
*/ * * * * root /etc/cron.hourly/gcc.sh
------------------------------

发现被增加了一项异常的定时任务,先注释掉,过几分钟又会重新创建,先不操作

2.2.检查用户级别的定时任务配置文件

ll /var/spool/cron/

该目录用于保存以用户名作为文件的定时任务,没有文件表示没有用户级别的定时任务

2.3.查看木马创建的定时任务的内容

vim /etc/cron.hourly/gcc.sh
------------------------------
[root@web tools]# vim /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.
/lib/libudev.so.
------------------------------

由脚本内容可以推断,以下文件是木马文件

/lib/libudev.so
/lib/libudev.so.

2.4.处理相关木马文件

尝试失败的处理方法:
手动清理木马文件,清除定时任务配置,不久就会重新产生

可以成功的处理方法:

对于木马文件,删除会重建,可以修改权限,使之无法运行,但不要删掉

chmod  /lib/libudev.so
chmod /lib/libudev.so.

对于定时任务,删除或者注释都会被删掉重写,可以设置权限,使crontab文件无法写入

chattr +i /etc/crontab

处理完以上的文件,定时任务就无法运行了,接下来需要处理木马的相关进程

3.查杀木马

方法:查看进程,确认木马进程名,找到对应的程序文件

3.1.检查确认系统命令工具是否被替换

下载并安装 rkhunter,扫描 Rootkit 替换的系统程序

wget https://jaist.dl.sourceforge.net/project/rkhunter/rkhunter/1.4.6/rkhunter-1.4.6.tar.gz
tar xzvf rkhunter*
cd rkhunter*
./installer.sh --layout /usr --install
rkhunter --update
rkhunter -C

我这边没有命令被替换,如果有,需要重装被修改的命令工具

看网络上有其他人的以下命令被替换了

ps, lsof, ss, netstat
ps 属于 procps
ss 属于 iproute
netstat 属于 net-tools
yum -y reinstall procps lsof iproute net-tools

3.2.查找木马进程文件的方法

1)查看系统进程找到木马进程名

pstree    # 查看进程树
ps -aux    # 查看进程
top

使用top命令查看的结果,以CPU倒序的方式查看,可以看到占用 CPU 最多的进程,类似这样的 “jlavwskubs” (是十位随机名称进程),

用kill -9杀死进程后,会出现类似的十位随机名称进程,可以看出有多个守护进程,显然没用

使用pstree也可以看到类似的十位随机名称的进程,还有子进程数量

2)通过木马进程的PID找到木马文件的位置

原理:Linux在启动一个进程时,系统会在 /proc下创建一个以 PID 命名的文件夹,在该文件夹下会保存该进程的信息,其中包括一个名为exe的文件指向该进程对应程序文件的绝对路径

所以:使用以下命令查看木马进程运行目录

ll /proc/[木马PID]

exe文件指向的文件即为木马进程文件

3)使用lsof命令查找木马文件的位置

原理:用 lsof 可以查看某个路径下的运行中的进程列表

lsof /usr/bin/*

实例如下:

lsof /usr/local/nginx/sbin/*
[root@web virus]# lsof /usr/local/nginx/sbin/*
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 1481 root txt REG 252,1 5389099 1977535 /usr/local/nginx/sbin/nginx
nginx 1484 root txt REG 252,1 5389099 1977535 /usr/local/nginx/sbin/nginx

4)用 pidof 命令可以查看某个路径下运行进程的 pid

pidof /usr/bin/*

实例如下:

pidof /usr/local/nginx/sbin/*
[root@web virus]# pidof /usr/local/nginx/sbin/*
1484 1481

发现木马进程的运行目录,可以通过管道符 | 和 xargs 将 pid传参给kill命令进行结束:

pidof /usr/bin/* | xargs kill -9

5)使用which查找木马进程文件的所在位置

which [木马进程名]

3.3.尝试解析木马进程文件内容

1)确定木马文件所在位置,备份下该木马文件

mkdir -p /tmp/virus
cp /usr/bin/jlavwskubs /tmp/virus/usr-bin-jlavwskubs

2)直接打开该文件会显示乱码,可以通过 strings 命令把二进制的木马文件转化成可识别的字符

cd /tmp/virus
strings usr-bin-jlavwskubs >usr-bin-jlavwskubs.txt

3)查找转化后的文件内容可以看到:

sed -i '/\/etc\/cron.hourly\/gcc.sh/d' /etc/crontab && echo '*/3 * * * * root /etc/cron.hourly/gcc.sh' >> /etc/crontab

这一行是修改定时任务的命令,也就是前面注释掉定时任务又会重新生成的原因,不管有没有,强制重建

#!/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.
/lib/libudev.so.

这个是上面定时任务执行的gcc.sh脚本的内容,

3.4.木马程序文件的处理:

删除会重建,可以照上面的修改权限,使之无法运行,不要删掉

chmod  /usr/bin/jlavwskubs

至此,上面定时任务涉及到的就都找出来,并停止运行了,木马相关程序也形成了个闭环,但是此时放松还为时尚早

作为一个合格的木马,必定会设置开机启动项,这样不管你怎样清理掉我运行中的木马,一旦重启系统,木马就又回来了,所以

4.删除开机自启动的木马程序

4.1.检查最基本的开机启动项配置文件

cat /etc/rc.local

4.2.检查chkconfig方法配置的自启动的服务

1)可以找到上面的jlavwskubs程序

chkconfig --list|grep on
-----------------------------------------
[root@web ~]# chkconfig --list|grep on
jlavwskubs :off :on :on :on :on :on :off
-----------------------------------------

2)查看该文件内容

cat /etc/init.d/jlavwskubs
-----------------------------------------
#!/bin/sh
# chkconfig:
# description: jlavwskubs
### BEGIN INIT INFO
# Provides: jlavwskubs
# Required-Start:
# Required-Stop:
# Default-Start:
# Default-Stop:
# Short-Description: jlavwskubs
### END INIT INFO
case $ in
start)
/usr/bin/jlavwskubs
;;
stop)
;;
*)
/usr/bin/jlavwskubs
;;
esac
-----------------------------------------

可以看出,无论怎样操作这个程序,都是启动它,并且在12345模式下都会开机自启动
3)接下来找这个启动的源文件,找十位随机名称的进程文件

ls /etc/rc*/init.d
ls /etc/rc*/

ls /etc/rc*/
-----------------------------------------
[root@web ~]# ls /etc/rc*/
/etc/rc0.d/:
K01agentwatch K25sshd K50cloud-init-local K75blk-availability K87restorecond K89rdisc K90gfkexlpwho K90luobdoxchv K90xfeualnqzg K95rdma
K05atd K30postfix K50cloud-init-upgrade K75netfs K88auditd K90apjpqfyeom K90hnipcstryl K90network K90xfvzcygkae K99lvm2-monitor
K05jexec K36mysqld K60crond K75ntpdate K88iscsi K90cpaanfozrw K90imipfrazsb K90otgsovjinw K90yidoxmlkvd K99sysstat
K10saslauthd K50cloud-config K61nfs-rdma K75udev-post K88rsyslog K90dgznpnhhcv K90jlavwskubs K90qfkxlouaux K90yxexqdafhi S00killall
K15nginx K50cloud-final K74nscd K85mdmonitor K89iscsid K90egymjlsoun K90jvykhthbys K90rrywkqorsv K92ip6tables S01halt
K25aliyun-util K50cloud-init K74ntpd K87multipathd K89netconsole K90ftyncxdpbf K90ljtyhksudi K90wpryovwobc K92iptables /etc/rc1.d/:
K01agentwatch K25aliyun-util K50cloud-config K50cloud-init-upgrade K74ntpd K87multipathd K88rsyslog K90network K95rdma S26udev-post
K05atd K25sshd K50cloud-final K60crond K75netfs K87restorecond K89iscsid K90yidoxmlkvd S01sysstat S95jexec
K10saslauthd K30postfix K50cloud-init K61nfs-rdma K75ntpdate K88auditd K89netconsole K92ip6tables S02lvm2-monitor S99single
K15nginx K36mysqld K50cloud-init-local K74nscd K85mdmonitor K88iscsi K89rdisc K92iptables S25blk-availability /etc/rc2.d/:
K05atd K75netfs K89iscsid K92ip6tables S10network S26udev-post S53cloud-config S64mysqld S99local
K10saslauthd K75ntpdate K89netconsole K95rdma S11auditd S50aegis S54cloud-final S85nginx
K30postfix K87multipathd K89rdisc S01sysstat S12rsyslog S50cloud-init-upgrade S55aliyun-util S90crond
K61nfs-rdma K87restorecond K90jlavwskubs S02lvm2-monitor S15mdmonitor S51cloud-init-local S55sshd S95jexec
K74nscd K88iscsi K90yidoxmlkvd S08iptables S25blk-availability S52cloud-init S58ntpd S98agentwatch /etc/rc3.d/:
K10saslauthd K75ntpdate K89rdisc K95rdma S08iptables S13iscsi S26udev-post S58ntpd S95atd
K30postfix K87multipathd K90jlavwskubs S01sysstat S10network S15mdmonitor S50aegis S64mysqld S95jexec
K61nfs-rdma K87restorecond K90yidoxmlkvd S02lvm2-monitor S11auditd S25blk-availability S55aliyun-util S85nginx S98agentwatch
K74nscd K89netconsole K92ip6tables S07iscsid S12rsyslog S25netfs S55sshd S90crond S99local /etc/rc4.d/:
K10saslauthd K87multipathd K90yidoxmlkvd S07iscsid S13iscsi S50aegis S54cloud-final S85nginx S99local
K30postfix K87restorecond K92ip6tables S08iptables S15mdmonitor S50cloud-init-upgrade S55aliyun-util S90crond
K61nfs-rdma K89netconsole K95rdma S10network S25blk-availability S51cloud-init-local S55sshd S95atd
K74nscd K89rdisc S01sysstat S11auditd S25netfs S52cloud-init S58ntpd S95jexec
K75ntpdate K90jlavwskubs S02lvm2-monitor S12rsyslog S26udev-post S53cloud-config S64mysqld S98agentwatch /etc/rc5.d/:
K10saslauthd K87multipathd K90yidoxmlkvd S07iscsid S13iscsi S50aegis S54cloud-final S85nginx S99local
K30postfix K87restorecond K92ip6tables S08iptables S15mdmonitor S50cloud-init-upgrade S55aliyun-util S90crond
K61nfs-rdma K89netconsole K95rdma S10network S25blk-availability S51cloud-init-local S55sshd S95atd
K74nscd K89rdisc S01sysstat S11auditd S25netfs S52cloud-init S58ntpd S95jexec
K75ntpdate K90jlavwskubs S02lvm2-monitor S12rsyslog S26udev-post S53cloud-config S64mysqld S98agentwatch /etc/rc6.d/:
K01agentwatch K25sshd K50cloud-init-local K75blk-availability K87restorecond K89rdisc K90gfkexlpwho K90luobdoxchv K90xfeualnqzg K95rdma
K05atd K30postfix K50cloud-init-upgrade K75netfs K88auditd K90apjpqfyeom K90hnipcstryl K90network K90xfvzcygkae K99lvm2-monitor
K05jexec K36mysqld K60crond K75ntpdate K88iscsi K90cpaanfozrw K90imipfrazsb K90otgsovjinw K90yidoxmlkvd K99sysstat
K10saslauthd K50cloud-config K61nfs-rdma K75udev-post K88rsyslog K90dgznpnhhcv K90jlavwskubs K90qfkxlouaux K90yxexqdafhi S00killall
K15nginx K50cloud-final K74nscd K85mdmonitor K89iscsid K90egymjlsoun K90jvykhthbys K90rrywkqorsv K92ip6tables S01reboot
K25aliyun-util K50cloud-init K74ntpd K87multipathd K89netconsole K90ftyncxdpbf K90ljtyhksudi K90wpryovwobc K92iptables /etc/rc.d/:
init.d rc rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.d rc.local rc.sysinit

可以看到很多红色显示的,以K90和S90开头的脚本文件(方框标注),这些就是chkconfig设置的开机启动项,需要依次删掉

注意在0,1,6三种启动级别下有K90network(圆框标注)的正常启动文件,这个是开机时网络的启动脚本,需要特别处理

4.3.删除木马的开机自启动文件

rm -f /etc/rc*.d/K90*
ls /etc/rc*/

使用以下命令可以恢复被删除的K90network文件

chkconfig network on 

查看修复后的自启动配置目录

ls /etc/rc*/    

多么清爽的界面,哈哈

4.4.接下来删除掉之前禁用关停的木马程序文件和定时任务内容即可

rm -f /etc/init.d/yidoxmlkvd
rm -f /usr/bin/yidoxmlkvd
rm -f /lib/libudev.so
rm -f /etc/cron.hourly/gcc.sh
vim /etc/crontab

到此木马程序就清理完毕了

5.重启系统查看是否有其他的隐藏木马

reboot

重启后查看进程,没有木马相关程序即表明木马清理完成

6.拓展知识:杀毒工具

# 安装clamav杀毒软件,更新病毒库

yum -y install clamav
freshclam

# 全盘扫描,只显示被感染的文件,并在发现时发出警告音。

clamscan -r --bell -i /

# 也可以进入后台扫描,并将报告输出到 /tmp/virus/scan.log

clamscan -r --bell -i / > /tmp/virus/scan.log &

# 更多 ClamAV 用法

参考:

==== 完毕,呵呵呵呵  =====

												

Linux下XordDos木马的清除的更多相关文章

  1. linux 下dd命令直接清除分区表(不用再fdisk一个一个的删除啦)

    分区表是硬盘的分区信息,要删除一个硬盘的所有分区表很麻烦的,需要fdisk一个一个的删除,其实dd命令可直接清除分区信息,当然,这也是linux给root用户留下的作死方法之一.dd 命令主要参数如下 ...

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

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

  3. Linux下手动查杀木马

    (1).模拟木马程序病原体并让其自动运行 黑客让脚本自动执行的3种方法:1.计划任务:2.开机启动:3.系统命令被人替换,定一个触发事件. 1)生成木马程序病原体 [root@youxi1 ~]# v ...

  4. Linux的挖矿木马病毒清除(kswapd0进程)

    1.top查看资源使用情况 看到这些进程一直在变化,但是,主要是由于kswapd0进程在作怪,占据了99%以上的CUP,查找资料后,发现它就是挖矿进程 2.排查kswapd0进程 执行命令netsta ...

  5. Linux安全:Linux如何防止木马

    (一)解答战略 去企业面试时是有多位竞争者的,因此要注意答题的维度和高度,一定要直接秒杀竞争者,搞定高薪offer. (二)解答战术 因为Linux下的木马常常是恶意者通过Web的上传目录的方式来上传 ...

  6. 【转】Linux下如何清除系统日志

    使用过Windows的人都知道,在使用windows系统的过程中系统会变得越来越慢.而对于Windows下饱受诟病的各种垃圾文件都需要自己想办法删除,不然系统将会变得越来越大,越来越迟钝!window ...

  7. Linux下查找包含BOM头的文件和清除BOM头命令 2014-08-16 12:30:50

    Linux下查找包含BOM头的文件和清除BOM头命令 2014-08-16 12:30:50 分类: 系统运维 查找包含BOM头的文件,命令如下: 点击(此处)折叠或打开 grep -r -I -l ...

  8. 【转发】Linux下清除系统日志方法

    摘要:相信大家都是用过Windows的人.对于Windows下饱受诟病的各种垃圾文件都需要自己想办法删除,不然你的系统将会变得越来越大,越来越迟钝!windows怎么清理垃圾相信大家都知道的,那么li ...

  9. svn之——linux下清除svn的用户名和密码

    问题:之前用的svn账号权限不够,需要使用别的账号,所以提出需求——怎么使用新的svn账号进行操作 方法一: linux下删除~/.subversion/auth即可清除之前的用户名和密码:rm -r ...

随机推荐

  1. [ogre]ogre::Animation

    参考:http://blog.csdn.net/leonwei/article/details/5819248 http://blog.csdn.net/debugconsole/article/de ...

  2. 3-18 关于namespace,双冒号::的用法; SelfYield.

    关于namespace,双冒号::的用法. 防止引用多个模块在一个文件/类中,有重名的对象.::可以调用类的类方法,和常量. class Foo   BAR = "hello"   ...

  3. 我的Java学习笔记-语法

    Java的语法与C#的语法基本都一样,毕竟都是面向对象编程语言.下面记录下Java独有的和我在C#中学习不熟的语法知识 一.Java是解释型语言 二.Java修饰符 1. 访问控制修饰符 defaul ...

  4. PHP函数笔记

    一.函数(Function) 1.什么是函数:封装的,可以重复使用的                       完成特定功能的代码段. 2.分类  (1)系统函数  (2)自定义函数 3.自定义函数 ...

  5. Redis基础知识点面试手册

    Redis基础知识点面试手册 基础 概述 数据类型 STRING LIST SET HASH ZSET(SORTEDSET) 数据结构 字典 跳跃表 使用场景 会话缓存 缓存 计数器 查找表 消息队列 ...

  6. git 下载代码

    git clone https://github.com/ContextLogic/Wish-Merchant-API.git wish(wish是下载的地址,这样的话,就在你的住文件夹上)

  7. hdu-1850-nim

    Being a Good Boy in Spring Festival Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32 ...

  8. Chrome DevTools 的 Sources 调试

    在 Chrome 中调试 JS 代码,那你不得不与 Chrome DevTools 的 Sources 面板打交道,所以文章主要通过介绍 Sources 面板上的各部分功能来介绍如何调试网页中的 JS ...

  9. Leetcode 526

    class Solution { public: int countArrangement(int N) { vector<int> nums; ;i <= N;i++) nums. ...

  10. 批量kill Linux环境下的任务

    批量kill Linux服务器的进程可以通过ps  grep  aws  xargs 进行结合来完成  比如要kill 全部test.sh 的进程 ps -ef |grep "test.sh ...