ECS: 관리 API 403 오류 및 액세스할 수 없는 Grafana UI를 방지하기 위해 ECS 3.8.0 이상에서 호스트 헤더 삽입을 방지하는 방법

Summary: ECS 3.8.0.x부터 호스트 헤더 삽입과 관련된 보안 문제가 해결되었습니다(STORAGE-27164 릴리스 노트 참조).

This article applies to This article does not apply to This article is not tied to any specific product. Not all product versions are identified in this article.

Instructions

호스트 헤더 삽입이란 무엇입니까?

  • 애플리케이션은 사용자가 제공한 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
  • 프록시 또는 로드 밸런서를 사용하여 Management API 호출을 ECS로 전송하는 경우 솔루션을 반드시 구현해야 합니다.
  • 솔루션을 구현하지 않으면 관리 API 403 오류가 발생하고 Grafana UI에 액세스할 수 없습니다.
ECS 3.7 이하 ECS 3.8.1.x 이상
  • 프록시 또는 로드 밸런서를 사용하여 Management API 호출을 ECS로 전송하는 경우 솔루션 구현은 선택 사항입니다.
  • 솔루션을 구현하지 않으면 이 취약성에 계속 취약해지며 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-사용할 수 없음으로 실패합니다.
  • 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. 업로드가 완료되면 admin을 사용하여 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 패키지를 각 랙의 첫 번째 노드에 설치해야 합니다. 이러한 기본 랙을 식별하려면 아래 명령을 실행합니다. 이 예에서는 4개의 랙과 4개의 랙 프라이머리가 강조 표시되어 있습니다
  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도 신뢰 목록에 추가해야 합니다. 많은 고객이 노드 이름을 추가해야 할 수 있습니다. "hostname -s"svc_exec 사용하는 짧음과 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. 결과를 화면에 인쇄합니다. 비밀번호를 입력하라는 메시지가 나타나면 키를 눌러 계속 진행합니다.
명령:
 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. 결과를 파일에 저장합니다. 비밀번호를 입력하라는 메시지가 나타나면 키를 눌러 계속 진행합니다.
명령: 
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 주소를 모든 노드의 Trust Server List에 추가합니다.

(아래 참조)

예:

# 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>
(비밀번호를 입력하라는 메시지가 나타나면 키를 눌러 계속 진행

)본보기:
# 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
(비밀번호를 입력하라는 메시지가 나타나면 키를 눌러 계속 진행

)본보기:
# 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

Additional Information

이 변경 사항에 대한 자세한 내용 및 컨텍스트는 Dell Support에서 제공되는 다음 문서를 참조하십시오.

  • ECS 3.8.0 또는 ECS 3.8.1 릴리스 노트
  • ECS 3.8.0 또는 ECS 3.8.1 관리 가이드
  • ECS 3.8.0 또는 ECS 3.8.1 보안 가이드

Affected Products

ECS, ECS Appliance, Elastic Cloud Storage
Article Properties
Article Number: 000205031
Article Type: How To
Last Modified: 14 Nov 2024
Version:  30
Find answers to your questions from other Dell users
Support Services
Check if your device is covered by Support Services.