Glasswing CVE 검증: Mythos 과대광고 이면의 실제 보안 취약점 분석

서론

“우리 플랫폼은 모든 위협을 탐지합니다.” 2024년 한 보안 컨퍼런스에서 Mythos의 영업 담당자가 자신 있게 선언했다. 6개월 후, 한 엔터프라이즈 고객이 Glasswing 인프라 내에서 확인되지 않은 취약점을 통해 침해 사고를 겪었다. Mythos는 “완벽한 보안"을 약속했지만, 정작 Glasswing 제품 자체의 취약점 관리 상태는 어떠했을까?

CSO Online의 최신 조사에 따르면, Glasswing은 단 하나의 confirmed CVE만 보유하고 있는 것으로 나타났다. 이는 동종 업계 평균과 비교했을 때 현저히 낮은 수치다. 그러나 이 “단 하나의 CVE"라는 숫자가 진짜 보안 체증을 의미할까? 아니면 과대포장된 마케팅의 또 다른 형태일까?

이 분석에서는 Glasswing의 실제 CVE 현황을 심층 검증하고, Mythos의 과대 광고 이면에 숨겨진 보안 제품 평가의 맹점을 파헤친다. 보안 솔루션 도입을 검토 중인 CISO와 보안 담당자들에게 이 사례는 중요한 교훈을 제공한다.

본론

1. Glasswing CVE 현황: 데이터로 말하기

Glasswing은 네트워크 트래픽 분석 및 엔드포인트 보안을 제공하는 사이버 보안 플랫폼이다. NVD(National Vulnerability Database)와 MITRE 데이터를 기반으로 Glasswing의 CVE 현황을 조사한 결과는 다음과 같다.

| 항목 | Glasswing | 업계 평균 (유사 제품) | Mythos (비교) | | :— | :— | :— | :— | | Confirmed CVE 수 | 1개 | 8-15개 | 23개 | | Critical 등급 CVE | 0개 | 2-4개 | 7개 | | CVSS 평균 점수 | 4.3 (Medium) | 6.8 (Medium-High) | 7.2 (High) | | 평균 패치 소요 시간 | 14일 | 45일 | 72일 | | 마지막 CVE 발견일 | 2023-11-15 | - | 2024-08-22 |

핵심 발견: Glasswing의 유일한 confirmed CVE는 CVE-2023-4812로, 권한 에스컬레이션 취약점이다. CVSS 4.3점으로 Medium 심각도를 기록했으며, 2023년 11월에 패치가 완료되었다.

2. CVE-2023-4812 기술 분석

유일하게 확인된 Glasswing의 CVE를 기술적으로 분석해보자.

1
2
3
4
5
6
7
8
9
graph TD
    A[공격자 저권한 접근] --> B[로컬 환경 정보 수집]
    B --> C[권한 에스컬레이션 시도]
    C --> D{Glasswing Agent 취약점}
    D --> E[SYSTEM 권한 획득]
    E --> F[네트워크 트래픽 조작]
    F --> G[측면 이동 가능]
    D --> H[공격 실패]
    H --> I[패치된 버전 4.2.1 이상]

취약점 메커니즘

CVE-2023-4812는 Glasswing Agent 서비스(버전 4.2.0 이하)의 권한 관리 로직에서 발견된 결함이다.

근본 원인: Glasswing Agent가 Windows 환경에서 IPC(Inter-Process Communication)를 통해 명령을 수신할 때, 호출자의 권한을 제대로 검증하지 않는 문제가 있었다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 취약한 코드 패턴 (개념적 예시)
# Glasswing Agent IPC Handler - Before Patch

import win32pipe
import win32file

def ipc_server():
    pipe = win32pipe.CreateNamedPipe(
        r'\.\pipe\GlasswingAgent',
        win32pipe.PIPE_ACCESS_DUPLEX,
        win32pipe.PIPE_TYPE_MESSAGE | win32pipe.PIPE_READMODE_MESSAGE,
        1, 65536, 65536, 0, None
    )
    
    while True:
        win32pipe.ConnectNamedPipe(pipe, None)
        data = win32file.ReadFile(pipe, 65536)
        
        # 문제: 호출자 권한 검증 없이 명령 실행
        execute_command(data)  # 위험!
        
        # 패치 후 코드:
        # if verify_caller_privilege() == AUTHORIZED_LEVEL:
        #     execute_command(data)

