ECS:如何防止在 ECS 3.8.0 及更新版本上出現主機標頭注入,以避免管理 API 403 錯誤和無法存取的 Grafana UI

摘要: 從 ECS 3.8.0.x 開始,已解決有關主機標頭注入的安全問題 (請參閱 STORAGE-27164 的版本資訊)。

本文章適用於 本文章不適用於 本文無關於任何特定產品。 本文未識別所有產品版本。

說明

什麼是主機標頭注入?

  • 應用程式信任使用者提供的 HTTP 主機標頭,並使用使用者提供的主機標頭重定向到另一個頁面。 
  • 攻擊者可利用此優勢,將 HTTP 主機標頭變更為惡意主機名稱,並將使用者重新導向至惡意網頁。 
注意:這只會影響透過代理或負載平衡器進行的管理 API 呼叫。它不會影響數據操作。


從 ECS 3.8.0.x 開始實施哪些變更?

作為修復的一部分,將實現一組新的 API,允許設置或取消設置允許的伺服器名稱清單。將根據該清單檢查傳入請求的主機標頭值。如果該清單中不存在主機標頭值,則請求將被拒絕。

下面是為註冊和管理接受伺服器清單而引入的一組新的 REST API。
 
資源名稱 說明
GET /acceptedservernames/ 取得接受的管理伺服器名稱清單
POST /acceptedservernames/ 建立或取代接受的管理伺服器名稱清單
PUT /acceptedservernames/ 更新接受的管理伺服器名稱清單。
DELETE /acceptedservernames/ 刪除接受的管理伺服器名稱清單

 

您在什麼情況下會受到影響?

實作在 ECS 上設定接受伺服器清單解決方案的使用案例:

升級自 升級至或安裝於上 補救措施
ECS 3.7 及更舊版本 ECS 3.8.0.x
  • 如果您要使用代理或負載均衡器將管理 API 呼叫傳送至 ECS,則必須實作解決方案。
  • 未實作解決方案代表您會收到管理 API 403 錯誤,且無法存取 Grafana UI。
ECS 3.7 及更舊版本 ECS 3.8.1.x 或更新版本
  • 如果您使用代理或負載均衡器向 ECS 發送管理 API 調用,則實施解決方案是可選的。
  • 若未實作此解決方案,便代表您仍然容易受到此漏洞的影響,且 ECS 會接受所有管理 API 呼叫。 
ECS 3.8.0.x ECS 3.8.1.x 或更新版本
  • 如果您已在 ECS 3.8.0 上實作解決方案,則解決方案在 ECS 3.8.1 或更新版本上仍會一直有效。
  • 您可以選擇還原解決方案,以允許所有 IP 進行管理 API 呼叫。
  • 如果您選擇還原解決方案,您仍然容易受到此漏洞的影響,ECS 接受所有管理 API 調用。 



什麼表示您遇到了問題?

  • 從先前的 3.8 版本進行新安裝或升級到 3.8.0.x 後,所有管理登入 API 都會失敗,並顯示 403-forbid。
  • Grafana 儀表板也可能無法存取。 


記錄會在 ECS 上顯示哪些錯誤?

"GET /login HTTP/1.1" 403 error is seen in /opt/storageos/logs/nginx/access.log and /opt/storageos/logs/objcontrolsvc.log on nodes API calls are made against.

 

解決方案摘要 (升級至 3.8.0.x 或更新版本後)

  1. 將您的 ECS xDoctor 軟體升級至最新版本。
  2. 添加外部IP清單。
  3. 不需要註冊外部伺服器,直接對 ECS 節點進行管理 API 呼叫,或使用 ECS 節點的 IP,因為連線已經成功。僅當連接通過代理伺服器或負載均衡器傳遞時,才需要執行以下過程。因此,必須將所有代理和/或負載平衡器添加到管理伺服器名稱接受清單中。


