记一次愚蠢的Redis配置导致Linux服务器被恶意攻击

起因

之前Linux服务器上面一直启的Redis单机,并设置了密码。也没出现过问题。对安全这方面也不太敏感。

前天重新搭建了Redis集群(一主两从三哨兵),都只是做了最简单的配置,期初master配置中是有密码的,但是在配置slave时,没有添加配置项(因为无知,- -!),导致主从复制一直失败,索性就把master中的给注释掉了。再次重启主从复制成功了,哨兵的配置也成功启动,发现模拟故障转移也莫得问题,就认为万事大吉了。

昨天重新搭建的时候,master设置了密码(),那么salve新增配置(),哨兵新增配置()。这个在上篇博客中已经更新了最新配置。

经过

然而昨天中午的时候,收到了阿里云的邮件。通知我的服务器出现了紧急安全事件:恶意脚本代码执行

记一次愚蠢的Redis配置导致Linux服务器被恶意攻击

一看到这里,拉闸。没有配置Redis密码,bind设置的0.0.0.0,阿里云的安全组又开放了Redis端口,那简直就是请别人来攻击。对方轻轻松松获取了我的root权限。

接下来就开始去下载对方的脚本在我的服务器上面挖矿了。

记一次愚蠢的Redis配置导致Linux服务器被恶意攻击

看到这里,首先想到的是登录上服务器,先把这几个进程给kill。发现还是晚了一步。使用top命令查看,CPU的使用率已经快满了。果然已经开始搞大动作了,查看了服务器的定时任务列表,发现果然被添加了定时任务。定时去执行一个新的shell脚本。

找到了执行的脚本位置,查看了一下。瞬间懵逼了,作为一个Linux菜鸡,只能看懂简单的shell,这么长这么复杂的脚本瞬间就不想看了。心生一计,你不是要执行吗把你这些入侵文件全部rm -rf掉不就好了吗被啪啪的打脸,我使用root用户删除居然都被拒绝了。

既然这样,那就。。。哼!玉石俱焚互相伤害吧。

赶紧去备份了一些安装包文件,下载完毕后,直接在阿里云的控制台关闭掉服务器,重新安装了。

结果,因为自己的愚蠢,昨天一下午的时间都在屁颠屁颠的重新安装东西。0.0

服务器

我前后使用过腾讯云,阿里云的服务器。这里倒不是在打广告,简单的谈一谈两款服务器。

之前腾讯云的是基础版(1核1G)的,阿里云的是(2核4G)的,使用上不说了。两个服务器都被入侵过,腾讯云的被植入了木马,阿里云的被用来挖矿。因为菜(毕竟咱就是一个搞Java的死程序员,不够专业),最终的结果都是重新安装系统,重新安装软件。

从开放端口来说,阿里云是要比腾讯云安全的多。我是去年租的1年的腾讯云基础版,中途搭过MySQL数据库,Tomcat啥简单的东西,启动后无需设置,本地就可以直接访问了。这种意识直到今年趁双十一租了3年的阿里云服务器,等Tomcat启动之后,发现我本地如何都访问不了,后来才发现,还需要在阿里云的控制台-》网络与安全-》安全组中添加访问规则(端口啊,授权对象ip等等)后才能被我本地的访问到。

呐,不知道腾讯云的控制台有没有加,毕竟距离上次处理腾讯云的服务器木马也有一年了,从那之后我就再也没登录过腾讯云控制台。大概是平时也不太重视。哈哈 = =

这里就简单说一说。没有打广告的意思。挑选服务器还是看个人喜好呗。

安全意识

今天有去看了一下安全意识方面的,做个简单的总结,并不全。这种事情总不是遇到了,虽然很烦,但是也学了东西,还是可以接受的。

以下有些设置参考自阿里云控制台-》安全防范-》基线检查

  • 密码

    密码不要再使用简单的常规密码。密码很多地方,比如Linux系统登录,MySQL,Redis,等等。

  • MySQL

    • 禁用symbolic-links选项

      禁用符合链接以防止各种安全风险。

      在文件中设置(5.6以下版本设置)

    • 删除’test’数据库

      测试数据库可供所有用户访问,并可用于消耗系统资源。删除测试数据库将减少MySQL服务器的攻击面。

    • 修改默认3306端口

      降低被扫描的风险,避免使用熟知端口

    • 禁用local-infile选项

      降低通过SQL注入漏洞器读取敏感文件的能力

    • 为MySQL服务使用专用的最低特权账户

      安装MySQL时创建mysql用户(不使用root用户)

    • 禁止使用–skip-grant-tables选项启动MySQL服务

      使用此选项,导致所有客户端对所有数据库具有不受限制的访问权限

    • 确保配置了log-error选项

      启用错误日志可以提高检测针对mysql和其他关键消息的恶意尝试的能力,例如,如果错误日志未启用,则连接错误可能会被忽略。

    • 确保log-raw选项没有配置为ON

      当log-raw记录启用时,有权访问日志文件的人可能会看到纯文本密码。

    • 确保没有用户配置了通配符主机名

      避免在主机名中只使用通配符,有助于限定可以连接数据库的客户端,否则服务就开放到了公网。

      执行SQL更新语句,为每个用户指定允许连接的host范围。 1. 登录数据库,执行 ; 2. 执行语句查看HOST为通配符的用户; 3. 删除用户或者修改用户host字段,删除语句: 。更新语句:。 4. 执行SQL语句:

    • 匿名登录检查

    • 确保MYSQL_PWD环境变量未设置

      MYSQL_PWD环境变量的使用意味着MYSQL凭证的明文存储,极大增加MySQL凭据泄露风险。

  • Redis

    • 打开保护模式

      redis默认开启保护模式。要是配置里没有指定bind和密码,开启该参数后,redis只能本地访问,拒绝外部访问。

    • 禁止监听在公网

      bind 0.0.0.0,极易被入侵。

      bind 127.0.0.1或内网IP

    • 禁止使用root用户启动

      使用root用户权限去运行网络服务有风险(nginx,apache都有独立的work用户)。redis crackit 漏洞就是利用root用户的权限来替换或者增加authorized_keys,来获取root登录权限的

    • 修改默认6379端口

      降低被扫描的风险

    • 限制redis 配置文件访问权限

      redis密码存储在配置文件中,禁止不想关的用户访问修改是必要的。

    • 禁用或者重命名危险命令

      线上使用命令也是非常危险的。

上面的配置可能不全,但对于入门的小白(我)来说,暂时就收集了这些。再遇到入侵问题,继续学习呗,总不是斗智斗勇。虽然最后都是我被打败。哈哈

犹豫了很久,要不要把shell脚本给发布上来。这里就截图一下代码片段吧。有兴趣的可以私下分享。

记一次愚蠢的Redis配置导致Linux服务器被恶意攻击
记一次愚蠢的Redis配置导致Linux服务器被恶意攻击
记一次愚蠢的Redis配置导致Linux服务器被恶意攻击
记一次愚蠢的Redis配置导致Linux服务器被恶意攻击

文章知识点与官方知识档案匹配,可进一步学习相关知识CS入门技能树Linux入门初识Linux24689 人正在系统学习中

来源:弓长日含

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年11月21日
下一篇 2020年11月21日

相关推荐