Windows 바로가기(LNK)를 통한 MoTW 우회: LNK Stomping

Windows 바로가기(LNK)를 통한 MoTW 우회: LNK Stomping

개요

Windows 바로가기(LNK)는 사용자 편의를 위해 설계되었으나 초기 침투 수단으로 오랫동안 악용되어 왔다. 특히 2022년 Microsoft의 매크로 차단 정책이 강화되면서 최근 공격자들이 ISO, RAR, LNK 파일 등을 활용한 공격을 점점 더 자주 시도하는 경향을 보이고 있다. LNK는 주로 이메일 첨부나 압축 파일 내부에 위장되어 유포되며, 실행 시 PowerShell, cmd.exe, mshta.exe 등 신뢰된 시스템 도구를 호출해 정상 프로세스처럼 보이는 형태로 페이로드 실행을 이어간다.

이러한 공격을 제한하기 위해 Windows는 인터넷에서 내려받은 파일에 Mark of the Web(MoTW)이라는 메타데이터를 부여하고, 이를 근거로 SmartScreen 및 Smart App Control(SAC)이 평판/정책 검사를 수행한다. 그러나 2024년 Elastic Security Labs가 공개한 LNK Stomping은 Explorer의 경로 정규화 과정을 악용해 MoTW를 제거함으로써 상기 검사를 우회할 수 있음을 보였고, 해당 이슈는 CVE-2024-38217로 2024년 9월 10일 패치되었으며 CISA KEV에도 등재되었다. 본 글에서는 LNK Stomping의 개념과 동작 메커니즘을 정리하고, 이에 대한 보안 시사점을 제시한다.

 

LNK 파일

LNK 파일은 Windows에서 사용하는 바로가기(Shortcut) 파일 형식으로, 실제 파일이나 폴더, 프로그램의 위치를 가리키는 링크 정보를 담고 있다. Windows Shell은 LNK 파일의 구조를 해석해 지정된 대상(파일/프로그램 또는 폴더)을 실행 또는 열어준다. 이 과정에서 LNK 파일에 저장된 다양한 메타데이터와 실행 옵션들이 활용되는데, 이러한 특성이 공격자들에게 악용되는 주요 원인이 된다.

 

LNK 파일 구조

LNK 파일은 Microsoft에서 정의한 바이너리 구조를 가지고 있으며, 다음과 같은 주요 섹션으로 구성된다.

  • Shell Link Header: LNK 파일의 기본 메타데이터와 LinkFlags (후속 구조 포함 여부 지정) 포함
  • LinkTarget IDList: 대상 위치를 식별하는 Shell Item ID 목록
  • LinkInfo: 대상 파일의 위치(로컬 및 네트워크 경로), 볼륨 정보 포함
  • String Data
    • NAME_STRING: 사용자 식별용 이름
    • RELATIVE_PATH: 링크 파일 기준 대상의 상대 경로
    • WORKING_DIR: 실행 시 사용될 작업 디렉토리
    • COMMAND_LINE_ARGUMENTS: 실행 시 전달할 인수
    • ICON_LOCATION: 바로가기 아이콘의 위치
  • Extra Data: 환경 변수, 콘솔 설정, 추적 데이터 등 다양한 부가 정보 블록

[그림 1] LNK 파일 구조

 

이 중 주의 깊게 볼 섹션은 LinkTarget IDList이다.

[그림 2] LinkTarget IDList 구조

LinkTarget IDList는 LNK 파일이 실제로 가리키는 대상의 위치를 Windows Shell의 계층적 구조를 통해 정확히 표현하는 섹션이다. 이는 단순한 파일 경로 문자열이 아닌, Windows의 Shell 네임스페이스 개념을 활용한 더 정교하고 유연한 위치 지정 방식이다.

공격자들은 해당 필드의 경로 및 세그먼트 값을 비표준 형식으로 설정해 MoTW 기반 검사 흐름을 우회하도록 악용할 수 있는데, 구체적인 동작 원리와 사례는 다음 절 LNK Stomping 설명에서 살펴본다.

 

LNK Stomping

LNK Stomping은 CVE-2024-38217로 지정된 Windows의 Mark of the Web(MoTW) 보안 기능 우회 취약점을 악용하는 공격 기법이다.

Mark of the Web에 대한 자세한 내용은 Mark of the Web (MoTW) 우회 취약점 – ASEC에서 확인할 수 있다. 간단히 설명하면, MoTW는 인터넷에서 다운로드한 파일에 Zone.Identifier라는 NTFS Alternate Data Stream(ADS)을 추가하여 해당 파일의 출처를 표시하는 Windows의 메타데이터 식별자이다. 이 MoTW 레이블이 존재하는 파일들은 Windows 보안 기능인 SAC(Smart App Control) 또는 SmartScreen의 평판/정책 검사 대상이 되어, 신뢰할 수 없는 출처에서 다운로드한 파일의 실행을 경고하거나 방지하는 역할을 한다.

 

LNK Stomping 공격은 Windows 바로가기 파일(.lnk)의 실제 실행 프로그램 경로를 비정상적인 대상 경로나 내부 구조로 조작한 뒤, explorer.exe가 이를 “정규화(Canonicalization)” 과정에서 MoTW 메타데이터를 제거하도록 유도하여 보안 검사를 우회하는 원리를 악용한 것이다. 해당 과정은 다음과 같다.

  1. 비표준 경로 또는 내부 구조가 있는 LNK 파일을 클릭하여 실행
  2. explorer.exe가 LNK 파일이 가리키는 target 프로그램 경로가 비정상적인 구조인 것을 확인
  3. explorer.exe가 비표준 경로/구조를 정규화하면서 LNK를 재저장(덮어쓰기)
    1. 이때 ADS는 유지되지 않아 MoTW가 소실됨
  4. 보안 검사가 수행되기 전 MoTW 레이블이 사라져 검사 대상에서 제외되어 우회된 채 파일이 실행

 

