在雲端發現超過8,000個不安全的Redis 執行實例

趨勢科技發現有8,000個不安全Redis執行實例在世界各地運行著,有些甚至部署到公共雲上。這些Redis執行實例並未使用TLS加密也沒有密碼保護。根據開發者的說法,Redis原本是設計在受信任環境裡使用。如果放任其不受保護並允許其面向外部網路或整合進物聯網(IoT)裝置,則網路犯罪份子就能夠找到Redis伺服器並用來發動如SQL注入、跨站腳本、惡意檔案上傳甚至是遠端攻擊程式碼執行等攻擊。駭客還可以查看、存取和修改暴露Redis執行實例的儲存資料。過去曾發生過名為Fairware的假勒索病毒攻擊了被駭Linux伺服器上18,000個不安全的Redis執行實例

我們已經與Redis取得聯繫,他們分享了Redis有保護模式的配置,此配置自2017年7月發表的Redis 4.0就開始提供。同時也已經向下移植到之前的版本Redis 3.2.0。如果使用預設配置運行Redis而沒有設置密碼保護時就會進入保護模式。在此模式下,Redis只會回應來自Loopback介面的查詢,如果從其他IP地址連到Redis的客戶端則會收到錯誤訊息。這是種額外的保護措施來減少不安全Redis執行實例遭受外部網路連線的機會。但Redis警告說,儘管在保護模式下會發送錯誤訊息,系統管理員仍然可以忽略這些訊息,手動綁定所有介面,甚至完全停用保護模式。

Redis還分享了他們計劃在2020年4月發表的Redis 6.0穩定版,此版本會具備存取控制列表(ACL)和TLS,有可以顯著地提高Redis安全性。

什麼是Redis


Redis是Remote Dictionary Server的縮寫,是款熱門的開放原始碼記憶體內資料存放區,被用於資料庫、快取和訊息代理程式。因為Redis駐留在記憶體內,因此能夠為多種需要處理大量連線的應用程式(如聊天室和即時通、金融服務、醫療保健和遊戲等)提供短於毫秒的回應速度。

Redis擁有大量的用戶群,在本文撰寫時其官方Docker Hub映像檔已經被下載了超過10億次,並且被GitHubCraigslistTwitter等公司所使用。Redis還可以用於雲端部署,讓企業能夠利用快取來減少呼叫雲端資料庫。

它也越來越受使用微服務和容器的DevOps工程師歡迎。據報在2018年有9億個容器運行Redis,另一個知名資料庫MongoDB則為6.5億個。透過DevOps,開發人員和IT團隊可以建立合規且安全的應用程式,因此製作和部署程序的每一環節(包括像是Redis的資料架構)都必須保持安全。

深入探討不安全的Redis執行實例

我們用Shodan(熱門的連網或IoT裝置搜尋引擎)發現了部署在世界各地超過8,000個不安全的Redis執行實例。其中有些不安全Redis執行實例被部署到AWS、Azure和Google Cloud等公共雲環境。

關於Shodan的掃描結果有一點要說明:這項研究內所提及的任何雲端服務並不代表其有任何問題或漏洞,只表示可以在Shodan中進行搜尋。

不管是哪種雲端類型或部署,都必須要了解安全是種共同責任–雲端服務商負責保護基礎設施,而資料、應用程式和作業系統要由使用者保護。

Figure 1. Shodan scan results for unsecured cloud deployments of Redis — those without TLS encryption, password protection, or both — running in different cloud providers Note: We listed only the cloud providers that have 50 or more unsecured instances.
圖1. 不安全Redis雲端部署(不具備TLS加密或密碼保護)的Shodan掃描結果,出現在各個雲端服務

注意:我們只列出有超過50個不安全執行實例的雲端服務。

Figure 2. Geographical distribution of deployed unsecured Redis instances
圖2. 不安全Redis執行實例的地理分佈

Redis在官方文件內有描述到一般安全模式,裡面指出:

「Redis的設計是由受信任客戶端在受信任環境內進行連線。所以如果將Redis執行實例直接暴露在對外網路或是放在不受信任客戶端能夠直接連接Redis TCP端口或UNIX服務的環境中並不是個好作法。」

這代表不管是用於資料庫、快取或訊息系統,都建議在使用Redis時在需要處理不受信任來源所發出請求時需要使用中介程式或加上ACL。因此它不該直接連到外部網路。

Redis預設會使用TCP端口6379。類似於其他協定(如SMTP),此通訊協定使用純文字格式。它有一個TLS加密選項,不過並非Redis的預設配置。Redis使用者必須確保自己啟用了TLS。

另一個要注意的是,當Redis伺服器啟用TLS時可以確保通訊傳輸安全,讓駭客無法在資料傳輸時進行竊聽。但即使是啟用了TLS,也無法防止Redis伺服器遭受未經授權的連線。

要啟用身份認證必須設定選項requirepass,可由修改redis.conf或執行CONFIG SET requirepass password達成。但密碼是以明碼格式儲存,這代表可以讀取設定的人都可能流出密碼。設定好了以後,使用者在執行其他Redis命令前必須先用AUTH命令來對連線用密碼進行身份認證。

不過要強調的是,即使用AUTH命令設定了身份認證,如果沒有啟用TLS,仍可以能透過網路竊聽密碼。

Figure 3. An example of network traffic capture when TLS encryption is not enabled
圖3. 未啟用TLS加密時的網路流量樣本