1-xDoctor 升級

  1. 將您的 ECS xDoctor 軟體升級至最新可用版本。
  1. 檢查系統上執行的 xDoctor 版本。如果版本為 4.8-87.0 或更高版本,請移至步驟“添加外部 IP 清單”。否則,請繼續執行下列步驟。
命令: 
# sudo xdoctor --version
範例:
admin@node1:~> sudo xdoctor --version
4.8-87.0
  1. 登入 Dell 支援網站,直接連線至此下載 ECS 下載位置,使用關鍵字搜尋列搜尋 xDoctor,然後按一下 xDoctor 4.8-87.0 RPM 連結以下載。若要檢視版本資訊,請直接連線至 ECS 產品頁面,然後從提供下載的側邊欄選取手冊和文件。
  2. 下載 RPM 後,請使用任何遠端 SCP 程式將檔案上傳至第一個 ECS 節點上的 /home/admin 目錄。
  3. 上傳完成後,請使用管理員將 SSH 連接至 ECS 系統的第一個節點。
  4. 使用新發佈的版本升級所有節點上的 xDoctor。  
命令:
# sudo xdoctor --upgrade --local=/home/admin/xDoctor4ECS-4.8-87.0.noarch.rpm
範例:
admin@ecs-n1:~> sudo xdoctor --upgrade --local=/home/admin/xDoctor4ECS-4.8-87.0.noarch.rpm
2022-07-04 07:41:49,209: xDoctor_4.8-83.0 - INFO    : xDoctor Upgrader Instance (1:SFTP_ONLY)
2022-07-04 07:41:49,210: xDoctor_4.8-83.0 - INFO    : Local Upgrade (/home/admin/xDoctor4ECS-4.8-84.0.noarch.rpm)
2022-07-04 07:41:49,226: xDoctor_4.8-83.0 - INFO    : Current Installed xDoctor version is 4.8-86.0
2022-07-04 07:41:49,242: xDoctor_4.8-86.0 - INFO    : Requested package version is 4.8-84.0
2022-07-04 07:41:49,242: xDoctor_4.8-86.0 - INFO    : Updating xDoctor RPM Package (RPM)
2022-07-04 07:41:49,293: xDoctor_4.8-86.0 - INFO    :  - Distribute package
2022-07-04 07:41:50,759: xDoctor_4.8-86.0 - INFO    :  - Install new rpm package
2022-07-04 07:42:04,401: xDoctor_4.8-86.0 - INFO    : xDoctor successfully updated to version 4.8-87.0
  1. 如果環境是多機架 VDC,則必須在每個機架的第一個節點上安裝新的 xDoctor 套件。若要識別這些機架主體,請執行下列命令。在此例項中,會反白顯示四個機架和四個機架主體
  1. 尋找機架主要節點 (下方以粗體反白顯示)。
命令:
# svc_exec -m "ip address show private.4 |grep -w inet"
範例:
admin@ecsnode1~> svc_exec -m "ip address show private.4 |grep -w inet"
svc_exec v1.0.2 (svc_tools v2.1.0)                 Started 2021-12-20 14:03:33
 
Output from node: r1n1                                retval: 0
    inet 169.254.1.1/16 brd 169.254.255.255 scope global private.4
 
Output from node: r2n1                                retval: 0
    inet 169.254.2.1/16 brd 169.254.255.255 scope global private.4
 
Output from node: r3n1                                retval: 0
    inet 169.254.3.1/16 brd 169.254.255.255 scope global private.4
 
Output from node: r4n1                                retval: 0
    inet 169.254.4.1/16 brd 169.254.255.255 scope global private.4
  1. 將套件從系統的第一個節點 (R1N1) 複製到下列其他機架主體:
