欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~

自从Redis未授权问题获取Linux系统root权限的攻击方法的披露后,由于其易用性,利用该问题入侵Linux服务进行挖矿、扫描等的黑客行为一直层出不穷;而在众多利用该问题入侵服务器进行黑产行为的案例中,其中就存在一类利用该问题进行挖矿并且会利用pnscan自动扫描感染其他机器;该类攻击一直存在,不过在近期又呈现数量增加的趋势,在最近捕获到多次,我们针对其做下具体的分析

一、 背景

自从Redis未授权问题获取Linux系统root权限的攻击方法的披露后,由于其易用性,利用该问题入侵Linux服务进行挖矿、扫描等的黑客行为一直层出不穷;而在众多利用该问题入侵服务器进行黑产行为的案例中,其中就存在一类利用该问题进行挖矿并且会利用pnscan自动扫描感染其他机器;该类攻击一直存在,不过在近期又呈现数量增加的趋势,在最近捕获到多次,我们针对其做下具体的分析。

二、 漏洞说明

首先针对利用的漏洞做个说明,Redis 默认情况下,会绑定在 0.0.0.0:6379,在没有利用防火墙进行屏蔽的情况下,将会将Redis服务暴露到公网上,如果在没有开启认证的情况下,可以导致任意用户在可以访问目标服务器的情况下未授权访问Redis以及读取Redis的数据。攻击者在未授权访问Redis的情况下利用Redis的相关方法,可以成功将自己的公钥写入目标服务器的 ~/.ssh 文件夹的authotrized_keys 文件中,进而可以直接登录目标服务器;如果Redis服务是以root权限启动,可以利用该问题直接获得服务器root权限。相关漏洞详情可以参考:https://www.seebug.org/vuldb/...

经过在ZoomEye和SHODAN检索,可以发现分别众多Redis服务开放在公网上,这些服务都可能成为攻击目标。

三、 入侵分析

经过对捕获的事件进行分析,我们发现整个入侵流程大概是包含以下几个环节:

  1. 扫描开放6379端口的Linux服务器(后续感染扫描网段为1.0.0.0/16到224.255.0.0/16)
  2. 通过redis-cli尝试连接Redis并执行预置在.dat文件里的利用命令将Redis的数据文件修改为/var/spool/cron/root,然后通过在Redis中插入数据,将下载执行脚本的动作写入crontab任务
  3. 通过脚本实现以上的相关行为,完成植入并启动挖矿程序
  4. 再编译安装pnscan,继续扫描感染下一个目标

四、 脚本分析

整个入侵利用以及后续的感染的实现,最主要的功能都是基于通过Redis问题写入crontab任务中下载执行的.cmd脚本来实现的,通过对它的分析,我们基本能够得到整个流程的所有细节,这是一个base脚本,我们通过解读来分析下它的相关功能。

这部分代码只要是用作重复执行的判断,将.mxff0文件作为标记文件,如果存在该文件则代表机器上已执行脚本,直接退出,否则写.mxff0文件并进行下一步动作;

设置预置动作,在脚本退出后删除相关文件和脚本自身;

这部分主要是修改系统的配置,开头两行为关闭SELINUX;然后清空/var/spool/cron,进而判断系统DNS服务器是否存在8.8.8.8,没有则添加;接着清空系统tmp目录和删除相关文件;同时清空系统缓存,而最后修改/etc/security/limits.conf来更新系统的资源限制;

这里再进一步的增加iptables限制6379端口只允许本地访问,同时kill相关包含挖矿、redis客户端、爬虫等进程,这里的目的也比较简单,避免被其他黑客再次入侵,同时清除可能其他黑客入侵启动的进程;

清除相关登录日志、命令操作历史;

这一长串的内容主要目的是下载并编译安装pnscan,从内容中我们可以看到对于不同操作系统的判断然后安装依赖的相关模块,然后才是从github下载pnscan的源码进行编译安装;至于为什么采用编译安装的形式,猜测是出于兼容不同系统以及每次编译生成的pnscan的MD5都不一样,避免形成固定特征;

这部分主要是下载挖矿程序并重命名为.gpg,增加执行权限,执行后删除,同时重新上传到https://transfer.sh/ 获取新的链接;

而这部分内容主要是生成新的.dat文件,包含将原来.cmd脚本里的里挖矿程序的下载地址替换为上一步上传到https://transfer.sh/ 得到的新地址,还有Redis利用的相关语句;

而步主要是调用pnscan去扫描子网段1.0.0.0/16到224.255.0.0/16中开放6379端口并且操作系统为Linux的目标,然后利用redis-cli执行.dat中的命令,进行下个目标的感染;这里pnscan的-W参数值'2a 31 0d 0a 24 34 0d 0a 69 6e 66 6f 0d 0a'转换后内容'*1rn$4rnINFOrn',是向目标Redis服务发送请求获取Redis服务器的各种信息和统计数值,再通过-R参数值'6f 73 3a 4c 69 6e 75 78'(转换后内容为os:Linux)判断是否Linux系统。

