Redis數據庫安全手冊

Redis數據庫安全手冊

Redis是一個高性能的key-value數據庫,這兩年可謂火的不行。而Redis的流行也帶來一系列安全問題,不少攻擊者都通過Redis發起攻擊。本文將講解這方面的內容,包括Redis提供的訪問控制和代碼安全問題,以及可以由惡意輸入和其他類似的手段觸發的攻擊。

Redis通用安全模塊

Redis被設計成只能由可信環境的可信機器訪問。這意味著將它直接暴露在互聯網或者其他可以由不可信機器通過TCP或者UNIX SCOKET直接連接的環境中。

例如,在通常的WEB應用程序使用Redis作為數據庫,cache,或者消息系統。WEB應用程序的客戶端將查詢Redis生成頁面或執行請求或由用戶觸發。在這個例子中,WEB應用鏈接了Redis和不可信的客戶端。

這是一個特定的例子,但是一般來說,不授信的Redis鏈接應該被監控,驗證用戶輸入,再決定執行什么樣的操作。因為,Redis追求的不是最大的安全性,而是簡潔與高效。

網絡安全

Redis鏈接應該對每個受信的客戶端開放。所以,服務器運行的Redis應該只被使用Redis應用的計算機連接。在大多數直接暴露在互聯網的單個計算機,例如,虛擬化的LINUX實例(LINODE,EC2,…..)

Redis端口應該被防火墻阻止來自外部的訪問??蛻舳藨撊匀荒芡ㄟ^服務器的本地回環接口訪問Redis。注意,通過在Redis.CONF添加下面一句就可以綁定本地回環,阻止外網訪問了。

bind 127.0.0.1

因為Redis的特性,沒有對外網訪問進行限制會是一個很重大的安全問題。例如一條簡單的FLUSHALL命令就能被攻擊者用來刪除整個數據設置。

身份驗證機制

如果你們不想使用訪問限制的話,Redis提供了一個身份驗證功能,可以通過編輯Redis.CONF文件來實現它。

如果開啟了身份驗證功能,Redis將拒絕所有的未身份驗證的客戶端的所有操作??蛻舳丝梢园l送AUTH命令+密碼來驗證自己。

密碼是由系統管理員在Redis。CONFIG文件中設置的明文密碼,為了防止暴力破解攻擊他應該足夠長。原因有兩個:

Redis的執行效率非??欤獠吭O備每秒可以測試相當數量的密碼
Redis的密碼是存儲在Redis.conf文件和內部客戶端的配置中的,因此不需要管理員記住。所以可以使用相當長的密碼。

身份驗證的目標是提供第二層的安全保障。這樣當防火墻或者其他第一層的系統安全設置失效的話,一個外部設備在沒有密碼的情況下仍然不能訪問redia。

AUTH命令像其他的redia命令一樣是不加密傳輸的,所以他不能阻止攻擊者在內網的竊聽。

數據加密支持

Redis不支持加密。為了受信的客戶端可以以加密形式通過互聯網可以采用加密協議(SSL)傳輸數據。

禁用特定的命令

禁用Redis的一些命令是可行的,或者將他們改名。這樣來自客戶端的請求就只能執行有限的命令。

例如,虛擬的服務器提供商可能提供托管的Redis服務。在這種情況下,普通用戶不應該能夠調用Redis的配置命令來修改該配置實例,但提供和刪除服務的系統能夠有這樣的權限。

在這種情況下,從命令表中重命名命令或者完全隱藏命令是可能的。這個功能可用在Redis.conf配置文件里做為一個聲明。例如:

rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52

在上面的例子里,CONFIG命令被更名為一個更為陌生的名字。它也完全可以被重命名成空字符串,例如:

rename-command CONFIG ""

由精密的輸入觸發的攻擊

還有一類攻擊,攻擊者即使沒有獲得數據庫的訪問權限也可以從外部發起攻擊。一個此類攻擊的例子是通過Redis的內部函數向Redis里插入數據。

攻擊者可以通過一個web表單將一組字符串提交到一個hash的同一個堆棧,引起時間復雜度從O(1)到O(n) ,消耗更多的CPU資源,最終導致DOS攻擊。為了防止這種特定的攻擊方式,Redis為每個執行請求隨機分配hash。

Redis使用快速排序算法來執行SORT命令。目前,這個算法不是隨機的,所以通過對輸入的精細控制可能觸發命令的二次執行。

字符串轉義和NOSQL注入

Redis協議里面沒有字符串轉義相關的內容,所以在通常情況下是不存在注入的。Redis協議使用的是前綴長度的字符串,完全二進制,保證安全性。LUA腳本執行EVAL和EVALSHA命令時遵循相同的規則,因此這些命令也是安全的。

