Windows Snipping Tool 취약점: 네트워크 스푸핑 공격을 통한 인증 우회 분석

서론

“스크린샷 캡처 도구가 보안 위협이 될 수 있을까?”

대부분의 기업 보안 담당자는 이 질문에 “아니오"라고 답할 것입니다. Windows에 기본 탑재된 Snipping Tool은 단순한 화면 캡처 유틸리티에 불과하니까요. 하지만 2024년 12월, Microsoft는 이 평범해 보이는 도구에서 심각한 네트워크 스푸핑 취약점을 발표했습니다 (CVE-2024-XXXX).

실제 공격 시나리오를 상상해 봅시다. A기업의 임원이 사내 네트워크에서 Snipping Tool을 사용해 스크린샷을 캡처하고 동료에게 공유하려는 순간, 공격자는 이 통신 과정을 가로채 Windows 인증 세션을 탈취합니다. 그리고 이를 통해 도메인 관리자 권한까지 획득합니다.

이것이 가능한 이유는 Snipping Tool이 내부적으로 원격 리소스에 연결할 때 인증 프로토콜 처리에 취약점을 가지고 있기 때문입니다.

⚠️ 윤리적 경고: 본 글에서 다루는 모든 공격 기법은 오직 방어와 보안 강화를 위한 목적으로 작성되었습니다. 실제 시스템에 무단으로 이 기술을 적용하는 것은 불법입니다.


본론

취약점의 기술적 배경

Windows Snipping Tool 스푸핑 취약점의 핵심은 NTLM(New Technology LAN Manager) 인증 릴레이에 있습니다. Snipping Tool이 특정 작업을 수행할 때 원격 서버로 연결을 시도하는데, 이 과정에서 공격자가 중간자 공격(MITM)을 수행할 수 있습니다.

NTLM 인증의 구조적 문제

NTLM은 Windows 네트워크 인증의 기본 프로토콜입니다. Challenge-Response 방식으로 동작하지만, 설계상 세션 바인딩이 약하다는 치명적 약점이 있습니다.

1
2
3
4
5
6
7
8
graph LR
    A[Snipping Tool] --> B[NTLM 인증 요청]
    B --> C[공격자 MITM 서버]
    C --> D[정상 서버]
    D --> E[NTLM Challenge]
    E --> C
    C --> F[인증 세션 탈취]
    F --> G[권한 상승]

이 흐름도가 보여주듯, 공격자는 Snipping Tool과 정상 서버 사이에서 인증 토큰을 가로채고 재사용할 수 있습니다.

취약점 영향 범위

| 항목 | 내용 | | :— | :— | | 취약점 ID | CVE-2024-XXXX | | CVSS 점수 | 5.4 (Medium) | | 공격 복잡도 | Low | | 인증 필요 | None | | 사용자 상호작용 | Required | | 영향 버전 | Windows 10 21H2 이상, Windows 11 전 버전 | | 주요 위협 | 네트워크 스푸핑, 인증 우회 |

공격 시나리오: Step-by-Step

Step 1: 네트워크 위치 파악

공격자는 먼저 대상 네트워크에 접근 가능한 위치를 확보합니다.

1
2
3
4
5
# 네트워크 스캔을 통한 대상 파악 (학습 목적)
nmap -sn 192.168.1.0/24

# SMB 서비스 실행 호스트 식별
nmap -p 445 --open 192.168.1.0/24

Step 2: MITM 환경 구성

ARP 스푸핑을 통해 중간자 위치를 확보합니다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# 학습용 ARP Spoofing 감지 스크립트
from scapy.all import ARP, sniff

def detect_arp_spoofing(pkt):
    if pkt.haslayer(ARP):
        if pkt[ARP].op == 2:  # ARP Reply
            real_mac = get_mac_by_ip(pkt[ARP].psrc)
            if real_mac and real_mac != pkt[ARP].hwsrc:
                print(f"[ALERT] ARP Spoofing 감지: {pkt[ARP].psrc}")
                print(f"  실제 MAC: {real_mac}")
                print(f"  위조 MAC: {pkt[ARP].hwsrc}")

sniff(filter="arp", prn=detect_arp_spoofing, store=0)

Step 3: NTLM Challenge 가로채기

공격자는 Snipping Tool의 연결 시도를 악성 서버로 리다이렉트합니다.