最后就是收尾工作,清除相关日志和命令执行历史,同时在脚本退出的时候会触发脚本一开始用trap预置的动作,会做删除操作,删除相关文件和脚本自身(rm -rf m .cmd tmp. .r .dat $0)。通过对脚本的解读,我们基本已经清楚整个蠕虫的行为和入侵流程,也就是我们开始所描述的流程。

另外,通过阅读脚本,我们发现虽然整个入侵流程并不是多复杂,但脚本其实有很多”工程化”的细节考虑,不得不让人惊叹入侵者的”考虑周到”:

利用.mxff0文件做重复执行检验,避免脚本的重复执行

为了增加成功性,一些环境的预处理:

  1. 关闭SELINUX
  2. 增加8.8.8.8的DNS
  3. 清空tmp目录
  4. 清空系统缓存
  5. 修改系统资源限制

痕迹清除

  1. 利用trap预置动作好在脚本执行完成后删除相关文件和脚本自身
  2. 重复清除相关登录等日志和命令执行历史

同行预防

  1. 利用iptables避免Redis服务开放在公网上从而导致再次被入侵
  2. 清除同行可能遗留的入侵行为,kill相关进程

系统兼容性

  1. 判断操作系统,针对性的执行相关命令,安装依赖包,最大限度的提高pnscan编译安装的成功率
  2. 关闭SELINUX,通过setenforce和修改/etc/sysconfig/selinux两种手段实现
  3. 写入Crontab里的下载并执行脚本的任务,通过curl、wget、lynx三种方式实现
  4. Pnscan扫描增加操作系统判断,减少没有必要的感染尝试

特征去除,存活延续

  1. Pnscan采用安装编译的方式,既提高在不同系统下的兼容性,也避免形成固定的MD5特征
  2. 利用https://transfer.sh 中转,每一次感染均生成新的连接,避免固定链接形成固定特征
  3. 下载到系统的相关文件均采用随机生成的文件名

正是由于入侵者种种的”考虑周到”使得他的入侵感染的成功率能够达到的一定的层度。

五、安全建议

病毒清理和系统恢复

我们主要参考脚本的相关行为进行对应的行为恢复和删除即可:

  1. 关闭SELINUX,根据系统原环境和业务需要重新开启SELINUX
  2. 清空了/var/spool/cron,根据原先备份清空恢复
  3. 修改/etc/resolv.conf增加DNS服务8.8.8.8,如无影响可不处理,或者删除
  4. 修改了系统资源限制(/etc/security/limits.conf),可根据备份情况恢复
  5. 增加了对6379端口的Iptables规则,如果不影响业务,建议保留
  6. Kill了相关进程,检查是否包含业务所需进程,根据情况恢复
  7. 安装了相关包,具体列表见上文,可根据情况删除或者如无影响可保留
  8. 编译安装了pnscan,可删除/usr/local/bin/pnscan
  9. 清除了相关日志和tmp目录,对系统无影响,可忽略
  10. 启动了挖矿进程和pnscan扫描感染,进程:.gpg、pnscan,直接kill

还包含了一些中间文件,虽然脚本包含相关删除操作,但建议还是全局查找确认:
.mxff0、.x112、.gpg、.dat、.cmd、.r.xx.xx.o/l、tmp.xxxx

Redis服务加固

  1. 导致入侵的主要原因是Redis未授权访问问题,所以如果要扼制入侵的入口,需要针对Redis服务进行加固,避免黑客通过该途径进行入侵植入挖矿蠕虫。
  2. 如无必要,修改bind项,不要将Redis绑定在0.0.0.0上,避免Redis服务开放在外网,可以通过iptables或者腾讯云用户可以通过安全组限制访问来源
  3. 在不影响业务的情况,不要以root启动Redis服务,同时建议修改默认的6379端口,大部分针对Redis未授权问题的入侵都是针对默认端口进行的
  4. 配置AUTH,增加密码校验,这样即使开放在公网上,如果非弱口令的情况,黑客也无法访问Redis服务进行相关操作
  5. 使用rename-command CONFIG "RENAME_CONFIG"重命名相关命令,这样黑客即使在连接上未授权问题的Redis服务,在不知道命令的情况下只能获取相关数据,而无法进一步利用

其他建议

  1. 腾讯云公有云和私有云用户可以安装腾讯云主机安全产品-云镜,在被入侵植入木马后可以第一时间获得提示,及时止损
  2. 建议开通云镜专业版,可以提前检测获知服务器的安全漏洞,及时修复,避免被利用

六、 附录

IOCs

  1. 脚本 https://transfer.sh/MIpIA/tmp...
  2. 挖矿程序 https://transfer.sh/MIpIA/tmp...
  3. 矿池域名 http://jb.chakpools.com/
  4. 相关文件名 .mxff0、.x112、.gpg、.dat、.cmd、.r.xx.xx.o/l、tmp.xxxx

链接

  1. 样本https://www.virustotal.com/#/...
  2. Pnscan项目地址 https://github.com/ptrrkssn/p...
  3. 漏洞说明 https://www.seebug.org/vuldb/...
  4. 漏洞利用演示 https://v.qq.com/x/page/u0661...
  5. 云镜产品官网 https://cloud.tencent.com/pro...

