PDF 악성코드의 효과적인 탐지 방법론

PDF 기본구조와 기존 탐지 방법론에 대하여

PDF, HWP, MS-Word 등 전자 문서는 다양하고 중요한 정보를 효율적이고 효과적으로 전달하는 매체임에 틀림이 없습니다. 그러나 이렇게 편리한 전자 문서를 악의적인 방법으로 전자 문서 내 악성코드를 숨겨 문서와 문서의 취약점을 이용하여 운영체제를 침해할 수 있는데[1], 이러한 문서 파일들을 문서형 악성코드라 부르며 PDF, Word, Excel, RTF, PowerPoint, GIF, JPEG, PNG등 다양한 형태의 문서형 악성코드가 있습니다. 이 중 PDF와 Word를 이용한 악성코드는 각각 60.1%와 38.7%로 가장 많은 부분을 차지하고 있습니다[2].

코로나19 팬데믹은 우리 일상의 많은 부분을 바꿔 놓았는데, 그 중 업무의 비대면화를 가장 큰 변화로 꼽을 수 있습니다. 이로 인해 이메일 및 메신저 활용이 폭발적으로 증가하였고, 공격자들은 이런 절호의 찬스를 놓칠세라 직장 동료 또는 지인인것처럼 속여 문서형 악성코드를 유포하였습니다. 실제 2020년 초에 코로나19 이슈를 등에 엎고 “백신”, “실제 환자 수” 등의 호기심을 자극하는 문구를 넣은 PDF 악성 문서파일을 유포하여 많은 시스템이 감염사례가 있었습니다[3].

과거부터 현재까지 악성코드를 탐지하고 분석하는 연구 및 솔루션 개발이 활발하게 진행되고 있는데, 대표적으로 안티바이러스 솔루션을 들 수 있습니다. 대부분의 안티바이러스는 시그니처 기반으로 동작하고 있으며, 악성코드의 특별한 패턴을 시그니처로 탐지 엔진에 등록하여 악성코드를 탐지하는 방식입니다. 그러나 시그니처 기반의 탐지 방식은 변종이나 제로데이 공격에 효과적으로 대응하는데 한계점이 있어[4], 최근에는 머신러닝과 딥러닝 기반으로 악성코드를 탐지하는 연구가 활발이 진행되고 있습니다[5].

전통적으로 악성코드(문서형 악성코드 포함)를 탐지하는 연구 방법은 크게 두 가지 방법으로 나눌 수 있습니다. 첫 번째는 동적 분석의 방법으로 즉, 가상머신이나 에뮬레이터를 이용하여 악성코드를 직접 실행시켜 다양한 변화를 분석하는 방법이고, 두 번째는 정적 분석으로 악성코드를 실행하지 않고 내재된 데이터를 추출하여 분석하는 방법입니다[6]. 본 포스팅과 다음 포스팅에서는 두 번째 방법인 정적 분석 방법을 이용하여 PDF 문서형 악성코드에 내재된 유의미한 데이터를 기반으로 ML(Machine Learning)을 활용하여 보다 효과적으로 PDF 문서형 악성코드를 탐지하는 방법을 소개 하고자 합니다.

PDF 파일 구조 및 악성코드

악성코드를 탐지하는 ML 모델을 생성하기에 앞서 언급한 내재된 데이터를 추출하기 위한 PDF문서 파일의 구조에 대한 설명과 악성코드가 동작하는 기본적인 방법을 살펴보도록 하겠습니다.

PDF 파일 구조

PDF의 구조는 그림 1과 같이 구성되어 있습니다. 시그니처 및 버전을 나타내는 Header와 PDF문서의 내용이 들어가 있는 Body, 객체들이 참조할 때 사용되는 정보가 있는 Xref Table, 그리고 파일 구조를 추적할 수 있는 File Trailer가 존재합니다[7].

그림 1. PDF 파일 구조 및 특징[7]