範例:
admin@ecs-n1: scp xDoctor4ECS-4.8-87.0.noarch.rpm 169.254.2.1:/home/admin/
xDoctor4ECS-4.8-84.0.noarch.rpm                                                                                                                        100%   32MB  31.9MB/s   00:00
admin@ecsnode1~> scp xDoctor4ECS-4.8-87.0.noarch.rpm 169.254.3.1:/home/admin/
xDoctor4ECS-4.8-84.0.noarch.rpm                                                                                                                        100%   32MB  31.9MB/s   00:00
admin@ecsnode1~> scp xDoctor4ECS-4.8-87.0.noarch.rpm 169.254.4.1:/home/admin/
xDoctor4ECS-4.8-87.0.noarch.rpm                                                                                                                        100%   32MB  31.9MB/s   00:00
admin@ecsnode1~>
  1. 根據上述步驟 1,在先前識別的上述每個機架主體上執行相同的 xDoctor 安裝命令。 
命令:
# sudo xdoctor --upgrade --local=/home/admin/xDoctor4ECS-4.8-87.0.noarch.rpm


2-A 新增外部 IP 清單。

  • 管理使用者必須以安全性管理員角色執行此活動。在下面的示例中,我們使用 root 使用者,因為該使用者還具有安全管理功能。
  • 可在 ECS VDC 上的任何節點上完成。
  • 在具有多個 VDC 的聯合中,必須在聯合中的所有 VDC 升級後執行。然後可以將該過程應用於每個 VDC。
  • 注意:允許清單會在聯盟 VDC 之間複製,因此在一個集群上添加允許清單條目會將這些條目複製到另一個集群,並覆蓋另一個集群上已添加的任何內容
  • 如果使用者不是安全管理員,或使用錯誤的憑據,該工具將引發“401 - 未經授權”異常。
  1. 準備要新增至信任清單的伺服器名稱 (IP、主機名稱和 FQDN) 清單。將清單合併到一個檔中,每行都有一個伺服器名稱。如果管理網路是分開的,則管理節點的 FQDN 也應新增至信任清單。許多客戶可能需要添加節點的名稱;兩者都使用svc_exec「hostname -s」進行短svc_exec並使用主機名稱的長型
若要檢查網路分隔是否要進行管理,請執行以下步驟,然後搜尋反白顯示的「mgmt」。

命令:
# getrackinfo -n
範例:
#getrackinfo -n
Named networks
==============
Node ID       Network          Ip Address        Netmask            Gateway            VLAN               Interface
1            mgmt              1xx.xxx.xx.xxx    255.25x.xxx.x      19x.xxx.xx.x       xxx                public
1            mgmt              1xx.xxx.xx.xxx    255.25x.xxx.x      19x.xxx.xx.x       xxx                public
1            mgmt              1xx.xxx.xx.xxx    255.25x.xxx.x      19x.xxx.xx.x       xxx                public
1            mgmt              1xx.xxx.xx.xxx    255.25x.xxx.x      19x.xxx.xx.x       xxx                public
1            mgmt              1xx.xxx.xx.xxx    255.25x.xxx.x      19x.xxx.xx.x       xxx                public
1            mgmt              1xx.xxx.xx.xxx    255.25x.xxx.x      19x.xxx.xx.x       xxx                public
下面範例包含伺服器名稱清單(替換為真實名稱)。
# cat trust.server.list
ecs1-n1
ecs1-n1.dell.com
ecs1-n2
ecs1-n2.dell.com
ecs1-n3
ecs1-n3.dell.com
ecs1-n4
ecs1-n4.dell.com 
ecs1-n5
ecs1-n5.dell.com 
Load_balancer1_IP
Load_balancer1_Hostname
Load_balancer1_FQDN
Load_balancer2_IP
Load_balancer2_Hostname
Load_balancer2_FQDN
  1. 檢查記錄以確認伺服器名稱是否有任何 403 錯誤:  

            命令: 

svc_log -f 'ERROR  HostHeaderAcceptListFilter.java' -sr objcontrolsvc -start '2 hours ago'

            範例:

# svc_log -f 'ERROR  HostHeaderAcceptListFilter.java' -sr objcontrolsvc -start '2 hours ago'
svc_log v1.0.31 (svc_tools v2.13.1)                 Started 2023-10-10 18:00:11

