首页 > 技术文章 > 记一次服务器被植入挖矿脚本的解决过程

peterpoker 2018-11-27 15:36 原文

记一次服务器被植入挖矿脚本的解决过程

删除挖矿脚本和对应的进程

找出并删除对应挖矿脚本文件

1543223663997

找出进程pid,并且kill掉

1543223719352

无法kill掉的是原进程的守护进程,原进程不在它也会自动关闭,所以不用管它

1543223830109

kill掉后cpu恢复正常

1543223913146

需要检查是否有定时任务

防止挖矿脚本重新下载。

1543224143669

我这里没有,如果有可以使用以下命令删除

crontab -r

检查docker是否也有挖矿的容器在运行

检查创建的docker容器

我这里发现了很多不是我自己创建的容器,截图的都不是我自己的,需要全部删除。

1543224665856

使用以下命令删除全部不运行的容器(因为目前正在运行的只有我自己的容器,故不用担心自己的容器也被删掉)

1543225988507

检查docker镜像。

发现两个镜像是别人下载的,删除掉这两个镜像。

1543224799656

用非root用户重启docker服务

1543254907900

修复redis漏洞

修改 redis.conf 文件

1543229880990

  • 主要改端口和绑定访问ip,还有设置日志文件及其级别(用于查看访问的ip),设置访问密码
bind x.x.x.x 
port 56331
logfile "56331.log"
loglevel verbose
requirepass xxx 

备注:

bind 允许访问的ip

requirepass 验证登录的密码

  • 禁用远程修改 DB 文件地址,禁用lua脚本命令
rename-command FLUSHALL ""
rename-command CONFIG ""
rename-command EVAL ""

备注:

Redis Config Set 命令可以动态地调整 Redis 服务器的配置(configuration)而无须重启。

Redis Eval 命令使用 Lua 解释器执行脚本。

切换非root用户,不使用root用户启动redis
su hzk

保证root用户 authorized_keys 文件的安全

查看root用户ssh免密登录保存的公钥是否已经添加了别人的公钥。

如果里面存放了别人的公钥,那它就可以直接ssh登录我们的系统。

1543224483309

发现果然有别人的公钥,需要把它们都删除掉。

1543224533329

为了保证安全,您应该阻止其他用户添加新的公钥。
  • 将 authorized_keys 的权限设置为对拥有者只读,其他用户没有任何权限:
chmod 400 ~/.ssh/authorized_keys
  • 为保证 authorized_keys 的权限不会被改掉,您还需要设置该文件的 immutable 位权限:
chattr +i ~/.ssh/authorized_keys
  • 然而,用户还可以重命名 ~/.ssh,然后新建新的 ~/.ssh 目录和 authorized_keys 文件。要避免这种情况,需要设置 ~./ssh 的 immutable 权限:
chattr +i ~/.ssh
  • 修改后的文件可以lsattr查看属性
[root@study ~]# lsattr [-adR] 檔案或目錄
選項與參數:
-a :將隱藏檔的屬性也秀出來;
-d :如果接的是目錄,僅列出目錄本身的屬性而非目錄內的檔名;
-R :連同子目錄的資料也一併列出來!

设置防火墙策略

如果正常业务中Redis服务需要被其他服务器来访问,可以通过redis日志找出对方ip,然后通过设置iptables或者firewalld策略把该ip禁止访问。

修改ssh默认端口

检查sshd_config文件

1543248134440

发现sshd_config文件被修改,添加了多个ssh访问的端口,把它们删除掉

1543248764938

修改ssh访问端口

将Port改为50000

1543248179221

重启ssh服务
systemctl restart sshd.service

检查家目录是否有别人新创的用户

除红色外均不是我创建的用户

1543249802799

访问其中一个别人创建的用户家目录(frank),发现其.ssh目录下的authorized_keys已保存了对方的公钥,即对方可通过frank用户进行免密码登录。

1543251851772

删除该用户(frank)数据和家目录

而用户的数据有:

  • 用户账号/密码相关参数:/etc/passwd, /etc/shadow
  • 使用者群组相关参数:/etc/group, /etc/gshadow
  • 用户个人文件数据: /home/username, /var/spool/mail/usernam

使用如下命令即可删除上述所有。

[root@study ~]#  userdel -r frank
选项与参数:
-r :连同用户的家目录也一起删除

修改系统所有用户的密码(包括root)

建议不用root直接修改,因为root会忽略密码安全校验。

切换用户,直接用passwd命令即可修改当前用户的密码。

1543251064708

参考:

https://www.freebuf.com/column/158065.html【Redis未授权访问详解】

https://blog.csdn.net/huyuyang6688/article/details/78994909【记一次服务器被挖矿木马攻击的经历】

推荐阅读