KR20210082706A - 파일 언패킹 방법 - Google Patents

파일 언패킹 방법 Download PDF

Info

Publication number
KR20210082706A
KR20210082706A KR1020190174908A KR20190174908A KR20210082706A KR 20210082706 A KR20210082706 A KR 20210082706A KR 1020190174908 A KR1020190174908 A KR 1020190174908A KR 20190174908 A KR20190174908 A KR 20190174908A KR 20210082706 A KR20210082706 A KR 20210082706A
Authority
KR
South Korea
Prior art keywords
file
unpacking
packer
type
section
Prior art date
Application number
KR1020190174908A
Other languages
English (en)
Inventor
최미정
김종욱
방지원
Original Assignee
한국전력공사
강원대학교산학협력단
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 한국전력공사, 강원대학교산학협력단 filed Critical 한국전력공사
Priority to KR1020190174908A priority Critical patent/KR20210082706A/ko
Publication of KR20210082706A publication Critical patent/KR20210082706A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Virology (AREA)
  • Health & Medical Sciences (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Health & Medical Sciences (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Storage Device Security (AREA)

Abstract

파일 언패킹 방법이 개시된다. 본 발명의 파일 언패킹 방법은 탐지부가 PE(Portable Executable) 파일의 정보를 추출하고 추출된 정보를 토대로 상기 PE 파일이 패킹되어 있는지를 판단하고 판단 결과 상기 PE 파일이 패킹되어 있으면 패커의 종류를 탐지하는 단계; 언패킹부가 상기 탐지부에 의해 패커의 종류가 탐지되면 탐지된 패커의 종류에 따라 정적 분석과 동적 분석 기반의 하이브리드 분석을 수행하는 단계; 및 검증부가 상기 언패킹부의 언패킹 과정에서 오리지날 엔트리 포인트(Original Entry Point;OEP)를 찾은 후, 이 오리지날 엔트리 포인트를 통해 파일 섹션을 복원하여 복원 파일과 원본 파일의 비교를 통해 상기 언패킹부의 언패킹을 검증하는 단계를 포함하는 것을 특징으로 한다.

Description

파일 언패킹 방법{FILE UNPACKING METHOD}
본 발명은 파일 언패킹 방법에 관한 것으로서, 더욱 상세하게는 PE(Portable Executable) 파일의 패커(Packer)를 탐지하고 탐지된 패커의 종류에 따라 정적 분석과 동적 분석 중 어느 하나로 패킹파일을 언패킹한 후 해당 언패킹(Unpacking)이 정상적으로 수행되었는지를 검증하는 파일 언패킹 방법에 관한 것이다.
패킹(Packing)이란 실행압축이라고도 불리는데, 실행파일(exe, dll, sys 등)을 압축하여 파일 크기를 줄이고 압축된 상태에서 실행을 가능하게 하는 기술이다. 원래 패킹 기술은 DOS OS 파일의 크기를 줄여서 저장 공간을 효율적으로 확보하기 위해서 개발되었지만, 최근에는 악성코드를 은닉하는 방법으로 많이 사용되고 있다. 최근 자료에는 92% 이상의 악성코드에 실행 압축 기술이 적용되어있다고 한다.
패킹된 파일에서 원본 파일의 코드는 은닉되기 때문에 언패킹(Unpacking) 과정을 거쳐야 바이너리 분석이 가능하게 된다. 언패킹된 파일의 PE(Portable Executable) 헤더를 분석하면 패킹 여부 및 패커 종류 탐지에 필요한 정보를 얻을 수 있다. 파일을 압축시켜주는 패커의 종류는 현재 well-known 패커만 해도 10개가 넘고, 악성코드 제작자나 해커들이 만든 패커(custom)를 합치면 수십 개의 종류가 넘는다. 통상적으로, 대표적으로 많이 사용되는 UPX패커로 패킹된 파일과 원본파일, 메모리에 올라갔을 때의 파일 상태를 참조하면, 원본 파일의 코드는 UPX패커로 패킹될 경우 UPX1섹션에 기록된다. 패킹된 파일이 메모리에 올라가면 UPX1 섹션에 존재하는 원본코드가 UPX0 섹션에 쓰여지면서 파일은 실행된다.
파일을 패킹해주는 well-known 패커 알고리즘은 여러 종류가 있으나, 이를 언패킹하는 라이브러리나 툴을 지원하는 패커는 극히 일부만 존재한다. 또한, 툴이 존재하더라도 버전 문제나 라이브러리 충돌 문제로 언패킹을 진행하지 못하는 패커가 많으며, 패킹 알고리즘 자체가 알려지지 않아 언패킹 툴 자체가 없는 custom 패커도 존재한다.
현재 언패킹에 대한 연구는 잘 이루어지지 않아 알고리즘이나 시스템 설계 정도까지 진행되었다. 동적 분석 기반으로 파일을 언패킹을 수행하는 기존의 연구들은 오리지날 엔트리 포인트(Original Entry Point;OEP)까지만 탐지하여 언패킹이 완료되었다고 하지만, 오리지날 엔트리 포인트를 잘못 탐지하는 가능성이 존재하며, 해당 파일을 분석하기 위해서 파일의 데이터가 제대로 복원되었는지 검증하는 연구 및 구현된 언패킹 시스템에 대한 연구는 여전히 미흡한 실정이다.
본 발명의 배경기술은 대한민국 등록특허공보 10-1977265호(2019.05.03)의 '패킹된 실행파일의 시작지점 탐지 방법 및 장치'에 개시되어 있다.
본 발명은 전술한 문제점을 개선하기 위해 창안된 것으로서, 본 발명의 일 측면에 따른 목적은 PE(Portable Executable) 파일의 패커(Packer)를 탐지하고 탐지된 패커의 종류에 따라 정적 분석과 동적 분석 중 어느 하나로 패킹파일을 언패킹한 후 해당 언패킹(Unpacking)이 정상적으로 수행되었는지를 검증하는 파일 언패킹 방법을 제공하는 데 있다.
본 발명의 일 측면에 따른 파일 언패킹 방법은 탐지부가 PE(Portable Executable) 파일의 정보를 추출하고 추출된 정보를 토대로 상기 PE 파일이 패킹되어 있는지를 판단하고 판단 결과 상기 PE 파일이 패킹되어 있으면 패커의 종류를 탐지하는 단계; 언패킹부가 상기 탐지부에 의해 패커의 종류가 탐지되면 탐지된 패커의 종류에 따라 정적 분석과 동적 분석 기반의 하이브리드 분석을 수행하는 단계; 및 검증부가 상기 언패킹부의 언패킹 과정에서 오리지날 엔트리 포인트(Original Entry Point;OEP)를 찾은 후, 이 오리지날 엔트리 포인트를 통해 파일 섹션을 복원하여 복원 파일과 원본 파일의 비교를 통해 상기 언패킹부의 언패킹을 검증하는 단계를 포함하는 것을 특징으로 한다.
본 발명의 상기 패커의 종류를 탐지하는 단계에서, 상기 탐지부는 진입점 섹션(Entry Section)을 탐지하여 상기 진입점 섹션이 존재하는지에 따라 상기 PE 파일이 패킹되었는지를 판단하는 것을 특징으로 한다.
본 발명의 상기 패커의 종류를 탐지하는 단계에서, 상기 탐지부는 상기 PE 파일이 패킹되어 있는 것으로 판단되면 상기 PE 파일의 시그니처를 분석하는 것을 특징으로 한다.
본 발명의 상기 패커의 종류를 탐지하는 단계에서, 상기 탐지부는 PEfile 또는 PEiD를 이용하여 상기 PE 파일을 분석하는 것을 특징으로 한다.
본 발명의 상기 패커의 종류를 탐지하는 단계에서, 상기 탐지부는 상기 시그니처를 기 저장된 패커 정보와 비교하여 비교 결과에 따라 패킹 유무와 패커의 종류 및 패커의 버전을 탐지하는 것을 특징으로 한다.
본 발명의 상기 패커의 종류를 탐지하는 단계에서, 상기 탐지부는 진입점 섹션의 엔트로피 값을 사용하는 엔트로피 기반 탐지를 수행하여 상기 PE 파일이 패킹되었는지를 판단하는 것을 특징으로 한다.
본 발명의 상기 패커의 종류를 탐지하는 단계에서, 상기 탐지부는 상기 PE 파일에 쓰기 속성이 있는지를 확인하는 쓰기 속성 기반 탐지를 수행하여 상기 PE 파일이 패킹되었는지를 판단하는 것을 특징으로 한다.
본 발명의 상기 패커의 종류를 탐지하는 단계에서, 상기 탐지부는 진입점 섹션의 엔트로피 값을 사용하는 엔트로피 기반 탐지, 및 상기 PE 파일에 쓰기 속성이 있는지를 확인하는 쓰기 속성 기반 탐지를 모두 수행하여 상기 PE 파일이 패킹되었는지를 판단하는 것을 특징으로 한다.
본 발명의 상기 하이브리드 분석을 수행하는 단계에서, 상기 언패킹부는 상기 패커의 종류가 언패킹 라이브러리를 제공하는 것인지 여부에 따라 상기 정적 분석과 상기 동적 분석 중 어느 하나를 수행하는 것을 특징으로 한다.
본 발명의 상기 하이브리드 분석을 수행하는 단계에서, 상기 언패킹부는 상기 패커의 종류가 언패킹 라이브러리를 제공하는 것이면 상기 정적 분석을 수행하고, 상기 패커의 종류가 언패킹 라이브러리를 제공하지 않는 것이면 상기 동적 분석을 수행하는 것을 특징으로 한다.
본 발명의 상기 하이브리드 분석을 수행하는 단계에서, 상기 언패킹부는 기 설정된 정적 분석 툴을 활용하여 상기 PE 파일을 분석하고 분석 결과에 상기 패커의 종류에 따라 언패킹 툴을 사용하는 것을 특징으로 한다.
본 발명의 상기 정적 분석 툴은 오프 소스로 제공되는 기 설정된 PEframe[29]인 것을 특징으로 한다.
본 발명의 상기 하이브리드 분석을 수행하는 단계에서, 상기 언패킹부는 상기 PE 파일의 오리지날 엔트리 포인트를 찾아 상기 PE 파일이 언패킹하는 것을 특징으로 한다.
본 발명의 상기 하이브리드 분석을 수행하는 단계에서, 상기 언패킹부는 각 섹션이 엔트로피를 측정하고 현재 측정한 각 섹션의 엔트로피와 이전에 측정한 엔트로피간의 엔트로피 변화량을 이용하여 상기 오리지날 엔트리 포인트를 찾는 것을 특징으로 한다.
본 발명의 상기 언패킹부의 언패킹을 검증하는 단계에서, 상기 검증부는 상기 PE 파일에 대한 파일 분석에 필요한 .text 섹션과 .data 섹션에 대한 복원을 수행하고 복원된 복원 파일과 원본 파일과의 비교를 통해 언패킹을 검증하는 것을 특징으로 한다.
본 발명의 상기 언패킹부의 언패킹을 검증하는 단계에서, 상기 검증부는 상기 복원 파일과 상기 원본 파일을 비교하여 복원율을 계산하는 것을 특징으로 한다.
본 발명의 상기 언패킹부의 언패킹을 검증하는 단계에서, 상기 검증부는 상기 원본 파일과 상기 복원 파일의 패딩과 쓰레기 값을 제거하고, 상기 원본 파일의 섹션 별 길이와 데이터를 저장하고 MD5 해시 함수를 사용하여 H1 값을 계산하며, 상기 원본 파일의 섹션의 길이만큼 상기 복원 파일에서 해시 값 H2를 계산하며, 상기 원본 파일과 상기 복원 파일에서 각각 변환한 해시 값이 같으면 복원율을 출력하고, 상기 해시 값이 같지 않으면 상기 원본 파일의 섹션의 길이를 감소시키면서 상기 해시 값이 동일할 때까지 반복하여 복원율을 계산하는 것을 특징으로 한다.
본 발명의 일 측면에 따른 파일 언패킹 방법은 PE(Portable Executable) 파일의 패커(Packer)를 탐지하고 탐지된 패커의 종류에 따라 정적 분석과 동적 분석 중 어느 하나로 패킹파일을 언패킹한 후 해당 언패킹(Unpacking)이 정상적으로 수행되었는지를 검증한다.
본 발명의 다른 측면에 따른 파일 언패킹 방법은 정적 분석과 동적 분석 기반의 하이브리드 분석을 통해 상대적으로 높은 탐지율의 탐지 성능을 확보할 수 있다.
도 1 은 본 발명의 일 실시예에 따른 파일 언패킹 장치의 블럭 구성도이다.
도 2 는 본 발명의 일 실시예에 따른 PE 파일의 구조를 나타낸 도면이다.
도 3 은 본 발명의 일 실시예에 따른 파일 언패킹 방법의 순서도이다.
도 4 는 본 발명의 일 실시예에 따른 수집한 패커의 시그니처를 나타낸 도면이다.
도 5 는 본 발명의 일 실시예에 따른 패킹 탐지 알고리즘을 나타낸 도면이다.
도 6 은 본 발명의 일 실시예에 따른 동적 분석 기반 OEP 탐지 알고리즘을 나타낸 도면이다.
도 7 은 본 발명의 일 실시예에 따른 언패킹 파일 복원율 계산 알고리즘을 나타낸 도면이다.
도 8 은 본 발명의 일 실시예에 따른 탐지 기법에 따른 패킹 탐지율 비교 결과를 나타낸 도면이다.
도 9 는 본 발명의 일 실시예에 따른 패커별 언패킹 후 . text와 .data 섹션 복원율 비교 결과를 나타낸 도면이다.
도 10 은 본 발명의 일 실시예에 따른 .reloc 섹션 존재 유무에 따른 패커별 .text와 .data 섹션 복원율 비교 결과를 나타낸 도면이다.
이하에서는 본 발명의 일 실시예에 따른 파일 언패킹 방법을 첨부된 도면들을 참조하여 상세하게 설명한다. 이러한 과정에서 도면에 도시된 선들의 두께나 구성요소의 크기 등은 설명의 명료성과 편의상 과장되게 도시되어 있을 수 있다. 또한 후술되는 용어들은 본 발명에서의 기능을 고려하여 정의된 용어들로서, 이는 이용자, 운용자의 의도 또는 관례에 따라 달라질 수 있다. 그러므로 이러한 용어들에 대한 정의는 본 명세서 전반에 걸친 내용을 토대로 내려져야할 것이다.
본 명세서에서 설명된 구현은, 예컨대, 방법 또는 프로세스, 장치, 소프트웨어 프로그램, 데이터 스트림 또는 신호로 구현될 수 있다. 단일 형태의 구현의 맥락에서만 논의(예컨대, 방법으로서만 논의)되었더라도, 논의된 특징의 구현은 또한 다른 형태(예컨대, 장치 또는 프로그램)로도 구현될 수 있다. 장치는 적절한 하드웨어, 소프트웨어 및 펌웨어 등으로 구현될 수 있다. 방법은, 예컨대, 컴퓨터, 마이크로프로세서, 집적 회로 또는 프로그래밍가능한 로직 디바이스 등을 포함하는 프로세싱 디바이스를 일반적으로 지칭하는 프로세서 등과 같은 장치에서 구현될 수 있다. 프로세서는 또한 최종-사용자 사이에 정보의 통신을 용이하게 하는 컴퓨터, 셀 폰, 휴대용/개인용 정보 단말기(personal digital assistant: "PDA") 및 다른 디바이스 등과 같은 통신 디바이스를 포함한다.
도 1 은 본 발명의 일 실시예에 따른 파일 언패킹 장치의 블럭 구성도이고, 도 2 는 본 발명의 일 실시예에 따른 PE 파일의 구조를 나타낸 도면이다.
도 1 을 참조하면, 본 발명의 일 실시예에 따른 파일 언패킹 장치는 파일 입력부(10), 탐지부(20), 언패킹부(30) 및 검증부(40)를 포함한다.
파일 입력부(10)는 PE(Portable Executable) 파일을 탐지부(20)에 입력한다.
PE 파일은 PE 파일 포맷은 Windows 환경에서 사용되는 실행 파일의 모든 포맷으로 윈도우 로더가 실행 가능한 코드를 관리하는데 필요한 정보를 캡슐화하여 저장한 데이터 구조체이다.
도 2 에서, 왼쪽은 PE 파일의 구조이며, 오른쪽은 메모리에 로드되었을 때의 상태를 나타낸다.
PE 파일은 DOS 헤더, PE 헤더, 각 섹션의 헤더와 섹션 테이블로 구성되어 있다. 이 중 PE 헤더는 PE 파일의 실행 환경 정보를 가지고 있는 구조체이다. PE 헤더는 PE 고유의 식별자로 시작하며, 언패킹에 필요한 정보인 실행될 수 있는 시스템, 섹션 수, 실행 속성, 진입점 섹션의 속성값 등을 포함하고 있다.
탐지부(20)는 파일 입력부(10)로부터 입력받은 PE 파일의 정보를 추출하고 추출된 정보를 토대로 파일이 패킹되어 있는지를 판단하고 판단 결과 해당 패킹되어 있으면 패커의 종류를 탐지한다. 이 경우, 탐지부(20)는 진입점 섹션 탐지, 시그니처 기반 탐지, 엔트로피 기반 탐지 및 쓰기 속성 기반 탐지 등을 토대로 패커의 종류를 탐지할 수 있다.
언패킹부(30)는 탐지부(20)에 의해 패커의 종류가 탐지되면 탐지된 패커의 종류에 따라 정적 분석과 동적 분석 기반의 하이브리드 분석을 수행한다. 이 경우, 언패킹부(30)는 패커의 종류가 언패킹 라이브러리를 제공하는 것이라면 정적 분석을 수행하고 패커의 종류가 언패킹 라이브러리를 제공하지 않는 것이라면 동적 분석을 수행한다.
정적 분석은 악성코드를 실행하지 않은 상태에서 내부 코드와 구조를 파악하고 흐름 분석을 통해 수행시 어떤 동작이 진행되는지 파악하는 방법이다. 정적 분석은 바이트 코드를 직접 분석하거나 코드를 분해해서 opcode 및 프로그램의 내용에 대한 세부 정보를 추출하는 방식으로 수행된다.
한편, 정적 분석에는 한편, PE 헤더의 정보만으로는 분석에 한계가 있을 경우, PE파일 전체를 분석하는 방식도 존재하며, PE파일 전체를 분석하는 방식은 동적 분석과 달리 Anti-VM이나 Anti-Debug 등을 무력화하는 환경 구축에 제한없이 진행될 수 있다. 또한, PE파일 전체를 분석하는 방식은 악성코드를 실행하지 않은 상태에서 진행되기 때문에 악성코드 감염의 위험과 악성코드 실행에 따른 자원 과부하가 없다는 장점이 있다.
동적 분석은 악성코드를 직접 실행시켜 코드의 흐름과 메모리 상태를 직접 모니터링하는 방법이다. 동적 분석은 주로 악성 행위를 감시 및 추적하고 실제 동작방식을 분석하는 데 사용된다. 또한, 동적 분석은 행위 정보 기반으로 분석하기 때문에 신규 악성코드에 대한 탐지 가능성이 높고, 분석 기능의 자동화가 가능해 의심스러운 코드나 설계 등 탐지에 대한 편의성이 제공된다.
검증부(40)는 언패킹부(30)의 언패킹 과정에서 오리지날 엔트리 포인트(Original Entry Point;OEP)를 찾은 후, 이 오리지날 엔트리 포인트를 통해 파일 섹션을 복원한다.
즉, 검증부(40)는 언패킹부(30)의 언패킹 과정에서 오리지날 엔트리 포인트를 찾고 이 오리지날 엔트리 포인트를 통해 파일분석에 필요한 .text 섹션과 .data 섹션에 대한 복원을 수행하여 원본 파일과의 비교를 통해 올바르게 언패킹이 이루어졌는지 판단한다. 이 경우, 검증부(40)는 원본파일과 언패킹이 수행된 파일을 비교하여 각 섹션의 복원이 얼마나 수행되었는지 확인하는 복원율을 계산할 수 있다.
이상으로 상술한 구성 요소들의 기능은 본 실시예에 대한 동작을 보다 명확하게 이해할 수 있도록 각기 구분하여 설명하였으나, 실시예에 따라서는 구성 요소들의 기능이 모두 통합되어 실시되거나, 또는 구성 요소들 중 어느 하나가 나머지 구성 요소들의 기능 중 적어도 하나 이상을 대체하여 실시할 수도 있음에 유의한다.
이하 본 발명의 일 실시예에 따른 파일 언패킹 방법을 도 3 내지 도 10 을 참조하여 상세하게 설명한다.
도 3 은 본 발명의 일 실시예에 따른 파일 언패킹 방법의 순서도이고, 도 4 는 본 발명의 일 실시예에 따른 수집한 패커의 시그니처를 나타낸 도면이며, 도 5 는 본 발명의 일 실시예에 따른 패킹 탐지 알고리즘을 나타낸 도면이며, 도 6 은 본 발명의 일 실시예에 따른 동적 분석 기반 OEP 탐지 알고리즘을 나타낸 도면이며, 도 7 은 본 발명의 일 실시예에 따른 언패킹 파일 복원율 계산 알고리즘을 나타낸 도면이며, 도 8 은 본 발명의 일 실시예에 따른 탐지 기법에 따른 패킹 탐지율 비교 결과를 나타낸 도면이며, 도 9 는 본 발명의 일 실시예에 따른 패커별 언패킹 후 . text와 .data 섹션 복원율 비교 결과를 나타낸 도면이며, 도 10 은 본 발명의 일 실시예에 따른 .reloc 섹션 존재 유무에 따른 패커별 .text와 .data 섹션 복원율 비교 결과를 나타낸 도면이다.
도 3 내지 도 10 을 참조하면, 먼저 파일 입력부(10)는 PE 파일을 탐지부(20)에 입력한다(S10).
파일 입력부(10)로부터 PE 파일이 입력됨에 따라, 탐지부(20)는 PE 파일의 정보를 추출하고 추출된 정보를 토대로 파일이 패킹되어 있는지를 판단하여 판단 결과 해당 패킹되어 있으면 패커의 종류를 탐지한다(S20).
즉, 탐지부(20)는 먼저 진입점 섹션(Entry Section)을 탐지한다. 진입점 섹션은 PE 파일에 반드시 존재하는 섹션으로서 PE 파일에 대한 정보가 담긴 섹션이다.
만약, 탐지부(20)는 진입점 섹션이 존재하지 않을 경우, 패킹이나 추가적인 기법을 통해 진입점 섹션을 은닉했다는 것으로 패킹되어 있는 것으로 판단한다.
이어, 탐지부(20)는 PEfile을 사용하여 입력된 PE 파일을 분석한다.
PEfile은 파이썬 기반 PE 파일 분석 모듈로서 시그니처 뿐만 아니라 오프셋, 진입점 섹션의 주소, 섹션 별 속성 등을 분석해주는 도구이다.
PEiD는 초기 분석에 사용하는 PE파일 분석 도구로서 상기 PEfile과 동일한 기능을 제공한다.
탐지부(20)는 추출한 PE 파일의 시그니처로 패커 정보를 저장한 데이터베이스(미도시)와 비교하여 패킹 유무와 패커의 종류 및 버전 탐지를 수행할 수 있다.
일 예로, 데이터베이스(미도시)에 저장된 시그니처의 수는 PEiD와 BobSoft 등에서 수집된 시그니처를 포함하여 약 7,000개일 수 있다.
도 4 에는 데이터베이스에 저장된 패커들의 시그니처 중 3개를 보여주고 있다. 각 시그니처들은 빈 줄로 구분된다.
도 4 에서 각 패커의 첫번째 줄은 패커의 종류와 버전, 시그니처의 제작자를 나타내고, 두 번째 줄의 16진수는 패커에 따른 시그니처를 표현한 것이다. 세번째 줄의 ep_only 값은 시그니처가 진입점 섹션에서 발견될 수 있는지를 나타낸 것이다. 즉, ep_only의 값이 true이면, 패커의 시그니처가 진입점 섹션에서 발견된다는 의미이다.
시그니처 기반으로 패킹 여부 탐지가 불가능하면, 탐지부(20)는 진입점 섹션의 엔트로피 기반 탐지 및 쓰기('WRITE') 속성 탐지를 동시에 진행한다.
엔트로피 기반 탐지 방법은 패킹 여부를 탐지하기 위해 PE 파일의 진입점 섹션의 엔트로피 값을 사용하는 방법이다.
PE 파일 전체 섹션의 엔트로피 값으로 패킹 여부를 탐지하면 패킹되지 않은 일반 파일의 엔트로피 값과 겹치는 부분이 발생한다. 하지만 진입점 섹션의 엔트로피 값으로 패킹 여부를 탐지하면 패킹된 파일과 일반 파일의 엔트로피 값이 겹치는 범위가 없어진다. 따라서 탐지부(20)는 패킹된 파일과 패킹되지 않은 일반 파일을 구분하기 위해 진입점 섹션의 엔트로피값을 사용한다.
탐지부(20)는 진입점 섹션의 엔트로피 값 기준으로 패킹 여부 탐지 범위를 정하기 위해 300개의 Windows 폴더의 PE 파일들로 테스트한 결과, 엔트로피 값이 설정 범위 예컨데, 5 미만이거나 685 초과일 경우에 패킹이 되었다고 기준을 정할 수 있다.
또한, 탐지부(20)는 상기한 엔트로피 기반 탐지를 진행하는 동시에, 쓰기 속성 기반 패킹 탐지 방법을 수행한다.
쓰기 속성 기반 탐지 기법은 기준으로 정한 엔트로피 값의 범위를 벗어났더라도, PE 파일에 쓰기 속성이 있는지 확인하여 패킹 여부를 탐지하는 기법이다. 패킹된 PE 파일은 패킹을 해제하는 코드와 패킹된 데이터를 쓰는 권한이 필요하므로, 쓰기 속성을 살펴보면 패킹 여부를 알 수 있다.
PE 파일의 속성은 PE 파일의 헤더에서 확인할 수 있는데, 이 값은 WinNTh에 정의되어 있다. 대표적으로 정의된 항목은 실행 가능(0x20000000), 읽기 가능(0x40000000), 쓰기 가능(0x80000000) 등이 있다.
그러므로 패킹된 파일의 헤더를 분석하여, 파일의 WRITE 속성값이 0x80000000 이상일 경우 패킹이 되었다고 할 수 있다. 300개의 PE 파일로 테스트한 결과, 진입점 섹션의 엔트로피 기반 시스템에서 패킹 여부를 탐지했을 때, 오탐(false positive)은 발생하지 않았다.
엔트로피 범위와 쓰기 속성을 And로 진행한 것은 실험 부분에서 설명할 정상적으로 패킹이 안된 PE 파일과 패커의 종류에 따른 엔트로피 값이 정상인 부분에 존재하는 패커가 존재하거나 비정상 범위의 정상 PE 파일이 존재하기 때문이다. 따라서, 악성코드의 패킹 여부를 탐지하면서 오탐을 줄이기 위한 방법으로 는 진입점 섹션의 엔트로피 기반 탐지 및 쓰기('WRITE') 속성 탐지를 And로 진행한다.
도 5 는 상기한 탐지기법에 대한 내용을 알고리즘으로 설명한 도면이다.
언패킹부(30)는 탐지부(20)에 의해 패커의 종류가 탐지되면 탐지된 패커의 종류가 언패킹 라이브러리(Unpacking Library)를 제공하는지 여부에 따라 정적 분석과 동적 분석을 수행한다(S30). 이 경우, 언패킹부(30)는 패커의 종류가 언패킹 라이브러리를 제공하는 것이라면 정적 분석을 수행하고 패커의 종류가 언패킹 라이브러리를 제공하지 않는 것이라면 동적 분석을 수행한다.
여기서, 정적 분석은 패킹 알고리즘의 특징에 기반으로 언패킹하는 것으로, 패킹 파일을 직접 수행하지 않아도 되기 때문에 감염 위험이 없고, 빠르게 수행할 수 있다.
반면 동적 분석은 패킹 알고리즘에 의존하지 않은 언패킹 방법으로, 분석 시간은 상대적으로 길게 걸리지만 패킹 알고리즘에 관계없이 언패킹을 할 수 있다는 장점이 있다.
본 실시예에서는, 상기한 정적 분석과 동적 분석을 함께 사용하는 하이브리드 방식이 이용된다.
즉, 언패킹부(30)는 탐지한 패커 종류가 언패킹 라이브러리를 제공하는 것이라면 정적 분석을 수행하고, 패커의 종류가 언패킹 라이브러리를 제공하지 않는 것이라면 동적 분석을 수행한다.
언패킹부(30)는 오픈 소스로 제공되는 ‘PEframe[29]’이라는 정적 분석 툴을 활용하여 정적 분석을 수행한다. 이러한 정적 분석 툴의 분석 결과로 버전 정보 및 메타데이터, 상속된 dll 및 API, 문자열 등이 출력될 수 있다.
언패킹부(30)는 정적 분석 결과를 기반으로 패커의 종류에 맞는 언패킹 툴을 사용하여 언패킹을 진행한다.
언패킹부(30)는 동적 분석 방식으로 PE 파일을 메모리에 올려 코드의 흐름을 분석한다. 동적 분석에서 패킹된 파일의 오리지날 엔트리 포인트를 찾는 것은 동적 분석에 필수적인 요소이다. 오리지날 엔트리 포인트는 패킹된 파일이 메모리상에서 언패킹이 진행되는 과정에서 원본 파일의 코드가 처음 실행되는 위치를 나타내기 때문이다.
도 6 에는 본 실시예에서의 동적 분석 알고리즘이 도시되었다.
동적 분석 알고리즘에 따르면, 동적 분석 알고리즘으로 패킹된 파일을 입력으로 받아 OEP 위치를 반환한다.
먼저, 각 섹션의 초기 엔트로피를 측정한다(Line 1) 그리고 프로세스가 끝날 때까지 알고리즘을 실행한다.
만약 현재 IP의 주소가 현재 섹션의 마지막 주소보다 크다면, IP가 JMP 계열의 명령어 없이 다음 섹션에 침범하여 OEP를 찾지 못하므로 Not Found를 리턴한다(Line 4). 반면에, IP가 JMP, CJMP, RETN이라면, IP까지 파일을 실행하고 이때 다음 명령어의 주소를 DstAddr에 저장한다(Line 5-7). 그런데 만약 IP가 IP history에 존재하거나 DstAddr이 DstAddr history에 존재한다면, 이미 수행한 IP이거나 거쳐온 DstAddr이므로 다음 IP로 넘어간다(Line 8). 그렇지 않다면, IP와 DstAddr을 각 history에 저장한다(Line 9). 이때 DstAddr이 파일의 범위를 벗어난 주소라면 오리지날 엔트리 포인트를 찾을 수 없으므로 Not Found를 리턴한다(Line 10). 반면에 DstAddr이 정상 범위라면 각 섹션의 엔트로피를 측정하고, 현재 측정한 각 섹션의 엔트로피를 이전에 측정한 엔트로피와 비교하여 안정적인지 검사한다(Line 11-13). 이때, 엔트로피 변화량이 안정적이고, DstAddr이 다른 섹션에 존재한다면 원본 파일을 모두 해제하고 JMP 계열의 명령어를 만나 다른 섹션으로 이동한 것이므로 파일 수행을 멈추고 DstAddr를 OEP로 리턴한다(Line 14-15).
이어, 검증부(40)는 언패킹부(30)의 언패킹 과정에서 오리지날 엔트리 포인트를 찾은 후, 이 오리지날 엔트리 포인트를 통해 파일 섹션을 복원하고 복원율을 계산한다(S40).
즉, 검증부(40)는 언패킹부(30)의 언패킹 과정에서 오리지날 엔트리 포인트를 찾고 이 오리지날 엔트리 포인트를 통해 파일분석에 필요한 .text 섹션과 .data 섹션에 대한 복원을 수행하여 원본 파일과의 비교를 통해 올바르게 언패킹이 이루어졌는지 판단하며, 이 경우 원본파일과 언패킹이 수행된 파일을 비교하여 각 섹션의 복원이 얼마나 수행되었는지 확인하는 복원율을 계산할 수 있다.
도 7 에는 원본파일과 언패킹이 수행된 파일을 비교하여 각 섹션의 복원이 얼마나 수행되었는지 확인하는 복원율을 계산하는 알고리즘이 도시되었다.
해당 알고리즘에서는 ‘MD5’라는 해시 알고리즘을 사용하여 파일 스캔속도를 향상시키고, 효율적으로 섹션 값을 비교하기 위해 사용하였다. 패킹되지 않은 원본 파일(A)과 본 연구에서 제안한 시스템으로 언패킹을 수행한 복원 파일(B)이 입력되면, 먼저 패딩과 쓰레기 값을 제거한다(Line 1). 그 다음으로 원본 파일(A)의 섹션 별 길이와 데이터를 저장하고 MD5 해시 함수를 사용하여 H1 값을 계산한다(Line 4-7). 다음으로 계산한 원본 파일(A)의 섹션의 길이만큼 복원 파일(B)에서 해시 값 H2를 계산한다(Line 8-9). 만약 변환한 해시 값 H1과 H2의 값이 같을 경우, 복원 파일(B)의 섹션이 원본 파일(A)에 존재한다는 것이므로 비교를 끝내고 복원율을 출력한다(Line 14). 해시 값이 같지 않을 경우, 저장한 섹션의 길이를 감소시키면서 해시 값이 동일하게 나올 때까지 반복하고 복원율을 출력한다(Line 6-13). 해당 섹션의 해시 값과 복원율 계산까지 완료했을 때, 다음 섹션이 존재하면 이전 동작을 반복하여 원본 파일(A)에 존재하는 모든 섹션의 해시 값과 복원율을 계산한다(Line 16).
본 실시예에서의 탐지기법의 패킹 여부 및 패커 종류에 따른 탐지에 대한 실험을 통해 성능 검증한다. 사용된 파일의 수는 총 2600개로, 정상파일 130개와 19개의 패커로 패킹된 파일 2470개의 파일로 구성되었다. 실험은 기존에 존재하는 탐지 방법과 본 실시예에서 제시한 Hybrid 탐지기법을 비교하여 탐지 검증과 효율성을 검증하였다.
실험 결과는 도 8 에 도시된 바와 같이, 본 실시예에서 제시하는 하이브리드 기법이 분리된 탐지기법에 비해 성능이 좋은 것을 확인할 수 있다.
쓰기 속성 탐지의 경우, 현재 수집한 19개의 종류의 패커에서는 쓰기 속성이 변경되지 않으므로, 무작위로 30%의 파일을 선별하여 쓰기 속성을 제거한 후 실험한 것이다.
엔트로피 기반 탐지에서는 MPRESS, JDpack, Neolite의 패커들에서는 낮은 비율의 탐지율을 보였는데, 이러한 미탐을 보완하기 위하여 탐지기법들을 조합하여 Hybrid 기법에서는 최종적으로 98.4%의 탐지율로 가장 성능이 좋다는 것을 보였다.
본 실시예에서는 동적 분석으로 언패킹한 결과에 대한 검증을 수행한다.
도 9 는 도 7 에서 제시한 언패킹 파일 복원율 계산 알고리즘을 통해 각 패커별 text 섹션과 data섹션의 복원율을 계산한 것이다.
Yoda`s Protector와 PECompact의 경우는 Anti-debugging 기술이 적용되어있어 일반적으로 동적 분석이 불가능하지만, Anit-deubgging에 사용되는 API인 GetCurrentProcessID(), BlockInput() 및 IsDebuggerPresent() API 호출을 무시하는 방법으로 우회하여 언패킹을 수행하였다.
UPX 패커부터 JDPack 패커까지 총 11개의 패커는 두 개의 섹션 복원율이 100%로 원본 파일과 언패킹된 복원 파일의 섹션 값이 같다는 것이므로 정상적으로 언패킹이 수행된 것을 확인할 수 있다.
하지만, ASPack부터 Packman까지 8개의 패커의 경우 복원율이 90% 이하로 계산되었는데, 이는 파일의 섹션 중 reloc 섹션이 존재하면 text 및 data 섹션이 재배치되어 각 섹션의 모든 데이터 값이 변경되므로 100%의 복원율이 나오는 것은 불가능하기 때문이다.
이를 검증하기 위하여 8개의 패커에서 reloc 섹션이 존재하는 파일과 존재하지 않는 파일을 구분하여 복원율을 구하는 시험을 진행하였고, 그 결과는 도 10 에서 확인할 수 있다.
Packman과 exe3pack 패커를 제외한 패커들에서 reloc 섹션이 존재할 경우, 0%의 복원율을 보인다. 하지만, reloc 섹션이 존재하지 않은 파일의 복원율은 모든 패커에서 100%의 복원율의 결과가 나오므로 본 실시예에서 제안하는 언패킹 방법이 정상적으로 언패킹을 수행하는 것으로 검증될 수 있을 것이다.
이와 같이, 본 실시예에 따른 파일 언패킹 방법은 패킹파일의 패커를 탐지하고 탐지된 패커의 종류에 따라 정적 분석과 동적 분석 중 어느 하나로 패킹파일을 언패킹한 후 해당 언패킹이 정상적으로 수행되었는지를 검증한다.
또한, 본 발명의 일 실시예에 따른 파일 언패킹 방법은 정적 분석과 동적 분석 기반의 하이브리드 분석을 통해 상대적으로 높은 탐지율의 탐지 성능을 확보할 수 있다.
본 발명은 도면에 도시된 실시예를 참고로 하여 설명되었으나, 이는 예시적인 것에 불과하며 당해 기술이 속하는 기술분야에서 통상의 지식을 가진 자라면 이로부터 다양한 변형 및 균등한 타 실시예가 가능하다는 점을 이해할 것이다. 따라서, 본 발명의 진정한 기술적 보호범위는 아래의 특허청구범위에 의하여 정해져야할 것이다.
10: 파일 입력부
20: 탐지부
30: 언패킹부
40: 검증부

Claims (17)

  1. 탐지부가 PE(Portable Executable) 파일의 정보를 추출하고 추출된 정보를 토대로 상기 PE 파일이 패킹되어 있는지를 판단하고 판단 결과 상기 PE 파일이 패킹되어 있으면 패커의 종류를 탐지하는 단계;
    언패킹부가 상기 탐지부에 의해 패커의 종류가 탐지되면 탐지된 패커의 종류에 따라 정적 분석과 동적 분석 기반의 하이브리드 분석을 수행하는 단계; 및
    검증부가 상기 언패킹부의 언패킹 과정에서 오리지날 엔트리 포인트(Original Entry Point;OEP)를 찾은 후, 이 오리지날 엔트리 포인트를 통해 파일 섹션을 복원하여 복원 파일과 원본 파일의 비교를 통해 상기 언패킹부의 언패킹을 검증하는 단계를 포함하는 파일 언패킹 방법.
  2. 제 1 항에 있어서, 상기 패커의 종류를 탐지하는 단계에서,
    상기 탐지부는 진입점 섹션(Entry Section)을 탐지하여 상기 진입점 섹션이 존재하는지에 따라 상기 PE 파일이 패킹되었는지를 판단하는 것을 특징으로 하는 파일 언패킹 방법.
  3. 제 2 항에 있어서, 상기 패커의 종류를 탐지하는 단계에서,
    상기 탐지부는 상기 PE 파일이 패킹되어 있는 것으로 판단되면 상기 PE 파일의 시그니처를 분석하는 것을 특징으로 하는 파일 언패킹 방법.
  4. 제 3 항에 있어서, 상기 패커의 종류를 탐지하는 단계에서,
    상기 탐지부는 PEfile 또는 PEiD를 이용하여 상기 PE 파일을 분석하는 것을 특징으로 하는 파일 언패킹 방법.
  5. 제 3 항에 있어서, 상기 패커의 종류를 탐지하는 단계에서,
    상기 탐지부는 상기 시그니처를 기 저장된 패커 정보와 비교하여 비교 결과에 따라 패킹 유무와 패커의 종류 및 패커의 버전을 탐지하는 것을 특징으로 하는 파일 언패킹 방법.
  6. 제 1 항에 있어서, 상기 패커의 종류를 탐지하는 단계에서,
    상기 탐지부는 진입점 섹션의 엔트로피 값을 사용하는 엔트로피 기반 탐지를 수행하여 상기 PE 파일이 패킹되었는지를 판단하는 것을 특징으로 하는 파일 언패킹 방법.
  7. 제 1 항에 있어서, 상기 패커의 종류를 탐지하는 단계에서,
    상기 탐지부는 상기 PE 파일에 쓰기 속성이 있는지를 확인하는 쓰기 속성 기반 탐지를 수행하여 상기 PE 파일이 패킹되었는지를 판단하는 것을 특징으로 하는 파일 언패킹 방법.
  8. 제 1 항에 있어서, 상기 패커의 종류를 탐지하는 단계에서,
    상기 탐지부는 진입점 섹션의 엔트로피 값을 사용하는 엔트로피 기반 탐지, 및 상기 PE 파일에 쓰기 속성이 있는지를 확인하는 쓰기 속성 기반 탐지를 모두 수행하여 상기 PE 파일이 패킹되었는지를 판단하는 것을 특징으로 하는 파일 언패킹 방법.
  9. 제 1 항에 있어서, 상기 하이브리드 분석을 수행하는 단계에서,
    상기 언패킹부는 상기 패커의 종류가 언패킹 라이브러리를 제공하는 것인지 여부에 따라 상기 정적 분석과 상기 동적 분석 중 어느 하나를 수행하는 것을 특징으로 하는 파일 언패킹 방법.
  10. 제 9 항에 있어서, 상기 하이브리드 분석을 수행하는 단계에서,
    상기 언패킹부는 상기 패커의 종류가 언패킹 라이브러리를 제공하는 것이면 상기 정적 분석을 수행하고, 상기 패커의 종류가 언패킹 라이브러리를 제공하지 않는 것이면 상기 동적 분석을 수행하는 것을 특징으로 하는 특징으로 하는 파일 언패킹 방법.
  11. 제 9 항에 있어서, 상기 하이브리드 분석을 수행하는 단계에서,
    상기 언패킹부는 기 설정된 정적 분석 툴을 활용하여 상기 PE 파일을 분석하고 분석 결과에 상기 패커의 종류에 따라 언패킹 툴을 사용하는 것을 특징으로 하는 파일 언패킹 방법.
  12. 제 11 항에 있어서, 상기 정적 분석 툴은
    오프 소스로 제공되는 기 설정된 PEframe[29]인 것을 특징으로 하는 파일 언패킹 방법.
  13. 제 9 항에 있어서, 상기 하이브리드 분석을 수행하는 단계에서,
    상기 언패킹부는 상기 PE 파일의 오리지날 엔트리 포인트를 찾아 상기 PE 파일이 언패킹하는 것을 특징으로 하는 파일 언패킹 방법.
  14. 제 13 항에 있어서, 상기 하이브리드 분석을 수행하는 단계에서,
    상기 언패킹부는 각 섹션이 엔트로피를 측정하고 현재 측정한 각 섹션의 엔트로피와 이전에 측정한 엔트로피간의 엔트로피 변화량을 이용하여 상기 오리지날 엔트리 포인트를 찾는 것을 특징으로 하는 파일 언패킹 방법.
  15. 제 1 항에 있어서, 상기 언패킹부의 언패킹을 검증하는 단계에서,
    상기 검증부는 상기 PE 파일에 대한 파일 분석에 필요한 .text 섹션과 .data 섹션에 대한 복원을 수행하고 복원된 복원 파일과 원본 파일과의 비교를 통해 언패킹을 검증하는 것을 특징으로 하는 파일 언패킹 방법.
  16. 제 15 항에 있어서, 상기 언패킹부의 언패킹을 검증하는 단계에서,
    상기 검증부는 상기 복원 파일과 상기 원본 파일을 비교하여 복원율을 계산하는 것을 특징으로 하는 파일 언패킹 방법.
  17. 제 15 항에 있어서, 상기 언패킹부의 언패킹을 검증하는 단계에서,
    상기 검증부는 상기 원본 파일과 상기 복원 파일의 패딩과 쓰레기 값을 제거하고, 상기 원본 파일의 섹션 별 길이와 데이터를 저장하고 MD5 해시 함수를 사용하여 H1 값을 계산하며, 상기 원본 파일의 섹션의 길이만큼 상기 복원 파일에서 해시 값 H2를 계산하며, 상기 원본 파일과 상기 복원 파일에서 각각 변환한 해시 값이 같으면 복원율을 출력하고, 상기 해시 값이 같지 않으면 상기 원본 파일의 섹션의 길이를 감소시키면서 상기 해시 값이 동일할 때까지 반복하여 복원율을 계산하는 것을 특징으로 하는 파일 언패킹 방법.
KR1020190174908A 2019-12-26 2019-12-26 파일 언패킹 방법 KR20210082706A (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020190174908A KR20210082706A (ko) 2019-12-26 2019-12-26 파일 언패킹 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020190174908A KR20210082706A (ko) 2019-12-26 2019-12-26 파일 언패킹 방법

Publications (1)

Publication Number Publication Date
KR20210082706A true KR20210082706A (ko) 2021-07-06

Family

ID=76861172

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020190174908A KR20210082706A (ko) 2019-12-26 2019-12-26 파일 언패킹 방법

Country Status (1)

Country Link
KR (1) KR20210082706A (ko)

Similar Documents

Publication Publication Date Title
US8955124B2 (en) Apparatus, system and method for detecting malicious code
Jeong et al. Generic unpacking using entropy analysis
US10235520B2 (en) System and method for analyzing patch file
US7421587B2 (en) Detecting computer programs within packed computer files
US8117660B2 (en) Secure control flows by monitoring control transfers
JP5265061B1 (ja) 悪意のあるファイル検査装置及び方法
KR101990028B1 (ko) 바이너리 파일 복원을 위한 하이브리드 언패킹 방법 및 시스템
US9804948B2 (en) System, method, and computer program product for simulating at least one of a virtual environment and a debugging environment to prevent unwanted code from executing
US11675905B2 (en) System and method for validating in-memory integrity of executable files to identify malicious activity
US20160142437A1 (en) Method and system for preventing injection-type attacks in a web based operating system
EP2631838A1 (en) System and method for detecting unknown packers and cryptors
Treadwell et al. A heuristic approach for detection of obfuscated malware
US20160196427A1 (en) System and Method for Detecting Branch Oriented Programming Anomalies
TWI622894B (zh) 電子裝置及偵測惡意檔案的方法
JP6000465B2 (ja) プロセス検査装置、プロセス検査プログラムおよびプロセス検査方法
WO2018129916A1 (zh) 沙箱检测的方法、沙箱系统和沙箱设备
Park et al. Detecting common modules in Java packages based on static object trace birthmark
Devi et al. Detection of packed malware
US11836252B2 (en) Machine learning through iterative memory analysis for malware detection
US11921850B2 (en) Iterative memory analysis for malware detection
WO2023165257A1 (zh) 一种代码段动态度量方法、装置及电子设备
KR20210082706A (ko) 파일 언패킹 방법
KR101052735B1 (ko) 메모리 조작유무를 감지하는 방법 및 이를 이용한 장치
CN107239703B (zh) 一种动态链接库缺失的可执行程序的动态分析方法
CN108205624B (zh) 电子装置及检测恶意文件的方法