한국 공공·방산·연구 기관을 겨냥한 스피어피싱에서 한글(HWP) 문서는 오래된 미끼다. 그런데 'HWP 악성코드'는 하나의 기법이 아니라 서로 다른 공격 표면 여러 개를 묶어 부르는 이름이다. EPS 이미지, OLE 개체, 문서 스크립트, 하이퍼링크, 그리고 문서 해석기 자체의 취약점은 실행 조건도, 막을 수 있는 지점도 각각 다르다. 이 글은 HWP 5.0 바이너리와 HWPX의 구조를 기준으로 각 공격 표면이 파일 안 어디에 자리 잡는지 지도로 그리고, MITRE ATT&CK 매핑과 유입 경로별 차단 지점, 실무 점검표를 공개 자료에 근거해 정리한다.

309종
시큐레터 지원 파일 포맷 수
SecuLetter Ensecure v2 (2025.12)[1]
12초
분석 시간 (TTA GS 인증 실측)
SecuLetter Ensecure v2 (2025.12)[1]
34ms
CDR 파일당 평균 무해화 소요시간
SecuLetter DISARM Solution Introduction (2025.06)[2]

1 HWP 악성코드를 따로 다뤄야 하는 이유

HWP는 한국 행정·교육·연구 현장에서 일상적으로 주고받는 문서 형식이다. 공문, 회의 자료, 연구 계획서, 채용·인사 공고가 이 형식으로 오간다. 수신자가 업무상 열어야 하는 문서라는 점이 공격자에게는 가장 큰 이점이다. 미끼 문서의 설득력은 내용에서 나오고, 내용의 설득력은 그 조직이 실제로 쓰는 문서 형식을 그대로 흉내 낼 때 높아진다.

공개된 위협 행위자 프로파일도 같은 방향을 가리킨다. MITRE ATT&CK은 APT37을 2012년 무렵부터 활동해 온 북한 연계 사이버 첩보 그룹으로, 피해 대상이 주로 한국에 집중됐다고 기술한다[3]. 같은 데이터베이스는 Kimsuky가 초기에 한국 정부 기관과 싱크탱크, 각 분야 전문가를 표적으로 삼았다고 정리한다[4]. 미국 CISA는 2020년 경보 AA20-301A에서 Kimsuky의 주된 초기 침투 수단으로 스피어피싱을 꼽았다[5]. 표적이 한국 공공·연구 부문이고 침투 수단이 이메일 첨부라면, 그 표적이 일상적으로 주고받는 HWP 문서가 미끼로 쓰이기 쉬운 조건이 갖춰진다.

이 조건은 이메일 첨부라는 전달 방식과 HWP라는 문서 형식이 겹치는 지점에서 성립한다. 공격자는 메일 제목과 본문으로 업무 맥락을 만들고, 첨부 문서로 그 맥락을 완성한다. 수신자 입장에서는 평소 받는 공문이나 자료 요청과 구별할 단서가 적다. 그래서 HWP 첨부를 다룰 때는 "이 문서가 악성인가"만이 아니라 "이 문서가 어떤 경로로, 어떤 맥락과 함께 들어왔는가"를 함께 봐야 한다. 6장에서 유입 경로별 차단 지점을 따로 정리하는 이유도 여기에 있다.

HWP 악성코드를 별도 주제로 다뤄야 하는 이유는 하나 더 있다. 문서를 검사하려면 먼저 형식을 해석할 수 있어야 한다. HWP는 국내에 사용이 집중된 형식이고, 검사 도구가 이 형식을 얼마나 깊이 해석하는지가 방어 효과를 좌우하는 변수가 된다. 이 글이 캠페인 연대기 대신 파일 구조에 집중하는 이유도 여기에 있다.

2 HWP와 HWPX는 다른 파일이다

공격 표면을 그리기 전에 짚어야 할 혼동이 있다. 흔히 "HWP는 KS X 6101 표준을 따르는 OLE 복합 문서"라고 설명하지만, 이 문장은 서로 다른 두 형식을 섞은 것이다. 확장자 .hwp로 저장되는 HWP 5.0 바이너리와 확장자 .hwpx로 저장되는 HWPX는 컨테이너 자체가 다르다.

구분HWP 5.0 (.hwp)HWPX (.hwpx)
컨테이너복합 파일 바이너리(Compound File Binary, CFB) — 스토리지와 스트림의 계층 구조[6][7]ZIP 패키지 안에 XML 파트를 담는 구조
표준한글과컴퓨터가 공개한 파일 형식 문서[6]KS X 6101 개방형 워드프로세서 마크업 언어(OWPML)[8]
본문 저장BodyText 스토리지 아래 섹션 스트림, 레코드 단위 바이너리섹션별 XML 파트
압축FileHeader 속성에 따라 DocInfo·섹션 스트림을 deflate 압축ZIP 압축
바이너리 데이터BinData 스토리지 아래 개별 스트림패키지 내 BinData 폴더
분석 관점CFB 해석 → 스트림 추출 → 압축 해제 → 레코드 해석의 다단계ZIP 해제 → XML 해석 → 참조된 바이너리 파트 확인

HWP 5.0 문서를 CFB 열람 도구로 열면 대략 다음과 같은 구성이 보인다[6]. 파일 인식 정보와 압축·암호 여부를 담은 FileHeader, 글꼴·스타일·바이너리 데이터 목록 같은 문서 공통 정보를 담은 DocInfo, 실제 본문이 들어가는 BodyText 스토리지와 그 아래 Section0, Section1 같은 섹션 스트림이 있다. 여기에 문서 요약 정보, 미리보기 텍스트(PrvText)와 이미지(PrvImage), 그림·OLE 개체 등을 담는 BinData, 문서 옵션을 담는 DocOptions, 문서 스크립트를 담는 Scripts 스토리지가 문서에 따라 붙는다.

