HWP 문서 개요
- 기본적으로 컴파운드파일(compoundfile)구조를 가지고 있음.
- 파일의 첫8바이트가 “\xd0\xcf\x11\xe0\xa1\xb1\x1a\xe1” 이고, 파일 헤더 스트림에 파일 인식정보인 “HWPDocumentFile” 이 존재함.
- 스트림과 스토리지들을 한 곳에 묶어 압축한 형태로 구성 되어있음.
HWP 구조
HWP 분석도구
도구 이름 | 기능 |
HWPSCAN | - GUI 도구(윈도우기반) - 한글(HWP)문서파일의 위해성을 점검하고 트리아지 할 수 있음 - 파일포맷을 분석하고 파일 내에 포함 된 악성데이터와 알려진 취약점 관련정보를 스캔 할 수 있음 - 별도의 파이썬 기반 플러그인을 사용 할 수 있음 |
OLETOOLS | - 명령 라인 기반 파이썬 도구패키지 - MS OLE2 파일 포맷에 대한 위해성을 점검하고 트리아지 할 수 있음 - 파일 내에 있는 악성스크립트 식별, 포렌식 및 디버깅 등을 수행 할 수 있음 |
YARA | - 명령 라인 기반 도구 - 텍스트 및 바이너리 패턴을 기반으로 한 악성 코드 식별 , 분류도구 - 접근이 쉬운 룰 문법을 제공하며 현재 다양한 보안솔루션에서 사용 하고 있음 |
HWPX 문서
- HWPX는 한글(HWP)문서의 콘텐츠를 표현할 수 있는 OWPML(개방형 워드프로세서 마크업 언어)로 개발된 파일형식으로 국가표준(KSX6101)으로 등록되어 있음.
- HWPML(Hangul Word-Processor Markup Language)는 zip 형태로 압축된 XML 기반의 개방형 파일 포맷. (HWP는 바이너리 파일 포맷)
// HWPML : 한글과컴퓨터사 가 2010년 공개한 아래한글 바이너리 문서 포맷인 HWP 형식을 XML 기반의 마크업 언어로 기술할 수 있는 언어.
- HWP 문서와의 호환성이 반영되어있으며, XML구조를 분석하여 문서포맷을 데이터로 분석한다.
- 확장자는.hwpx
- HWPX 파일포맷 = Zip(시그니처 바이트 50 4B 03 04) 과 같음.
// 기존 익스플로잇 유형 악성 한글파일은 악성 포스트 스크립트가 삽입되어 있어 고스트스크립트를 익스플로잇하는 형태
// HWPX : XML에 공격자 코드를 삽입하고 XML 데이터를 파싱 -> 사용자에게 한글파일을 보여주고 HWP 프로세스가 임의 실행 -> XML에 악성 페이로드가 저장되어 있음.
HWPX 문서 파일 구조
구성 요소 (개체) | 세부정보 |
mimetype | - OCF 스펙에 따라, MIME 타입을 기술하는 파일 - HWPX는 application/hwp+zip 라고 기술 |
version.xml | - 해당 HWPX 문서 파일을 저장한 워드프로세서의 정보 기술 - OWPML 형식 버전 정보 기술 |
settings.xml | - 한/글 프로그램에서 사용하는 사용자 설정 값을 저장 |
META-INF/ | - manifest.xml, container.xml, container.rdf 파일 - ZIP 파일에 적재되어 있는 파일 목록 정보를 지님 (OCF 스펙) |
Contents/ | - 문서의 실제 컨텐츠 데이터를 담은 XML 파일을 담는 폴더 - Content.hpf, header.xml, section0.xml 등의 파일을 보관 |
BinData/ | - 문서에 삽입된 바이너리 파일(예: 이미지 파일 등)을 보관 |
Preview/ | - 문서의 형태를 미리 확인할 수 있는 이미지 파일(PrvImage.png) - 순수 텍스트만 추출해둔(PrvText.txt) 파일 |
Scripts/ | - 문서에서 사용되는 매크로 스크립트 보관 |
악성 HWP 문서에서 빈번하게 사용하는 유형
- POST SCRIPT 유형
- 문서 내에 .EPS, .PS 확장자를 가진 파일이 존재하며 해당 파일 내에 악성 포스트 스크립트가 존재함.
- 악성 포스트 스크립트는 일반적으로 "프로세스 인젝션을 통한 쉘코드 삽입" 혹은 " 파일시스템 조작" 등의 행위를 수행함.
// eps : Encapsulated PostScript
(북 추정 해커 그룹이 EPS를 빈번하게 삽입하여 공격)
// 한글 문서의 파일 형식은 파일의 크기를 최소화 하기 위해 임베디드 된 객체들을 압축하게 되는데 그림과 관련된 데이터와 일부 데이터들을 Zlib 알고리즘을 이용해서 압축한다. eps도 Zlib 알고리즘을 통해 압축이 되어있다.
- 악성 Post Script 본체가 하는 일
1) 프로세스 인젝션을 통한 쉘코드 삽입 및 실행.
(쉘코드를 메모리에 적재시키고 적재된 쉘코드를 실행시키게 함)
2) 파일시스템 조작 등의 행위 수행
(포스트 스크립트가 실행되면서 디렉토리-(피해파일시스템) 특정 경로에 파일을 생성하거나 수정함)
// 'BinData/BIN0008.eps' -> 내부에 EPS, PS 파일 존재일 경우 악성 POST SCRIPT 유형일 수 있음.
// 악성 포스트 스크립트가 암호화 되어 있을 경우 일반적으로 반복문을 통해 복호화 작업(ar변수 내부의 문자열과 204를 XOR하여 복호화시킴)을 수행함. (키 값을 찾기 어려울 경우 고스트스크립트(ghostscript)를 활용한 복호화 권장)
// 익스플로잇의 공격 대상인 고스트스크립트가 32비트로 구동 되기 때문에 쉘코드 또한 32비트로 세팅되어 있음. -> 분석을 위해서는 32비트 디버거로 쉘코드를 분석해야 함.
// 포스트 스크립트 실행 -> 파워쉘 스크립트 실행 - > 공격자 C2서버로부터 악성 페이로드를 전달받음 -> PC 감염
- MACRO 유형
- 문서 내에 악성 자바스크립트 코드를 포함한 스트림이 존재함. (임의로 동작하게 만듦) "Scripts"
- "DefaultJScript" 스트림의 경우 스크립트의 헤더, 소스 등이 저장될 수 있음.
- 악성 자바스크립트가 난독화 되어 있을 경우 브라우저의 개발자 도구 혹은 브라우저의 플러그인(파이어 폭스 브라우저의 "Firebug" 등) 등을 이용하여 복호 작업 수행을 권장.
- 악성 자바스크립트 코드는 실행 과정에서 LOLBins(Living off the Land Binaries)를 통해 VB 스크립트 혹은 파워쉘 스크립트를 추가로 다운로드하여 실행할 수 있음.(센서 우회, 파일경량화 목적)
// 한글 문서는 매크로 언어로 자바스크립트를 사용 -> 이 매크로를 사용하여 문서를 편집하거나 수정할 수 있음. 이러한 순기능을 공격자가 악용하여 악성 행위를 수행함.
// PowerShell : Windows의 명령어 인터프리터
// oledump : 문서 구조 확인 및 특정 스트림 추출할 수 있게 하는 python 코드
- EXPLOIT 유형
- 문서 내에 쉘 코드 바이너리가 포함되어 있으며, 일반적으로 Exploit에 의해 임의로 동작.
- 배포용 문서의 경우 BobyText 외에 ViewTex를 추가적으로 사용.
- 악성 스크립트가 표면적으로 식별되지 않음.
- 파일 내에 동일한 콘텐츠, 크기의 스트림이 존재하는 경우 익스플로잇 타입일 수 있음.
- 데이터의 무질서도가 높고 NOP(No OPeration) 코드가 존재할 수 있으며, 알려진 코드 루틴(함수의 프롤로그 코드, 점프/분기문 등)이 관찰될 경우 쉘코드일 가능성이 높음.)
// 쉘 코드 패턴을 정의한 IoC(Indicator of Compromise)와 YARA 등의 도구 이용 방법을 권장.
// 쉘코드의 외향적 특징 : 데이터의 무작위성이 큼, 코드의 패턴(함수의 프롤로그코드...0x90(NOP Slide), /bin/sh 문자열, system call pattern...)이 관찰됨.
- BINARTY FILE EMBED 유형
- 문서 내에 PE(윈도우 운영체제 실행파일), SWF(플래쉬파일), OLE(Object Linking Embedding) 등과 같은 포맷의 파일이 존재.
// OLE 파일 형식 : 문서, 동영상, 소리, 그림, 수식, 표 등 다양한 데이터를 문서에 포함시킬 수 있음, OLE 파일은 헤더 부분에 d0 cf 11 e0 a1 b1 1a e1 을 가짐.
// PE파일
1) PE Header : Dos 호환성, 파일 실행에 필요한 주요 정보가 저장되어 있음, PE라는 시그니처를 가지고 있음.
2) Section Header : 각 Section (Text Section, Rdata Section, Data Section)들이 존재함, 메모리에 로드 될 때 필요한 정보가 저장되어 있음.
3) Section : PE파일의 실제 내용을 담고 있는 블록들.
// PEview : 윈도우용 실행파일인 PE의 구조를 분석할 수 있는 도구.
// PECarve : 파일 안에 있는 PE파일의 매직넘버와 파일 사이즈를 찾아 PE파일을 추출하는 python코드
- 파일을 추출하여 포맷을 직접 확인할 필요가 있음.
- 외향적으로 보여지는 확장자를 확인하는 것 보다는 시그니처 분석을 통해 파일의 포맥을 명확히 확인하는 것을 권장.
(리눅스의 'file' 과 같은 도구를 사용.)
'[스터디] 암호' 카테고리의 다른 글
[스터디] MITRE ATT&CK (3) | 2024.12.23 |
---|---|
HA(High Availability, 고가용성) (1) | 2024.12.04 |
방화벽 개요 (0) | 2024.12.04 |
[TCP Open SCAN] [Half Open SCAN] [FIN SCAN] [ X-mas SCAN, NULL SCAN] 스캐닝 실습 (0) | 2023.11.20 |
[암호모듈검증] KISA KCMVP 제도 (0) | 2023.08.05 |