그림 2.A에서 첫 번째 줄은 Header를 나타내며 해당 파일은 PDF1.7이란 정보를 보여줍니다. Body는 두 번째 줄부터 21번째 줄, 37번째 줄부터 43번째 줄로 4개의 객체를 가지는 것을 볼 수 있습니다. Xref Table은 23번째 줄부터 28번째 줄에 있으며 객체들을 참조하기 위해 있습니다. 마지막으로 File Trailer는 29번째 줄부터 35번째 줄에 적혀있고, Root와 Size가 있음을 알 수 있습니다.  Body에 혹은 File Trailer에서 사용되는 오브젝트는 표 1과 같이 8개로 이루어져 있습니다.  Boolean은 참 혹은 거짓을 나타내며 Integer and Real Number는 숫자형 데이터를, String 객체는 문자 데이터를 표현합니다. Names는 Body 필드에서 사용하는 테그의 이름을 나타내며 그림 2.B에서 /Type, /Catalog, /Pages등이 Names 객체입니다. Arrays는 그림 2.B에서 18번째 줄에 MediaBox라고 이름을 같은 데이터에서 [ 0 0 600 400 ]과 같은 데이터를 칭하며, Dictionaries는 3번째 줄부터 5번째 줄 까지 “<<”와 “>>” 사이로 표현된 형태를 말합니다. Stream과 The Null object는 그림 2에는 나와있지 않지만, PDF를 구성 할 때 사용되는 객체로 Stream의 경우 이미지나 script 코드가 들어가는 공간이며 The Null object는 Null을 나타내는 데이터 입니다.

그림 2. 빈 PDF와 PDF구조

표 1. PDF에서의 기본 오브젝트 타입[8]

오브젝트 명설명
Boolean ValuesTrue or Flase
Integer and Real Numbers정수 및 실수 값을 표현
String문자를 나타낼 때 사용, 아스키는 (,) 16진수는 <.>를 이용
Names/로 시작되어 표현. 32비트 운영체제에서의 최대 문자수는 127개이다.
Arrays[]를 활용한 정렬된 오브젝트
Dictionaries2개의 오브젝트를 <<. >> 를 이용하여 표현
Streams상대적으로 크기가 큰 이미지 혹은 페이지를 구성할 때 사용
The Null objectNull로만 표현

PDF문서 구조에서 악성 코드는 대게 Body 필드에서 String, Dictionaries, Stream 객체를 활용하여 악성 행위가 이루어지는데, 해당 내용은 악성코드를 설명하면서 같이 살펴보도록 하겠습니다.

악성코드

문서형 악성코드는 일반적인 악성코드의 형태인 실행 파일(exe)이 아닌 전자문서의 확장자 형태(HWP, PDF, DOC 등)로 존재하며, 전자문서를 실행할 경우 내부 수행 메커니즘을 통해 악성코드(exe 형태)가 동작합니다[9].

2015년 오라클에서 발표한 보고서에 따르면 PDF 문서형 악성코드를 크게 2 가지로 정의하고 있습니다[10].

(1) 악성 콘텐츠 생성을 활용한 구조적 공격
(2) 프로그래밍 및 애플리케이션 상호작용을 이용한 취약점 공격

(1)번의 구조적인 공격의 경우 소프트웨어의 예기치 않은 문제를 발생시키기 위한 목적으로 구조적 변경을 통해 공격을 수행합니다. 예를 들어 PDF Body 필드의 다양한 객체에 큰 데이터와 함께 악성코드를 넣어, 문서 뷰어(ex. Adobe Reader) 프로그램이 이를 읽고 메모리 버퍼 오버플로우(buffer overflow) 혹은 힙 스프레이(Heap spray) 와 같은 문제를 발생하게 합니다.

 (2)번의 프로그래밍 및 애플리캐이션 상호작용 방식은 (1)번과 달리 문서 뷰어 프로그램을 공격하는 대신 문서구조에서 사용할 수 있는 기능과 소프트웨어의 기술을 이용하는 방식입니다. PDF내 Script(Action Script나 javascript), Macros, Visual Basic Action등 프로그램 언어로 코딩 된 악성코드를 삽입하여 직접적인 악성 행위 문제를 야기시킬 수 있습니다[11].

위와 같이 2가지 형태의 PDF 문서형 악성코드는 아래 표 2와 같이 7가지 공격 유형으로 세분화할 수 있습니다.

표 2. PDF 악성코드 공격 유형

공격 유형설명
Script악의적인 스크립트 실행
File Stream악성실행파일 실행
XFAXML 기반 악성 스트림
Fonts글꼴 라이브러리 버그 악용
Multi-Media플레시 취약점
Image이미지 처리 라이브러리 버그 악용
3D3D 렌더링 구성요소 악용

