天天看點

Redis安全規範----check list

Redis安全規範—-check list.

1.信任的内網運作,盡量避免有公網通路

1

2

<code>在</code><code>/etc/redis/redis</code><code>.conf中配置如下:</code>

<code>bind 127.0.0.1</code>

2.綁定redis監聽的網絡接口

如果伺服器有多個IP,可限定redis server監聽的IP,通過redis配置項bind,可同時綁定多個IP

3.設定防火牆

如果需要其他機器通路,或者設定了slave模式,那就記得加上相應的防火牆設定,指令如下:

<code>iptables -A INPUT -s x.x.x.x -p tcp --dport 6379 -j ACCEPT</code>

4.禁止root使用者啟動redis

設定一個單獨的redis賬戶很有必要,redis crackit就利用到了root使用者的特性來重置authorized_keys。首先建立一個redis賬戶,然後通過該賬戶啟動。

<code>setsid </code><code>sudo</code> <code>-u redis </code><code>/usr/bin/redis-server</code> <code>/etc/redis/redis</code><code>.conf</code>

啟動之後應該如下:

<code>root@kali:~</code><code># ps -elf|grep redis</code>

<code>1 S redis    14720     1  0  80   0 -  8979 -      08:40 ?        00:00:00 </code><code>/usr/bin/redis-server</code> <code>/etc/redis/redis</code><code>.conf` `</code>

5.限制redis檔案目錄通路權限

設定redis的主目錄權限為700,如果redis配置檔案獨立于redis主目錄,權限修過為600,因為redis密碼明文存儲在配置檔案中.

6.避免使用熟知的端口,降低被初級掃描的風險

<code>在</code><code>/etc/redis/redis</code><code>.conf中配置如下</code>

<code>找到port 6379這行,把6379改為8888</code>

7.開啟redis密碼認證,并設定高複雜度密碼

redis在redis.conf配置檔案中,設定配置項requirepass, 開戶密碼認證。

redis因查詢效率高,auth這種指令每秒能處理10w次以上,簡單的redis的密碼極容易為攻擊者暴破。

3

4

5

<code>root@kali:~</code><code># redis-cli -h 192.168.10.2</code>

<code>redis 192.168.10.2:6379&amp;gt; keys *</code>

<code>(error) ERR operation not permitted</code>

<code>redis 192.168.10.2:6379&amp;gt; auth @nsF0cus!@</code><code>#</code>

<code>OK</code>

<code>root@kali:~</code><code># echo -e "xxlegend"|sha256sum</code>

<code>b59869cac63a67e7ee97e6923a75811ff58bd4936ed3be3480b46145d43ae335`</code>

8.禁用或者重命名危險指令

這個漏洞就利用config/save兩個指令完成攻擊 。 因redis無使用者權限限制,建議危險的指令,使用rename配置項進行禁用或重命名,這樣外部不了解重命名規則攻擊者,就不能執行這類指令。涉及到的指令:

<code>FLUSHDB, FLUSHALL, KEYS, PEXPIRE, DEL, CONFIG, SHUTDOWN, BGREWRITEAOF, BGSAVE, SAVE, SPOP, SREM, RENAME, DEBUG, EVAL`</code>

以下示例:redis.config檔案禁用FLUSHDB、FLUSHALL兩個指令;重命名CONFIG、SHUTDOWN指令,添加一個特殊的字尾。 這樣redis啟動後,隻能運作CONFIG_b9fc8327c4dee7指令,不能執行CONFIG指令。

<code>rename-</code><code>command</code> <code>CONFIG CONFIG_b9fc8327c4dee7</code>

<code>rename-</code><code>command</code> <code>SHUTDOWN SHUTDOWN_b9fc8327c4dee7</code>

<code>rename-</code><code>command</code> <code>FLUSHDB “”</code>

<code>rename-</code><code>command</code> <code>FLUSHALL “”</code>

上述配置将config,flushdb,flushall設定為了空,即禁用該指令,我們也可以命名為一些攻擊者難以猜測,我們自己卻容易記住的的名字。儲存之後,執行/etc/init.d/redis-server restart 重新開機生效。

9.禁止redis中存儲敏感的明文資料

Redis設計旨在提供高性能的KV服務,至少目前在權限通路控制和資料持久化方面比較弱化。是以禁止在Redis中存儲或緩存敏感的明文資料

10.安全監控

建立蜜罐網絡,有攻擊嘗試時,可及時發現

監控redis安全狀态,cmdstat_auth cmdstat_flushdb/flushall監控報警

題外話:

redis cluster不支援密碼問題

redis 原生cluster模式最新3.2版本都不支援開啟密碼認證,導緻内網使用隻能無密碼,隻能通過前面其他安全設定來保證内網redis cluster的安全性

針對之前redis版本,預設無bind和密碼設定存在很大安全風險,redis 3.2版本提出新特性protected mode,如果redis在啟動時,未開啟bind和密碼設定,隻能通過本地回環位址本地通路,如果嘗試遠端通路redis,會提示一下資訊:

DENIED Redis is running protected mode because protected mode is enabled,

no bind address was specified, no authentication password is requested to clients.

In this mode connections are only accepted from the loopback interface.

當然也可直接執行CONFIG SET protected mode no關閉保護模式

     本文轉自Tar0 51CTO部落格,原文連結:http://blog.51cto.com/tar0cissp/1939797,如需轉載請自行聯系原作者

繼續閱讀