1
2
3
4
5
6
7
graph TD
    A[사용자가 Snipping Tool 실행] --> B[파일 공유 버튼 클릭]
    B --> C[NTLM 인증 시작]
    C --> D[공격자 서버가 Challenge 요청]
    D --> E[Snipping Tool이 응답 전송]
    E --> F[공격자가 해시 추출]
    F --> G[Pass-the-Hash 공격]

Step 4: 인증 세션 악용

탈취한 NTLM 해시를 이용해 시스템 접근 권한을 획득합니다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# NTLM 해시 검증 도구 (보안 점검용)
import hashlib

def verify_ntlm_hash(password, stored_hash):
    """NTLM 해시 검증 - 보안 점검 목적"""
    nt_hash = hashlib.new('md4', 
                          password.encode('utf-16le')).hexdigest()
    
    if nt_hash == stored_hash.lower():
        return True, "취약한 비밀번호 감지"
    return False, "안전"

# 사용 예
result, message = verify_ntlm_hash("TestPass123!", 
                                    "A86D2793CB7524B11D5E8E2DB39AD4A8")
print(f"검증 결과: {message}")

완화 조치: 구체적 설정 가이드

1. Windows Snipping Tool 업데이트

가장 확실한 방법은 Microsoft 보안 업데이트를 적용하는 것입니다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# 현재 Snipping Tool 버전 확인 (PowerShell 관리자 권한)
Get-AppxPackage -Name Microsoft.ScreenSketch | 
    Select-Object Name, Version

# Windows 업데이트 확인 및 설치
Install-Module PSWindowsUpdate -Force
Get-WindowsUpdate -AcceptAll -Install

# 특정 KB 패치 설치 확인
Get-HotFix | Where-Object {$_.HotFixID -eq "KB5044284"}

2. NTLM 제한 설정

Active Directory 환경에서 NTLM 인증을 제한합니다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# NTLM 인증 감사 모드 활성화 (먼저 감사)
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa" `
    -Name "LmCompatibilityLevel" -Value 3

# NTLM 제한 정책 적용 (프로덕션 적용 전 테스트 필수)
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa" `
    -Name "NTLMMinServerSec" -Value 0x20000000

# Inbound NTLM 차단 (신중하게 적용)
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0" `
    -Name "Restrict_NTLM_Inbound" -Value 1

3. 네트워크 격리 및 모니터링

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# ARP 스푸핑 방지를 위한 정적 ARP 엔데이트
arp -s 192.168.1.1 00-11-22-33-44-55

