突然,频繁收到一组服务器 ping 监控不可达邮件,赶紧登陆 zabbix 监控系统查看流量状况。

可见流量已经达到了 800M 左右,这肯定不正常了,马上尝试 SSH 登陆系统,不幸的事,由于网络堵塞,登录不上或者卡死。

1、排查问题

第一反应是想马上通知机房运维人员切断该服务器外部网络,通过内网连接查看。可是这样一来流量就会消失,就很难查找攻击源了。

于是联系机房协助解决,授权机房技术登录到系统,先通过 w 命令查看是否有异常用户在登录,再看看登录日志  /var/log/auth.log,预料之中,日志已经清空;最后使用工具找出那个连接占用流量大,我使用了 iftop 工具。

机房技术发来拍照,看到本地一直通过 http 方式向 104.31.225.6 这个 ip 发送数据包,而且持续不断。

那好,先把这个 ip 给屏蔽了试试:

iptables –A OUTPUT –d 104.31.225.6 –j DROP

奇迹出现,瞬间流量下去,现在也可以正常登录系统。

过一会儿~ 不幸的事情发生了,流量又上来了,擦!什么情况!心情顿时紧张起来。

又赶紧联系机房技术,告知他执行上次屏蔽 ip 操作。

机房技术发来拍照,这次傻眼了,目的 ip 变了,这可咋搞,不可能一个个封吧!静下心来,仔细想了下,本地向外发包,那本地肯定会有程序来发!

2、查找攻击源

先通过netstat工具过滤端口,查看运行的进程ID:

netstat –atup |grep 15773

结果什么都没有,再换个端口试试,同样的效果!

让机房技术观察了下连接状态,原来是短连接,端口很快会释放,所以才看不到端口的连接状态。

正常长连接来说,可以使用 lsof –i :15773 这样方式找到 PID,再 lsof –p PID 找到打开的相关文件。

好吧!决定先切断外部网络,内网 SSH 进入系统,先找到这个发包的程序!

先通过 netstat –antup 查看有无开放可疑的端口或者连接。

再通过 ps –ef 查看有无可疑的进程。

仔细盘查,无可疑情况。

难道是植入了 rootkit 木马程序?说不好,试试看吧!

想要判断系统有没有植入了 rootkit 可以使用 md5sum 校验执行文件判断,先找个同版本操作系统,获取到这个工具执行文件的 md5 值,再获取可疑的工具执行文件 md5 值,比较两个值是否相同,如果相同说明这个工具是可信任的,如果不相同很有可能是被替换的。

另外,一般工具可执行文件大小都在几十K到几百K。

其实我没有用md5方式来判断工具是否可信任,因为这台操作系统比较老,完全相同版本操作系统不好找,稍微有点差别,工具就有可能已被更新,md5 值不同。

先执行了 du –sh /bin/lsof 查看,发现大小 1.2M,明显有问题。

所以尝试把正常系统里的 netstat、ps 等工具二进制文件上传到被黑的系统里,替换掉原有的,果然,奇迹出现了~

3、清理木马程序

执行 ps –ef 后,发下最下面有几行可疑程序。在这里,本想截图的,可惜 SSH 客户端给关了,没留下截图。

记忆中,大概是这样的:

pid /sbin/java.log

pid /usr/bin/dpkgd/ps –ef

pid /usr/bin/bsd-port/getty

pid /usr/bin/.sshd

接下来,逐步看看这些进程。

怎么会有个 java.log 的执行文件在运行呢?找同事是不是他们跑的,说是没有。那好,先杀掉进程并把文件移动到别的目录再看看。

/usr/bin/dpkgd/ps –ef 这个进程怎么像是我执行的命令呢?仔细一看,命令的路径有问题,不是 /bin/ps,进入此目录下查看。

擦,还有几个,基本可以确定这些工具是被替换了。。。

还有一个 getty 执行文件,正常系统下没有运行这个,估计又是黑客留下的,杀掉进程,删除目录。宁可错杀一百,也不放过一个!

.sshd 进程?明显很可疑,难道是 ssh 后门,杀掉!

目前这些异常进程都已经被处理掉。

再执行 ps –ef 命令看下,奇怪,java.log 进程又起来了,难道有自启动设置?于是到了 /etc/init.d 下查看,有个异常可执行文件,正常系统里没有,打开看了下,果然是自动启动木马程序的脚本。

把这两个脚本删除,再删除java.log文件,文件不再生成,进程也不再运行了!

好了,可以开启外网了,观察了一会网络流量不再飙升了。

4、总结

ls /usr/bin/dpkgd/   #黑客替换的工具(netstat lsof ps ss),系统自带的工具正常不会在这个目录下,并且也不可用。

/sbin/java.log    #判断是发包程序,删除后会自动生成。

/usr/bin/bsd-port    #判断是自动生成 java.log 或着后门程序。

/usr/sbin/.sshd    #判断是后门程序。

如果还有其他木马程序怎么办?

如果是 XSS 攻击,应用层漏洞入侵怎么办?

针对这些问题,最好方式就是备份数据,重装系统,干净利落。

但从我们公司角度来说,暂时不能重装系统,业务比较复杂,跑的业务比较多,还没摸清楚,准备慢慢迁移数据,再观察下吧!

黑客趁机入侵的原因:

运维人员网络安全意识低,安全策略落实少;

上线前没有对暴露外部的应用进行安全扫描;

没有安全测试人员,没有关注漏洞最新动态,不能及时发现漏洞;

等…

针对这次攻击,总结下防护思路:

Linux 系统安装后,启用防火墙,只允许信任源访问指定服务,删除不必要的用户,关闭不必要的服务等。