본문 스트림은 레코드의 연속이다. 각 레코드는 태그 ID, 계층 수준, 데이터 길이를 담은 헤더 뒤에 데이터가 이어지는 구조이고, 길이가 일정 값을 넘으면 별도의 확장 길이 필드를 쓴다[6]. 보안 관점에서 이 구조가 중요한 이유는 간단하다. 해석기가 파일 안의 길이 값을 믿고 메모리를 읽고 쓰기 때문에, 길이와 실제 데이터가 어긋나는 레코드는 그 자체로 파서 취약점을 건드리는 입력이 될 수 있다. 3장의 파서 취약점 항목에서 이 점을 다시 다룬다.

⚠️ 형식 구분이 정책에 미치는 영향
확장자만 보고 HWP와 HWPX를 같은 규칙으로 처리하면 둘 중 하나는 제대로 검사되지 않을 수 있다. 또 확장자를 바꾼 파일, 즉 .hwp라는 이름을 단 HWPX나 그 반대의 경우도 존재할 수 있다. 정책은 확장자가 아니라 파일 시그니처로 판별한 실제 형식을 기준으로 적용해야 하고, 판별 결과와 확장자가 다르면 그 불일치 자체를 기록할 가치가 있다.

3 HWP 악성코드 공격 표면 지도

HWP 문서 안에서 공격자가 활용할 수 있는 위치를 다섯 갈래로 나눌 수 있다. 각 표면은 파일 안의 위치가 다르고, 무엇이 실행을 일으키는지도 다르다. 아래 표는 이 글 전체에서 사용할 지도다.

공격 표면파일 안 위치(HWP 5.0 기준)실행을 일으키는 것사용자 상호작용
EPS(PostScript) 이미지BinData 아래 그림 데이터문서를 그리는 과정에서 PostScript 해석기가 코드를 처리열람만으로 가능할 수 있음(버전·구성 의존)
OLE 개체BinData 아래 OLE 저장 데이터사용자가 개체를 열거나 실행클릭·실행 확인 필요한 경우가 많음
문서 스크립트Scripts 스토리지문서 열기·닫기 등 이벤트에 연결된 스크립트스크립트 보안 설정에 따라 다름
하이퍼링크·외부 참조본문 레코드의 필드·컨트롤 데이터사용자 클릭 또는 외부 자원 로드대부분 클릭 필요, 일부는 설정 의존
파서 취약점어느 스트림이든(레코드·압축 데이터·개체 데이터)문서 해석 과정의 메모리 손상열람만으로 가능

3.1 EPS 이미지 — 그림 속의 프로그래밍 언어

EPS(Encapsulated PostScript)는 그림 형식처럼 보이지만 본질은 PostScript 프로그램이다. PostScript는 조건 분기와 반복을 갖춘 프로그래밍 언어이고, EPS 그림을 화면에 그리려면 해석기가 그 프로그램을 실행해야 한다. 따라서 문서 뷰어가 EPS를 렌더링하는 순간 파일이 만든 코드가 해석기 위에서 돌아간다. 해석기가 안전 모드를 제대로 강제하지 못하거나 메모리 처리에 결함이 있으면, 그림 하나가 임의 코드 실행으로 이어진다.

PostScript 해석기 취약점이 실제로 악용된 사례는 공개 취약점 데이터베이스에서 확인할 수 있다. NVD는 CVE-2017-8291을 조작된 EPS 문서를 통해 안전 모드 우회와 원격 명령 실행이 가능한 Ghostscript 취약점으로 기술하며, 2017년 4월 실제 공격에 악용됐다고 적고 있다[9]. 이 사례가 보여 주는 핵심은 특정 CVE 번호가 아니라 구조다. 문서 프로그램이 그림 처리를 외부 해석기에 맡기면, 문서의 안전성은 그 해석기의 안전성에 묶인다.

방어 측면에서 EPS는 비교적 판단이 쉬운 표면이다. 업무 문서에 EPS 그림이 꼭 필요한 경우는 조직마다 다르지만, 대부분의 공문·보고서는 PNG·JPEG 같은 래스터 이미지로 충분하다. EPS가 포함된 문서를 별도 정책으로 분리하거나, 무해화 과정에서 래스터 이미지로 대체하는 선택지가 현실적이다. 다만 설계·출판 부서처럼 벡터 그림을 실제로 쓰는 곳이 있다면 예외 경로를 미리 정해 둬야 한다.

3.2 OLE 개체 — 문서 안에 넣은 다른 파일

HWP는 다른 프로그램의 데이터를 문서 안에 개체로 넣는 OLE 삽입을 지원한다. 차트·수식·스프레드시트 조각처럼 정상적인 용도가 분명하지만, 같은 기능으로 실행 파일이나 스크립트 파일을 패키지 개체로 감싸 넣을 수도 있다. 본문에는 그럴듯한 아이콘이나 "첨부 문서를 확인하세요" 같은 안내만 보이고, 사용자가 개체를 더블클릭하면 안에 든 파일이 풀려 실행된다.

이 표면은 사용자 상호작용을 전제로 한다는 점에서 EPS·파서 취약점과 다르다. 프로그램 버전과 설정에 따라 실행 전에 경고 대화상자가 뜨는 경우도 있다. 그래서 공격자는 문서 본문에서 "보안상 내용이 숨겨져 있으니 아래 아이콘을 눌러 확인하라"는 식의 사회공학 문구로 클릭을 유도한다. 기술적 방어와 함께 사용자 교육이 실제로 효과를 내는 지점이기도 하다.

분석 관점에서는 BinData 스트림 이름에 붙은 확장자 표기를 그대로 믿지 않는 것이 중요하다. 스트림 이름은 데이터의 성격을 암시할 뿐이고, 실제 내용은 압축을 풀고 시그니처를 확인해야 알 수 있다. OLE 개체 안에 또 다른 CFB 구조나 실행 파일 헤더가 들어 있다면 그 내부까지 재귀적으로 들여다봐야 한다.

3.3 문서 스크립트 — HWP에도 매크로가 있다

매크로 위협을 Office 문서의 VBA로만 생각하기 쉽지만, HWP도 문서에 스크립트를 저장할 수 있다. HWP 5.0에서는 Scripts 스토리지가 그 자리이며, 문서 형식 문서는 이 스토리지 아래 스크립트 본문과 버전 정보를 담는 스트림을 정의한다[6]. 스크립트는 문서 열기 같은 이벤트에 연결될 수 있다.