问答
如何避免打开重定向漏洞和安全重定向成功登录?
相关阅读
Hadoop Yarn REST API未授权漏洞利用挖矿分析 
黑客是如何实现数据库勒索的 ?
2018云+未来峰会圆桌面对面:以网络安全之能,造国之重器

此文已由作者授权腾讯云+社区发布,原文链接:https://cloud.tencent.com/dev...

欢迎大家前往腾讯云+社区或关注云加社区微信公众号(QcloudCommunity),第一时间获取更多海量技术实践干货哦~

Linux Redis自动化挖矿感染蠕虫分析及安全建议相关推荐

  1. linux redis php,Linux下编译redis和phpredis的方法

    这篇文章主要介绍了Linux下编译redis和phpredis的方法,分析了redis的下载,编译,安装及遇到的问题与相应的解决方法,需要的朋友可以参考下 本文讲述了Linux下编译redis和php ...

  2. 工作用到的 cmd git docker linux redis k8s 命令

    工作用到的 cmd git docker linux redis k8s 命令 cmd git docker 常用命令 保存镜像 加载镜像 pom 文件配置打包到容器的内容 容器和服务器间拷贝文件 l ...

  3. Redis 数据结构-字典源码分析

    2019独角兽企业重金招聘Python工程师标准>>> 相关文章 Redis 初探-安装与使用 Redis 数据结构-字符串源码分析 本文将从以下几个方面介绍 前言 字典结构图 字典 ...

  4. linux C函数之strdup函数分析【转】

    本文转载自:http://blog.csdn.net/tigerjibo/article/details/12784823 linux C函数之strdup函数分析 一.函数分析 1.函数原型: [c ...

  5. unix amp; linux oralce用户 内存使用情况分析

    Linux*********************************************************************************************** ...

  6. ARM linux的启动部分源代码简略分析

    ARM linux的启动部分源代码简略分析 以友善之臂的mini2440开发板为平台,以较新的内核linux-2.6.32.7版本为例,仅作说明之用. 当内核映像被加载到RAM之后,Bootloade ...

  7. linux redis 启动警告解决方法

    如果启动前不对linux内核做任何更改,那么redis启动会报出警告,共三个:如下图所示 第一个警告:The TCP backlog setting of 511 cannot be enforced ...

  8. Linux与JVM的内存关系分析

    Linux与JVM的内存关系分析 原文出处: 美团技术团队 引言 在一些物理内存为8g的服务器上,主要运行一个Java服务,系统内存分配如下:Java服务的JVM堆大小设置为6g,一个监控进程占用大约 ...

  9. Linux五种IO模型性能分析

    转载:http://blog.csdn.net/jay900323/article/details/18141217     Linux五种IO模型性能分析 目录(?)[-] 概念理解 Linux下的 ...

最新文章

  1. 了解一下MongoDB中的写关注(write concern)
  2. 牛客网_PAT乙级_1019旧键盘 (20)
  3. 存储安全与数据恢复基础手册-服务器篇
  4. MyBatis中的原理
  5. profile、服务、特征、属性之间的关系
  6. Homework2-project review score of each team
  7. ElasticSearch基本查询一(英文分词)
  8. 学习指南!美国java程序员要求
  9. Java菜鸡的学习日常——2021华为软挑(练手)
  10. Maple 教程(一)---初认识
  11. 深入理解JVM虚拟机1:JVM内存的结构与消失的永久代
  12. laravel 下载使用
  13. python代码库-这7个开源的Python库,让你轻松代码分析
  14. Mac SecureCRT安装、破解和使用(mac版)
  15. 有哪些测试反应速度的软件,用批处理实现的反应速度测试工具
  16. pr cpu100%_PR插件NewBlueFX Titler Pro6.0安装教程
  17. kptr_restrict 向用户空间内核中的指针(/proc/kallsyms-modules显示value全部为0)
  18. 荒岛余生2java攻略_荒岛余生2
  19. 网络中的pvid与native vlan(本征vlan)区别以及详解
  20. 7、大话设计模式--状态模式 、适配器模式、备忘录模式、组合模式、迭代器模式

热门文章

  1. javascript乘法和加法_JS加减乘除运算
  2. 今日头条极速版怎样签到_今日头条投放广告的费用多少钱?今日头条广告投放完整流程是怎样?...
  3. oracle怎么解析sql,oracle SQL解析步骤小结
  4. 需要使用新应用以打开此steam链接_steam社区界面打不开怎么办?完美解决方法看这里...
  5. TabLayout属性详解
  6. 12日疯人认证百度云_百度云智峰会12月17日召开,央视财经对话现场要做一场高端访谈...
  7. 想知道黑苹果什么味道?来咬一口尝尝~
  8. 基于Java的RDMA高性能通信库(六):SDP - Java Socket Direct Protocol
  9. stm32f746 linux,在Linux系统下搭建STM32开发环境--Nucleo-F429ZI
  10. 2020.2idea怎么创建html模块_利用idea快速搭建一个项目