近日公司局域网突然变得非常慢,上网受到很大影响,不仅仅是访问互联网慢,就连访问公司内部服务器都感到异常缓慢。于是对本局域网网关进行测试:
 
$ ping 10.10.26.254
 
发现延时很大,而且丢包相当多,丢包率达到70%-90%。先怀疑是否有机器中毒在局域网内大量发arp包,于是在自己机器上用arp命令检测:
 
$ sudo arp -a
 
可以看到本局域网内的主机ip以及对应的mac地址,貌似没有什么大问题。然后在本机上运行wireshark小鲨鱼抓包,发现确实有几个本局域网内的ip在给全网广播地址发udp包,根据ip和mac地址找到这几个主机后,让他们拔掉网线进行杀毒或者系统重装,但网慢的现象仍然存在。通过对局域网上联交换机的端口进行排查,发现局域网有主机仍然在大量向往发送数据包,量非常大,上百兆的规模,导致上联交换机端口带宽被堵死,网络当然慢了。对局域网内楼层交换机进行逐一排查,最后锁定到连接某个端口的一台主机,ip为10.10.26.70,在大量向外发数据包,很快便找到了这台主机。原来这是一台装有CentOS 7.0的Linux系统台式机,本来是作为开发测试使用的。这就很奇怪了,一般来讲Linux系统安全性比较高,而且该主机上也没有明显的服务漏洞。对系统进行检查,逐一关闭了一些服务以后,只保留ssh监听端口(22),其余服务全部关闭,但现象依旧。运行ifstat命令可以看到主机网卡接收和发出数据包的流量统计:
 
$ sudo ifstat
 
显示TX Data发出数据量巨大,达到几百兆规模,相当可怕!马上用lsof命令检测网络对外流量到底是什么:
 
$ sudo lsof -i
 
发现大流量是对外发tcp数据包,而且是发往103.240.140.152这个地址。查了一下这个地址,显示来自香港特别行政区的。同时,用top命令查看当前运行的进程:
 
$ top
 
发现总有一个不知名的字母随便乱排的进程几乎总是排在第一位,占用的系统资源最多。于是记下其PID进程号后,用ps命令查找该进程的信息及启动命令:
 
$ ps -ef | grep 可疑进程号
 
显示结果居然是一个shell内部命令,比如“cd /etc”这样的。用kill命令尝试杀掉该可疑进程:
 
$ sudo kill -KILL 可疑进程号
 
可疑进程的确是被杀掉了,马上就不发包了。网络恢复正常,但是好景不长,过了一分钟左右,网络又开始变慢,检查发现主机又开始大量发包。通过top命令发现又出现一个可疑进程大量消耗系统资源,排在第一位,进程名还是一串字母随机无序组成的,但和刚刚杀死的那个可疑进程名字不同。基本可以确定,这台主机肯定是被黑掉变成肉鸡了。马上检查系统日志:
 
$ sudo lastb
 
可以发现大量对ssh远程登录的尝试失败记录,数量相当恐怖。基本可以确定,本机是被ssh暴力攻破远程登录后变成了肉鸡。随即在网上搜索有关ssh攻击和103.240.140.152的相关内容,原来是在2014年底开始到处肆虐的“ssh神经病(Psychos)”攻击,这是一种新型的Linux恶意软件和工具包,用来发动DDoS攻击。通常都是通过异乎寻常的ssh暴力尝试登录攻击远程主机。在ssh暴力尝试root密码并登录成功之后,会从控制主机上下载恶意文件并安装执行,肉机立刻开始搜索它的命令控制(C2)主机连接建立之后,C2就可以指挥肉机发动SYN洪水攻击。
 
