小标
2018-10-26
来源 :
阅读 1713
评论 0
摘要:本文主要向大家介绍了Linux运维知识之Linux下XordDos木马的清除,通过具体的内容向大家展现,希望对大家学习Linux运维知识有所帮助。
本文主要向大家介绍了Linux运维知识之Linux下XordDos木马的清除,通过具体的内容向大家展现,希望对大家学习Linux运维知识有所帮助。
朋友的阿里云服务器一早上报木马入侵,找我处理,登陆阿里云查看警告信息“恶意进程(云查杀)-XorDDoS木马”,
排查原则:
1.一般的木马都有多个守护进程,不一定可以短时间停掉,或者处理好,要注意备份业务数据
2.如果木马运行影响到业务运行,首先要恢复业务的访问,同时进行排查处理,但是并不建议
3.如果没有太大影响,可以先停掉相关业务进程,防止查杀过程的操作对业务产生影响
生产环境注意根据实际情况决策
处理木马病毒的顺序:1.关闭对外访问2.停止定时任务3.关闭木马的守护进程4.禁止木马程序运行5.删除开机自启动的木马程序
6.重启服务器测试木马是否清理完成
============= 1.确认木马类型,关闭对外访问 ==============
从阿里云平台得知是DDOS的木马,可能对服务器性能造成影响,对业务数据不一定有影响
先登录到服务器上查看进程:
[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:3306 0.0.0.0:* LISTEN 1480/mysqld
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1553/nginx
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1296/sshd
tcp 0 112 1.1.1.1:22 2.2.2.2:50103 ESTABLISHED 1509/sshd
tcp 0 0 1.1.1.1:43436 104.166.89.67:8080 ESTABLISHED 4939/bash # 异常IP
tcp 0 0 1.1.1.1:37026 106.11.68.13:80 ESTABLISHED 1219/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:22 0.0.0.0:* LISTEN 16286/sshd
tcp 0 112 1.1.1.1:22 2.2.2.2:50103 ESTABLISHED 1509/sshd
tcp 0 1 1.1.1.1:51374 91.195.240.82:8080 SYN_SENT 14221/sh
tcp 0 0 1.1.1.1:37026 106.11.68.13:80 ESTABLISHED 1219/AliYunDun
这次更换的IP是91.195.240.82,记录下来
多次杀掉相关异常进程,确认对外连接的只有这两个IP,顺便查询下归属地
104.166.89.67 美国
91.195.240.82 德国
为了防止对外访问造成数据问题,首先要禁用这些IP的出入站访问
iptables -I INPUT -s 104.166.89.67/24 -j DROP
iptables -I OUTPUT -s 104.166.89.67/24 -j DROP
iptables -I INPUT -s 91.195.240.82/24 -j DROP
iptables -I OUTPUT -s 91.195.240.82/24 -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 4 11:39:56 2018
*nat
:PREROUTING ACCEPT [123:7004]
:POSTROUTING ACCEPT [1962:123695]
:OUTPUT ACCEPT [1962:123695]
COMMIT
# Completed on Wed Jul 4 11:39:56 2018
# Generated by iptables-save v1.4.7 on Wed Jul 4 11:39:56 2018
*filter
:INPUT ACCEPT [172093:225615531]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [21578:18815078]
-A INPUT -s 91.195.240.0/24 -j DROP
-A INPUT -s 104.166.89.0/24 -j DROP
-A OUTPUT -s 91.195.240.0/24 -j DROP
-A OUTPUT -s 104.166.89.0/24 -j DROP
COMMIT
# Completed on Wed Jul 4 11:39:56 2018
[root@web ~]# iptables -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP all -- 91.195.240.0/24 0.0.0.0/0
DROP all -- 104.166.89.0/24 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/24 0.0.0.0/0
DROP all -- 104.166.89.0/24 0.0.0.0/0
防火墙处理完,再查看进程
[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:22 0.0.0.0:* LISTEN 16286/sshd
tcp 0 112 1.1.1.1:22 2.2.2.2:50103 ESTABLISHED 1509/sshd
tcp 0 1 1.1.1.1:51374 91.195.240.82:8080 SYN_SENT 14221/sh
tcp 0 0 1.1.1.1:37026 106.11.68.13:80 ESTABLISHED 1219/AliYunDun
可以看到该IP已经无法对外建立连接,多次kill掉,虽然会重建,但无法对外进行访问,不过进程名会变化
用 iptables 封禁向外请求的 ip 后,该清理木马了
============== 2.停止定时任务 ===============
对于所有的木马或病毒,必定会创建定时任务,以便定时重建进程,或者在被杀掉后重建
直接查看系统的定时任务配置
vim /etc/crontab
------------------------------
*/3 * * * * root /etc/cron.hourly/gcc.sh
------------------------------
发现被增加了一项异常的定时任务,先注释掉,过几分钟又会重新创建,先不操作
另外有其他位置的定时任务配置文件,也需要注意
ll /var/spool/cron/
该目录下,会有以用户名作为文件的定时任务
查看刚刚的木马创建的定时任务的内容
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.6
/lib/libudev.so.6
------------------------------
由脚本内容可以推断,以下文件是木马文件
/lib/libudev.so
/lib/libudev.so.6
尝试失败的处理方法:手动清理木马文件,清除定时任务配置,不久就会重新产生
可以成功的处理方法:
对于木马文件,删除会重建,可以修改权限,使之无法执行
chmod 600 /lib/libudev.so
chmod 600 /lib/libudev.so.6
对于定时任务,删除或者注释都会被删掉重写,可以设置权限,使crontab文件无法写入
chattr +i /etc/crontab
处理完以上的文件,定时任务就无法运行了,接下来需要处理木马的相关进程
============== 3.查杀木马 ===============
方法:查看进程,确认木马进程名,找到对应的程序文件
下载并安装 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
用下面这几个命令查找木马进程
pstree # 查看进程树
ps -aux # 查看进程
top
使用top命令查看的结果,以CPU倒序的方式查看,可以看到占用 CPU 最多的进程,类似这样的 “jlavwskubs” (是十位随机名称进程),
用kill -9杀死进程后,会出现类似的十位随机名称进程,可以看出有多个守护进程,显然没用
使用pstree也可以看到类似的十位随机名称的进程,还有子进程数量
先找到木马文件的所在位置
which [木马进程名]
可以确定木马文件所在位置,可以备份下该木马文件
mkdir -p /tmp/virus
cp /usr/bin/jlavwskubs /tmp/virus/usr-bin-jlavwskubs
直接打开该文件会显示乱码,可以通过 strings 命令把二进制的木马文件转化成可识别的字符
cd /tmp/virus
strings usr-bin-jlavwskubs >usr-bin-jlavwskubs.txt
查找转化后的文件内容可以看到:
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.6
/lib/libudev.so.6
这个是上面定时任务执行的gcc.sh脚本的内容,
木马程序文件的处理:
删除会重建,可以照上面的修改权限,使之无法运行
chmod 600 /usr/bin/jlavwskubs
至此,上面定时任务涉及到的就都找出来,并停止运行了,木马相关程序也形成了个闭环,但是此时放松还为时尚早
作为一个合格的木马,必定会设置开机启动项,这样不管你怎样清理掉我运行中的木马,一旦重启系统,木马就又回来了,所以
========= 4.删除开机自启动的木马程序 ==========
检查最基本的开机启动项配置文件
cat /etc/rc.local
检查chkconfig方法配置的自启动的服务,可以找到上面的jlavwskubs程序
chkconfig --list|grep on
-----------------------------------------
[root@zgtcgweb ~]# chkconfig --list|grep on
jlavwskubs 0:off 1:on 2:on 3:on 4:on 5:on 6:off
-----------------------------------------
查看该文件内容
cat /etc/init.d/jlavwskubs
-----------------------------------------
#!/bin/sh
# chkconfig: 12345 90 90
# description: jlavwskubs
### BEGIN INIT INFO
# Provides: jlavwskubs
# Required-Start:
# Required-Stop:
# Default-Start: 1 2 3 4 5
# Default-Stop:
# Short-Description: jlavwskubs
### END INIT INFO
case $1 in
start)
/usr/bin/jlavwskubs
;;
stop)
;;
*)
/usr/bin/jlavwskubs
;;
esac
-----------------------------------------
可以看出,无论怎样操作这个程序,都是启动它,并且在12345模式下都会开机自启动接下来找这个启动的源文件,找十位随机名称的进程文件
ls /etc/rc*/init.d
ls /etc/rc*/
ls /etc/rc*/
-----------------------------------------
[root@zgtcgweb ~]# 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(圆框标注)的正常启动文件,这个是开机时网络的启动脚本,需要特别处理
删除木马的开机自启动文件
rm -f /etc/rc*.d/K90*
ls /etc/rc*/
使用以下命令可以恢复被删除的K90network文件,
chkconfig network on
查看修复后的自启动配置目录
ls /etc/rc*/
多么清爽的界面,哈哈
接下来删除掉之前禁用关停的木马程序文件和定时任务内容即可
rm -f /etc/init.d/yidoxmlkvd
rm -f /usr/bin/yidoxmlkvd rm -f /lib/libudev.sorm -f /etc/cron.hourly/gcc.sh
vim /etc/crontab
到此木马程序就清理完毕了
======= 5.重启系统查看是否有其他地方的隐藏木马 =======
reboot
重启后查看进程,没有木马相关程序即表明木马清理完成
======== 6.拓展知识 =========
6.1.以PID查询进程名,进程位置:
Linux在启动一个进程时,系统会在 /proc下创建一个以 PID 命名的文件夹,
在该文件夹下会保存该进程的信息,其中包括一个名为exe的文件指向该进程对应程序文件的绝对路径
ll /proc/[木马PID]
用 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
用 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
6.2.杀毒
# 安装clamav杀毒软件,更新病毒库
yum -y install clamav
freshclam
# 全盘扫描,只显示被感染的文件,并在发现时发出警告音。
clamscan -r --bell -i /
# 也可以进入后台扫描,并将报告输出到 /tmp/virus/scan.log
clamscan -r --bell -i / > /tmp/virus/scan.log &
# 更多 ClamAV 用法
本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注系统运维Linux频道!
喜欢 | 1
不喜欢 | 0
您输入的评论内容中包含违禁敏感词
我知道了

请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号