Running on nodes:              <All nodes>
Time range:                    2023-10-13 17:00:00 - 2023-10-13 18:11:47
Filter string(s):              'ERROR  HostHeaderAcceptListFilter.java'
Show filename(s):              True
Show nodename(s):              True
Search reclaim logs (if any):  False

169.254.1.1 objcontrolsvc.log 2023-10-10T17:00:07,188 [qtp47151359-4412] ERROR  HostHeaderAcceptListFilter.java (line 81) The host header server name didn't match the accepted list ecsdev1-m1
169.254.1.1 objcontrolsvc.log 2023-10-10T17:00:38,609 [qtp47151359-4386] ERROR  HostHeaderAcceptListFilter.java (line 81) The host header server name didn't match the accepted list ecsdev1-m1
169.254.1.1 objcontrolsvc.log 2023-10-10T17:01:07,499 [qtp47151359-4310] ERROR  HostHeaderAcceptListFilter.java (line 81) The host header server name didn't match the accepted list ecsdev1-m1
169.254.1.2 objcontrolsvc.log 2023-10-10T17:05:01,743 [qtp1754883736-3393] ERROR  HostHeaderAcceptListFilter.java (line 81) The host header server name didn't match the accepted list ecsdev1-m2
169.254.1.2 objcontrolsvc.log 2023-10-10T17:05:01,756 [qtp1754883736-3397] ERROR  HostHeaderAcceptListFilter.java (line 81) The host header server name didn't match the accepted list ecsdev1-m2
169.254.1.3 objcontrolsvc.log 2023-10-10T17:30:01,533 [qtp1289718177-2883] ERROR  HostHeaderAcceptListFilter.java (line 81) The host header server name didn't match the accepted list ecsdev1-m3
169.254.1.3 objcontrolsvc.log 2023-10-10T17:30:01,546 [qtp1289718177-2944] ERROR  HostHeaderAcceptListFilter.java (line 81) The host header server name didn't match the accepted list ecsdev1-m3
下面範例包含伺服器名稱清單(替換為真實名稱)。
# cat trust.server.list
ecs1-n1
ecs1-n1.dell.com
ecs1-n2
ecs1-n2.dell.com
ecs1-n3
ecs1-n3.dell.com
ecs1-n4
ecs1-n4.dell.com 
ecs1-n5
ecs1-n5.dell.com
ecsdev1-m1
ecsdev1-m2
ecsdev1-m3
Load_balancer1_IP
Load_balancer1_Hostname
Load_balancer1_FQDN
Load_balancer2_IP
Load_balancer2_Hostname
Load_balancer2_FQDN

使用提供 <mgmt_user>的提供清單,新增受信任的伺服器。系統會提示使用者輸入mgmt_user的密碼,輸入密碼,然後按下 Enter 鍵以繼續。

命令: 
svc_param asn add -u <mgmt_user> -p -f <server.list>
範例:
# svc_param asn add -u root -p -f trust.server.list
Password:
svc_param v1.1.3 (svc_tools v2.7.0)                 Started 2022-11-08 19:27:16
 
add trusted servers successfully!
  1. 檢索受信任的伺服器清單。清單可以 a) 列印到螢幕上以快速檢查它是否簡短,或者 b) 保存到檔中進行備份或檢查。
  1. 將結果列印到螢幕上。系統會提示您輸入密碼,按下 Enter 鍵以繼續。
命令:
 svc_param asn list -u <mgmt_user> -p
範例:
# svc_param asn list -u root -p
Password:
svc_param v1.1.3 (svc_tools v2.7.0)                 Started 2023-10-10 19:32:58
 