这个恶意木马程序一旦被安装在肉鸡上后,用kill无法彻底杀掉,因为总是会隔一小段时间又自动运行。所以怀疑可能是通过定时任务方式在自动启动。检查cron定时任务相关的配置文件目录,果然发现在/etc/crond.hourly目录下发现了一个名为gcc.sh的可疑脚本文件,应该就是木马程序的一部分。这个脚本会一直在内存中运行,并且会不断检测自身是否存在于/lib/libudev.so这个文件中,如果不存在,则创建一个并且销毁存在于其他地方的自身。这一步完成之后,这个.so文件还会创建一个开机启动脚本并且设置为开机启动,然后他就会写入shell到gcc.sh,也就是/etc/cron.hourly/gcc.sh。因此,这里可以说又发现了一个隐藏着的恶意木马程序的核心文件,就是/lib/libudev.so。接着,考虑到每次开机恶意木马都会自动运行,因此要检查/etc/rc.d/rc5.d,果然发现很多字幕随意排练组合名字的可执行脚本链接,它们就是在top中看到的那些杀不掉的反复出现的可疑进程。逐一检查/etc/rc.d/rc0.d一直到/etc/rc.d/rc6.d目录,发现恶意木马在这几个目录中都安插了恶意自启脚本链接,真够黑的。这些链接都指向/etc/init.d目录下的真实恶意自启脚本文件。好了,最后别忘了/lib/libudev.so,马上进行检查,发现这个/lib/libudev.so还真的存在,并且具备可执行权限,用file命令检测一下该文件的类型:
 
$ file /lib/libudev.so
 
结果这个文件其实是一个可执行程序,并不是一个共享库,只不过用一个.so的扩展名想掩盖自己的真实身份而已,它应该就是恶意木马的核心程序。既然如此,下面就开始清除这个恶意木马程序。
 
首先,将/lib/libudev.so取消可执行权限:
 
$ sudo chmod a-x /lib/libudev.so
 
然后,取消/etc/crond.hourly/gcc.sh的可执行权限并删除之:
 
$ sudo chmod a-x /etc/cron.hourly/gcc.sh
$ sudo rm -f /etc/cron.hourly/gcc.sh
 
删除/etc/init.d下面所有名字奇奇怪怪的那些字母随机组合的可执行脚本文件。接着从/etc/rc.d/rc0.d开始直到/etc/rc.d/rc6.d下面那些无效的链接,这些链接都指向刚才/etc/init.d下面被删除的那些使用字母随机组合名字的可执行脚本,这些脚本都是恶意木马程序安插的脚本,在系统启动时自动运行激活恶意木马。
 
最后,删除/lib/libudev.so这个恶意木马核心程序文件:
 
$ sudo rm -f /lib/libudev.so
 
重新启动系统,恶意木马程序就被清除掉了。
 
这次Linux主机被ssh神经病(Psychos)暴力攻破后成为肉鸡的攻防过程,说明没有一个系统是百分之百安全的,关键还是在于使用者自己的安全意识是否到位,安全防范措施是否足够有效。这次这台Linux之所以被ssh暴力攻破,主要还是安装后没有修改sshd的默认配置。sshd默认配置是允许root远程认证登录的,所以必须要修改sshd配置,禁止root通过ssh远程认证登录,并且最好修改sshd的默认服务端口,由22改为其他不常见的端口号。另一方面,对root的密码也要尽可能设置得复杂一些,使端口扫描和暴力攻破的难度尽可能提升。