(1) Script기반의 악성코드는 평문으로 작성된 경우가 있지만, 대부분은 은닉을 위해 암호화 혹은 난독화함
(2) File Steam의 경우 PDF에서는 “EmbeddedFile” Name 객체와 stream 객체를 가지고, 악성파일이 바이너리 형태로 저장, 실행할 수 있음
(3) XML의 경우 “/xml” Name 객체와 stream 객체로 구성되며 XFA 아키텍처를 활용하여 javascript를 실행하거나 압축파일을 통해 은닉함
(4) 그 외 Fonts, Multi-Media, Image, 3D등 다양한 객체에 악성코드를 심어 PDF를 실행할 때 악성코드들이 실행되도록 함

ML기반 PDF 문서형 악성코드 탐지 및 분류 연구 동향

 “A Pattern Recognitioin System for Malicious PDF Files Detection”은 PDF의 flexible한 특징을 활용하여 연구를 진행하였는데, 다른 파일 내부에서 가질 수 있는 javascript code, 내장된 악성 파일을 검출하고자 악성문서 파일에서의 keyword와 일반문서 파일에서의 keyword의 주기를 계산한 후 K-Means clustering을 활용하여 그룹화 하였고, 해당 그룹을 벡터화하여 feature로 사용하였다.

“Lux0R: Detection of Malicious PDF-embedded JavaScript code through Discriminat Analysis of API References”은 javascript 악성코드가 가지는 몇 가지 특징점을 기반으로, PDF 뷰어에서만 사용하는 js API에 대한 횟수를 feature로 이용했으며, “A Structural and Content-based Approach for a Precise and Robust Detection of Malicious PDF Files”는 기존에 javascript에 집중된 악성코드 탐지가 아닌 structure의 구조에 관심을 가졌습니다.

2016년도부터 나오는 “Keeping pace with the creation of new malicious PDF files using an active-learning based detection framework”, “Hidost: a tatic machine-learning-based detector of malicious files”, “When a Tree Falls: Using Diversity in Ensemble Calssifiers to Identify Evasion in Malware Detectors” 등의 연구에서는 structure기반의 feature를 사용했고, feature를 path(key):name(values)의 dictionary형태로 바꿨으며 다양한 모델을 선정하는 방식의 연구가 대부분이었습니다. 같은 해에 나온 “Fepdf A robust feature extractor for malicious pdf Detection”의 경우 javascript code 악성코드가 가장 많이 있다는 점에 착안하여 다른 javascript의 feature extraction을 정교하기 위해 PDF 파서 대한 연구했습니다. “Malware Detection in PDF Files Using Machine Learning”, “On Training Robust PDF Malware Classifiers”들은 과거보다 발전된 PDA parser들을 활용하며 meta-data를 추가적으로 활용하거나, path:name을 기반으로의 특징점을 활용하여 feature를 고도화 했습니다. 이렇듯 시간이 흐를수록 문서의 파서가 발전하여 feature선정을 단순 frequency로 접근하였고, 여러 모델을 활용하여 최적의 모델을 선정하였으며 현재는 path:name 의 dictionary 형태를 활용하는 방향으로 발전된 점을 볼 수 있습니다. 모델을 변경하는 방법을 제외하고는 feature의 선정방식에 있어 년도별로 차이가 있음을 볼 수 있는데, 모든 경우의 keyword frequency를 활용한 것이 아닌 key word를 선정함에 있어 여러 방법론을 활용하고, 2018년까지는 path:name의 dictionary 형태로 만들어 미리 keyword를 선정하는 feature extraction을 하는 방식이 많습니다.

이러한 방식은 휴리스틱 기반 없이 오로지 ML기반을 활용한 방법으로 feature를 선정하고 추출하는 방식으로 모집한 데이터가 다를 경우에는 feature 선정에 있어 일정치 못한 결과를 가져올 수 있으며 모델의 재사용을 못하는 단점을 가지고 있습니다.

표 3. ML기반 PDF 문서형 악성코드 탐지[12]

연번제목Feature / 특이점
1A Pattern Recognitioin System for Malicious PDF Files Detection(2012)malare, benign file에서의 embedded keyword frequency를 vector화하여 사용
2Lux0R: Detection of Malicious PDF-embedded JavaScript code through Discriminat Analysis of API References(2014)Acrobat PDF API(JS)의 frequency활용
3A Structural and Content-based Approach for a Precise and Robust Detection of Malicious PDF Files(2015)structure: 파일의크기, versions, indirect object 수, streams 수, compressed object 수, object stream 수, x-ref stream 수, javscript를 포함한 object의 개수
4Keeping pace with the creation of new malicious PDF files using an active-learning based detection framework(2016)path와 name을 feature로 사용
5Hidost: a tatic machine-learning-based detector of malicious files(2016)path와 name을 vectorization한 후 사용
6When a Tree Falls: Using Diversity in Ensemble Calssifiers to Identify Evasion in Malware Detectors(2016)앙상블 모델처럼 계산하여 사용
7Fepdf A robust feature extractor for malicious pdf Detection(2016)javascript code의 extraction 고도화
8Malware Detection in PDF Files Using Machine Learning(2018)PDFiD에서 나오는 tag들
9On Training Robust PDF Malware Classifiers(2018)path와 name을 feature로 사용