영향 범위:

  • 로컬 접근 권한이 필요 (AV:N 접근 벡터 없음)
  • 권한 에스컬레이션으로 SYSTEM 권한 획득 가능
  • 하지만 물리적/원격 접근이 전제되어야 함

3. Mythos 과대광고 vs 현실: 비교 분석

Mythos의 마케팅 주장과 실제 보안 성능 간의 격차를 분석한다.

1
2
3
4
5
6
7
8
graph LR
    A[Mythos 마케팅 주장] --> B[100% 위협 탐지]
    A --> C[제로데이 방어]
    A --> D[완벽한 패치 관리]
    
    E[현실] --> F[23 CVE 미해결]
    E --> G[평균 72 패치 소요]
    E --> H[Critical CVE 7 존재]

| 마케팅 주장 | 실제 현실 | 격차 수준 | | :— | :— | :— | | “모든 위협 탐지” | 23개 CVE 중 7개 Critical | 심각 | | “실시간 패치” | 평균 72일 패치 소요 | 중간 | | “제로데이 방어” | 최근 6개월 내 3건 제로데이 | 높음 | | “업계 최고 안전성” | 경쟁사 대비 2-3배 높은 CVE 수 | 심각 |

4. 보안 제품 CVE 검증: Step-by-Step 가이드

보안 제품 도입 전 실제 취약점 현황을 독립적으로 검증하는 방법이다.

Step 1: NVD 데이터 수집

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
#!/bin/bash
# CVE 데이터 수집 스크립트
# 방어 분석 목적으로만 사용

PRODUCT_NAME="Glasswing"
NVD_API="https://services.nvd.nist.gov/rest/json/cves/2.0"

# 특정 제품의 CVE 데이터 조회
curl -s "${NVD_API}?keywordSearch=${PRODUCT_NAME}" \
  -H "apiKey: ${NVD_API_KEY}" \
  | python3 -c "
import sys, json
data = json.load(sys.stdin)
for vuln in data.get('vulnerabilities', []):
    cve = vuln['cve']
    cve_id = cve['id']
    descriptions = cve.get('descriptions', [])
    for desc in descriptions:
        if desc['lang'] == 'en':
            print(f'{cve_id}: {desc["value"][:100]}...')
"

Step 2: CVSS 점수 분석

 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
# CVSS 점수 분석 및 위험도 산정
import json

def analyze_product_cves(cve_data):
    risk_assessment = {
        'critical': [],
        'high': [],
        'medium': [],
        'low': []
    }
    
    for vuln in cve_data['vulnerabilities']:
        cve = vuln['cve']
        metrics = cve.get('metrics', {})
        
        # CVSS v3.1 점수 추출
        cvss_v31 = metrics.get('cvssMetricV31', [{}])[0]
        score = cvss_v31.get('cvssData', {}).get('baseScore', 0)
        
        severity = cvss_v31.get('cvssData', {}).get('baseSeverity', 'UNKNOWN')
        
        risk_assessment[severity.lower()].append({
            'cve_id': cve['id'],
            'score': score,
            'published': cve['published']
        })
    
    return risk_assessment

# 결과 출력
def print_risk_report(risk_assessment):
    total = sum(len(v) for v in risk_assessment.values())
    print(f"총 CVE 수: {total}")
    for severity, cves in risk_assessment.items():
        print(f"{severity.upper()}: {len(cves)}건")
        for cve in cves[:3]:  # 상위 3건만 표시
            print(f"  - {cve['cve_id']} (Score: {cve['score']})")

Step 3: 패치 이력 검증

| 검증 항목 | 확인 방법 | 기준 | | :— | :— | :— | | 패치 빈도 | 벤더 보안 공지 | 월 1회 이상 | | Critical 패치 소요 시간 | CVE 발표 → 패치 배포 | 30일 이내 | | 과거 취약점 패치율 | 미해결 CVE 수 | 95% 이상 해결 | | 책임 공개 정책 | 보안 연구자 협력 | CVD 정책 명시 |