실제 실행 여부는 프로그램의 스크립트 보안 설정에 따라 달라진다. 설정에 따라 스크립트가 아예 실행되지 않거나, 실행 전 사용자에게 확인을 받거나, 경고 없이 실행될 수 있다. 따라서 "HWP 스크립트는 위험하다" 또는 "기본 설정이면 안전하다" 중 어느 쪽으로도 일반화할 수 없다. 조직이 배포한 버전과 설정값을 확인하고, 그 환경에서의 동작을 기준으로 위험을 판단해야 한다. 업무에 문서 스크립트가 필요 없는 조직이라면 수신 단계에서 스크립트를 제거하는 정책이 사용 편의를 거의 해치지 않는다.

3.4 하이퍼링크와 외부 참조 — 문서 밖으로 나가는 문

하이퍼링크는 가장 평범한 기능이자 가장 흔한 2단계 연결 수단이다. 문서 자체에는 악성 코드가 없고, 사용자가 링크를 누르면 피싱 페이지나 악성 파일 다운로드 주소로 이동한다. 첨부 파일 검사만으로는 이 구조를 악성으로 판정하기 어렵다. 파일 안에 실행 가능한 요소가 전혀 없을 수 있기 때문이다.

외부 자원을 참조하는 개체나 연결 문서도 비슷한 성격을 갖는다. 문서가 열릴 때 외부 자원에 접근하도록 구성되면, 수신자가 문서를 언제 어디서 열었는지가 외부로 드러날 수 있다. 이런 동작은 프로그램 버전·설정과 네트워크 환경에 따라 달라지므로 일률적으로 단정하기 어렵다. 다만 이 유형은 침투 자체보다 정찰에 가깝다는 점에서 의미가 있다. 실행 코드가 없는 문서가 "이 수신자는 메일을 열어 보는 사람"이라는 정보를 공격자에게 돌려줄 수 있다면, 그다음 단계의 미끼는 훨씬 정교해진다.

3.5 파서 취약점 — 기능이 아니라 결함을 노린다

앞의 네 가지는 모두 문서 형식이 정상적으로 제공하는 기능을 악용한다. 파서 취약점은 다르다. 문서 형식의 기능이 아니라 그 형식을 읽는 프로그램의 결함을 노린다. 2장에서 본 것처럼 HWP 레코드는 길이 필드를 갖고, 본문 스트림은 압축되어 있으며, 개체 데이터는 다시 다른 형식을 품는다. 이 각 단계에서 길이 검증이 빠지거나 경계 계산이 틀리면 메모리 손상이 생긴다.

파서 취약점 공격은 사용자에게 아무 행동도 요구하지 않을 수 있다. 문서를 여는 순간, 혹은 미리보기가 생성되는 순간 해석이 일어나기 때문이다. 문서 프로그램의 취약점은 공개 취약점 데이터베이스에 꾸준히 등록되고, 패치가 배포된 뒤에도 업데이트가 늦은 단말은 계속 노출된다. 패치 이전의 취약점, 즉 제로데이라면 업데이트를 성실히 적용한 단말도 예외가 아니다.

⚠️ 파서 취약점 표면의 특수성
나머지 네 표면은 "이 문서에 스크립트·OLE·EPS·링크가 있는가"를 확인해 정책으로 걸러낼 수 있다. 파서 취약점은 특정 기능이 아니라 형식 위반 그 자체에 숨는다. 정상 문서와 똑같은 요소만 쓰면서 레코드 길이 하나를 조작하는 방식이 가능하므로, 기능 존재 여부만 보는 검사로는 걸러지지 않는다. 형식 명세와의 정합성을 검사하거나, 원본을 해석기에 그대로 넘기지 않는 구조가 필요하다.

3.6 HWP 바깥의 연쇄

최근의 HWP 관련 공격을 이해하려면 HWP 파일 밖도 함께 봐야 한다. 압축 파일 안에 정상 HWP 문서와 바로가기(LNK)·스크립트 파일을 함께 넣거나, 실행 파일에 HWP 아이콘과 문서처럼 보이는 이름을 붙이는 방식이 그 예다. 이 경우 HWP는 공격 코드를 담는 그릇이 아니라 사용자를 안심시키는 위장 장치로 쓰인다. ATT&CK에서는 이런 위장을 Masquerading(T1036)으로 분류한다[14].

이 유형에서 HWP 파일 자체는 완전히 정상일 수 있다. 따라서 "첨부된 HWP가 깨끗한가"만 묻는 검사는 공격 전체를 보지 못한다. 압축 파일 내부 구성, 실행 형식 파일의 위장 여부, 이중 확장자 같은 요소를 함께 판단해야 한다.

4 같은 문서, 다른 결과 — 실행 조건 정리

HWP 악성코드에 대한 설명이 서로 어긋나 보이는 이유는 대부분 실행 조건을 생략하기 때문이다. "문서를 열기만 해도 감염된다"는 설명과 "클릭하지 않으면 안전하다"는 설명은 각각 다른 표면에 대해서는 맞다. 아래 표는 위험 판단에 영향을 주는 조건을 정리한 것이다.

조건EPSOLE 개체스크립트링크·외부 참조파서 취약점
문서 프로그램 버전해석기 탑재 여부·버전에 좌우경고 동작이 버전별로 다를 수 있음지원 범위가 버전별로 다를 수 있음영향 작음취약 버전 여부가 결정적
보안 설정제한적경고 표시 여부에 영향실행·확인·차단을 결정외부 접근 허용 여부에 영향영향 작음
사용자 행동열람만으로 가능할 수 있음개체 열기 필요설정에 따라 확인 클릭 필요대부분 클릭 필요열람만으로 가능
네트워크 환경영향 작음영향 작음외부 통신 단계에 영향외부 접근 차단 시 무력화후속 단계에 영향

