近日公司局域网突然变得非常慢,上网受到很大影响,不仅仅是访问互联网慢,就连访问公司内部服务器都感到异常缓慢。于是对本局域网网关进行测试:
$ 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的密码也要尽可能设置得复杂一些,使端口扫描和暴力攻破的难度尽可能提升。
- Mac OS X上如何实现到Linux主机的ssh免登陆
转载说明: 本文转载自 http://www.aips.me/mac-key-ssh-login-linux.html 生成密钥对 用密码登录远程主机,将公钥拷贝过去 done 第一步:生成密匙对执行 ...
- Linux主机之间ssh免密登录配置方法
由于公司的生产环境有很多台Linux的CentOS服务器, 为了方便机子(假设两台机子A,B)互相之间免密ssh, scp命令操作,配置如下 1. 在A.B上分别创建本机的公钥和私钥,输入命令后连续三 ...
- 使用putty连接本地VirtualBox上的centos7 linux主机
1. 查看linux主机默认ssh端口 因为是使用ssh连接虚拟机上的linux主机的,所以需要查看centos ssh默认端口,一般是22 打开终端 输入cd /etc/ssh/ 查看ssh_con ...
- Ubuntu上安装和使用SSH,Xming+PuTTY在Windows下远程Linux主机使用图形界面的程序
自:http://blog.csdn.net/neofung/article/details/6574002 Ubuntu上安装和使用SSH 网上有很多介绍在Ubuntu下开启SSH服务的文章,但大 ...
- windows 通过ssh连接到Linux主机
1. 确定Linux主机已经开启了ssh功能. 1.1--确认sshserver是否启动 ps -e |grep ssh 如果只有ssh-agent那ssh-server还没有启动,需要/etc/in ...
- .Net使用SSH.NET通过SSH访问Linux主机
使用了SSH.NET库,添加引用dll至项目,以下代码显示了点击按钮后SSH链接Linux主机执行命令并返回命令执行结果 protected void btnExcute_Click(object s ...
- Linux主机SSH免密设置解析
为了保证一台Linux主机的安全,所以我们每个主机登录的时候一般我们都设置账号密码登录.但是很多时候为了操作方便,我们都通过设置SSH免密码登录.那么该如何设置?是不是免密码登录就不安全了呢? 一.被 ...
- ssh 设置私钥实现两台linux主机无密码访问
在服务器主机上(称为A主机) 创建公钥与私钥: ssh-keygen -t rsa 一路回车,如果想设置密码短语,在提示 passphrase 的时候设置密码短语 查看生成的公钥及私钥: ls ~/. ...
- Jenkins踩坑系列--你试过linux主机ssh登录windows,启动java进程吗,来试试吧
一.问题概述 在一个多月前,组长让我研究下持续集成.我很自然地选择了jenkins.当时,(包括现在也是),部分服务器用的是windows主机. 我当时想了想,如果我把jenkins装在windows ...
随机推荐
- spring-security中的csrf防御机制(跨域请求伪造)
什么是csrf? csrf又称跨域请求伪造,攻击方通过伪造用户请求访问受信任站点.CSRF这种攻击方式在2000年已经被国外的安全人员提出,但在国内,直到06年才开始被关注,08年,国内外的多个大型社 ...
- Codeforces Round #271 (Div. 2)-A. Keyboard
http://codeforces.com/problemset/problem/474/A A. Keyboard time limit per test 2 seconds memory limi ...
- Flask——蓝图
蓝图介绍 一个项目中,有不同的模块,但是只有一个入口,程序入口可以随便取名,一般叫做,app.py或者manage.py.当我们写一个程序,当然可以在一个文件中写完,但是有一定规模的项目,我们肯定不会 ...
- shell脚本,计算输入给定的数,判断最大值,最小值,总和?
[root@localhost ~]# cat five.sh #!/bin/bash #任意输入5个数,判断最大值,最小值,总和 s= read -p "please input:&quo ...
- Lucene原理与代码分析
http://www.cnblogs.com/forfuture1978/category/300665.html
- c++中的结构体:声明 定义 初始化
什么是结构体? 之前的学习中我们知道了数组是一个容器,而且是存放固定大小数据的容器,而且存放的元素的数据类型必须要一致. 比如数据库中有这样的一条记录学号 性别 年龄 成绩 地址应该怎样存放 结构体: ...
- uilabel自动换行
NSString *str = @"我是一asdf我是一我是一我是一我是一我是一我是一我是一我是一我是一我是一我是一asdf我是一asdf我是一asdf我是一asdf我是一asdf我是一as ...
- 如何用纯 CSS 创作牛奶文字变换效果
效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/MGNWOm 可交互视频教 ...
- Juqyer:$.ajax()方法详解
Jquery中的ajax方法参数总是记不住,这里记录一下. 最常用的属性是:url.data 1.url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. 2.type: 要求为S ...
- Python_sort函数结合functools.cmp_to_key(func)分析
举例如下: from functools import cmp_to_key persons = [ { 'name':'zhangsan', 'age':20, 'grade':98 }, { 'n ...