近日公司局域网突然变得非常慢,上网受到很大影响,不仅仅是访问互联网慢,就连访问公司内部服务器都感到异常缓慢。于是对本局域网网关进行测试:
 
$ 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. 第1节 flume:15、flume案例二,通过自定义拦截器实现数据的脱敏

    1.7.flume案例二 案例需求: 在数据采集之后,通过flume的拦截器,实现不需要的数据过滤掉,并将指定的第一个字段进行加密,加密之后再往hdfs上面保存 原始数据与处理之后的数据对比 图一  ...

  2. Java产生GUID

    /** * 产生GUID */public static final String generateGUID(){ UUID uuid = UUID.randomUUID(); return uuid ...

  3. java数字金额转化为中文金额

    public static String digitUppercase(double n){String fraction[] = {"角", "分"};Str ...

  4. iptables 过滤字符串

    iptables 过滤字符串 1. 开启iptables iptables -P OUTPUT ACCEPT       ###允许输出链 service iptables save          ...

  5. js转换金钱为中文单位元、万元、亿元、万亿

    function unitConvert(num) { var moneyUnits = ["元", "万元", "亿元", "万 ...

  6. Jquery 自定义动画同步进行如何实现?

    需求描述:我需要对不懂的两个HTML对象进行操作,同时开始动画,同时结束动画. 遇到问题:如果先后对连个对象进行 animate动画,那么第一个会先运行,等第一个运行完了运行第二个,这样就不同步了. ...

  7. python 中变量和对象

    1. 在 python 中,类型属于对象,变量是没有类型的:a=[1,2,3] a="Runoob"以上代码中,[1,2,3] 是 List 类型,"Runoob&quo ...

  8. Python常见文件操作的函数示例

    # -*-coding:utf8 -*- ''''' Python常见文件操作示例 os.path 模块中的路径名访问函数 分隔 basename() 去掉目录路径, 返回文件名 dirname() ...

  9. Ubuntu 15.04 Qt5 链接 mysql数据库

    序 最近在Ubuntu15.04下做一个Linux-服务器-客户端通信项目,用到MySQL数据库.开始的时候,在数据库链接时遇到障碍,查找资料解决. 特此记录,分享于此. 环境配置 系统:Ubuntu ...

  10. cs229_part4

    又到了一节很重要的课,因为这个学习理论是从统计角度为机器学习算法提供了一个理论基础. 学习理论 问题背景 先回顾一下我们第一节课提到的机器学习的组成: 第一节课只是简单的提了一下,现在我们要真正来分析 ...