이 표에서 실무적으로 읽어야 할 점은 두 가지다. 첫째, 사용자 PC의 버전과 설정이 위험을 크게 바꾼다. 같은 문서라도 업데이트 상태와 스크립트 보안 설정에 따라 결과가 다르다. 둘째, 버전과 설정에 영향을 덜 받는 표면이 있다. 파서 취약점은 열람만으로 성립할 수 있고, 제로데이라면 버전 관리로도 막지 못한다. 단말 관리만으로 다룰 수 있는 표면과 그렇지 않은 표면을 구분해야 방어 투자의 우선순위가 정해진다.

망분리 환경도 이 표를 다르게 읽게 만든다. 인터넷이 차단된 업무망 단말에서는 외부 참조와 C2 통신이 원칙적으로 성립하기 어렵다. 그렇다고 위험이 사라지는 것은 아니다. 업무망으로 넘어온 문서가 다른 경로로 인터넷망 단말에서 다시 열릴 수 있고, 파서 취약점을 통한 코드 실행은 내부망 정찰의 발판이 될 수 있다. 망분리는 후속 단계를 어렵게 만들 뿐, 문서 해석 단계의 위험을 없애지는 않는다.

5 MITRE ATT&CK 매핑

공격 표면을 ATT&CK 기법에 연결해 두면 탐지 규칙, 사고 보고서, 위협 인텔리전스를 같은 언어로 엮을 수 있다. HWP 관련 공격에서 반복적으로 연결되는 기법은 다음과 같다.

ATT&CK 기법HWP 공격에서의 대응관련 공격 표면
T1566.001 Phishing: Spearphishing Attachment[10]HWP 미끼 문서를 메일 첨부로 전달전체(전달 단계)
T1204.002 User Execution: Malicious File[11]사용자가 문서를 열거나 문서 안 개체를 실행OLE 개체, 스크립트, 링크
T1203 Exploitation for Client Execution[12]문서 프로그램·해석기 취약점을 통한 코드 실행파서 취약점, EPS
T1027 Obfuscated Files or Information[13]스크립트 난독화, 개체 데이터 인코딩, 압축 계층 활용스크립트, OLE 개체
T1036 Masquerading[14]실행 파일에 문서 아이콘·이름 부여, 이중 확장자HWP 바깥의 연쇄

매핑에서 눈여겨볼 부분은 T1204.002와 T1203의 구분이다. 전자는 사용자의 행동에 기대고, 후자는 프로그램의 결함에 기댄다. 사용자 교육과 실행 확인 정책은 T1204.002 계열에 효과가 있지만 T1203 계열에는 거의 영향을 주지 못한다. 반대로 패치 관리는 이미 알려진 T1203 취약점에는 효과적이지만 사용자가 스스로 실행하는 OLE 개체는 막지 못한다. 한 가지 통제로 모든 기법을 덮을 수 없다는 점이 매핑으로 드러난다.

6 킬체인 위의 차단 지점

사이버 킬체인 모델은 침입을 정찰부터 목적 달성까지의 단계로 나누고, 앞 단계에서 끊을수록 방어자에게 유리하다고 본다[15]. HWP 악성코드에 이 모델을 적용하면 문서가 조직 안으로 들어오는 전달 단계가 핵심이 된다. 문서가 단말에서 열리기 전에 처리하면, 3장의 다섯 표면 중 어느 것이 쓰였든 사용자 PC의 버전과 설정에 덜 의존하게 된다.

조직에서 HWP 문서가 들어오는 경로는 대체로 네 갈래다. 각 경로마다 처리 시점과 적용 가능한 통제가 다르다.

1
유입 경로 ①
이메일 첨부
스피어피싱의 주 경로다. 메일 서버 앞단에서 첨부를 분석·무해화하면 수신함에 도착하기 전에 처리할 수 있다. 메일 본문의 링크와 첨부 문서 내부의 링크를 함께 봐야 한다. 시큐레터에서는 구축형 메일 서버 환경이라면 MARS 탐지와 CDR을 기본 탑재한 SLE(이메일 보안)가 이 구간을 맡는다. MS 365·Gmail 환경에는 CDR과 BEC 탐지를 갖춘 SaaS 제품 DISARM이, 네이버·카카오·하이웍스 등 국내 메일 환경에는 APT 탐지를 갖춘 SaaS 제품 SLES가 있다.
T1566.001 차단 지점
2
유입 경로 ②
망간 자료 전송·파일 게이트웨이
인터넷망에서 받은 문서를 업무망으로 옮기는 구간이다. 망분리 환경에서는 이 구간이 업무망으로 들어오는 문서의 관문이 된다. 시큐레터에서는 MARS 탐지와 CDR을 기본 탑재한 구축형 제품 SLF(파일 보안)가 망연계 구간을 담당한다.
업무망 진입 전 처리
3
유입 경로 ③
웹 업로드
민원 신청, 입찰 서류 제출, 채용 지원처럼 외부인이 웹으로 문서를 올리는 경로다. 업로드된 문서는 내부 담당자가 열람하므로 메일과 같은 위험을 갖는다. 시큐레터에서는 SLF가 망연계와 함께 웹게시판 구간도 담당하므로, 외부 제출 문서를 망간 전송 문서와 같은 기준으로 처리할 수 있다.
외부 제출 문서
4
유입 경로 ④
이동식 매체·메신저 등 기타 경로
게이트웨이를 거치지 않는 경로다. 단말 보안 통제와 문서 프로그램 업데이트, 스크립트 보안 설정이 마지막 방어선이 된다. 기타 경로를 줄이고 앞선 세 경로로 모으는 것이 정책상 목표가 된다.
단말 통제 의존

경로를 나눠 보면 한 가지 원칙이 드러난다. 문서가 반드시 지나가는 관문을 만들고, 그 관문에서 처리한다. 처리 지점이 많아질수록 정책이 일관되지 않을 가능성도 커지므로, 경로별 처리 결과를 같은 기준으로 기록하고 비교할 수 있어야 한다. 같은 발신 패턴이나 주제의 미끼 문서가 메일과 웹 업로드처럼 서로 다른 구간에서 동시에 나타날 수 있기 때문이다. 경로별 기록을 한곳에서 대조할 수 있으면, 따로 처리된 차단 건들을 하나의 캠페인으로 묶어 보고 대응 범위를 정할 수 있다.

