Rediswwwxtg168com13099636600伺服器被攻擊後該如何安全加固

weixin_33766168發表於2018-11-14

一.背景描述
1.漏洞描述
Redis 因配置不當存在未授權訪問漏洞,可以被攻擊者惡意利用。

在特定條件下,如果 Redis 以 root 身份執行,黑客可以給 root 賬號寫入 SSH 公鑰檔案,直接通過 SSH 登入受害伺服器,從而獲取伺服器許可權和資料。一旦入侵成功,攻擊者可直接新增賬號用於 SSH 遠端登入控制伺服器,給使用者的 Redis 執行環境以及 Linux 主機帶來安全風險,如刪除、洩露或加密重要資料,引發勒索事件等。

2.受影響範圍

在 Redis 客戶端,嘗試無賬號登入 Redis:

1.

root@kali:~# redis-cli -h 10.16.10.2
2.

redis 10.16.10.2:6379> keys *
3.

1) "1"`
從登入結果可以看出,該 Redis 服務對公網開放,且未啟用認證。

二.修復方案
1.網路層加固

指定 Redis 服務使用的網路卡

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

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

在 redis.conf 檔案中找到 # bind 127.0.0.1,將前面的 # 去掉,然後儲存。

注意:

1、該操作需要重啟 Redis 才能生效。 2、修改後只有本機才能訪問 Redis,也可以指定訪問源 IP 來訪問 Redis。

1.

bind 192.168.1.100 10.0.0.1
2.設定防火牆策略

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

1.

iptables -A INPUT -s x.x.x.x -p tcp --dport 6379 -j ACCEPT
3.賬號與認證

設定訪問密碼

在 redis.conf 中找到 requirepass 欄位,去掉其註釋,並在後面填上需要的密碼。Redis 客戶端也需要使用此密碼來訪問 Redis 服務。

開啟 /etc/redis/redis.conf 配置檔案:

1.

requirepass !QE%^E3323BDWEwwwe1839
確保密碼的複雜度,配置完畢後重啟服務即可生效。

4.服務執行許可權最小化

修改 Redis 服務執行賬號

請以較低許可權賬號執行 Redis 服務,並禁用該賬號的登入許可權。以下操作建立了一個無 home 目錄許可權,且無法登入的普通賬號:

1.

useradd -M -s /sbin/nologin [username]
注意:該操作需要重啟 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 設定為空,即禁用該命令;也可設定為一些複雜的、難以猜測的名字。

1.

rename-command CONFIG ""
2.

rename-command flushall ""
3.

rename-command flushdb ""
4.

rename-command shutdown shotdown_test
儲存後,執行 /etc/init.d/redis-server restart 重啟生效。

6.未授權訪問漏洞的危害

1、redis資料洩露

Redis資料表裡存放企業私密資料,比如有些網站的帳號密碼、FTP的帳號密碼等。攻擊者可隨時檢視資料表內容。

2、redis資料破壞

攻擊者可修改redis資料表、增加刪除key項,比如呼叫flushall命令可以清除所有key。

3、主機系統環境洩露,為後續攻擊提供網情

比如利用info命令,可以檢視主機的相關資訊,比如作業系統環境、目錄名稱、CPU/記憶體等敏感資訊。

4、結合技術方法,可對主機進行控制

利用redis未授權漏洞,不僅對redis資料造成威脅,通過一定技術方法還能對目標主機系統進行控制,獲得主機控制權。

利用redis進行攻擊,主要是通過控制redis dump資料檔案的目錄和檔名兩個引數值。由redis.conf檔案內的dbfilename和dir兩個引數指定,其中dbfilename是檔名,dir指定了該檔案所在的目錄。例如:

dbfilename
dump
.rdb
預設值dump.rdb,dump到檔案系統中的檔名

dir /usr/
local
/redis/db
預設值./,即當前目錄,dump出的資料檔案的儲存路徑;

命令列通過config指令是現實獲取和修改。

獲取資訊。

config
get
dbfilenameconfig
get
dir
修改資訊。

config
set
dbfilenameconfig
set
dir
配合save命令,則攻擊者可以把想要的內容寫入到指定的檔案內,從而達成攻擊目的。

針對window系統:

1、通過把指令碼寫入到啟動目錄的方式,讓下次使用者登入時執行特定的指令碼。 2、通過把一句話網頁木馬(php、jsp等)寫入到web目錄的方式,控制目標系統,前提條件是能猜測到web所在目錄且該目錄可寫,好多web伺服器提供預設的web目錄,比如IIS伺服器的c:inebputwww目錄,可通過config set dir命令進行猜測目錄猜測,redis會提示該目錄是否存在。

7.安全補丁

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

相關文章