Step 4: 실제 환경 테스트

 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
# PoC 테스트 (방어 목적)
# 주의: 승인된 환경에서만 실행

import subprocess
import sys

def test_privilege_escalation():
    """CVE-2023-4812 권한 에스컬레이션 테스트"""
    
    # 현재 권한 확인
    result = subprocess.run(
        ['whoami', '/priv'],
        capture_output=True,
        text=True
    )
    print(f"현재 권한: {result.stdout}")
    
    # 패치된 버전 확인
    try:
        with open('C:\Program Files\Glasswing\version.txt', 'r') as f:
            version = f.read().strip()
            major, minor, patch = map(int, version.split('.'))
            
            if major > 4 or (major == 4 and minor > 2):
                print(f"안전: 버전 {version} (패치됨)")
            elif major == 4 and minor == 2 and patch >= 1:
                print(f"안전: 버전 {version} (패치됨)")
            else:
                print(f"취약: 버전 {version}")
                print("즉시 4.2.1 이상으로 업그레이드 필요")
                
    except FileNotFoundError:
        print("Glasswing이 설치되지 않음")
        sys.exit(0)

if __name__ == '__main__':
    test_privilege_escalation()

5. 보안 제품 평가 프레임워크

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
graph TD
    A[보안 제품 평가] --> B[CVE 현황 분석]
    A --> C[패치 관리 체증]
    A --> D[마케팅 vs 현실 검증]
    A --> E[독립적 테스트]
    
    B --> B1[NVD 데이터 조회]
    B --> B2[CVSS 점수 분석]
    B --> B3[취약점 트렌드 파악]
    
    C --> C1[패치 주기 확인]
    C --> C2[긴급 패치 이력]
    C --> C3[책임 공개 정책]
    
    D --> D1[벤더 주장 검증]
    D --> D2[제3자 평가 참조]
    D --> D3[실제 고객 사례]
    
    E --> E1[침투 테스트]
    E --> E2[취약점 스캔]
    E --> E3[레드팀演习]

결론

핵심 요약

  1. Glasswing은 실제로 안전: 단 1개의 confirmed CVE만 존재하며, 이미 패치 완료. 업계 평균 대비 현저히 우수한 보안 체증을 보여준다.

  2. Mythos의 과대광고: “완벽한 보안"을 약속하면서도 23개의 미해결 CVE를 보유. Critical 등급 취약점 7개가 존재함에도 마케팅에서는 “100% 탐지"를 주장.

  3. CVE 수 ≠ 전체 보안: Glasswing의 낮은 CVE 수는 긍정적이지만, 이것만으로 완전한 안전을 보장하지 않는다. 패치 속도, 대응 체계, 전반적인 보안 프로그램 성숙도를 종합 평가해야 한다.

전문가 인사이트

보안 제품 선택 시 **“마케팅 주장과 실제 보안 데이터의 독립적 검증”**은 선택이 아닌 필수다. Glasswing 사례는 두 가지 중요한 교훈을 제공한다.

첫째, 낮은 CVE 수는 부정적 신호가 아니다. 보안 벤더가 취약점을 적게 가진다는 것은 보안 설계와 개발 프로세스의 성숙도를 반영할 수 있다. Glasswing의 14일 평균 패치 소요 시간은 업계 최고 수준이다.

둘째, 과대 마케팅은 그 자체로 위험 지표다. “모든 위협 탐지”, “제로데이 완벽 방어” 같은 주장은 기술적으로 불가능하다. 이런 주장을 하는 벤더는 보안 체증보다 영업에 집중하고 있을 가능성이 높다.

참고자료

면책 조항: 본 분석에 포함된 코드는 교육 및 방어 목적으로만 제공됩니다. 실제 환경에서의 실행 전 반드시 승인된 테스트 환경에서 검증하시기 바랍니다.


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

Hugo로 만듦
JimmyStack 테마 사용 중