공공기관이라면 국가망 보안체계(N2SF) 관련 문서도 함께 검토 대상이다. 국가사이버안보센터가 공개한 N2SF 가이드라인[16]과 KISA가 2026년 4월 발간한 실증 사례집[17]은 망 경계에서 자료를 다루는 방식을 설계할 때 참고할 수 있는 자료다. 문서 유입 지점의 처리 방식을 정할 때는 이 자료들의 요구사항과 조직 등급 분류를 함께 대조해야 한다.

7 탐지·분석·무해화의 역할 분담

관문에서 문서를 처리하는 방식은 크게 네 가지다. 각 방식은 잘하는 것과 구조적으로 어려운 것이 다르다. 어느 하나가 다른 것을 완전히 대체한다고 보기보다, HWP 공격 표면별로 무엇이 어디서 강한지를 보는 편이 정확하다.

방식잘하는 것구조적으로 어려운 것
시그니처·평판 기반 탐지알려진 샘플과 그 계열을 빠르게 판정한다. 일반화된 패턴은 같은 계열의 여러 변형을 함께 잡을 수 있고, 처리 비용이 낮다.처음 보는 기법이나 패턴과 충분히 다른 변형은 판정 근거가 부족할 수 있다. 정상 기능만 악용한 문서는 악성 패턴이 뚜렷하지 않다.
샌드박스 기반 동적 분석문서를 실제로 열어 프로세스 생성, 파일 쓰기, 네트워크 접속 같은 행위를 관찰한다. 행위가 나타나면 상세한 증거를 남긴다.분석 환경에 한글 프로그램이 설치되어 있어야 하고, 공격이 노리는 버전과 환경이 일치해야 행위가 재현된다. 환경 확인·지연 실행·사용자 클릭 대기 같은 회피 조건에 영향을 받는다. 문서 수가 많으면 처리 시간이 부담이 된다.
정적 구조 분석(리버스 엔지니어링 기반)문서를 내부 구조까지 해석해 스크립트·개체·형식 위반 같은 근거를 찾는다. 행위가 나타나는지에 기대지 않으므로 실행 환경의 버전 일치나 회피 조건에 덜 의존한다.형식 해석기의 구현 품질에 성능이 좌우된다. 형식 명세가 공개되지 않은 영역이나 새로운 은닉 방식에는 해석 규칙 보강이 필요하다.
CDR(콘텐츠 무해화·재구성)판정과 무관하게 액티브 콘텐츠를 제거하고 문서를 다시 만든다. 탐지 근거가 없는 제로데이 문서에도 적용된다.제거된 기능은 결과 문서에서 쓸 수 없다. 암호화 문서처럼 내용을 해석할 수 없는 파일은 별도 정책이 필요하다. 원본이 악성이었는지에 대한 판정 정보는 별도로 확보해야 한다.

시큐레터의 MARS 엔진은 이 가운데 리버스 엔지니어링을 문서형 공격 탐지의 축으로 삼는다. 자동화된 리버스 엔지니어링으로 문서를 어셈블리 수준까지 분해해, 악성 행위가 일어나기 전에 취약점의 근원을 찾아낸다. 위 표에서 샌드박스 기반 동적 분석의 어려움으로 꼽은 가상환경 회피, 시간차 공격, 사용자 행위 조건 같은 우회 기법은 행위 기반 방식이 놓치기 쉬운 지점이고, MARS는 이를 근본 원인 분석으로 잡는다. 탐지 범위는 문서에 한정되지 않는다. 문서·이미지·압축 파일은 리버스 엔지니어링으로, 실행 파일은 백신·YARA·평판 분석으로 탐지한다. 3.6절처럼 정상 HWP 미끼와 위장 실행 파일이 함께 오는 공격에서는 이 두 갈래가 함께 필요하다. 그럼에도 어떤 탐지도 모든 공격을 잡을 수는 없으므로, 시큐레터는 탐지와 무해화를 함께 쓴다. 탐지가 놓친 것은 CDR 무해화가 막는 구조다.

CDR 방식은 일반적으로 파일을 스캔해 액티브 콘텐츠를 찾고, 이를 제거한 뒤 파일을 재생성하는 흐름을 따른다. 탐지와 무해화를 관문에 함께 둘 때는 두 단계의 처리 시간이 정책 선택에 직접 영향을 준다. 시큐레터 자료는 CDR 평균 무해화 소요시간을 파일당 34ms로 제시하고[2], 분석 시간은 TTA GS 인증 실측 기준 12초로 제시한다[1]. 무해화는 밀리초 단위, 분석은 초 단위라는 차이가 있으므로, 구간별로 어떤 결과를 먼저 사용자에게 전달하고 어떤 결과를 기록으로 남길지도 함께 설계해야 한다. 메일·망간 전송처럼 사용자가 결과를 기다리는 구간에서는 이런 처리 시간이 곧 업무 흐름의 문제다. 처리가 느리면 운영 부서가 예외 경로를 요구하게 되고, 예외 경로는 그 자체로 공격 경로가 된다.

공격 표면시그니처·평판샌드박스정적 구조 분석CDR
EPS알려진 계열환경 일치 필요존재·구조 확인제거·대체
OLE 개체내장 파일 판정클릭 재현 필요재귀 해석제거
스크립트난독화에 영향설정 일치 시 관찰존재·내용 확인제거
링크·외부 참조URL 평판클릭 재현 필요목록 추출정책별 처리
파서 취약점알려진 것 중심버전 일치 필요형식 위반 탐지재생성으로 원본 구조 미전달