Redis直到在2020年3月5日發布的Redis 6.0(Beta)才實作了ACL,可以允許特定使用者存取並限制非管理員使用關鍵Redis命令。為了限制一般使用者執行關鍵命令的風險,Redis建議兩種作法 – 禁用命令或將命令重新命名為難以猜到的名稱。

但我們建議禁用命令而不只是重新命名命令,因為這樣做比較安全。Redis使用者可以將命令重新命名為空字串來完全禁用。

Figure 4. Example of disabling CONFIG command using the rename-command
圖4. 使用rename-command禁用CONFIG命令的範例

當Redis伺服器對外暴露時,駭客可能會利用下列命令來攻擊Redis執行實例或依賴它們的應用程式:

此命令會執行無效的記憶體存取從而造成Redis崩潰。此命令是在開發階段用來模擬錯誤。一旦被惡意使用就可以讓駭客進行阻斷服務攻擊,因為它可以關閉任何運行中的Redis執行實例。我們認為此命令不該在開發版本中使用。

此命令會在伺服器內執行LUA腳本。不過幸運的是Redis已經有了安全措施 – LUA引擎被沙箱化且有某些功能上的限制。不會載入關鍵程式庫(如OS相關)來減少遭受遠端執行程式碼攻擊,同時還禁用了如loadfiledofile等函式,確保不能被任意讀取檔案。儘管有這些安全措施,此命令仍可能是駭客所會利用的攻擊媒介。

GET和SET命令可能被正常地用來檢索或修改資料。但如果使用不當,這些命令可能會影響到相關應用程式,如洩漏資料或修改存取權杖。

此命令可以清空或刪除所有資料庫內的所有鍵值(或標識資料庫內記錄的資料項目)。如果FLUSHALL命令被惡意或不小心使用,它可以清除整個伺服器內的所有鍵值和資料,而不只是單一資料庫(有另一個FLUSHDB可以刪除特定資料庫內的鍵值)。這可能會導致資料遺失,特別是沒有正確備份Redis上的資料時。它還可能造成應用程式出現服務錯誤。

此命令會顯示伺服器處理的連線請求,這有助於在運作期間發現錯誤。但駭客也可以用它來竊聽使用者流量及了解在電腦上進出的流量類型。當可以看到網路日誌時,駭客可以洞悉哪些機器正在收發關鍵任務檔案,並將這些資料用於惡意攻擊。

Figure 5. An example of the MONITOR command at work
圖5. MONI範例

安全建議:保護Redis執行實例

為確保Redis執行實例可以在取得效能及簡化工作優點的同時保持安全,我們建議執行以下安全步驟:

  • 確認自己要部署Redis的地方(無論是在雲端環境、Kubernetes叢集等),並確認存取角色或需要存取的人員。
  • 確保環境得到正確保護,不允許其他部署干擾Redis(如可以轉儲其程序記憶體),。
  • 使用TLS再加上密碼身份認證。
  • 密切注意命令的執行。像DEBUG SEGFAULT和MONITOR之類的命令不該在生產環境內執行。
  • 使用容器時要注意正確的網路分段。Redis執行實例不該暴露給不需存取它的其他容器。
  • 不要在前端開發使用Redis,這會將它暴露給惡意份子。Redis不應讓瀏覽器用JavaScript進行連線。我們建議應該在後端使用Redis。

同時分散式NoSQL資料庫引擎Redis Enterprise為Redis加入增強的部署架構,提供更多的安全控制以實現合規性,並提供安全建議來保護資料抵禦網路威脅。根據Redis所說,Redis Enterprise不允許使用者在沒有密碼保護下運行資料庫,並且支援TLS配置,客戶端身份認證以及其他安全功能

趨勢科技的雲端安全解決方案


趨勢科技Hybrid Cloud Security解決方案簡化了企業的安全防護,讓企業在遷移到雲端或採用DevOps時可以專注於安全性和合規性。它提供單一整合的解決方案,具備雲端安全防護所需的廣度、深度和創新能力,並且提供了對熱門環境(如Amazon Web ServicesMicrosoft AzureGoogle CloudDocker)能見度的單一平台。該解決方案具備自動部署和發現功能,廣泛的API整合及安全技術來滿足運作效率、安全防護和合規需求。


趨勢科技Cloud One SaaS平台為企業提供工作負載應用程式容器、無伺服器運算、檔案儲存系統網路的即時安全防護,並且為混合雲環境提供單一整合的能見度。


Cloud One平台還包含了Cloud One – Conformity,它會執行自動化合規檢查來確保組織遵守法規和產業標準(如PCI、GDPR、HIPAA和NIST),從而增強企業的雲端安全狀態。Cloud One – Conformity還提供了不斷成長的知識庫,裡面包括對AWSMicrosoft Azure帳號進行檢查並提供逐步解決規則來處理所有問題。Cloud Conformity具備對AWS ElasticCache的自動化控制,這是給​​Redis的記憶體內資料存放。可以確保Redis不是使用預設端口,並且在傳輸和靜止時都對資料進行加密


對尋找工作負載和容器安全防護或容器映像安全防護軟體的企業來說,趨勢科技Deep SecurityDeep Security Smart Check可以在預部署期間和運行時掃描容器映像。


@原文出處:More Than 8,000 Unsecured Redis Instances Found in the Cloud

作者:David Fiser(趨勢科技安全研究員)