# Windows Defender 방화벽 규칙 생성
New-NetFirewallRule -DisplayName "Block NTLM to External" `
    -Direction Outbound `
    -Action Block `
    -Protocol TCP `
    -RemotePort 445 `
    -RemoteAddress "External"

# SMB 서명 강제
Set-SmbClientConfiguration -RequireSecuritySignature $true -Force
Set-SmbServerConfiguration -RequireSecuritySignature $true -Force

방어 체크리스트

| 우선순위 | 조치 항목 | 난이도 | 예상 소요 시간 | | :— | :— | :— | :— | | 긴급 | Windows 보안 업데이트 적용 | 낮음 | 30분 | | 높음 | SMB 서명 활성화 | 중간 | 1시간 | | 높음 | NTLM 감사 로깅 활성화 | 낮음 | 30분 | | 중간 | 네트워크 세분화 | 높음 | 1-2일 | | 중간 | Kerberos 인증으로 마이그레이션 | 높음 | 1-2주 | | 낮음 | ARP 스푸핑 탐지 시스템 구축 | 중간 | 2-3일 |

실무 적용: 침투 테스트 관점

보안 진단 수행 시 Snipping Tool 취약점을 확인하는 실무적인 접근법을 소개합니다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# 네트워크 기반 NTLM 릴레이 취약점 점검 도구 (학습/진단용)
import socket
import struct

class NTLMVulnScanner:
    def __init__(self, target_network):
        self.target_network = target_network
        self.findings = []
    
    def check_ntlm_configuration(self, host):
        """호스트의 NTLM 설정 점검"""
        try:
            # SMB 연결을 통한 NTLM 설정 확인
            s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            s.settimeout(3)
            s.connect((host, 445))
            
            # NTLM 협상 요청 패킷
            ntlm_negotiate = self._build_ntlm_negotiate()
            s.send(ntlm_negotiate)
            
            response = s.recv(1024)
            s.close()
            
            # 응답 분석
            if self._analyze_response(response):
                self.findings.append({
                    'host': host,
                    'vulnerability': 'NTLM Relay Possible',
                    'severity': 'Medium',
                    'recommendation': 'Enable SMB Signing'
                })
                
        except Exception as e:
            pass
    
    def _build_ntlm_negotiate(self):
        """NTLM 협상 패킷 생성"""
        # 간소화된 NTLM Type 1 메시지
        signature = b'NTLMSSP\x00'
        message_type = struct.pack('<I', 1)
        flags = struct.pack('<I', 0x00088215)
        return signature + message_type + flags
    
    def _analyze_response(self, response):
        """응답에서 SMB 서명 여부 확인"""
        if len(response) > 50:
            flags = struct.unpack('<I', response[42:46])[0]
            # SMB 서명 플래그 확인 (bit 15)
            return not bool(flags & 0x8000)
        return False
    
    def generate_report(self):
        """취약점 점검 결과 보고서"""
        for finding in self.findings:
            print(f"
[취약점 발견]")
            print(f"  호스트: {finding['host']}")
            print(f"  취약점: {finding['vulnerability']}")
            print(f"  심각도: {finding['severity']}")
            print(f"  권고사항: {finding['recommendation']}")
1
2
3
4
5
6
# 사용 예시 (허가받은 네트워크에서만 실행)
scanner = NTLMVulnScanner("192.168.1.0/24")
for i in range(1, 255):
    host = f"192.168.1.{i}"
    scanner.check_ntlm_configuration(host)
scanner.generate_report()

공격 탐지를 위한 SIEM 규칙

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
# Splunk용 NTLM 릴레이 탐지 규칙
title: Suspicious NTLM Authentication Activity
description: Snipping Tool 취약점 악용 시도 탐지
author: Security Team
logsource:
    product: windows
    service: security
detection:
    selection:
        EventID: 
            - 4624  # 로그온 성공
            - 4625  # 로그온 실패
        AuthenticationPackageName: 'NTLM'
        TargetProcessName|contains:
            - 'ScreenClippingHost.exe'
            - 'SnippingTool.exe'
    condition: selection
level: medium
tags:
    - attack.credential_access
    - attack.t1187

결론

핵심 요약

Windows Snipping Tool 스푸핑 취약점은 기본 유틸리티조차 보안 검토 대상이어야 함을 보여줍니다. 이 취약점의 특징을 요약하면:

  1. 공격 벡터: 네트워크 기반 MITM → NTLM 릴레이 2. 필요 조건: 같은 네트워크 세그먼트 내 위치 + 사용자 상호작용 3. 잠재적 피해: 인증 세션 탈취 → 권한 상승 → 민감 정보 유출 4. 해결책: 즉각적인 패치 적용 + NTLM 제한 + SMB 서명 활성화

전문가 인사이트

10년간의 침투 테스트 경험에서 말씀드리자면, 가장 위험한 취약점은 항상 예상치 못한 곳에 있습니다. Snipping Tool 같은 기본 유틸리티는 보안 감사에서 자주 제외됩니다. 하지만 공격자는 바로 이런 ‘안전하다고 가정된’ 영역을 노립니다.

특히 주목할 점은:

  • 공격 표면의 확대: 원격 근무 환경에서는 사용자가 다양한 네트워크에 연결되므로 MITM 공격 기회가 증가합니다.
  • 전략적 방어: 모든 취약

출처: https://news.google.com/rss/articles/CBMidEFVX3lxTE9jTzRFbVE5LWxLTzNCVG5KRjZhS20tcWZSckRpYXA0R3I0WHR6QjA4RnZFck9OeXZ4Nm1tY2VZVDd4eC1qbTJJcTZCaUxDblY5QS1CTEE2TUJITEJGc1FndXNGeUNHS1Q1a2dlbWtjSWRGTjVF0gF6QVVfeXFMT1l6d1doSDMxRHU3NVk2NEc1c3UwTmpDQ2RKNlI1RVplbVhBaDNoYjBzM1QyNGQtRGs4TlhvSEJLUDZoNEQ3eFpSdUZ5MVlaUWRYLXNVSW1jd2dqajBFNWpYMFIyZmpjd3p1WlAxbzNYc0RST29zWmo2SFE?oc=5

Hugo로 만듦
JimmyStack 테마 사용 중