天天看點

安全加強----十三、Redis服務安全加強一、Redis簡介二.修複方案

文章目錄

  • 一、Redis簡介
  • 二.修複方案
    • 1、網絡層加強
    • 2、設定防火牆政策
    • 3、賬号與認證
    • 4、服務運作權限最小化
    • 5、服務精細化授權
    • 6、安全更新檔

一、Redis簡介

Redis 因配置不當存在未授權通路漏洞,可以被攻擊者惡意利用。

Redis 預設情況下,會綁定在

0.0.0.0:6379

,如果沒有進行采用相關的政策,比如添加防火牆規則避免其他非信任來源 ip 通路等,這樣将會将 Redis 服務暴露到公網上,如果在沒有設定密碼認證(一般為空)的情況下,會導緻任意使用者在可以通路目标伺服器的情況下未授權通路 Redis 以及讀取 Redis 的資料。攻擊者在未授權通路 Redis 的情況下,利用 Redis 自身的提供的config 指令,可以進行寫檔案操作,攻擊者可以成功将自己的ssh公鑰寫入目标伺服器的 /root/.ssh 檔案夾的authotrized_keys 檔案中,進而可以使用對應私鑰直接使用ssh服務登入目标伺服器。

二.修複方案

1、網絡層加強

指定 Redis 服務使用的網卡:

預設情況下,Redis 監聽 127.0.0.1。如果僅僅是本地通信,請確定監聽在本地。

這種方式可以在一定程度上緩解 Redis 未授權通路的風險(例外情況下,如果 Redis 以 root 使用者運作,攻擊者借助已有的 webshell,就可以利用該 Redis 來反彈 shell 以實作提權)。

redis.conf

檔案中找到

# bind 127.0.0.1

,将前面的 # 去掉,然後儲存。

注意:

該操作需要重新開機 Redis 才能生效。

修改後隻有本機才能通路 Redis,也可以指定通路源 IP 來通路 Redis。

bind 192.168.1.100 10.0.0.1
           

2、設定防火牆政策

如果正常業務中 Redis 服務需要被其他伺服器來通路,可以通過 iptables 政策,僅允許指定的 IP 來通路 Redis 服務。

iptables -A INPUT -s x.x.x.x -p tcp --dport 6379 -j ACCEPT
           

3、賬号與認證

設定通路密碼

在 redis.conf 中找到 requirepass 字段,去掉其注釋,并在後面填上需要的密碼。Redis 用戶端也需要使用此密碼來通路 Redis 服務。

打開

/etc/redis/redis.conf

配置檔案:

requirepass !QE%^E3323BDWEwwwe1839
           

確定密碼的複雜度,配置完畢後重新開機服務即可生效。

4、服務運作權限最小化

修改 Redis 服務運作賬号

請以較低權限賬号運作 Redis 服務,并禁用該賬号的登入權限。以下操作建立了一個無 home 目錄權限,且無法登入的普通賬号:

注意:該操作需要重新開機 Redis 才能生效。

5、服務精細化授權

Redis 無權限分離,其管理者賬号和普通賬号無明顯區分。攻擊者登入後可執行任意操作,是以需要隐藏以下重要指令:

FLUSHDB, FLUSHALL, KEYS,PEXPIRE, DEL, CONFIG, SHUTDOWN, BGREWRITEAOF, BGSAVE, SAVE, SPOP, SREM, RENAME,DEBUG, EVAL。
           

另外,在 Redis 2.8.1 及 Redis 3.x (低于 3.0.2) 版本下存在 EVAL 沙箱逃逸漏洞,攻擊者可通過該漏洞執行任意 Lua 代碼。

下述配置将

config/flushdb/flushall

設定為空,即禁用該指令;也可設定為一些複雜的、難以猜測的名字。

rename-command CONFIG ""
rename-command flushall ""
rename-command flushdb ""
rename-command shutdown shotdown_test
           

儲存後,執行

/etc/init.d/redis-server restart

重新開機生效。

6、安全更新檔

定期關注最新軟體版本,并及時更新 Redis 到最新版,防止新漏洞被惡意利用。

繼續閱讀