Linux主机被SSH精神病(Psychos)暴力攻破后成为肉鸡的攻防过程的更多相关文章

  1. Mac OS X上如何实现到Linux主机的ssh免登陆

    转载说明: 本文转载自 http://www.aips.me/mac-key-ssh-login-linux.html 生成密钥对 用密码登录远程主机,将公钥拷贝过去 done 第一步:生成密匙对执行 ...

  2. Linux主机之间ssh免密登录配置方法

    由于公司的生产环境有很多台Linux的CentOS服务器, 为了方便机子(假设两台机子A,B)互相之间免密ssh, scp命令操作,配置如下 1. 在A.B上分别创建本机的公钥和私钥,输入命令后连续三 ...

  3. 使用putty连接本地VirtualBox上的centos7 linux主机

    1. 查看linux主机默认ssh端口 因为是使用ssh连接虚拟机上的linux主机的,所以需要查看centos ssh默认端口,一般是22 打开终端 输入cd /etc/ssh/ 查看ssh_con ...

  4. Ubuntu上安装和使用SSH,Xming+PuTTY在Windows下远程Linux主机使用图形界面的程序

    自:http://blog.csdn.net/neofung/article/details/6574002 Ubuntu上安装和使用SSH  网上有很多介绍在Ubuntu下开启SSH服务的文章,但大 ...

  5. windows 通过ssh连接到Linux主机

    1. 确定Linux主机已经开启了ssh功能. 1.1--确认sshserver是否启动 ps -e |grep ssh 如果只有ssh-agent那ssh-server还没有启动,需要/etc/in ...

  6. .Net使用SSH.NET通过SSH访问Linux主机

    使用了SSH.NET库,添加引用dll至项目,以下代码显示了点击按钮后SSH链接Linux主机执行命令并返回命令执行结果 protected void btnExcute_Click(object s ...

  7. Linux主机SSH免密设置解析

    为了保证一台Linux主机的安全,所以我们每个主机登录的时候一般我们都设置账号密码登录.但是很多时候为了操作方便,我们都通过设置SSH免密码登录.那么该如何设置?是不是免密码登录就不安全了呢? 一.被 ...

  8. ssh 设置私钥实现两台linux主机无密码访问

    在服务器主机上(称为A主机) 创建公钥与私钥: ssh-keygen -t rsa 一路回车,如果想设置密码短语,在提示 passphrase 的时候设置密码短语 查看生成的公钥及私钥: ls ~/. ...

  9. Jenkins踩坑系列--你试过linux主机ssh登录windows,启动java进程吗,来试试吧

    一.问题概述 在一个多月前,组长让我研究下持续集成.我很自然地选择了jenkins.当时,(包括现在也是),部分服务器用的是windows主机. 我当时想了想,如果我把jenkins装在windows ...

随机推荐

  1. vue 数组更新 this.$set(this.dataList, data.index, data.data)

    vue 数组更新 this.$set(this.dataList, data.index, data.data) https://www.cnblogs.com/huangenai/p/9836811 ...

  2. java解析sql文件

    package com.athena.ckx.util; import java.io.FileInputStream; import java.io.InputStream; import java ...

  3. PAT (Advanced Level) Practise - 1099. Build A Binary Search Tree (30)

    http://www.patest.cn/contests/pat-a-practise/1099 A Binary Search Tree (BST) is recursively defined ...

  4. ios之UIWebView(2)

    UIWebView是iOS sdk中一个最常用的控件.是内置的浏览器控件,我们可以用它来浏览网页.打开文档等等.这篇文章我将使用这个控件,做一个简易的浏览器.如下图: 我们创建一个Window-bas ...

  5. java面试宝典第四弹

    动态代理 1. 什么是代理 我们大家都知道微商代理,简单地说就是代替厂家卖商品,厂家“委托”代理为其销售商品.关于微商代理,首先我们从他们那里买东西时通常不知道背后的厂家究竟是谁,也就是说,“委托者” ...

  6. c++ 将输入存储到数组,然后反转数组,最后输出

    // 输入一个包含多个double元素的数组,先打印结果,然后反转出头和尾元素之外的所有元素,最后再打印结果 #include <iostream> using namespace std ...

  7. Lex与Yacc学习(九)之Yacc语法

    Yacc语法 本文讨论yacc语法的格式并描述可用的各种特征和选项 yacc语法结构 yacc语法包括三部分:定义段.规则段和用户子例程段 ...定义段... %% ...规则段... %% ...用 ...

  8. Luogu 3423 [POI 2005]BAN-银行票据 (多重背包单调队列优化 + 方案打印)

    题意: 给出 n 种纸币的面值以及数量,求最少使用多少张纸币能凑成 M 的面额. 细节: 好像是要输出方案,看来很是头疼啊. 分析: 多重背包,裸体??? 咳咳,好吧需要低调,状态就出来了: dp [ ...

  9. PYDay2-linux基础\常用命令

    一.linux 理念 一切皆文件 二.常用命令(150) 2.1.rsync rsync是类unix系统下的数据镜像备份工具, 它的特性如下: 可以镜像保存整个目录树和文件系统. 可以很容易做到保持原 ...

  10. Java-获取堆的大小

    package com.tj; public class getHeapInfo { public static void main(String[] args) { //获取当前堆的大小 byte ...