위 표의 등급은 방식 간 상대적 성격을 나타낸 것이고, 개별 제품의 성능을 뜻하지 않는다. 같은 방식이라도 구현에 따라 결과는 크게 다르다. CDR이 파서 취약점에 대해 갖는 효과도 일반론으로 이해해야 한다. CDR 방식은 일반적으로 원본 바이트를 그대로 전달하지 않고 필요한 내용만으로 문서를 새로 만들기 때문에, 원본의 조작된 레코드가 사용자 PC의 해석기에 직접 도달하지 않는다. 다만 재생성 과정에서 원본을 해석하는 쪽 역시 해석기이므로, CDR 엔진 자체의 형식 해석 안정성이 함께 검증되어야 한다.

✅ 조합 원칙
관문에서는 무해화로 실행 가능 요소를 걷어 내고, 분석으로 원본이 무엇이었는지 기록한다. 무해화는 사용자를 보호하고, 분석 기록은 보안 담당자가 공격 시도를 인지하고 대응하는 근거가 된다. 둘 중 하나만 있으면 "막았지만 무엇을 막았는지 모르는" 상태나 "알았지만 이미 열린" 상태가 된다.

8 HWP 무해화에서 결정해야 할 쟁점

CDR을 HWP에 적용할 때 기술보다 먼저 부딪히는 것은 정책 결정이다. 무엇을 지우고 무엇을 남길지, 처리할 수 없는 파일은 어떻게 할지를 미리 정하지 않으면 운영 첫 주에 예외 요청이 쏟아진다. 다음은 HWP 환경에서 자주 나오는 쟁점이다.

쟁점무엇이 문제인가정책 선택지
암호 설정 문서암호를 모르면 내부 구조를 해석할 수 없어 분석·무해화 모두 불가능하다. 공격자가 메일 본문에 암호를 함께 적어 검사를 우회하는 수법에 쓰일 수 있다.차단 / 격리 후 수신자 확인 / 암호 입력을 받아 처리하는 절차 중 선택
배포용 문서본문이 별도로 보호된 형태로 저장되어 일반 문서와 다른 해석 경로가 필요하다.지원 여부 확인, 미지원 시 암호 문서와 같은 정책 적용
전자 서명 문서재생성된 문서는 원본과 바이트가 달라지므로 일반적으로 서명 검증이 유지되지 않는다.서명 검증이 필요한 업무는 원본 보관 후 검증 절차 분리
OLE 차트·수식개체를 제거하면 편집 가능한 차트·수식이 사라진다. 미리보기 이미지로 대체되면 보이는 모양은 남지만 편집은 불가능하다.전면 제거 / 이미지 대체 / 특정 개체 유형만 허용
문서 스크립트업무 자동화에 스크립트를 쓰는 서식이 있을 수 있다.외부 수신 문서는 제거, 내부 서식은 별도 배포 경로 관리
EPS 그림벡터 품질이 필요한 출판·설계 문서에 영향을 준다.래스터 대체 / 지정 부서 예외 경로

쟁점 대부분은 "보안이냐 편의냐"의 양자택일처럼 보이지만, 실제로는 원본 보관과 요청 기반 복원 절차로 상당 부분 풀린다. 무해화된 문서를 기본으로 전달하고, 원본이 꼭 필요한 사용자는 승인 절차를 거쳐 원본을 받도록 하면, 기본값은 안전하게 유지하면서 업무 예외를 통제된 방식으로 처리할 수 있다. 이때 원본 요청 이력은 그 자체로 유용한 감사 기록이 된다.

⚠️ 암호 문서 정책은 미리 정한다
암호가 걸린 HWP는 어떤 내용 기반 검사도 통과시킬 수 없다는 점에서 가장 까다로운 범주다. 정상 업무에서도 개인정보가 담긴 문서를 암호로 보호해 보내는 경우가 있어 일괄 차단이 어렵다. "어떤 발신자로부터, 어떤 수신자에게, 어떤 절차로" 처리할지를 도입 전에 문서화하지 않으면, 운영 중에 가장 먼저 예외가 생기는 지점이 된다.

9 의심 HWP 악성코드 1차 분류 절차

관문 통제와 별개로, 보안 담당자는 신고된 의심 문서를 직접 확인해야 할 때가 있다. 아래 절차는 문서를 실행하지 않고 구조만으로 1차 분류하는 순서다. 분석은 반드시 격리된 분석용 환경에서 하고, 분석 대상 파일은 업무 단말의 문서 프로그램으로 열지 않는다.

1
형식 판별
시그니처로 실제 형식 확인
파일 앞부분 시그니처로 CFB인지 ZIP인지, 아니면 전혀 다른 형식인지 확인한다. 확장자와 실제 형식이 다르면 그 자체로 기록한다. 실행 파일 헤더가 보인다면 문서가 아니라 3장의 위장 연쇄를 의심한다.
T1036 확인
2
구조 열거
스토리지·스트림 목록 확인
CFB 열람 도구로 스토리지와 스트림 목록을 뽑는다. Scripts 스토리지 존재 여부, BinData 아래 스트림 수와 이름, DocOptions 구성을 기록한다. 본문 분량에 비해 BinData가 지나치게 크면 주목한다.
표면 존재 여부
3
헤더 확인
FileHeader 속성 확인
압축 여부, 암호 설정 여부, 배포용 문서 여부를 확인한다. 암호 문서라면 이후 단계의 분석이 막히므로, 메일 본문 등에서 암호가 함께 전달됐는지 확인하고 그 사실 자체를 위험 신호로 다룬다.
분석 가능 여부
4
내용 추출
압축 해제 후 개체·스크립트 확인
BinData 스트림을 압축 해제해 실제 시그니처를 확인한다. EPS라면 PostScript 내용을, OLE라면 내부에 감싼 파일을 재귀적으로 확인한다. Scripts가 있으면 스크립트 본문을 추출해 외부 통신·파일 쓰기·프로세스 실행 흔적을 찾는다.
T1027 확인
5
정합성 점검
레코드 길이·형식 위반 확인
섹션 스트림을 압축 해제한 뒤 레코드 헤더의 길이와 실제 데이터가 맞는지 확인한다. 길이 불일치, 비정상적으로 큰 길이 값, 명세에 없는 태그는 파서 취약점 공격의 흔적일 수 있다. 이 단계부터는 전문 분석 역량이나 분석 엔진의 도움이 필요하다.
T1203 확인