따라서, 본 포스팅에서는 최근 연구에서 사용했던 path:name의 dictionary형태의 특징점을 찾는 것과 달리 (Data Collection, Data Pre-Processing) 시그니처 기반의 PDF 구조적 분석을 바탕으로 feature를 선정하여 (Learning) 학습 모델을 만든 후, (Evaluation) 기존 연구들 보다 PDF 문서형 악성코드를 효과적으로 탐지할 수 있는지에 대해 실험 및 분석을 진행하였습니다.

그림 3. 시스템 구성도

다음 포스팅인 “PDF 악성코드의 효과적인 탐지 방법론 : ML 기반 탐지”에서는 그림 3의 일련의 과정을 구체적으로 설명하면서 “ML 기반 PDF 악성코드 효과적 탐지” 글을 연재하도록 하겠습니다.

Reference

1. Lu X, Wang F, Jiang C, Lio P. A Universal Malicious Documents Static Detection Framework Based on Feature Generalization. Applied Sciences. 2021; 11(24):12134. https://doi.org/10.3390/app112412134
2. Tian, X. Research on Maliciousness Detection Algorithm of Word and PDF Documents. Doctoral Dissertation, Xidian University, Xi’an, China, 2017
3. https://www.sciencetimes.co.kr/news/%ec%bd%94%eb%a1%9c%eb%82%9819-%eb%8b%ae%ec%9d%80-%ec%82%ac%ec%9d%b4%eb%b2%84-%ed%8c%ac%eb%8d%b0%eb%af%b9-%ec%8b%9c%eb%8c%80-%ec%98%a8%eb%8b%a4/
4. 최선오, 김영수, 김종현, 김익균.(2017).딥러닝을 이용한 악성코드탐지 연구동향.정보보호학회지,27(3),20-26.
5.  조영복.(2018).딥러닝 기반의 R-CNN을 이용한 악성코드 탐지 기법.한국디지털콘텐츠학회 논문지,19(6),1177-1183.
6. 윤채은, 정혜현, 서창진.(2021).딥러닝과 PDF 객체분석을 이용한 문서형 악성코드 탐지.전기학회논문지 P,70P(1),44-49.
7. 신강식(Kangsik Shin),and 조호묵(Homook Cho). “PDF 문서형 악성코드 탐지를 위한 효율적인 전처리 아키텍처 설계.” 한국정보과학회 학술발표논문집 2021.12 (2021): 862-864.
8. 김영걸. “문서형 악성코드 행위 탐지 연구.” 국내석사학위논문 순천향대학교 대학원, 2017. 충청남도
9. https://csrc.kaist.ac.kr/blog/2021/06/15/%eb%ac%b8%ec%84%9c%ed%98%95-%ec%95%85%ec%84%b1%ec%bd%94%eb%93%9c%eb%8a%94-%eb%ac%b4%ec%97%87%ec%9d%b4%ea%b3%a0-%ec%96%b4%eb%96%a0%ed%95%9c-%ed%8a%b9%ec%a7%95%ec%9d%b4-%ec%9e%88%ec%9d%84%ea%b9%8c/
10. Oracle. (2015, 05). Zero day malware threat prevention ensuring document safety with outside in clean content. Retrieved from http://www.oracle.com/us/products/middleware/zero-day-malware-protection-brief-2607983.pdf
11. Priyansh Singh, Shashikala Tapaswi & Sanchit Gupta (2020) Malware Detection in PDF and Office Documents: A survey, Information Security Journal: A Global Perspective, 29:3, 134-153, DOI: 10.1080/19393555.2020.1723747
12. Bo Yun Zhang, Xi Ai Yan, De Quan Tang, “Survey on Malicious Code Intelligent Detection Techniques,” Journal of Physics Conference Series 1087(6), Sep, 2018

2 명이 이 글에 공감합니다.