然而這回事一個非常奇怪的用例,應用程序應該避免使用LUA腳本獲取來自非信任源的字符串。

代碼安全性

在經典的Redis 設置里,客戶端可以執行所有的命令集,但是獲得的用例應該永遠不能導致有控制Redis所在系統的能力。內在的,Redis使用眾所周知的安全代碼規范來防止緩沖區溢出,格式錯誤和其它內存損壞問題。然而,客戶端擁有控制使用服務器配置命令CONFIG的能力使得其能夠改變程序的工作目錄和轉儲文件的名稱。這允許客戶端寫RDB Redis在隨機路徑寫文件。這是一個安全問題,容易導致客戶端有Redis運行非法代碼的能力。

Redis不需要root權限運行,也不建議以root權限運行。Redis的作者正在調查添加一條新的配置參數來防止CONFIG SET/GET 目錄和其他類似的運行時配置的指令的可能性。這會阻止客戶端強制服務器在任意位置寫Redis轉儲文件。

GPG key

安全研究人員可以在Github提交問題,當你感覺這個安全問題真的很重要,在文檔的末尾加上GPG標識。

-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.13 (Darwin)

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
vI1sAEeV6ZM/uc4CDI3E2TxEbQ==

Key fingerprint

pub   4096R/0E5C88D6 2013-11-07 [expires: 2063-10-26]
      Key fingerprint = E5F3 DA80 35F0 2EC1 47F9  020F 3181 3728 0E5C 88D6
      uid                  Salvatore Sanfilippo <antirez@gmail.com>
      sub   4096R/3B34D15F 2013-11-07 [expires: 2063-10-26]

[原文地址,ubuntu翻譯及編輯,轉載須注明來自FreeBuf黑客與極客(FreeBuf.COM)]

原創文章,作者:stanley,如若轉載,請注明出處:http://www.www58058.com/970

(0)
stanleystanley
上一篇 2015-03-12 13:08
下一篇 2015-03-12 14:13

相關推薦

  • shell腳本之函數相關

       本節主要是作業和select 與case的相關 一、作業 1、斐波那契數列又稱黃金分割數列,因數學家列昂納多·斐波那契以兔子繁殖為例子而引入,故又稱為“兔子數列”,指的是這樣一個數列:0、1、1、2、3、5、8、13、21、34、……,斐波納契數列以如下被以遞歸的方法定義:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-…

    Linux干貨 2016-08-22
  • 磁盤管理(二)Raid與LVM邏輯卷

    概述:本章主要講解raid和邏輯卷 什么是RAID RAID:Redundant Arrays of Inexpensive(Independent) Disks 1988年由加利福尼亞大學伯克利分校( University ofCalifornia-Berkeley) “ A Case for RedundantArrays of Inexpensive …

    Linux干貨 2016-09-05
  • Linux的哲學思想

    Linux的哲學思想 一切皆文件 不管是普通的文件、目錄,還是跟硬件相關的字符設備、塊設備、套接字等在Linux中都被當作文件來進行統一的操作管理。 單個程序完成簡單的功能,復雜的功能由多個程序組合而成 單個程序只實現簡單功能,保證了其高效運行,而復雜功能由多個簡單程序組合而成,也能保證一定的高效性。 盡量避免與用戶交互 程序從啟動開始到結束不需要用戶參與,…

    Linux干貨 2017-07-02
  • useradd命令

    useradd創建用戶 使用格式: useradd[options] LOGIN -c:備注信息保存在passwd的備注欄中。 -d:用戶登入時的主目錄 -e:賬號的失效日期,缺省表示永久有效。 -f:密碼過期后多少天關閉該賬號。 -g:用戶所屬組。 -G:用戶所屬的附加群組。 -m:自動創建用戶的登入目錄。 -M:不要自動創建用戶的登入目錄。 -n:取消創…

    Linux干貨 2017-12-20
  • SELinux在httpd服務端中的使用

    一、啟用SELinux策略并安裝httpd服務,改變網站的默認主目錄為/website,添加SELinux文件標簽規則,使網站可訪問(以CentOS7系統操作) 1、首先查看本系統是否已經安裝httpd服務 2、查看httpd的配置文件所在路徑 3、創建主目錄為/website與網頁文件"index.html",并更改httpd服務為該路…

    Linux干貨 2016-09-16
  • sed

    簡介     sed 是一種流編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在臨時緩沖區中,稱為“模式空間”(pattern space),接著用sed命令處理緩沖區中的內容,處理完成后,把緩沖區的內容送往屏幕。接著處理下一行,這樣不斷重復,直到文件末尾。文件內容并沒有 改變,除非你使用重定向存儲輸出。Sed主…

    Linux干貨 2016-03-22
欧美性久久久久