1. MS Window Exchange Serve

- 전자 메일, 연락처, 일정 등의 기능을 제공하는 협업 소프트웨어

 

1.1 Exchange Serve 구조

[사진 1] Exchange Serve 구조 및 취약점 발생 지점

 

- Exchange Serve는 사용자 UI를 담당하는 Front-End와 로직을 담당하는 Back-End로 구성

- Front-End로 들어온 사용자 요청은 내부 처리 과정을 거쳐 1:1로 연결된 Back-End의 모듈로 전송

> 각 요청마다 처리하는 모듈이 다르며 각 모듈은 동일한 하나의 모듈을 상속받아 특성에 맞게 추가 구현됨

 

2. 취약점 [2]

[사진 2] https://nvd.nist.gov/vuln/detail/CVE-2021-26855 [1]

 

- Exchange 서버에서 입력값 검증이 미흡하여 발생하는 SSRF 취약점으로 Exchange 서버로 인증이 가능

> 영향받는 버전: Microsoft Exchange Server 2013, 2016, 2019

> 공격자는 해당 공격을 통해 Exchange 서버에 접근할 수 있는 일부 권한 획득추가적인 공격을 진행

CVE 설명
CVE-2021-26857 Exchange 서버에서 안전하지 않은 역직렬화로 인해 발생하는 임의코드실행 취약점
CVE-2021-27065 Exchange 서버에서 발생하는 임의파일쓰기 취약점
CVE-2021-26858

[사진 3] 취약점 악용 과정 요약 [3]

2.1 CVE-2021-26855

- Front-End로 들어온 사용자의 요청을 Back-End로 전달 하기위해 ProxyRequestHandler 모듈을 사용 [4]

사용자 접속 페이지 사용자 요청 처리 모듈 최상위 모듈
/owa OwaProxyRequestHandler ProxyRequestHandler
/ews EwsProxyRequestHandler
/ecp EcpProxyRequestHandler

 

- ProxyRequestHandler.GetTargetBackEndServerUrl() 메서드
> urlAnchorMailbox의 값이 Null일 경우 Back-End의 Host 값을 this.AnchoredRoutingTarget.BackEndServer.Fqdn에서 가져옴

protected virtual Uri GetTargetBackEndServerUrl() {
    this.LogElapsedTime("E_TargetBEUrl");
    Uri result;
    try {
        UrlAnchorMailbox urlAnchorMailbox = this.AnchoredRoutingTarget.AnchorMailbox as UrlAnchorMailbox;
        if (urlAnchorMailbox != null) {
            result = urlAnchorMailbox.Url;
        } else {
            UriBuilder clientUrlForProxy = this.GetClientUrlForProxy();
            clientUrlForProxy.Scheme = Uri.UriSchemeHttps;
            clientUrlForProxy.Host = this.AnchoredRoutingTarget.BackEndServer.Fqdn;
            clientUrlForProxy.Port = 444;
            if (this.AnchoredRoutingTarget.BackEndServer.Version < Server.E15MinVersion) {
                this.ProxyToDownLevel = true;
                RequestDetailsLoggerBase<RequestDetailsLogger>.SafeAppendGenericInfo(this.Logger, "ProxyToDownLevel", true);
                clientUrlForProxy.Port = 443;
            }
            result = clientUrlForProxy.Uri;
        }
    }
    finally {
        this.LogElapsedTime("L_TargetBEUrl");
    }
    return result;
}

 

- /owa에서 사용자 요청이 올 경우 this.AnchoredRoutingTarget.BackEndServer 값BEResourceRequestHandler 모듈의 ResolveAnchorMailbox() 메소드를 통해 결정

> 이때, 사용자 요청에서 "X-AnonResource-Backend" 쿠키의 값을 필터링 없이 그대로 사용

> 따라서, 공격자는 해당 헤더를 접근 불가능한 내부 사이트 또는 다른 서버로 조작하여 접근이 가능하게 됨

protected override AnchorMailbox ResolveAnchorMailbox() {
    HttpCookie httpCookie = base.ClientRequest.Cookies["X-AnonResource-Backend"];
    if (httpCookie != null) {
        this.savedBackendServer = httpCookie.Value;
    }
    if (!string.IsNullOrEmpty(this.savedBackendServer)) {
        base.Logger.Set(3, "X-AnonResource-Backend-Cookie");
        if (ExTraceGlobals.VerboseTracer.IsTraceEnabled(1)) {
            ExTraceGlobals.VerboseTracer.TraceDebug<HttpCookie, int>((long)this.GetHashCode(), "[OwaResourceProxyRequestHandler::ResolveAnchorMailbox]: AnonResourceBackend cookie used: {0}; context {1}.", httpCookie, base.TraceContext);
        }
        return new ServerInfoAnchorMailbox(BackEndServer.FromString(this.savedBackendServer), this);
    }
    return new AnonymousAnchorMailbox(this);
}

 

