一次Linux服务器被入侵和删除木马程序的经历
转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://wzlinux.blog.51cto.com/8021085/1740113
一、背景
晚上看到有台服务器流量跑的很高,明显和平常不一样,流量达到了800Mbps,第一感觉应该是中木马了,被人当做肉鸡了,在大量发包。
我们的服务器为了最好性能,防火墙(iptables)什么的都没有开启,但是服务器前面有物理防火墙,而且机器都是做的端口映射,也不是常见的端口,按理来说应该是满安全的,可能最近和木马有缘吧,老是让我遇到,也趁这次机会把发现过程记录一下。
注:上面是原作者的话,我本人是在处理阿里云服务器时候找到这篇文章的,通过按照文中手动清除木马的方式完成的。
二、发现并追踪处理
1、查看流量图发现问题
查看的时候网页非常卡,有的时候甚至没有响应。
2、top动态查看进程
我马上远程登录出问题的服务器,远程操作很卡,网卡出去的流量非常大,通过top发现了一个异常的进程占用资源比较高,名字不仔细看还真以为是一个Web服务进程。
3、ps命令查看进程的路径
发现这个程序文件在/etc目录下面,是个二进制程序,我拷贝了下来,放到了本文附近位置,以供大家在虚拟机上面研究,哈哈。
4、结束异常进程并继续追踪
- killall - nginx1
- rm -f /etc/nginx1
干掉进程之后,流量立刻下来了,远程也不卡顿了,难道删掉程序文件,干掉异常进程我们就认为处理完成了么?想想也肯定没那么简单的,这个是木马啊,肯定还会自己生成程序文件(果然不出我所料,在我没有搞清楚之前,后面确实又生成了)我们得继续追查。
5、查看登录记录及日志文件secure
通过命令last查看账户登录记录,一切正常。查看系统文件message并没有发现什么,但是当我查看secure文件的时候发现有些异常,反正是和认证有关的,应该是尝试连进来控制发包?
6、再次ps查看进程
其实第一次ps的时候就有这个问题,那时候没有发现,第二次是自习查看每个进程,自习寻找不太正常的进程,发现了一个奇怪的ps进程。
我找了一台正常的机器,查看了一下ps命令的大小,正常的大约是81KB,然后这台机器上面的ps却高达1.2M,命令文件肯定是被替换了。
然后进入另一个ps的目录,看到有如下几个命令,然后我有查询了一下系统的这几个命令,发现都变得很大,都达到了1.2M,这些系统命令文件肯定是都被替换了。
7、更多异常文件的发现
查看定时任务文件crontab并没有发现什么一次,然后查看系统启动文件rc.local,也没有什么异常,然后进入/etc/init.d目录查看,发现比较奇怪的脚本文件DbSecuritySpt、selinux。
第一个文件可以看出他就是开机启动那个异常文件的,第二个应该和登录有关,具体我还不是很清楚,反正肯定是有问题的。
既然和登录有关,那就找和ssh相关的,找到了下面的一个文件,是隐藏文件,这个也是木马文件,我们先记录下来,这样程序名字都和我们的服务名字很相近,就是为了迷惑我们,他们的大小都是1.2M,他们有可能是一个文件。
我有看了一下木马喜欢出现的目录/tmp,也发现了异常文件,从名字上感觉好像是监控木马程序的。
想到这里,替换的命令应该很多,单靠我们去找肯定是解决不了的,我的建议最好是重装操作系统,并做好安全策略,如果不重装,我下面给一下我的方法,具体行不行有待验证。
三、木马手动清除
现在综合总结了大概步骤如下:
1、简单判断有无木马
- #有无下列文件
- cat /etc/rc.d/init.d/selinux
- cat /etc/rc.d/init.d/DbSecuritySpt
- ls /usr/bin/bsd-port
- ls /usr/bin/dpkgd
- #查看大小是否正常
- ls -lh /bin/netstat
- ls -lh /bin/ps
- ls -lh /usr/sbin/lsof
- ls -lh /usr/sbin/ss
2、上传如下命令到/root下
- ps netstat ss lsof
3、删除如下目录及文件
- rm -rf /usr/bin/dpkgd (ps netstat lsof ss)
- rm -rf /usr/bin/bsd-port #木马程序
- rm -f /usr/bin/.sshd #木马后门
- rm -f /tmp/gates.lod
- rm -f /tmp/moni.lod
- rm -f /etc/rc.d/init.d/DbSecuritySpt(启动上述描述的那些木马变种程序)
- rm -f /etc/rc.d/rc1.d/S97DbSecuritySpt
- rm -f /etc/rc.d/rc2.d/S97DbSecuritySpt
- rm -f /etc/rc.d/rc3.d/S97DbSecuritySpt
- rm -f /etc/rc.d/rc4.d/S97DbSecuritySpt
- rm -f /etc/rc.d/rc5.d/S97DbSecuritySpt
- rm -f /etc/rc.d/init.d/selinux(默认是启动/usr/bin/bsd-port/getty)
- rm -f /etc/rc.d/rc1.d/S99selinux
- rm -f /etc/rc.d/rc2.d/S99selinux
- rm -f /etc/rc.d/rc3.d/S99selinux
- rm -f /etc/rc.d/rc4.d/S99selinux
- rm -f /etc/rc.d/rc5.d/S99selinux
4、找出异常程序并杀死
5、删除含木马命令并重新安装(或者把上传的正常程序复制过去也行)
我自己重新安装好像不行,我是找的正常的机器复制的命令。(centos使用rpm安装也可以,参考我的文章误删centos的ps命令,恢复)
- #ps
- /root/chattr -i -a /bin/ps && rm /bin/ps -f
- yum reinstall procps -y 或 cp /root/ps /bin
- #netstat
- /root/chattr -i -a /bin/netstat && rm /bin/netstat -f
- yum reinstall net-tools -y 或 cp /root/netstat /bin
- #lsof
- /root/chattr -i -a /bin/lsof && rm /usr/sbin/lsof -f
- yum reinstall lsof -y 或 cp /root/lsof /usr/sbin
- #ss
- /root/chattr -i -a /usr/sbin/ss && rm /usr/sbin/ss -f
- yum -y reinstall iproute 或 cp /root/ss /usr/sbin
四、杀毒工具扫描
1、安装杀毒工具clamav
- yum -y install clamav clamav-milter
2、启动服务
- service clamd restart
3、更新病毒库
由于ClamAV不是最新版本,所以有告警信息。可以忽略或升级最新版本。
- [root@mobile ~]# freshclam
- ClamAV update process started at Sun Jan 31 03:15:52 2016
- WARNING: Can't query current.cvd.clamav.net
- WARNING: Invalid DNS reply. Falling back to HTTP mode.
- Reading CVD header (main.cvd): WARNING: main.cvd not found on remote server
- WARNING: Can't read main.cvd header from db.cn.clamav.net (IP: 185.100.64.62)
- Trying again in 5 secs...
- ClamAV update process started at Sun Jan 31 03:16:25 2016
- WARNING: Can't query current.cvd.clamav.net
- WARNING: Invalid DNS reply. Falling back to HTTP mode.
- Reading CVD header (main.cvd): Trying host db.cn.clamav.net (200.236.31.1)...
- OK
- main.cvd is up to date (version: 55, sigs: 2424225, f-level: 60, builder: neo)
- Reading CVD header (daily.cvd): OK (IMS)
- daily.cvd is up to date (version: 21325, sigs: 1824133, f-level: 63, builder: neo)
- Reading CVD header (bytecode.cvd): OK (IMS)
- bytecode.cvd is up to date (version: 271, sigs: 47, f-level: 63, builder: anvilleg)
4、扫描方法
可以使用clamscan -h查看相应的帮助信息
- clamscan -r /etc --max-dir-recursion=5 -l /root/etcclamav.log
- clamscan -r /bin --max-dir-recursion=5 -l /root/binclamav.log
- clamscan -r /usr --max-dir-recursion=5 -l /root/usrclamav.log
- clamscan -r --remove /usr/bin/bsd-port
- clamscan -r --remove /usr/bin/
5、查看日志发现
把发现的命令删掉替换正常的
附录:Linux.BackDoor.Gates.5
经过查询资料,这个木马应该是Linux.BackDoor.Gates.5,找到一篇文件,内容具体如下:
某些用户有一种根深蒂固的观念,就是目前没有能够真正威胁Linux内核操作系统的恶意软件,然而这种观念正在面临越来越多的挑战。与4月相比,2014年5月Doctor Web公司的技术人员侦测到的Linux恶意软件数量创下了新纪录,六月份这些恶意软件名单中又增加了一系列新的Linux木马,这一新木马家族被命名为Linux.BackDoor.Gates。
在这里描述的是恶意软件家族Linux.BackDoor.Gates中的一个木马:Linux.BackDoor.Gates.5,此恶意软件结合了传统后门程序和DDoS攻击木马的功能,用于感染32位Linux版本,根据其特征可以断定,是与Linux.DnsAmp和Linux.DDoS家族木马同出于一个病毒编写者之手。新木马由两个功能模块构成:基本模块是能够执行不法分子所发指令的后门程序,第二个模块在安装过程中保存到硬盘,用于进行DDoS攻击。Linux.BackDoor.Gates.5在运行过程中收集并向不法分子转发受感染电脑的以下信息:
CPU核数(从/proc/cpuinfo读取)。
CPU速度(从/proc/cpuinfo读取)。
CPU使用(从/proc/stat读取)。
Gate'a的 IP(从/proc/net/route读取)。
Gate'a的MAC地址(从/proc/net/arp读取)。
网络接口信息(从/proc/net/dev读取)。
网络设备的MAC地址。
内存(使用/proc/meminfo中的MemTotal参数)。
发送和接收的数据量(从/proc/net/dev读取)。
操作系统名称和版本(通过调用uname命令)。
启动后,Linux.BackDoor.Gates.5会检查其启动文件夹的路径,根据检查得到的结果实现四种行为模式。
如果后门程序的可执行文件的路径与netstat、lsof、ps工具的路径不一致,木马会伪装成守护程序在系统中启动,然后进行初始化,在初始化过程中解压配置文件。配置文件包含木马运行所必须的各种数据,如管理服务器IP地址和端口、后门程序安装参数等。
根据配置文件中的g_iGatsIsFx参数值,木马或主动连接管理服务器,或等待连接:成功安装后,后门程序会检测与其连接的站点的IP地址,之后将站点作为命令服务器。
木马在安装过程中检查文件/tmp/moni.lock,如果该文件不为空,则读取其中的数据(PID进程)并“干掉”该ID进程。然后Linux.BackDoor.Gates.5会检查系统中是否启动了DDoS模块和后门程序自有进程(如果已启动,这些进程同样会被“干掉”)。如果配置文件中设置有专门的标志g_iIsService,木马通过在文件/etc/init.d/中写入命令行#!/bin/bash\n<path_to_backdoor>将自己设为自启动,然后Linux.BackDoor.Gates.5创建下列符号链接:
1
2
3
4
|
ln -s /etc/init .d /DbSecuritySpt /etc/rc1 .d /S97DbSecuritySpt ln -s /etc/init .d /DbSecuritySpt /etc/rc2 .d /S97DbSecuritySpt ln -s /etc/init .d /DbSecuritySpt /etc/rc3 .d /S97DbSecuritySpt ln -s /etc/init .d /DbSecuritySpt /etc/rc4 .d /S97DbSecuritySpt |
如果在配置文件中设置有标志g_bDoBackdoor,木马同样会试图打开/root/.profile文件,检查其进程是否有root权限。然后后门程序将自己复制到/usr/bin/bsd-port/getty中并启动。在安装的最后阶段,Linux.BackDoor.Gates.5在文件夹/usr/bin/再次创建一个副本,命名为配置文件中设置的相应名称,并取代下列工具:
1
2
3
4
5
6
7
8
9
|
/bin/netstat /bin/lsof /bin/ps /usr/bin/netstat /usr/bin/lsof /usr/bin/ps /usr/sbin/netstat /usr/sbin/lsof /usr/sbin/ps |
木马以此完成安装,并开始调用基本功能。
执行另外两种算法时木马同样会伪装成守护进程在被感染电脑启动,检查其组件是否通过读取相应的.lock文件启动(如果未启动,则启动组件),但在保存文件和注册自启动时使用不同的名称。
与命令服务器设置连接后,Linux.BackDoor.Gates.5接收来自服务器的配置数据和僵尸电脑需完成的命令。按照不法分子的指令,木马能够实现自动更新,对指定IP地址和端口的远程站点发起或停止DDoS攻击,执行配置数据所包含的命令或通过与指定IP地址的远程站点建立连接来执行其他命令。
此后门程序的主要DDoS攻击目标是中国的服务器,然而不法分子攻击对象也包括其他国家。下图为利用此木马进行的DDoS攻击的地理分布:
本文出自 “运维点滴记录” 博客,请务必保留此出处http://wzlinux.blog.51cto.com/8021085/1740113
一次Linux服务器被入侵和删除木马程序的经历的更多相关文章
- Linux服务器被入侵后的处理过程(转发阿良)
Linux服务器被入侵后的处理过程 突然,频繁收到一组服务器 ping 监控不可达邮件,赶紧登陆 zabbix 监控系统查看流量状况. 可见流量已经达到了 800M 左右,这肯定不正常了,马上尝试 ...
- Linux服务器被入侵后的处理过程
突然,频繁收到一组服务器 ping 监控不可达邮件,赶紧登陆 zabbix 监控系统查看流量状况. 可见流量已经达到了 800M 左右,这肯定不正常了,马上尝试 SSH 登陆系统,不幸的事,由于网络堵 ...
- 一次linux服务器黑客入侵后处理
场景: 周一上班centos服务器ssh不可用,web和数据库等应用不响应.好在vnc可以登录 使用last命令查询,2号之前的登录信息已被清空,并且sshd文件在周六晚上被修改,周日晚上2点服务器 ...
- linux服务器自动备份与删除postgres数据库数据
1.先创一个back.sh 文件,授权,然后在下面这个文件添加脚本 export PGPASSWORD='123456' #这是登录服务器密码cur_time=`date +%Y%m%d ...
- linux 服务器下入侵之后的日志清理
1.web日志的清理:access.log 和auth.log 位置在/var/log/下面. 2.系统日志存放在:/root/.bash_history
- Linux服务器定位CPU高占用率代码位置经历
http://blog.csdn.net/zhu19774279/article/details/51303000
- 记一次Linux服务器上查杀木马经历
开篇前言 Linux服务器一直给我们的印象是安全.稳定.可靠,性能卓越.由于一来Linux本身的安全机制,Linux上的病毒.木马较少,二则由于宣称Linux是最安全的操作系统,导致很多人对Linux ...
- Linux服务器杀马(转)
开篇前言 Linux服务器一直给我们的印象是安全.稳定.可靠,性能卓越.由于一来Linux本身的安全机制,Linux上的病毒.木马较少,二则由于宣称Linux是最安全的操作系统,导致很多人对Linux ...
- linux服务器常用密令
1. 什么是linux服务器load average? Load是用来度量服务器工作量的大小,即计算机cpu任务执行队列的长度,值越大,表明包括正在运行和待运行的进程数越多.参考资料:http://e ...
随机推荐
- 【python-pip】pip安装国外插件timeout解决方案
为什么会timeout呢,你懂得(不懂???!!!) 解决方案: 使用国内豆瓣镜像安装(也有其他的镜像,自己可以搜) pip install xxx -i http://pypi.douban.com ...
- 最通熟易懂的Hadoop HDFS实践攻略
HDFS是用来解决什么问题?怎么解决的? 如何在命令行下操作HDFS? 如何使用Java API来操作HDFS? 在了解基本思路和操作方法后,进一步深究HDFS具体的读写数据流程 学习并实践本文教程后 ...
- maven工程聚合和继承的意义
聚合的意义: 对于一个大型的项目,如果我们直接作为一个工程开发,由于相互之间的依赖我们只能从头到尾由一组人开发,否则就会出现一个类好多人开发,相互更改的混乱局面,这个时候我们就将项目进行了横向和纵向的 ...
- .NET MVC 学习笔记(六)— 数据导入
.NET MVC 学习笔记(六)—— 数据导入 在程序使用过程中,有时候需要新增大量数据,这样一条条数据去Add明显不是很友好,这时候最好就是有一个导入功能,导入所需要的数据,下面我们就一起来看一下导 ...
- MVC 5使用ViewData(模型)显示数据
看过此篇<MVC 5使用ViewData(对象)显示数据>http://www.cnblogs.com/insus/p/3377178.html 都明白在控制器使用ViewData(obj ...
- ConcurrentHashMap源码解析(2)
此文已由作者赵计刚授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. ConcurrentHashMap() /** * 创建ConcurrentHashMap ...
- zookeeper+kafka集群的安装部署
准备工作 上传 zookeeper-3.4.6.tar.gz.scala-2.11.4.tgz.kafka_2.9.2-0.8.1.1.tgz.slf4j-1.7.6.zip 至/usr/local目 ...
- odoo开发笔记--python获取当天时间
取得时间相关的信息的话,要用到python time模块,python time模块里面有很多非常好用的功能,你可以去官方文档了解下,要取的当前时间的话,要取得当前时间的时间戳,时间戳好像是1970年 ...
- 插入排序的Java代码实现
插入排序也是一类非常常见的排序方法,它主要包含直接插入排序,Shell排序和折半插入排序等几种常见的排序方法. 1.直接插入排序 直接插入排序的思路非常简单:依次将待排序的数据元素按其关键字值的大小插 ...
- 线程中的同步辅助类CountDownLatch
四个类可协助实现常见的专用同步语句.Semaphore 是一个经典的并发工具.CountDownLatch 是一个极其简单但又极其常用的实用工具,用于在保持给定数目的信号.事件或条件前阻塞执行.Cyc ...