취약점 분석/CVE

CVE-2026-21513: MSHTML Framework 보안 기능 우회 취약점 분석 및 Splunk SPL 탐지 쿼리

y0.0ns 2026. 7. 10. 18:52

1. 취약점 설명

Windows에 여전히 남아있는 레거시 IE 엔진(MSHTML)의 URL 검증 미흡으로, 악성 LNK 파일 하나로 브라우저 샌드박스를 탈출해 임의 코드를 실행할 수 있는 취약점. 러시아 국가 연계 해킹 그룹 APT28이 2026년 2월 Microsoft Patch Tuesday 패치 전부터 실제 공격에 활용했으며, CISA KEV에 등재됐다.


2. 취약점 개요

항목 내용
CVE 번호 CVE-2026-21513
CVSS 8.8 (High)
발표일 2026년 2월 10일 (February Patch Tuesday)
CWE CWE-693 (Protection Mechanism Failure)
영향 제품 모든 Windows 버전 (MSHTML 내장)
취약 조건 사용자가 악성 HTML 파일 또는 LNK 파일을 열었을 때
공격자 APT28 (러시아 국가 연계 위협 그룹)

MSHTML이란? Windows에 내장된 레거시 웹 렌더링 엔진. Internet Explorer의 핵심 엔진(Trident)으로, IE가 공식 종료된 이후에도 하위 호환성, Office 문서 렌더링, ActiveX 지원 목적으로 Windows 안에 여전히 남아있다. 이 때문에 IE를 사용하지 않아도 MSHTML이 포함된 어떤 컴포넌트든 취약점 트리거가 가능하다.

APT28이란? Fancy Bear라고도 불리는 러시아 군 정보기관(GRU) 연계 위협 그룹. 2016년 미국 대선 해킹, 우크라이나 침해 작전 등 국가 수준 사이버 작전을 수행하는 것으로 알려져 있다. 이번 취약점은 CERT-UA(우크라이나 침해대응팀)도 관련 캠페인을 포착했다.


3. 익스플로잇 방식

취약점의 근본 원인

취약점은 ieframe.dll 내 하이퍼링크 네비게이션을 처리하는 _AttemptShellExecuteForHlinkNavigate 함수에 존재한다. 대상 URL에 대한 검증이 불충분해 공격자가 제어하는 입력값이 ShellExecuteExW를 호출하는 코드 경로에 도달할 수 있다.

취약한 코드 흐름:
하이퍼링크 클릭
    ↓
ieframe.dll의 _AttemptShellExecuteForHlinkNavigate 실행
    ↓
URL 검증 없이 그대로 ShellExecuteExW 호출
    ↓
브라우저 샌드박스 밖에서 로컬/원격 파일 실행

패치 후:
ShellExecuteExW 호출 전
file://, http://, https:// 프로토콜 검증 추가
→ 브라우저 컨텍스트 안에서만 실행되도록 강제

APT28 실제 공격 흐름

<cite index="14-1">Akamai 연구팀이 공개한 분석에 따르면, 악성 샘플(document.doc.LnK.download)은 2026년 1월 30일 VirusTotal에 처음 제출됐으며 APT28 인프라와 연결된 것으로 확인됐다.</cite>

 
1. APT28이 악성 LNK 파일 제작
   → LNK 표준 구조 바로 뒤에 HTML 파일을 임베드

2. 이메일 첨부 또는 링크로 피해자에게 전달 (스피어피싱)
   → MITRE T1566.001 (Spearphishing Attachment)

3. 피해자가 LNK 파일 클릭
   → MITRE T1204.001 (User Execution: Malicious File)

4. LNK가 APT28 인프라(wellnesscaremed[.]com)와 통신 시작

5. 중첩 iframe과 DOM 조작으로 신뢰 경계 우회
   → Mark of the Web (MotW) 우회
   → Internet Explorer Enhanced Security Configuration (IE ESC) 우회

6. ShellExecuteExW 호출 → 브라우저 샌드박스 탈출
   → 다단계 페이로드 실행 (PrismEx 악성코드)