앞서 언급한 ‘비표준 경로/구조’는 [그림 2]의 IDList 배열에 정상적으로 저장된 대상 경로 정보와 달리, LinkTargetIDList의 경로 세그먼트를 정규화 규칙에 맞지 않게 기록해 두는 방식을 의미한다. 세부 유형은 다음과 같다.

1. PathSegment 유형

  • 본래 LinkTargetIDList 하위 필드인 IDList 배열에 백슬래시(\)를 기준으로 구분된 경로 데이터가 존재
  • 그러나 경로 전체가 하나의 IDList 배열에 위치
    • [그림 3] 0x7D 오프셋: 0x32: File의 ClassType 구조체에 경로 전체를 기입하여 구조 상의 오류를 발생시킴

[그림 3] PathSegment 유형의 LNK 파일

 

2. Dot 유형

  • 실행 대상 경로 끝에 마침표(.) 를 붙여 구조 상의 오류를 발생시킴
  • 공백도 같은 동작을 유발

[그림 4] Dot 유형의 LNK 파일

 

3. Relative 유형

  • PathSegment 유형과 같이 IDList 구조를 따르지 않음
  • 실행 파일의 경로가 아닌 바로 파일명만 사용하여 구조상의 오류를 발생시킴

[그림 5] Relative 유형의 LNK 파일

 

실제 Windows의 보안 기능을 우회 가능한지 확인하기 위해서 LNK Stomping 테스트를 다음과 같은 조건으로 진행했다.

  • 환경: Windows 10 22H2 (OS 빌드 19045.3803)
    • SAC 및 SmartScreen 활성화 상태
  • LNK 생성 코드: https[:]//github.com/joe-desimone/rep-research/blob/main/lnk_stomping/lnk_stomping.py
  • LNK 행위: Powershell을 실행해 미리 입력된 인자 값으로 calc 실행
  • 두 파일 모두 MoTW 레이블이 적용된 상태

 

먼저 LNK Stomping 기법이 적용되지 않은 LNK 파일을 실행할 경우 MoTW로 인해 SAC 정책에 따라 파일 실행이 차단된다.

[그림 6] 악성 LNK 파일 실행 시 SAC 차단

 

그러나 동일한 조건에서 LNK Stomping 기법이 적용된 LNK 파일을 사용하면 실행차단 없이 의도한 행위가 실행된다.

[그림 7] LNK Stomping 공격 기법을 활용한 lnk 파일 실행 시 정상 동작

 

이후 실행된 LNK 파일의 ADS 및 Zone.Identifier를 확인해보면 MoTW 레이블이 사라진 것을 확인해볼 수 있다.

[그림 8] ADS – MoTW가 삭제된 것을 확인

 

공격 사례

공식적으로 특정 공격 그룹이 해당 취약점을 악용했다는 보고는 현재까지 확인되지 않는다. 다만 이 취약점을 처음 공개한 Elastic Security Labs의 Joe Desimone는 VirusTotal에서 LNK Stomping 패턴의 샘플을 다수 확인했고, 가장 오래된 제출본이 6년 전(2024.08.06 기준)이라고 밝혔다.

또한 CVE-2024-38217은 2024년 09월 10일에 CISA KEV 목록에 등재되어 실제 악용이 공식 확인된 상태다. Rapid7 역시 2024년 09월 10일 패치 화요일 분석에서 공개 연구 및 GitHub 익스플로잇과 함께 해당 취약점이 악용 중임을 재확인했다. 따라서 특정 그룹 귀속이 불분명하더라도, KEV 등재 취약점으로써 공격자들이 오랫동안 활용한 공격 기법이라는 사실을 알 수 있다.

 

결론

LNK 파일을 악용한 공격은 단발성 트렌드가 아닌 지속적인 위협으로 자리 잡았다. 특히 LNK Stomping과 같은 고도화된 우회 기법은 실제 공격에서 활용되며 그 위험성과 범용성을 입증하고 있다. 실제로 CVE-2024-38217이 2024년 9월 10일 CISA KEV 목록에 등재된 사실은 공격자들이 이러한 우회 기법을 실전에서 활용하고 있음을 강하게 시사한다.

LNK Stomping 연구 발표는 현장에서 수년간 악용되어 온 우회 기법이 공격 사례에 의해 밝혀진 것이 아닌 연구를 통해 역으로 규명했다는 점에서 의미가 있다. Elastic의 공개 이후 다수 매체와 데이터베이스에서 LNK Stomping이 최소 2018년부터 악용되어 왔음이 확인되었고, 해당 이슈는 CVE-2024-38217로 정식 분류되어 CISA KEV에도 등재되었다. 따라서 아직 문서화되지 않은 우회 및 조합 기법을 발굴하기 위한 행위 기반 분석과 포맷 수준의 연구가 상시적으로 필요하며, LNK처럼 익숙한 파일 유형도 컨테이너 유포 등 환경 변화에 맞춰 새로운 전술로 재활용될 수 있다는 점을 전제로 지속적인 탐지 규칙 갱신과 방어 시나리오 점검이 요구된다.

 

참고자료

AhnLab TIP를 구독하시면 연관 IOC 및 상세 분석 정보를 추가적으로 확인하실 수 있습니다. 자세한 내용은 아래 배너를 클릭하여 확인해보세요.