이 절차의 목적은 최종 판정이 아니라 어느 공격 표면을 의심해야 하는지 좁히는 것이다. 1~4단계에서 스크립트·OLE·EPS가 하나도 없고 링크도 평범하다면, 남는 의심은 파서 취약점이나 HWP 바깥의 연쇄다. 이 두 범주는 수작업 확인으로 결론을 내기 어렵고, 형식 명세 수준의 정합성 검사가 필요하다. 1차 분류 결과는 3장의 지도 기준으로 기록해 두면 이후 유사 문서를 비교할 때 기준이 된다.

⚠️ 하지 말아야 할 확인 방법
"직접 열어 보고 이상한 동작이 없으면 정상"이라는 판단은 위험하다. 파서 취약점 공격은 정상 문서를 함께 보여 주면서 뒤에서 코드를 실행할 수 있고, 스크립트는 설정에 따라 조용히 실행될 수 있다. 업무 단말에서 미리보기 기능으로 확인하는 것도 문서 해석이 일어난다는 점에서 같은 위험을 갖는다.

10 HWP 악성코드 대응 운영 점검표

지금까지의 내용을 운영 점검 항목으로 정리한다. 관문 통제, 단말 통제, 탐지·대응 체계로 나눴다. 각 항목 옆의 표기는 3장 지도의 어느 공격 표면과 연결되는지를 나타낸다.

관문 통제 — 문서가 들어오는 길목
  • HWP 문서가 들어오는 경로(메일·망간 전송·웹 업로드·기타)를 모두 목록화했다 전체 · 6장
  • 각 경로에서 HWP 5.0과 HWPX를 실제 형식 기준으로 구분해 처리한다 전체 · 2장
  • EPS·OLE·스크립트를 각각 어떻게 처리할지(제거·대체·허용) 정책으로 정했다 EPS · OLE · 스크립트
  • 문서 내부 링크를 추출해 평가하거나 정책에 따라 처리한다 링크·외부 참조
  • 암호 문서·배포용 문서 처리 절차가 문서화되어 있다 8장
  • 압축 파일 내부의 실행 형식 파일·이중 확장자를 검사한다 HWP 바깥의 연쇄
  • 무해화 결과 문서와 원본을 분리 보관하고, 원본 요청 절차가 있다 8장
단말 통제 — 관문을 거치지 않은 문서 대비
  • 한글 문서 프로그램의 설치 버전과 업데이트 상태를 중앙에서 파악한다 파서 취약점 · EPS
  • 더 이상 업데이트되지 않는 구버전 프로그램·뷰어가 남아 있지 않다 파서 취약점
  • 문서 스크립트 보안 설정값을 조직 기준으로 정하고 배포했다 스크립트 · 4장
  • Windows 공격 표면 축소(ASR) 규칙 등 OS 내장 기능으로 문서 프로그램의 하위 프로세스 생성을 점검했다 T1203 · T1204.002
  • 이동식 매체·메신저로 받은 문서의 처리 기준을 사용자에게 안내했다 6장 경로 ④
탐지·대응 — 막은 뒤에 알아야 할 것
  • 관문에서 제거한 요소의 종류와 건수를 경로별로 집계한다 7장
  • 분석 결과를 ATT&CK 기법 기준으로 분류해 기록한다 5장
  • 신고된 의심 문서를 실행 없이 1차 분류하는 절차가 있다 9장
  • 같은 발신 패턴·주제의 미끼 문서를 경로를 가로질러 묶어 볼 수 있도록 처리 기록을 한곳에서 대조한다 6장

점검표를 처음 적용하는 조직이라면 우선순위를 두는 편이 현실적이다. 가장 먼저 할 일은 경로 목록화다. 경로를 모르면 어디에 통제를 두어야 할지 정할 수 없다. 그다음은 이메일 경로 처리다. 1장에서 본 것처럼 한국 공공·연구 부문을 노리는 위협 그룹의 주된 초기 침투 수단으로 스피어피싱이 보고된 만큼, 메일 첨부를 먼저 관문으로 묶는 것이 우선순위를 정하는 합리적인 출발점이 된다. 단말 통제는 관문 통제와 병행하되, 관문을 우회하는 경로를 줄이는 정책과 짝을 이뤄야 의미가 있다.

✅ 도입 검토 시 확인할 질문
파일 보안 솔루션을 검토할 때는 "HWP를 지원하는가" 대신 다음을 묻는다. ① HWP 5.0과 HWPX를 각각 어떤 수준까지 해석하는가 ② EPS·OLE·스크립트·링크를 각각 어떻게 처리하며 정책으로 조정할 수 있는가 ③ 암호 문서·배포용 문서는 어떻게 처리하는가 ④ 무해화 후 표·이미지·서식이 어느 정도 유지되는가 ⑤ 처리 시간이 업무 흐름을 해치지 않는가 ⑥ 원본에 대한 분석 정보를 함께 남기는가. 이 질문들은 조직의 실제 문서로 PoC·BMT를 진행할 때 가장 정확하게 확인된다.

11 자주 묻는 질문