Mark of the Web (MotW)이란? 인터넷에서 다운로드된 파일에 Windows가 자동으로 붙이는 태그. 이 태그가 있으면 실행 시 경고창이 뜨고 제한된 보안 컨텍스트에서 실행된다. APT28은 중첩 iframe과 DOM 조작으로 이 태그의 효과를 무력화했다.

중요한 포인트: 악성 LNK 파일을 이용한 공격이 관찰됐지만, MSHTML을 임베드하는 어떤 컴포넌트든 취약점 트리거가 가능하다. LNK 피싱 외에도 Office 문서, 이메일 HTML 렌더링 등 다양한 전달 방식이 가능하다.


4. 어디서 흔적이 남는가 (로그 소스 매핑)

로그 소스 탐지 가능한 흔적
이메일 게이트웨이 로그 .lnk 파일 첨부 이메일, 악성 도메인 링크 포함 메일
프록시/웹 필터 로그 wellnesscaremed[.]com 등 APT28 C2 도메인 통신
EDR / Sysmon ShellExecuteExW 호출 후 비정상 프로세스 생성
윈도우 이벤트 로그 LNK 파일 실행, 비정상 자식 프로세스 생성
네트워크 로그 비정상 아웃바운드 연결, C2 통신 패턴
SIEM (Splunk) LNK 파일 실행 + 외부 연결 + 의심 프로세스 연계 탐지

⚠️ 탐지의 핵심 어려움 공격자가 MotW를 우회하기 때문에 파일 다운로드 기반 탐지가 어렵다. MSHTML을 임베드하는 모든 컴포넌트가 벡터가 될 수 있어 단일 탐지 포인트가 없다. 네트워크 레벨에서 C2 도메인 통신을 탐지하거나 프로세스 생성 행위 패턴을 모니터링하는 것이 현실적인 접근이다.


5. SPL 탐지 쿼리

기본형: LNK 파일 실행 후 외부 연결 탐지

 
spl
index=wineventlog OR index=sysmon
| where EventCode IN (4688, 1)
| eval is_lnk_spawn=if(match(parent_process, "(explorer\.exe|outlook\.exe|winword\.exe)") AND match(process_name, "(cmd\.exe|powershell|wscript|mshta|rundll32)"), 1, 0)
| where is_lnk_spawn=1
| stats count as spawn_count by src_host, parent_process, process_name, _time span=5m
| join type=left src_host
    [search index=firewall_logs OR index=proxy_logs
     | where direction="outbound"
     | eval suspicious_domain=if(match(dest_domain, "(wellnesscaremed|\.ru$|\.xyz$)"), 1, 0)
     | where suspicious_domain=1
     | stats count as c2_count by src_host]
| where isnotnull(c2_count)
| table src_host, parent_process, process_name, spawn_count, c2_count

쿼리 설명:

  • 이메일 클라이언트(outlook.exe), 탐색기(explorer.exe), Word(winword.exe)에서 cmd, powershell 같은 의심 프로세스가 생성되는 패턴을 탐지한다
  • LNK 파일 실행 후 주로 이 경로로 페이로드가 실행되기 때문
  • join으로 의심 프로세스 생성 + C2 도메인 통신을 연계해 공격 전후 흐름을 한번에 포착

개선형: MSHTML 기반 비정상 ShellExecute 패턴 탐지

 
spl
index=sysmon
| where EventCode=1
| eval suspicious=if(
    match(parent_process, "(iexplore|mshtml|ieframe|mshta|wscript)") AND
    match(process_name, "(cmd\.exe|powershell|certutil|bitsadmin|curl|wget)"), 1, 0)
| where suspicious=1
| stats count as exec_count by src_host, parent_process, process_name, command_line
| where exec_count >= 1
| sort -exec_count
| table src_host, parent_process, process_name, command_line, exec_count

쿼리 설명:

  • MSHTML 관련 프로세스(iexplore, mshtml, ieframe, mshta 등)가 부모 프로세스인 상태에서 cmd, powershell 같은 의심 프로세스가 자식으로 실행되면 ShellExecuteExW 악용 패턴으로 볼 수 있다
  • command_line 필드를 포함해 실제 실행된 명령어까지 확인 가능
  • Sysmon 이벤트 코드 1(프로세스 생성)이 있어야 탐지 가능