Found 19 trusted servers:
 
        Load_balancer1_FQDN
        Load_balancer1_Hostname
        Load_balancer1_IP
        Load_balancer2_FQDN
        Load_balancer2_Hostname
        Load_balancer2_IP
        ecs-n1
        ecs-n1.nas2008.com
        ecs-n2
        ecs-n2.nas2008.com
        ecs-n3
        ecs-n3.nas2008.com
        ecs-n4
        ecs-n4.nas2008.com
        ecs-n5
        ecs-n5.nas2008.com
        ecsdev1-m1
        ecsdev1-m2
        ecsdev1-m3
  1. 將結果保存到檔中。系統會提示您輸入密碼,按下 Enter 鍵以繼續。
命令: 
svc_param asn list -u <mgmt_user> -p -o <output file>
範例:
# svc_param asn list -u root -p -o server.list.backup
Password:
svc_param v1.1.3 (svc_tools v2.7.0)                 Started 2022-10-10 19:38:05
 
Found 19 trusted servers:
 
Please find the result in /home/admin/server.list.backup
 
# cat /home/admin/server.list.backup
Load_balancer1_FQDN
Load_balancer1_Hostname
Load_balancer1_IP
Load_balancer2_FQDN
Load_balancer2_Hostname
Load_balancer2_IP
ecs-n1
ecs-n1.nas2008.com
ecs-n2
ecs-n2.nas2008.com
ecs-n3
ecs-n3.nas2008.com
ecs-n4
ecs-n4.nas2008.com
ecs-n5
ecs-n5.nas2008.com
ecsdev1-m1
ecsdev1-m2
ecsdev1-m3

注意:使用負載均衡器的情況下,仍然獲得相同的負載均衡器 nginx 403 Forbidden ECS 使用者介面發生錯誤,請檢查客戶是否正在使用VLAN 網路。使用 getrackinfo -n 每個步驟 1 的命令。如果是這樣,則將客戶網路中的 管理 DNS 名稱和管理 IP 位址 添加到其所有節點的信任伺服器清單中。

(如下)

範例:

# cat trust.server.list
10.x.x.1
10.x.x.2
10.x.x.3
10.x.x.4
10.x.x.5
10.x.x.6
test-n1.domain.example
test-n2.domain.example
test-n3.domain.example
test-n4.domain.example
test-n5.domain.example
test-n5.domain.example



2-B 移除外部 IP 清單。

如果您必須從受信任的清單中移除項目,系統會提示您輸入密碼,然後按 Enter 鍵繼續。A server.to.remove.list 應創建。

範例: 
# cat server.list.to.remove
Load_balancer1_Hostname
Load_balancer2_IP
要移除的指令:
 svc_param asn remove -u <mgmt_user> -p -f <server.to.remove.list>
(系統會提示您輸入密碼,按下 Enter 鍵以繼續。)

例:
# svc_param asn remove -u root -p -f server.list.to.remove
Password:
svc_param v1.1.3 (svc_tools v2.7.0)                 Started 2022-11-08 19:42:00
 
remove trusted servers successfully!

再次列出項目以確認項目已移除。 
命令: 
svc_param asn list -u root -p
(系統會提示您輸入密碼,按下 Enter 鍵以繼續。)

例:
# svc_param asn list -u root -p
Password:
svc_param v1.1.3 (svc_tools v2.7.0)                 Started 2022-11-08 19:43:19
 
Found 4 trusted servers:
 
        Load_balancer1_FQDN
        Load_balancer1_IP
        Load_balancer2_FQDN
        Load_balancer2_Hostname

其他資訊

如需有關此變更的詳細資訊與背景關係,請參閱 Dell 支援提供的下列文件:

  • ECS 3.8.0 或 ECS 3.8.1 版本資訊
  • ECS 3.8.0 或 ECS 3.8.1 管理指南
  • ECS 3.8.0 或 ECS 3.8.1 安全性指南

受影響的產品

ECS, ECS Appliance, Elastic Cloud Storage
文章屬性
文章編號: 000205031
文章類型: How To
上次修改時間: 14 11月 2024
版本:  30
向其他 Dell 使用者尋求您問題的答案
支援服務
檢查您的裝置是否在支援服務的涵蓋範圍內。