/ecp에서 사용자 요청이 올 경우 this.AnchoredRoutingTarget.BackEndServer 값 BEResourceRequestHandler 모듈의 ResolveAnchorMailbox() 메소드를 통해 결정
> 이때, 사용자 요청에서 "X-BEResource" 쿠키의 값을 필터링 없이 그대로 사용
> 공격자는 해당 쿠키를 조작하여 내부 서버에서 계정 정보를 획득 및 악용하여 인증을 우회할 수 있음

 

2.2 CVE-2021-26857 [5]

- Exchange 서버에서 안전하지 않은 역직렬화로 인해 발생하는 임의코드실행 취약점

> 메일 서버 침투 후 해당 취약점을 이용해 관리자 권한을 획득하여 시스템을 장악

 

2.3 CVE-2021-27065 [6]

- Exchange 서버에서 발생하는 임의파일쓰기 취약점

> 메일 서버 침투 후 OAB(Offline Address Book) 설정 파일에 한줄 웹쉘을 삽입(=재설정)실행 명령을 포함한 요청을 전송웹쉘 실행

> OAB를 재설정하는 과정에서 경로 및 확장자를 검토하는 코드가 없어 공격자가 원하는 위치에 원하는 확장자로 파일 생성 가능 [4]

※ OAB : MS Exchange Server에서 제공하는 주소록 기능으로 Outlook이 Exchange Server와 통신할 때 다운 받게 되는 주소록으로, Exchange server와 통신하지 않는(오프라인) 상황에서 해당 파일을 참조

[사진 4]&nbsp;WriteFileActivity.Run()

2.4 CVE-2021-26858 [7]

- Exchange 서버에서 발생하는 임의파일쓰기 취약점

 

3. 대응방안

① 벤더사에서 제공하는 업데이트 적용 [8][9]

- 특정 쿠키 값 조작 후 접근 불가 사이트 접근 및 인증우회를 방지하기 위한 유효성 검증 코드 추가

- 웹쉘 실행을 방지하기 위해 생성되는 파일의 확장자에 .txt 확장자를 추가하는 코드 추가

 

- KISA 보호나라 보안 공지 참고 업데이트 적용 [10]

> 즉각적인 업데이트가 불가할 경우 KISA 보호나라 임시 조치 방안 참고 [11]

 

② 운영체제 및 사용중인 주요 SW의 보안 업데이트 적용
 불필요한 네트워크 서비스의 경우 중단 또는 기능 삭제
 방화벽 설정 등을 통해 외부에서 들어오는 스캐닝 등 차단
 웹쉘 업로드 여부 모니터링 및 관련 보안 SW 적용
 지속적 접근을 위한 스케줄러 등록 작업 검토
 공개된 공격도구들에 대한 시그니처를 보안장비에 등록하여 차단 또는 탐지하도록 설정
 로그 모니터링
 공개된 침해지표 등을 보안장비에 등록 등

 

4. 참고

[1] https://nvd.nist.gov/vuln/detail/CVE-2021-26855
[2] https://www.boho.or.kr/kr/bbs/view.do?bbsId=B0000127&nttId=36053&menuNo=205021
[3] https://bi-zone.medium.com/hunting-down-ms-exchange-attacks-part-1-proxylogon-cve-2021-26855-26858-27065-26857-6e885c5f197c
[4] https://chmodi.tistory.com/154
[5] https://nvd.nist.gov/vuln/detail/cve-2021-26857
[6] https://nvd.nist.gov/vuln/detail/CVE-2021-27065
[7] https://nvd.nist.gov/vuln/detail/CVE-2021-26858
[8] https://msrc.microsoft.com/blog/2021/03/multiple-security-updates-released-for-exchange-server/
[9] https://chmodi.tistory.com/157
[10] https://www.boho.or.kr/kr/bbs/view.do?bbsId=B0000133&nttId=35929&menuNo=205020
[11] https://www.boho.or.kr/kr/bbs/view.do?bbsId=B0000133&nttId=35931&menuNo=205020
[12] https://www.boannews.com/media/view.asp?idx=97934
[13] https://www.boannews.com/media/view.asp?idx=106528

+ Recent posts