Q1. HWPX로 전환하면 HWP 악성코드 위험이 사라지나요?
줄어드는 부분과 남는 부분이 있다. XML 기반 형식은 구조를 검사하기 쉬워지고, 바이너리 레코드 파싱에서 생기는 일부 결함 유형과는 거리가 생긴다. 그러나 HWPX도 그림·개체·링크를 담을 수 있고, ZIP과 XML을 해석하는 과정 자체에도 결함이 생길 수 있다. 형식 전환은 위험의 모양을 바꿀 뿐 관문 통제를 대신하지 않는다.
Q2. 문서를 PDF로 변환해서 전달하면 안전한가요?
PDF도 스크립트·폼 동작·내장 파일 같은 액티브 요소를 가질 수 있어 형식 자체가 안전을 보장하지 않는다. 또 HWP를 PDF로 변환하려면 어딘가에서 HWP를 해석해야 하므로, 변환 서버가 파서 취약점의 표적이 될 수 있다. 변환을 쓰더라도 변환 환경의 격리와 결과물 검사가 함께 필요하다.
Q3. 한글 프로그램을 최신 버전으로 유지하면 충분하지 않나요?
알려진 취약점에 대해서는 가장 기본적이고 중요한 통제다. 그러나 패치가 나오기 전의 제로데이 취약점에는 효과가 없고, 사용자가 스스로 실행하는 OLE 개체나 링크를 통한 2단계 다운로드도 막지 못한다. 5장의 매핑처럼 패치 관리는 T1203 계열 중 알려진 취약점에 강하고, 나머지 기법에는 다른 통제가 필요하다.
Q4. 샌드박스로 HWP를 분석할 때 주의할 점은 무엇인가요?
분석 환경에 한글 프로그램이 설치되어 있어야 하고, 공격이 노리는 버전과 설정이 일치해야 악성 행위가 재현된다. OLE 개체나 링크처럼 사용자 클릭이 필요한 공격은 클릭을 흉내 내지 않으면 행위가 나타나지 않는다. 샌드박스는 행위가 나타났을 때 상세한 증거를 주는 장점이 있으므로, 환경 구성과 재현 조건을 관리할 수 있는지가 활용의 관건이다.
Q5. CDR을 적용하면 분석은 필요 없나요?
사용자 보호 측면에서는 무해화만으로 상당 부분을 처리할 수 있다. 하지만 무해화된 문서만 남으면 원본이 악성이었는지, 어떤 기법이 쓰였는지, 같은 공격이 다른 직원에게도 왔는지 알 수 없다. 사고 대응과 위협 인텔리전스를 위해서는 원본에 대한 분석 정보가 별도로 남아야 한다.
Q6. 무해화된 HWP 문서는 원본과 똑같이 보이나요?
본문 텍스트·표·래스터 이미지·서식처럼 수동적인 콘텐츠는 일반적으로 유지된다. 반면 제거한 요소는 결과 문서에서 기능하지 않는다. 스크립트 기반 자동화 서식, 편집 가능한 OLE 차트, 전자 서명 검증 등이 영향을 받을 수 있다. 조직이 실제로 주고받는 문서 표본으로 결과 품질을 확인하는 것이 가장 정확하다.
Q7. 첨부 HWP에 악성 요소가 전혀 없는데 공격일 수 있나요?
그렇다. 문서 안에 피싱 페이지로 가는 링크만 들어 있거나, 같은 압축 파일 안의 다른 파일이 실제 공격을 수행하고 HWP는 사용자를 안심시키는 정상 문서로 쓰일 수 있다. 3.4절과 3.6절의 유형이다. 이 때문에 문서 내부의 링크와 함께 전달된 파일 전체를 함께 판단해야 한다.
Q8. 망분리 환경이라면 HWP 악성코드 위험이 낮지 않나요?
업무망에서 외부 C2 통신이 어렵다는 점은 분명한 이점이다. 그러나 문서를 여는 순간 일어나는 파서 취약점 공격은 망분리와 무관하게 성립하고, 업무망으로 넘어온 문서가 내부에서 다시 공유되며 퍼질 수 있다. 망분리 환경에서는 망간 전송 구간이 업무망으로 들어오는 문서의 관문이 되므로, 그 구간의 처리 방식이 위험 수준을 결정한다.

우리 조직의 HWP 문서로 직접 확인해보세요

어떤 솔루션이든 HWP 처리 결과는 조직이 실제로 주고받는 문서로 확인해야 정확합니다. 평소 업무에서 오가는 문서와 의심 표본으로 PoC·BMT를 진행해, 10장에서 정리한 질문 — 형식별 해석 수준, 액티브 요소 처리 방식, 암호 문서 처리, 무해화 후 서식 유지, 처리 시간, 분석 기록 — 에 대한 답을 조직 환경에서 직접 확인할 수 있습니다. 메일·망간 전송·웹 업로드 중 어느 구간부터 검토할지도 결과를 바탕으로 함께 정리합니다.

PoC 신청하기 → 공공 · 금융 · 엔터프라이즈 맞춤 설계
REFERENCES
  1. SecuLetter Inc., SecuLetter at a Glance (Ensecure v2), 2025.12.
  2. SecuLetter Inc., DISARM Solution Introduction, 2025.06.
  3. MITRE ATT&CK, APT37 (G0067) — attack.mitre.org.
  4. MITRE ATT&CK, Kimsuky (G0094) — attack.mitre.org.
  5. CISA, Alert AA20-301A: North Korean Advanced Persistent Threat Focus: Kimsuky, 2020 — cisa.gov.
  6. 한글과컴퓨터, 한글 문서 파일 형식 5.0.
  7. Microsoft, [MS-CFB]: Compound File Binary File Format, Open Specifications.
  8. 국가기술표준원, KS X 6101 개방형 워드프로세서 마크업 언어(OWPML) 문서 구조.
  9. NIST, National Vulnerability Database — CVE-2017-8291 — nvd.nist.gov.
  10. MITRE ATT&CK, T1566.001 Phishing: Spearphishing Attachment — attack.mitre.org.
  11. MITRE ATT&CK, T1204.002 User Execution: Malicious File — attack.mitre.org.
  12. MITRE ATT&CK, T1203 Exploitation for Client Execution — attack.mitre.org.
  13. MITRE ATT&CK, T1027 Obfuscated Files or Information — attack.mitre.org.
  14. MITRE ATT&CK, T1036 Masquerading — attack.mitre.org.
  15. E. M. Hutchins, M. J. Cloppert, R. M. Amin (Lockheed Martin), Intelligence-Driven Computer Network Defense Informed by Analysis of Adversary Campaigns and Intrusion Kill Chains, 2011.
  16. 국가사이버안보센터, 국가망 보안체계(N2SF) 가이드라인 — ncsc.go.kr.
  17. 한국인터넷진흥원(KISA), N2SF 실증 사례집, 2026.04 — kisa.or.kr.