Sysmon이 없는 환경에서는? EventCode 4688(윈도우 기본 프로세스 생성 로그)로 대체 가능하지만, command_line 필드는 감사 정책에서 별도로 활성화해야 기록된다.

⚠️ 인덱스명 안내: wineventlog, sysmon, firewall_logs, proxy_logs는 예시다. 실제 환경의 인덱스명으로 변경 후 사용할 것.


IOC 기반 C2 도메인 탐지

 
spl
index=proxy_logs OR index=dns_logs OR index=firewall_logs
| search dest_domain="wellnesscaremed.com" OR dest_ip="악성IP"
| stats count as hit_count by src_ip, src_host, dest_domain, dest_ip
| sort -hit_count
| table src_ip, src_host, dest_domain, dest_ip, hit_count

APT28 관련 IOC:

 
도메인: wellnesscaremed[.]com (APT28 C2)
파일명: document.doc.LnK.download
파일 해시: aefd15e3c395edd16ede7685c6e97ca0350a702ee7c8585274b457166e86b1fa

⚠️ IOC는 APT28이 인프라를 교체하면 무효화된다. C2 도메인 기반 탐지는 보조 수단으로 활용하고, 행위 기반 탐지(쿼리 1, 2)를 병행하는 것이 더 안정적이다.


6. 오탐지 줄이는 팁

  • 정상 자동화 도구: 일부 IT 관리 도구가 outlook이나 explorer에서 powershell을 실행할 수 있다. 관리 서버 IP나 알려진 자동화 프로세스는 화이트리스트로 제외
  • 개발 환경: mshta, wscript는 정상 개발 환경에서도 쓰인다. 개발 PC IP를 별도로 처리하거나 command_line 내용으로 추가 필터링
  • C2 도메인: 탐지한 도메인이 DGA(Domain Generation Algorithm) 기반이면 패턴 매칭보다 엔트로피 분석이 더 효과적

7. 임시 대응 / 패치 정보

패치 적용: 2026년 2월 Microsoft Patch Tuesday 누적 업데이트 즉시 적용. Windows Update 또는 Microsoft Security Update Guide 참고.

즉시 적용 가능한 완화 조치:

  1. 이메일 게이트웨이에서 .lnk 첨부 차단
    • 업무상 LNK 파일을 이메일로 주고받을 이유가 거의 없음
    • 이메일 필터에서 .lnk 확장자 첨부 차단 권고
  2. MSHTML 관련 레거시 기능 비활성화
    • Internet Explorer 모드 비활성화 (Microsoft Edge 설정)
    • ActiveX 컨트롤 차단
  3. 사용자 교육
    • 출처 불명 LNK 파일, HTML 파일 클릭 금지
    • 이메일 링크로 전달된 파일 실행 시 주의

⚠️ 패치 적용이 완전한 해결책이지만, MSHTML을 임베드하는 다른 컴포넌트를 통한 변형 공격은 여전히 가능할 수 있다. 패치 후에도 행위 기반 모니터링을 유지하는 것이 중요하다.


8. 마무리 / 한계점

이 SPL 쿼리의 한계:

  • Sysmon이 설치되지 않은 환경에서는 프로세스 생성 기반 탐지 정확도가 낮아짐
  • APT28이 LNK 대신 다른 MSHTML 임베드 방식을 사용하면 parent_process 기반 필터가 우회될 수 있음
  • C2 도메인 기반 탐지는 공격자가 인프라를 교체하는 순간 무효화됨

이 취약점이 특히 흥미로운 이유는 "이미 공식 종료된 Internet Explorer의 잔재가 2026년에도 국가 수준 APT 공격의 무기가 됐다" 는 점이다. 레거시 컴포넌트는 눈에 안 보인다고 사라진 게 아니다. Windows 안에 조용히 남아있다가 이런 식으로 터진다. 이번 취약점은 레거시 코드 감사의 중요성을 다시 한번 상기시켜준다.

더 나은 탐지 방법이나 실제 운영 환경에서의 개선점이 있다면 댓글로 공유해주세요.


참고 자료: