昨天一大早,我还没到公司呢,就收到腾讯云安全中心发来的服务器异常登录告警,登录控制台一看,ip还是美国的,一脸懵逼。由于本人之前也没有过处理服务器入侵的经验,而且这台服务器目前还没有部署商用系统,所以也就没怎么在意,照着云安全中心提示的可疑文件的位置,将其删除,就这样交差了。其实我知道这样肯定是不行的,但是确实很烦去处理这种事情。果然,下午又收到了告警。这是公司的电脑,老板很在意,刚好手上的事情忙完了,今天就特意花时间查了查,记录一下排查过程。

  首先,还是上控制台,看一下告警的信息,告警显示的登录ip来自美国,登录账号竟然还是 root (感觉好牛批。之前我自己个人的服务器被入侵,还是被建了一个 test 用户进行操作的。),告警信息提示可以文件有两处:

    /tmp/SzdXM 和 /usr/bin/dznqfa4

    

    

  这次我没有急着把他们删除,而是先查看一下进程,果不其然,有几个对应的进程:

    

  查看完进程,再看一下连接,发现这些进程打开了 100 多个连接,并且连接的目标ip都不同:

    

  虽然查到了进程和连接,但这只能证明服务器确实被入侵了。但是怎么入侵的呢?其实我的 root 密码是20+位数字大小写字母和特殊符号组合密码,想来应该不会是暴力破解吧。然后想起了云服务器上的提示提高redis安全性告警,又想起了之前看到网上说 redis 任意文件写入的漏洞。于是去网上查了下 redis 的安全性问题。从下面这篇博文中得到了提示:

    https://blog.csdn.net/u011574239/article/details/78892174

    这篇文章中提到了 redis 的三条入侵特征:

     

    于是我就对照这三条逐一检查:

      1. 查看redis 的执行记录,查看 /root/.rediscli_history 文件,结果如下图。可以看出,确实执行了 flushall 命令(正常业务谁去执行这玩意啊)。好了,第一条应验了:

        

        2. 查看可以键值对。这个没有查到,没查到很正常啊,都执行过 flushall 了。

      3. 查看 /root/.ssh/authorized_keys 文件,确实存在一个 rsa 公钥。好了,第三条也应验了。

        

  既然特征都应验了,那看来很可能就是通过 redis 入侵的了。既然如此,redis 配置肯定是要改了。结合上面提到的那篇博客的内容提示,我们可以对 redis 做如下修改:

    1. 以低权限运行redis。为 redis 单独创建用户和主目录,配置该用户禁止远程登录;

    2. 为 redis 添加密码校验;

    3. 添加 redis 访问白名单,拒绝陌生ip的访问;

    4. 禁止一些 redis 高危命令;

    5. 修改 redis 服务端口,在安全组中关闭默认的 6379 端口;

  

  另外,不要以为查到了原因,就可以动刀子,开始杀进程、删文件、改端口、改密码重启,然后就万事大吉了。服务器既然已经被入侵过了,说明很可能还留有其它后门。我们应该还需要检查开机自启动项和定时任务。说实话,开机自启动的那些服务,我是真看不懂都是干嘛的(这就很慌了)。幸好的是我们还有另外一台跟这一台软硬件版本完全一样的服务器,那一台没有被入侵,我就将两台服务器的开机启动项对比着看,倒是没有发现什么可疑启动项。

  不过查到了定时任务有问题:

    

  说明我们还需要删除定时任务。

  从定时任务下载的文件内容看,定时任务执行时会从远程主机下载 i.sh 脚本,查看其内容:

    

  可以看出,这个定时任务本身会下载脚本创建新的定时任务,所以为了防止死而复生,我们应该先从云控制台安全组将这个脚本的下载地址和端口拉入黑名单。同时将 redis 端口禁用掉。

  排查完了,接下来捋一下思路:

    1. 安全组配置,将 68.183.140.39:8000 禁止出方向访问;

    2. 禁用 6379 端口;

    3. 停止 redis 服务;

    4. 删除定时任务;

    5. 删除可疑的开机启动项(如果有);

    6. 清空 /root/.ssh/authorize_keys;

    7. 停止对应的黑客进程;

    8. 删除黑客文件;

    9. 关闭服务器;

    10. 修改服务器 root 密码;

    11. 配置 ssh 设置,禁用公私钥登录(看需要);

    12. 重新配置 redis 服务,开放新的 redis 服务端口;

  思路理清楚了,接下来动手操作:

    1. 登录云服务控制台,修改安全组配置,禁止对黑客服务器的访问,禁止 6379 端口;

    2. 停止 redis 服务:

      ps -ef|grep redis

      kill -9 pid

    3. 删除定时任务:

      crontab -r /var/spool/cron/root

      crontab -r /var/spool/cron/crontabs/root

      若出错:

        cat /dev/null > /var/spool/cron/root

        cat /dev/null > /var/spool/cron/crontabs/root

    4. 清空公私钥授权文件:

        cat /dev/null > /root/.ssh/authorized_keys

        cat /dev/null > /root/.ssh/known_hosts

    5. 停止对应的黑客进程:

        ps -ef|grep dznqfa

        kill -9 pid

    6. 删除黑客文件:

        rm -rf /usr/bin/dznqfa*

    7. 上控制台,关闭服务器

    8. 上控制台,修改服务器密码

    9. 开机,配置 ssh ,禁用公私钥登录

    10. 重新配置 redis,启动服务,开放新端口,重新部署应用

【附:参考文章】

  1. 查看 Linux 开机启动项:https://blog.csdn.net/zyddj123/article/details/82497640

  2. redis 安全配置,漏洞和入侵检查:https://blog.csdn.net/u011574239/article/details/78892174

  3. Linux 配置取消密钥登录:https://blog.csdn.net/u013344860/article/details/80431835

  4. ssh 私钥存放位置(本文无关):https://www.cnblogs.com/liuyanerfly/p/9668426.html

  5. Linux 查看连接相关命令:https://www.cnblogs.com/felixzh/p/7737160.html

  6. Linux 定时任务操作:https://www.cnblogs.com/cqlb/p/9772207.html

  7. 另外,我还把黑客定时任务下载的脚本拷贝下来了,也对黑客进程的连接进行了抓包(找时间分析分析哈哈,不过使用加密传输的,估计没戏),抓包命令教程:

    https://blog.csdn.net/chinaltx/article/details/87469933

    https://www.runoob.com/linux/linux-comm-tcpdump.html

  好了,下班~

    

    

    

一次腾讯云centos服务器被入侵的处理的更多相关文章

  1. 再谈腾讯云centos服务器不能登录的解决过程

    上篇文章谈到腾讯云centos服务器不能登录,通过查看监控信息,cpu使用过高,再腾讯云页面使用VNC方式直接登录,然后根据提示信息,关闭导致内存溢出的进程,从而解决问题. 1 问题再现 昨天刚解决了 ...

  2. 腾讯云centos服务器不能登录的解决过程

    在腾讯云上申请了一个centos服务器,最基础的配置,1 核 1 GB 1 Mbps,50G硬盘,主要用来测试程序,练手用.在上面配置了一个mysql数据库,一直使用都没什么问题. 1 问题描述 过了 ...

  3. 腾讯云Centos服务器部署问题

    在Centos7上部署Tomcat过程 下载并安装JDK 下载并部署Tomcat 打开Centos中对应的端口(默认80) 这几步操作很清楚,但首次使用Centos7时遇到了一个问题,外网无法访问服务 ...

  4. 使用腾讯云无服务器云函数(SCF)分析天气数据

    欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 作者:李想 无服务器云函数(SCF)是腾讯云提供的Serverless执行环境,也是国内首款FaaS(Function as a Service ...

  5. 阿里云CentOs服务器 安装与配置mysql数据库

    阿里云CentOs服务器 安装与配置mysql数据库 以上为Linux安装mysql数据库 Linux 安装mysql 数据库 一下为mysql 安装教程 Using username "r ...

  6. 腾讯云CentOS系统配置apache和tomcat

    本文使用yum软件包管理工具基于CentOS7.2版本配置apache和tom. 云服务器选购完毕后,安装Xshell软件,输入用户名密码即可远程登陆登录(centos用户名默认是root). 1,下 ...

  7. 腾讯云centos 7部署 dotnetcore+Angular2 实践

    版权声明:本文由屈政斌原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/239 来源:腾云阁 https://www.qclo ...

  8. 01: 腾讯云API-云服务器

    1.1 云服务器 1.腾讯云SDK使用举例 网址:https://cloud.tencent.com/document/sdk/Python #! /usr/bin/env python # -*- ...

  9. 腾讯云CVM服务器怎么建网站

    腾讯云云服务器CVM站在用户的角度看就相当于一台计算机,虽然实际上它是一个虚拟服务器,是一个大的云端服务器集群虚拟出来的一个虚拟服务器,在使用上直接当做一个实际的服务器即可.那么,对于一个新手菜鸟来说 ...

随机推荐

  1. leetcode 55. Jump Game、45. Jump Game II(贪心)

    55. Jump Game 第一种方法: 只要找到一个方式可以到达,那当前位置就是可以到达的,所以可以break class Solution { public: bool canJump(vecto ...

  2. asyncio与gevent并发性能测试

    asyncio与gevent并发性能测试 在对网站进行扫描或者暴破时需要对网站进行高并发操作,然而requests+concurrent多线程性能上不太理想,了解到python用得比较多的并发库有as ...

  3. Windows 操作系统 端口转发

    在Windows 下可以使用netsh interface portproxy 命令实现端口转发功能. 例:netsh interface portproxy add v4tov4 listenpor ...

  4. pycharm调用shell命令

    在pycharm中调用shell命令 1.调用普通命令 # -*- coding:UTF-8 -*- import subprocess subprocess.call(["ls /home ...

  5. sonar:api/ce/submit接口上传失败

    https://blog.csdn.net/weixin_34185320/article/details/87115268 https://ask.helplib.com/others/post_1 ...

  6. 【c# 学习笔记】接口与抽象类

    抽象类经常与接口一起使用,共同服务于面向对象的编程,这里简单地分析一下接口与抽象类的区别,如下: 1.抽象类使用abstract关键字进行定义,而接口使用interface进行定义:它们都不能进行实例 ...

  7. 【数据库开发】如何创建MySQL数据库连接池(一个基于libmysql的MySQL数据库连接池示例(C/C++版))

      http://blog.csdn.net/horace20/article/details/8087557 1.  一般架构说明 图 1 架构层次图 一般应用系统数据库访问模块可大致分为两层,一层 ...

  8. VBA实现打开Excel文件读取内容拷贝Format且加超链接

    '-------------------一覧取得----------------------------- Sub getRedmineGrid_Click() Dim wb As Workbook ...

  9. 网站架构(LNMP)

    说明: 1)LNMP架构的组成(作用) 2)LNMP架构的部署 3)LNMP架构通讯原理 4)LNMP服务之间如何建立管理 nginx+php   运维负责 php+mysql   开发负责 5) 运 ...

  10. vue+element-ui 实现table单元格点击编辑,并且按上下左右键单元格之间切换

    通过我的测试我发现两个两种方法来编辑单元格的内容 第一种点击编辑: 我是给td里添加一个input,将值赋值给input,当失去焦点的时候将input的值付给td原来的内容,然后将input删除, 代 ...