收集日志,包括系统日志,登录日志,程序日志等,对异常关键字告警,及时发现潜在风险。

针对用户登录信息实时收集,包括登录时间,密码重试次数以及用户执行命令记录等。

对敏感文件或目录变化进行事件监控,如 /etc/passwd、/etc/shadow、/web、/tmp (一般上传文件提权用)等。

进程状态监控,对新增的进程(非业务和系统进程)监控并通知。

对上线的服务器系统、Web 程序进程安全漏洞扫描。

附:安全运维经验

Linux服务器被入侵后的处理过程的更多相关文章

  1. Linux服务器被入侵后的处理过程(转发阿良)

    Linux服务器被入侵后的处理过程   突然,频繁收到一组服务器 ping 监控不可达邮件,赶紧登陆 zabbix 监控系统查看流量状况. 可见流量已经达到了 800M 左右,这肯定不正常了,马上尝试 ...

  2. linux 服务器更主板后无法识别网卡处理过程

    linux 服务器更主板后无法识别网卡处理过程   服务器故障报修,主板坏,更换主板后无法识别网卡,ifconfig 查看只显示:lo loopback 127.0.0.1. 系统加载网卡驱动后会去读 ...

  3. Linux 主机被入侵后的处理案例

    Linux主机被入侵后的处理案例 提交 我的留言 加载中 已留言 一次Linux被入侵后的分析 下面通过一个案例介绍下当一个服务器被rootkit入侵后的处理思路和处理过程,rootkit攻击是Lin ...

  4. 一次Linux服务器被入侵和删除木马程序的经历

    转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://wzlinux.blog.51cto.com/8021085/1740113 一.背景 晚上看到有台服 ...

  5. linux服务器出现严重故障后的原因以及解决方法

    1.把系统安装光盘插入,重启机器,启动时迅速按下Del键,进入CMOS,把启动顺序改为光盘先启动,这样就启动了Linux安装程序,按F5,按提示打入Linux rescue回车,进入救援模式,接下来是 ...

  6. 一次linux服务器黑客入侵后处理

     场景: 周一上班centos服务器ssh不可用,web和数据库等应用不响应.好在vnc可以登录 使用last命令查询,2号之前的登录信息已被清空,并且sshd文件在周六晚上被修改,周日晚上2点服务器 ...

  7. Linux服务器更换主板后,网卡识别失败的处理方法

    1)现象说明公司IDC机房里的一台线上服务器硬件报警,最后排查发现服务器主板坏了,随即联系厂商进行更换主板,最后更换后,登录服务器,发现网卡绑定及ip信息都在,但是ip却ping不通了,进一步排查,重 ...

  8. linux 服务器下入侵之后的日志清理

    1.web日志的清理:access.log 和auth.log 位置在/var/log/下面. 2.系统日志存放在:/root/.bash_history

  9. 线上Linux服务器运维安全策略经验分享

    线上Linux服务器运维安全策略经验分享 https://mp.weixin.qq.com/s?__biz=MjM5NTU2MTQwNA==&mid=402022683&idx=1&a ...

随机推荐

  1. 利用mybatis的Generator的插件生成代码

    1 在resources文件夹下创建generatorConfig.xml文件来做相关配置 <?xml version="1.0" encoding="UTF-8& ...

  2. Elasticsearch第四篇:索引别名、添加或修改映射规则

    项目中经常出现的问题,例如添加字段.修改字段,那原先的索引规则就要跟着改变,最好是一开始就给索引一个别名,修改字段时新增映射,然后将笔名指向新的映射,当然需要将之前的索引搬迁到新的映射当中. 1.获取 ...

  3. Linux下C++提示bind:address already in use

    此地址下的此端口被占用,有可能你已经关闭了程序依然如此,因为TCP的TIME_WAIT(不懂的话可以可以查一查).解决方案:1.设置为SO_REUSEADDR 2.查看进程进程号(ps -ef 或者 ...

  4. The Definitive Guide to Ruby's C API The Ruby C API Running Ruby in C Running C in Ruby

    最近在研究如何在C/C++中 嵌入ruby脚本,很感谢找到了一篇文章,分享一下. The Definitive Guide to Ruby's C API

  5. vue 公众号H5 使用微信JSAPI 录音 完整齐全

    官方文档必须首当其冲 1.微信jsAPI 录音文档 2.获取微信临时素材文档 首先H5录音功能的话 对于普通H5网上是有很多的方法 插件  但是兼容性很差 特别是对于ios 一开始想的是用H5 做个通 ...

  6. LeetCode 115.不同的子序列 详解

    题目详情 给定一个字符串 S 和一个字符串 T,计算在 S 的子序列中 T 出现的个数. 一个字符串的一个子序列是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串.(例如, ...

  7. stat 命令家族(2)- 详解 pidstat

    性能测试必备的 Linux 命令系列,可以看下面链接的文章哦 https://www.cnblogs.com/poloyy/category/1819490.html 介绍 对 Linux 任务的统计 ...

  8. 12 种使用 Vue 的最佳做法

    随着 VueJS 的使用越来越广泛,出现了几种最佳实践并逐渐成为标准. 1.始终在 v-for 中使用 :key 在需要操纵数据时,将key属性与v-for指令一起使用可以让程序保持恒定且可预测. 这 ...

  9. 精讲响应式webclient第1篇-响应式非阻塞IO与基础用法

    笔者在之前已经写了一系列的关于RestTemplate的文章,如下: 精讲RestTemplate第1篇-在Spring或非Spring环境下如何使用 精讲RestTemplate第2篇-多种底层HT ...

  10. JS中new Date()用法及获取服务器时间

    1.获取服务器时间: var now = new Date($.ajax({async: false}).getResponseHeader("Date")); 2.new Dat ...