KR101740604B1 - 멀웨어 검출을 위한 애플리케이션들의 제네릭 언패킹 - Google Patents

멀웨어 검출을 위한 애플리케이션들의 제네릭 언패킹 Download PDF

Info

Publication number
KR101740604B1
KR101740604B1 KR1020157021878A KR20157021878A KR101740604B1 KR 101740604 B1 KR101740604 B1 KR 101740604B1 KR 1020157021878 A KR1020157021878 A KR 1020157021878A KR 20157021878 A KR20157021878 A KR 20157021878A KR 101740604 B1 KR101740604 B1 KR 101740604B1
Authority
KR
South Korea
Prior art keywords
executable file
execution
packed
unpacking
memory
Prior art date
Application number
KR1020157021878A
Other languages
English (en)
Other versions
KR20150106451A (ko
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 맥아피 인코퍼레이티드
Publication of KR20150106451A publication Critical patent/KR20150106451A/ko
Application granted granted Critical
Publication of KR101740604B1 publication Critical patent/KR101740604B1/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
    • G06F21/562Static detection
    • 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
    • G06F21/566Dynamic detection, i.e. detection performed at run-time, e.g. emulation, suspicious activities
    • 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
    • G06F21/562Static detection
    • G06F21/564Static detection by virus signature recognition
    • 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/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • G06F21/53Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by executing in a restricted environment, e.g. sandbox or secure virtual machine

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)
  • Storage Device Security (AREA)
  • Devices For Executing Special Programs (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

실행파일에서 멀웨어를 검출하는 기술은 실행파일이 멀웨어인지를 결정하기 전에 패킹된 실행파일을 언패킹하는 것이 가능하다. 하드웨어 보조 가상화가 있는 시스템들에서, 하드웨어 가상화 피처들은 패킹 기술의 지식을 필요로 하지 않고 제어 방식으로 패킹된 실행파일을 반복해서 언패킹하는 데 사용될 수 있다. 일단 실행파일이 완전히 언패킹되면, 서명 스캐닝과 같은 멀웨어 검출 기술들은 실행파일이 멀웨어를 포함하는지를 결정하는 데 사용될 수 있다. 하드웨어 보조 가상화는 메모리 내의 런타임 실행파일의 스캐닝을 용이하게 하는 데 사용될 수 있다.

Description

멀웨어 검출을 위한 애플리케이션들의 제네릭 언패킹{GENERIC UNPACKING OF APPLICATIONS FOR MALWARE DETECTION}
본 발명은 일반적으로 바이러스 서명(virus signature) DAT 파일들에서 유지되고 있는 잠재적 멀웨어(malware)를 식별하기 위해 다수의 서명들에 대해 낮은 신뢰도가 주어지도록(예를 들어, 각각의 패킹(packing) 방법 별로 하나) 실행가능 바이너리(executable binary)들을 언패킹(unpacking)하는 시스템 및 방법에 관한 것이다. 더 구체적으로, 그러나 제한하지 않게, 본 발명은 패킹된 실행 파일들의 원래의 엔트리 포인트(entry point)를 결정하기 위해 이 패킹된 실행 파일을 언패킹할 때 하드웨어 보조 가상화(hardware-assisted virtualization)를 사용하고 원래의 엔트리 포인트의 실행 전에 일단 이 실행 파일이 자체의 완전히 확장된 형태에 도달하면 이 실행 파일에 대한 정식 스캔을 수행하는 것에 관한 것이다.
현대의 애플리케이션 코드(application code)의 전달은 전형적으로 패킹 프로세스(packing process)를 통하여 애플리케이션 코드를 압축하는 것을 수반한다. 패킹 프로세스를 사용함으로써, 바이너리 파일(binary file) 크기들이 축소될 수 있고, 다수의 파일들이 하나의 파일로 결합될 수 있다. 현대의 패킹 프로세스들은 패킹된 코드의 컨텐츠를 언패킹(unpacking)하도록 실행될 수 있는 "자가 추출 실행파일(self extracting executable)들"을 생성한다. 즉, 패킹된 코드 자체에는 실행될 때 패킹된 코드를 확장시키거나 압축 해제하는 결과를 발생시키는 실행 가능 코드 섹션이 수반된다. 따라서, 자가 추출 실행파일을 가동하는 것은 결과적으로 패킹된 코드 실행파일이 디스크 상에서, 메모리 내에서 또는 이 둘에서 확장하게 될 수 있다.
자가 추출 실행파일을 생성하기 위해 파일을 패킹할 때, 많은 상이한 유형들의 압축 알고리즘들 및 패킹 기술들이 사용될 수 있다. 이들 중 일부는 널리 공지되어 있고 문서화되어 있지만 반면에 다른 것들은 그렇게 되어 있지 않다. 자가 추출 실행파일을 생성하기 위해 동일한 파일 상에 상이한 기술들을 사용하여 결과적으로 상이한 파일들이 생성될 것이고 - 패킹 코드 및 패킹된 코드 모두는 상이한 패커(packer)들 및 상이한 압축 알고리즘들로부터의 가지각색의 결과들로 인해 상이할 수 있다. 더욱이, 공지되지 않았거나 문서화되지 않은 기술들이 파일을 자가 추출 실행파일로 패킹하는 데 사용되는 경우, 심지어 패킹 코드 및 패킹된 코드 사이의 구분을 결정하는 것이 어려울 수 있다.
자가 추출 실행파일들의 이 특성들은 멀웨어 개발자들에 의해 멀웨어를 안티바이러스 프로그램들 또는 멀웨어 검출 프로그램들로부터 숨기기 위해 흔히 사용된다. 멀웨어를 검출하는 하나의 통상의 방법은 서명 스캐닝(signature scanning)이다. 서명 스캐닝의 경우, 파일들은 멀웨어와 연관되어 있는 것으로 알려져 있거나 의심스러운 비트 패턴들 또는 서명들에 대하여 스캐닝된다. 파일 내의 비트 패턴이 알려져 있는 멀웨어 서명과 정합하면, 그 파일은 멀웨어이거나 멀웨어를 포함하는 것으로 식별될 수 있다. 그러나, 악성의 실행파일의 서명은 실행파일을 혼란스럽게 하려고만 하면 쉽게 변경될 수 있다. 멀웨어가 패킹되면, 언패킹된 멀웨어의 공지되어 있는 서명이 패킹된 멀웨어 파일의 어떠한 비트 패턴과도 정합하지 않을 것이기 때문에 검출이 되지 않을 수 있다.
멀웨어를 숨기려는 이 노력들을 이겨내기 위한 시도를 위해, 안티바이러스 프로그램들 및 멀웨어 검출 프로그램들은 다수의 기술들을 사용할 수 있다. 하나의 기술은 패킹된 코드를 실행하지 않고 이 패킹된 코드를 메모리 내에서 추출하고 그 후에 비압축된 바이너리들을 멀웨어 서명들에 대하여 스캐닝하는 것을 시도하는 것이다. 패킹된 코드는 자체의 실행을 에뮬레이팅(emulating)함으로써, 또는 패킹 알고리즘이 공지되어 있으면, 안티바이러스 프로그램에 의한 추출을 수행함으로써 추출될 수 있다. 패킹 기술은 널리 공지되거나 문서화되지 않으면, 안티바이러스 프로그램의 제어 하에서 패킹된 코드의 추출은 가능하지 않을 수 있다. 또한, 많은 패킹 알고리즘들은 반 에뮬레이션 및 반 디버깅 기술들을 사용하여 단순히 언패킹이 디버거(debugger)에 의해 또는 실행 에뮬레이션에 의해 수행되고 있음을 검출한 후에 언패킹 프로세스를 종료한다. 코드 플로우(code flow)의 타임 스탬핑(time stamping) 부분들은 코드가 에뮬레이팅되고 있다고 결정하는 데 사용될 수 있는 표준 방법이다. 유사하게, 코드가 디버깅되고 있음을 식별하는 것은 운영 시스템에 문의함으로써 용이하게 결정될 수 있다.
심지어 자가 추출 실행파일이 실행되거나 에뮬레이팅되는 것이 가능할지라도, 안티 바이러스 프로그램은 실행의 언패킹 부분이 언제 완료되는지 그리고 원래 압축된 실행파일이 실행을 언제 시작하는 지를 결정하는 데 어려움을 겪을 수 있다. 자가 추출 실행파일에서, 언패킹 코드 및 패킹된 실행파일은 동일한 바이너리의 부분이고, 메모리에서 이 둘 사이의 구분을 결정하는 것은 어려울 수 있다.
멀웨어를 숨기려는 노력들을 이겨내기 위한 다른 기술은 일단 그와 같은 패킹된 멀웨어의 새로운 서명이 식별되면 멀웨어를 포함하는 공지된 자가 추출 실행파일들을 안티바이러스 서명 데이터베이스에 추가하는 것이다. 이 기술의 약점은 패커 코드(packer code) 또는 패킹 기술을 미세하게 변경함으로써 상이한 자가 추출 실행파일 및 이에 따라 상이한 서명을 생성함으로써 이 기술이 쉽게 회피될 수 있다는 점이다. 패킹 기술들에서의 이 변경들을 나타내는 서명들을 안티바이러스 서명 데이터베이스에 추가하는 것은 서명 데이터베이스의 크기를 증가시키는 데 이바지한다. 이것은 서명들의 수 및 이에 따라 서명 파일들을 유지하는 데 있어서의 어려움이 증가될 수 있는 점에서 문제를 야기한다. 더욱이, 이 노력들은 패킹 프로세스가 상이한 패킹 알고리즘들을 상이한 순서들로 사용하여 임의의 횟수로 반복되어서, 식별 및 유지를 위한 서명들을 아주 많은 수로 생성할 수 있기 때문에 더욱 장애가 될 수 있다.
도 1은 종래 기술에서 공지되는 있는 바에 따른 실행 파일(101) 및 압축 자가 추출 실행파일(102)(가정상 작은 크기의)의 간소화된 구조를 도시하는 블록도(100)이다.
도 2는 하나 이상의 개시된 실시예들을 용이하게 하도록 구성될 수 있는 네트워크 아키텍처(300)를 도시하는 블록도이다.
도 3은 하나 이상의 개시된 실시예들에 따라 구성될 수 있는 프로세싱 유닛을 구비하는 컴퓨터를 도시하는 블록도이다.
도 4는 가상 머신 모니터, 게스트(guest) 운영 시스템들 및 애플리케이션이 있는 컴퓨터 시스템의 소프트웨어 스택(software stack)을 도시하는 블록도이다.
도 5는 하나 이상의 개시된 실시예들에 따라 더 이상의 언패킹이 필요하지 않을 때까지 실행파일을 제네릭으로(generically) 언패킹하는 기술을 도시하는 흐름도이다.
도 6a는 하나 이상의 개시된 실시예들에 따라 실행파일의 제네릭(generic) 언패킹 및 실행 단계들 동안 메모리의 페이지들로의 메모리 액세스를 제어하기 위해 메모리 페이지 허가(permission)들 및 어드레스 메모리 페이지 허가 위반(violation)들을 세팅(setting)하는 기술을 도시하는 흐름도이다.
도 6b는 실행파일의 로드(load) 시간부터 이의 실행의 종료까지 실행파일의 제어된 실행에 대한 상태 전이들을 도시하는 상태도(650)를 도시하는 도면이다.
도 7은 하나 이상의 개시된 실시예들에 따라 실행파일의 제네릭 언패킹 및 실행 단계들 동안 보이는 페이지 메모리 허가들의 다양한 스테이지(stage)들을 도시하는 블록도이다.
위에서 설명되는 바와 같이, 상이한 패커들이 이용 가능하다는 것과 실행파일이 다수 회 패킹될 수 있다는 사실은 결과적으로 패킹된 악성 실행파일을 서명과 비교함으로써 이 악성 실행파일을 식별하는 것을 어렵게 만든다. 패킹된 악성 실행파일의 각각의 식별된 변형은 안티바이러스 프로그램의 바이러스 서명 데이터베이스 내의 자체 서명을 필요로 할 수 있다. 이것은 바이러스 서명 데이터베이스들이 커지는 원인이 되고 그리고 유지보수 비용들 및 노력들을 증가시킨다- 서명 파일 업데이트들은 안티바이러스 프로그램을 사용하여 최종 사용자 컴퓨터들로 통신되고 이 최종 사용자 컴퓨터들에 의해 다운로드되어야만 한다. 더욱이, 서명 검출 알고리즘을 언제 적용할지를 결정하는 것은 이 동일한 요인들에 의해서 복잡하다.
또한 위에 설명된 바와 같이, 원래의 실행파일을 노출시키기 위해 패킹된 파일을 언패킹하는 시도는 또한 어려운 일이다. 언패킹 코드가 패킹된 실행파일과 결합되므로, 언패킹 코드가 실행을 완료하고 원래의 바이너리가 실행을 시작하는 순간을 식별하는 것이 어려울 수 있다. 원래의 실행파일의 실행을 방지하기 위해, 안티바이러스 프로그램은 언패커 코드가 실행되는 것 외에, 패킹된 실행파일을 언패킹하는 시도를 행할 수 있다. 이를 행하기 위해, 안티바이러스 프로그램에는 실행파일을 패킹하는 데 사용되는 언패킹 알고리즘이 설치되어야만 한다. 그러나, 공지되어 있지 않거나 문서화되지 않은 패킹 기술들이 사용될 때, 안티바이러스 프로그램은 소프트웨어를 언패킹하는 것이 가능하지 않을 수 있다. 이 유형들의 예들에서, 안티바이러스 소프트웨어는 언패커 알고리즘(unpacker algorithm)을 포함함으로써 업데이트되어야 한다. 언패커 알고리즘들은 복잡할 수 있으므로 안티바이러스 소프트웨어 개발자들이 새로 발견된 패킹 알고리즘들에 대한 해법들을 구체화하는 데 상당한 시간- 몇 달 또는 몇 년-이 걸릴 수 있다. 더욱이, 이 노력들은 심지어 패커 알고리즘에 대한 미세한 변경들에 의해서 회피되거나 더 힘들어지게 될 수 있다.
아래에서 더 설명되는 바와 같이, 멀웨어를 검출하기 위해 제어 방식으로 단일 또는 다수의 패킹된 애플리케이션을 제네릭으로 언패킹하는 시스템들 및 방법들을 사용함으로써 상기 및 다른 문제들을 처리하기 위한 기술들이 개시된다. 패킹된 애플리케이션을 제네릭으로 언패킹함으로써 애플리케이션은 언패킹 알고리즘에 대한 지식과는 관계 없이 그리고 언패킹 스터브(unpacking stub)의 구현에 대한 지식과는 관계 없이 언패킹되는 것이 가능하다. 하드웨어 보조 가상화와 연관되는 기능은 제어 방식으로 패킹된 애플리케이션을 제네릭으로 언패킹하는 것을 돕는 데 사용될 수 있다. 이 기술들은 단일 유형의 멀웨어에 대한 복수의 서명들을 유지할 필요성을 줄이거나 제거할 수 있다.
도 1를 참조하면, 블록도(100)는 종래 기술에 따라 2개의 파일들 - 실행 파일 및 상기 파일의 패킹된 버전 내의 내부 섹션들을 도시한다. 제네릭 실행파일(101)은 확장된(즉, 런타임) 형태의 실행가능 바이너리를 나타낸다. 제네릭 실행파일(101)이 패킹 프로세스를 통해 수정된 결과인 패킹된 실행파일(102) 또한 도시된다. 실행파일(101)은 개발자가 소스 코드, 객체 파일들 및 라이브러리(library)들에 대하여 컴파일 및 링크 프로세스를 수행함으로써 생성되었을 수 있다. 실행파일(101)은 세 개의 상이한 섹션들로 조직될 수 있다. 바이너리 헤더(105)는 코드 섹션(들)(110) 및 데이터 섹션(들)(115)을 포함하는, 실행가능 바이너리의 나머지의 조직에 대한 정보를 보유한다. 바이너리 헤더(105)는 또한 실행파일(101)이 메모리로 로딩될 때 운영 시스템 로더(operationg system loader)에 의해 시행될 파일 내에 포함되는 모든 섹션들에 대한 메모리 허가들을 포함한다. 메모리 내로 로딩될 때, 각각의 섹션은 운영 시스템에 의해 정의되는 메모리 페이지의 경계에서 시작한다. 파일로부터의 섹션은 단지 하나의 메모리 페이지를 포함할 필요는 없고 - 오히려 각 섹션은 정수의 페이지에 걸쳐 있을 수 있다.
프로그램 실행은 프로그램의 "엔트리 포인트(Entry Point)"라 흔히 칭해지는 실행가능 바이너리(101) 내의 코드 섹션들 중 하나 내의 위치로부터 시작된다(즉, 런타임). 엔트리 포인트는 컴파일러/어셈블러가 바이너리 내에 '주' 기능을 두었던 장소에 따라 코드 섹션 내에 어디에서든지 있을 수 있다. 엔트리 포인트는 임의의 특정한 코드 섹션의 시작점에서 시작할 필요가 없는데 이는 또한 엔트리 포인트가 임의의 특정한 메모리 페이지의 시작점에서 반드시 시작하지는 않는 것을 의미한다.
패커는 본원에서 패킹 프로세서라 칭해지는 것을 통해 패킹된 실행 파일(102)을 생성하기 위해 실행 파일(101)을 패킹 및 압축할 수 있다. 전형적인 패커들은 복잡하고 고유한 동작들을 수행할 수 있으나, 거의 모든 패커들은 여기서 기술되는 바와 같이, 고레벨에서 보면 상대적으로 단순한 동작들의 세트를 수행한다. 패킹된 실행파일(102)을 생성하기 위해, 패커 프로세스는 섹션들에 대한 압축 알고리즘을 사용하여 실행파일(101)의 코드 섹션(들)(110) 및 데이터 섹션(들)(115)을 압축한다. 이것은 전형적으로 실행파일의 파일 크기를 줄이기 위한 노력으로 주로 수행되지만, 멀웨어의 경우에서처럼, 이는 주로 멀웨어의 서명을 바꾸기 위해 수행될 수 있다. 일단 섹션들이 압축되면, 이것들은 패킹된 실행파일(102) 내의 새로운 색션인, 패킹된 코드 및 데이터(135) 내에 배치될 수 있다. 대안으로, 패커들은 또한 코드 및 데이터를 언패킹된 코드가 포함되는 동일한 섹션 내로 패킹할 수 있다. 그러므로, 패커 코더 섹션(130) 및 패킹된 코드 및 데이터(135)는 별개의 섹션들 내에 또는 하나의 섹션에 있을 수 있다.
패킹 프로세스는 또한 전형적으로 실행될 때 자신이 메모리 내에서 차지할 미리 결정된 크기를 가지는 가상 코드 섹션(125)을 생성한다. 이 크기는 전형적으로 원래의 실행파일(101)에서 발견되는 바와 같은, 비압축된 패킹된 코드 및 데이터(135)의 크기보다 더 크거나 동일하도록 계산된다. 가상 코드 섹션(125)이 메모리 내에 비압축된 데이터를 위하여 의도된 섹션이므로, 이는 패킹된 실행파일(102) 자체 내의 임의의 공간을 반드시 차지하는 것은 아니다. 오히려, 이의 패킹된 실행파일(120)을 포함하는 파일에서의 크기는 패커 코드의 비압축 프로세스의 실행 전에 메모리에 필요한 다수의 메모리 페이지들로서 반영될 수 있다. 가상 코드 섹션(125)의 세부사항들은 패커 변환 코드에 의해 변경되는 바이너리 헤더(120) 내에 명시된다. 바이너리 실행파일이 운영 시스템에 의해 메모리 내로 로딩될 것이므로, 특정한 섹션이 메모리 내에 차지할 메모리 페이지들의 수는 또한 전형적으로 바이너리 헤더(예를 들어, 105 또는 120) 내에 명시된다. 그러므로, 디스크 상의 실행 파일에 대한 섹션 크기가 0일지라도, 상기 섹션은 운영 시스템에 의해 로딩될 때 메모리 내에 약간의 공간을 차지할 수 있다. 그러므로, 패킹 프로세스는 코드를 압축함으로써 전체 바이너리 파일의 크기(즉, 디스크 크기 및 다운로드 크기)를 줄였고 실행 시에 메모리 내에 언패킹될 때 언패킹된 코드 및 데이터를 유지하기 위해 적절한 메모리를 제공하였다.
대안으로, 가상 코드 섹션(125)을 사용하기 보다는, 패커 코드 섹션(130) 내에 상주하는 언패커 스터브는 언패킹하는 동안 메모리 내에 비압축된 코드 및 데이터를 보유하도록 실행 중에 충분한 프로세스 메모리를 할당할 수 있다. 그러나, 언패커 스터브는 여전히 이 메모리 페이지들을 실행하기 위해 이것들을 실행가능한 것으로 마킹(marking)해야 하고, 이것이 모니터링될 수 있다. 그러므로, 일단 실행이 시작되면, 메모리 페이지들에 실행 허가들이 할당되면, 이 메모리 페이지들은 가능하다면 비압축된 코드 및 데이터를 포함하는 것으로 식별될 수 있다. 이 메모리 할당에 대한 기술이 사용되면, 할당된 메모리 범위는 메모리 할당을 모니터링함으로써 식별될 수 있고, 할당된 메모리 범위는 가상 코드 섹션(125)으로 처리될 수 있다. 대부분의 패커들이 가상 코드 섹션(125)을 비압축된 코드 및 데이터에 대한 플레이스홀더(placeholder)로서 사용되는 기술을 사용하므로, 이 기술은 이후에 예들로서 언급된다.
패커 코드 섹션(130)은 런타임 언패커 스터브 코드를 포함하는 패킹된 실행파일(102)에 추가되는 새로운 코드 섹션이다. 이 언패커 스터브는 패킹된 코드 및 데이터 섹션(135)으로부터 패킹된 코드 및 데이터를 판독하고, 이것의 압축을 풀고 이것을 가상 코드 섹션(125)에 배치할 것이다. 더 구체적으로, 비압축된 코드는 가상 코드 섹션을 보유하도록 할당된 메모리 내에 배치될 수 있다. 원래의 패킹 프로세스 동안 바이너리 헤더(105)는 헤더의 엔트리 포인트 필드(field)가 패커 코드 섹션(135) 내의 언패커 스터브를 호출할 것을 보장하도록 바이너리 헤더(120)로 수정된다.
실행파일의 패킹, 전송 및 후속 언패킹은 네트워크 기반구조(infrastructure)의 상황에서 수행될 수 있다. 이제 도 2를 참조하면, 기반구조(200)가 개략적으로 도시된다. 기반구조(200)는 컴퓨터 네트워크들(202)을 포함한다. 컴퓨터 네트워크들(202)은 인터넷, 기업 네트워크 또는 근거리 네트워크(Local Area Network; LAN)와 같이 오늘날 이용 가능한 많은 상이한 유형들의 컴퓨터 네트워크들을 포함한다. 이 네트워크들의 각각은 유선 또는 무선 디바이스들을 포함하고 임의의 수효의 네트워크 프로토콜들(예를 들어, TCP/IP)를 사용하여 동작될 수 있다. 네트워크들(202)은 게이트웨이들 및 라우터들(208로 표현됨), 최종 사용자 컴퓨터(206) 및 컴퓨터 서버들(204)에 접속된다. 또한 기반구조(200)에는 셀룰러 통신으로 사용하기 위한 셀룰러 네트워크(203)가 도시된다. 당업계에 공지되는 바와 같이, 셀룰러 네트워크들은 셀룰러 전화기들 및 많은 다른 유형들의 디바이스들(예를 들어, 도시되지 않은 태블릿 컴퓨터들)을 지원한다. 기반구조(200) 내의 셀룰러 디바이스들은 셀룰러 전화기들(210)로 도시된다. 기반구조(200) 내에 도시되는 디바이스들 중 임의의 디바이스가 자가 추출 실행파일을 실행하려고 시도할 수 있다. 디바이스의 프로세스가 필요한 능력들을 가지고 있으면, 본 발명의 개념들은 프로세서에서 구현될 수 있다. 기반구조(200)는 실례이고 단지 예에 의한 것으로, 원하는 바에 따라 다른 기반구조들이 개시된 기술들 내에서 사용될 수 있다.
이제 도 3을 참조하면, 다양한 실시예들에 따른 개시된 기술들에서 사용하기 위한 예의 프로세싱 디바이스(300)가 블록도 형태로 도시된다. 프로세싱 디바이스(300)는 셀룰러 전화기(210), 게이트웨이 또는 라우터(208), 클라이언트 컴퓨터(206) 또는 서버 컴퓨터(204)와 같은 다양한 디바이스들로 구현될 수 있다. 예의 프로세싱 디바이스(300)는 입력 디바이스(예를 들어, 키보드, 마우스, 터치 스크린 등) 및 디스플레이(335)에 선택적으로 접속될 수 있는 시스템 유닛(205)을 포함한다. 프로그램 저장 디바이스(program storage device; PSD)(340)(때때로, 하드 디스크, 플래시 메모리 또는 컴퓨터 판독가능 매체로 칭해짐)는 시스템 유닛(305)에 포함된다. 또한 시스템 유닛(305)에는 네트워크(셀룰러 네트워크(203) 및 컴퓨터 네트워크(202)와 같은)를 통해 다른 컴퓨팅 및 기업 기반구조 디바이스들(도시되지 않음) 또는 다른 셀룰러 통신 디바이스들과 통신하기 위한 네트워크 인터페이스(320)가 포함될 수 있다. 네트워크 인터페이스(320)는 시스템 유닛(305) 내에 포함되거나 시스템 유닛(305) 외부에 있을 수 있다. 어느 경우이든, 시스템 유닛(305)은 네트워크 인터페이스(320)에 통신적으로 결합된다. 프로그램 저장 디바이스(340)는 제거 가능 매체를 포함하는 고체 저장 요소들을 포함하는 모든 형태들의 광 및 자기 메모리를 포함하나 이로 제한되지 않는 임의의 형태의 비휘발성 저장소를 나타내고 시스템 유닛(305) 내에 포함되거나 시스템 유닛(305) 외부에 있을 수 있다. 프로그램 저장 디바이스(340)는 시스템 유닛(305)을 제어하기 위한 소프트웨어, 프로세싱 디바이스(300)가 사용하기 위한 데이터, 또는 이 둘 모두를 저장하기 위해 사용될 수 있다.
시스템 유닛(305)은 본 발명에 따른 방법들을 수행하도록 프로그램될 수 있다. 시스템 유닛(305)은 하나 이상의 프로세싱 유닛들(프로세싱 유닛 또는 프로세서(310)에 의해 표현됨), 입력 출력(input-output; I/O) 버스(325) 및 메모리(315)를 포함한다. 메모리(315)에는 통신 버스(325)를 사용하여 액세스될 수 있다. 프로세싱 유닛(310)은 예를 들어, 메인프레임 프로세서, 셀룰러 전화기 프로세서 또는 Intel Corporation로부터의 INTEL® ATOM™, INTEL® CORE™, PENTIUM® 및 CELERON® 프로세서 군들 및 ARM으로부터의 Cortex 및 ARM 프로세서 군들 중 하나 이상의 일원들을 포함하는 임의의 프로그램 가능 제어기 디바이스를 포함할 수 있다. (INTEL, INTEL ATOM, CORE, PENTIUM 및 CELERON은 Intel Corporation의 상표들이다. CORTEX는 ARM Limited Corporation의 등록 상표이다. ARM은 ARM Limited Company의 등록 상표이다) 메모리(315)는 하나 이상의 메모리 모듈들을 포함하고 랜덤 액세스 메모리(random access memory; RAM), 판독 전용 메모리(read only memory; ROM), 프로그램 가능 판독 전용 메모리(programmable read only memory; PROM), 프로그램 가능 판독 기록 메모리 및 고체 메모리(solid-state memory)를 포함할 수 있다. 프로세싱 유닛(310)은 또한 예를 들어, 캐시 메모리 또는 실행가능 바이너리를 언패킹하는 데 사용하기 위하여 특정한 프로세싱 유닛에 전용되고 다른 프로세싱 유닛들로부터 격리되는 메모리를 포함하는 일부 내부 메모리를 포함할 수 있다.
프로세싱 디바이스(300)는 내부에 상주하는 임의의 바람직한 운영 시스템을 가질 수 있다. 개시된 검출 기술들의 실시예들은 임의의 바람직한 프로그래밍 언어를 사용하여 구현될 수 있고 검출 소프트웨어/펌웨어의 공급자, 운영 시스템의 공급자 또는 적절한 라이브러리 루틴들의 임의의 다른 바람직한 공급자에 의해 공급될 수 있는 실행가능 루틴들의 외부 라이브러리들에 링크될 수 있는 하나 이상의 실행가능 프로그램들로서 구현된다. 본원에서 사용되는 바와 같이, 용어 "컴퓨터 시스템"은 컴퓨터 시스템 상에서 또는 컴퓨터 시스템에 의해 수행되는 것으로 기술되는 기능을 수행하는 단일 컴퓨터 또는 함께 작동하는 복수의 컴퓨터로 칭해질 수 있다.
프로세싱 디바이스(300) 상에서 개시된 실시예들을 수행하기 위한 준비 시에, 프로세싱 디바이스(300)를 개시된 실시예들을 수행하도록 구성하는 프로그램 명령들은 임의의 유형의 비일시적 컴퓨터 판독가능 매체에 제공되거나 저장될 수 있거나, 또는 서버(204)로부터 프로그램 저장 디바이스(340) 상으로 다운로드될 수 있다. 도 4에서는 단일 프로세싱 디바이스(300)가 도시될지라도, 개시된 실시예들에 따라 구성되는 디바이스에서는 임의의 수의 프로세싱 디바이스들(300)이 사용될 수 있다.
하드웨어 보조 가상화
가상화는 컴퓨터 시스템 또는 디바이스가 운영 시스템 코드에 어떠한 수정도 가하지 않고 다수의 운영 시스템들을 동시에 가동하는 것이 가능한 특징이다. 이 유형의 가상화는 호스팅된 운영 시스템들로의 수정들을 요구하는 반가상화(paravirtualization)와 구별될 수 있다. 많은 최근의 고객 기반 실행 프로세서들은 하드웨어 보조 가상화를 지원한다. 도 4를 참조하면, 또한 하이퍼바이저 층(hypervisor layer)으로 공지될 수 있는 가상 머신 모니터(Virtual Machine Monitor; VMM)(420)는 시스템 하드웨어(410)(예를 들어, 도 3에서의 프로세싱 디바이스(300)일 수 있다) 및 하나 이상의 운영 시스템("OS" 또는 "OSe")들(430) 사이에 상주하는 소프트웨어 층이다. 가상화된 시스템들에서, OS(430)는 "게스트(guest)" OS(430)라 칭해질 수 있다. 가상화를 사용하는 않는 시스템들에서, OS(430)는 전형적으로 하드웨어(410)와 직접적으로 인터페이스한다. 가상화가 사용되면, OS(430)는 VMM(420)을 통해 하드웨어(410)와 인터페이스한다. VMM(420)은 다수의 OSe들(도 4에 도시되는 바와 같이 3개의 OSe들(430)과 같은)을 지원하고 각각의 OS(430)에 시스템 자원들로의 전용 또는 공유 액세스를 할당할 수 있다. 이 방식에서, 각각의 OS(430)는 다른 OSe들(430)과 동시에 작동할 수 있다. 더욱이, 각각의 OS(430)는 도 4에서의 OS(430)에서 작동하는 것으로 도시된 애플리케이션(440)과 같은, 다수의 애플리케이션들을 작동시킬 수 있다.
가상화가 없는 시스템들에서, OS 커널(kernel)은 시스템에서 실행되는 다른 소프트웨어보다 위인 가장 높은 특권 레벨(privilege level)에서 전형적으로 실행된다. 가상화에 있어서, VMM(420)은 프로세서의 하드웨어 가상화 특징들을 사용할 수 있고 심지어 OS 커널 위의 특권에서 작동된다. 하드웨어 보조 가상화에 있어서, 메모리 페이지 액세스 허가들은 VMM(420)에 의해 시행될 수 있다. 이에 따라, VMM(420)은 물리적 메모리 페이지들 상에 판독/기록/실행 허가들을 세팅할 수 있다. 각각의 메모리 페이지는 판독, 기록 및 실행 특권들을 가능하게/불가능하게 하도록 정의될 수 있다. VMM(420)에 의해 시스템 상에서 실행되는 OS(430)에 대하여 허가들이 세팅된다. OS(430)가 소정의 메모리 페이지에 대한 허가들을 위반하면, 상기 OS(430)를 보류하는 동안 VMM(420) 내의 미리 결정된 장소에 대한 제어가 즉시 이전된다. VMM(420)에는 페이지 허가 위반들 시에 메모리 내의 런타임 실행파일을 분석, 범주화 및 스캐닝하는 것에 도움을 줄 수 있는 제네릭 언패커(422)가 설치될 수 있다. 제네릭 언패커(422)는 휴리스틱 엔진(heuristics engine)(424), 스캐너(426) 및 휴리스틱 통계 데이터(428)를 포함하는 데이터베이스 또는 메모리를 포함할 수 있다.
OS(430)에 의해 메모리 페이지로의 액세스가 요청되면, 프로세서(310)는 요청된 유형의 액세스를 허가하기 전에 메모리 페이지 허가들을 체크할 것이다. 이에 따라, 프로세서(310)는 페이지가 실행 허가 세트를 가지지 않으면 메모리 페이지로부터 어떠한 실행도 가능하지 않다. 프로그램을 컴파일하는 동안, 프로그래머는 예를 들어, 컴파일러 지시문들을 사용함으로써 섹션의 페이지들에 대한 다른 허가들을 구체적으로 세팅할 수 있다. 다시 도 1을 참조하면, 코드 섹션(들)(110)은 적어도 자신들의 메모리 페이지들에 대한 판독 및 실행 허가 세트들을 가질 필요가 있다. 그렇지 않으면, 런타임에서, 실행파일(101)은 데이터 실행 보호가 가능하면 실행 프로세서 상에서 데이터 실행 방지 폴트(fault)들을 생성할 수 있다. 데이터 섹션(들)(115)은 메모리에 로딩될 때 자신들의 페이지들에 대한 적어도 판독 허가 세트들을 가질 필요가 있다. 그러나, 판독 및 기록 허가들은 데이터 세션들에 대하여 세팅될 수 있다.
하드웨어 보조 가상화를 사용하는 제네릭 언패킹
다수의 패커들 및 패킹 알고리즘-공지되거나 공지되지 않은-에 걸쳐 작업하는 유연한 해법을 제공하고 패킹된 실행파일을 언패킹하는 것과 연관되는 어려움들을 제한하기 위해, 제어 방법들은 언패커 또는 언패킹 알고리즘의 특정 지식 없이 패킹된 실행파일을 제네릭으로 언패킹하는 것이 가능하다. 도 5는 패킹된 실행파일이 목표 컴퓨터로 전달되고 실행을 시작하는 방법을 도시한다. 505에서, 자가 추출 실행파일은 패킹되거나 반복 패킹된 포맷으로 타깃 머신에 도달한다. 이 지점에서 파일이 임의의 알려져 있는 멀웨어와 정합하는지를 알아보기 위해 510에서 이 파일은 알려져 있는 서명들에 대해 스캐닝될 수 있다. 그러나, 상술한 바와 같이, 이 지점에서의 멀웨어 검출은 어떤 식별되지 않은 패킹된 실행파일들에 대해서는 성공하지 않을 수 있다. 515에서, 파일은 실행을 시작한다. 이 지점에서, 바이너리(예를 들어, 도 1에서의 패커 코드 섹션(130))의 언패커 코드 세그먼트는 실행을 시작한다. 520에서, 언패킹 프로세스가 계속된다. 파일이 반복해서 패킹되었다면, 이는 525에서 도시되는 바와 같이 반복해서 언패킹되어야만 한다. 이 언패킹 프로세스가 완료된 후에, 바이너리의 원래의 실행파일이 노출된다. 530에서 도시되는 바와 같이, 언패커 코드가 실행을 완료했고 원래의 실행파일이 아직 실행을 시작하지 않은 이 지점에서, 다른 서명 스캔이 수행될 수 있다. 즉, 지점 530에서 도시되는 바와 같이, 제네릭 언패킹은 도 535에 도시된 원래의 실행파일의 원래의 엔트리 포인트(Original Entry Point; "OEP")로 제어가 이전되기 전에 또는 직전에 패킹된 실행파일이 실행을 실행하고 방지하는 것이 가능할 것이다. 원래의 엔트리 포인트는 자신이 원래의 언패킹된 형태로 있을 때 실행가능 바이너리의 바이너리 헤더 내에 명시된 바와 같은 엔트리 포인트이다. 상술한 바와 같이, 에뮬레이팅된 실행은 이 포인트에 도착하는 데 사용될 수 있지만, 패커 코드가 에뮬레이팅되고 있음을 검출한 후에 언패킹 프로세스가 더 실행하는 것을 방지하는 안티-에뮬레이션 코드를 포함하는 많은 패커들이 존재한다.
아래에는 제어가 OEP에 이전되기 직전에 언패킹된 실행파일을 식별하고 스캐닝하기 위해 휴리스틱(heuristic)들을 사용하여 규칙적인 간격으로 메모리 내의 실행파일에 대한 스캐닝을 수행하면서 패킹된 실행파일이 제어 방식으로 실행되는 것이 가능하도록 하드웨어 보조 가상화를 사용하는 기술들이 설명된다. 하드웨어 가상화 특징들이 없거나 하드웨어 가상화 특징들이 가능하지 않았던 시스템들에서, 이 기술들은 OS 특권 레벨보다 더 높은 특권 레벨이 있으면 여전히 사용되고 소프트웨어에서 구현될 수 있다.
바이너리의 제어 실행: 하드웨어 보조 가상화
제어가 OEP로 이전되기 직전에 멀웨어를 잡아내는 것이 임의의 제네릭 언패킹 해법의 목적이다. 이 지점에 도달하기 위해, 언패킹 코드는 제어 방식으로 실행되고, 실행파일의 메모리 공간은 규칙적인 간격들로 서명들에 대하여 스캐닝되고 비교된다.
제어 실행은 하드웨어 보조 가상화로 달성될 수 있다. 상술한 바와 같이, 가장 높은 특권 레벨로 실행되는 VMM(420)은 OS 페이지 액세스들을 위해 페이지 레벨 입도(granularity)로 판독/기록/실행(read/write/execute; R/W/X) 액세스 보호들을 세팅할 수 있다. OS 액세스들을 위하여 OS 페이지들에 대한 메모리 보호들을 세팅하는 이 메커니즘은 패킹된 실행파일 및 이와 연관되는 메모리의 섹션들에 대한 보호들을 세팅하는 데 사용될 수 있다. 페이지 액세스 허가 위반들이 발생할 때마다, VMM(420)은 실행의 제어를 얻고 OEP 이전이 발생할 것인지 또는 충분한 언패킹이 발생했는지를 휴리스틱으로 체크할 수 있다. 이 지점에서, 멀웨어 서명들에 대한 스캐닝이 수행될 수 있거나 다른 멀웨어 검출 기술들이 수행될 수 있다.
OEP로의 이전에 관하여 휴리스틱 결정을 행하기 위해, 제네릭 언패킹 프로세스는 키 간격들로 바이너리의 실행을 제어할 필요가 있다. 이 키 간격들은 다음과 같이 정의될 수 있다. 바이너리 로드 시간은 목표의 패킹된 실행가능 바이너리가 메모리에 로딩되고 실행이 아직 시작되지 않은 시간으로 정의될 수 있다. 엔트리 포인트 실행 위반 시간은 실행의 제어가 패킹된 바이너리의 엔트리 포인트로 이전되는 시간으로 정의될 수 있다. 기록 위반 시간은 VMM(420)에 의해 실행가능하고 판독가능한 것으로(그러나 기록가능하지 않은) 마킹된 페이지들에 기록하는 시도가 행해지는 시간으로 정의될 수 있다. 페이지 실행 위반 시간은 VMM(420)에 의해 판독가능하고 기록한 것으로(그러나 실행가능하지 않은) 마킹된 페이지들로부터 명령들을 실행하는 시도가 행해지는 시간으로 정의될 수 있다.
도 6a를 참조하면, 도(600)는 자가 추출 실행파일의 실행을 제어하는 방법을 도시한다. 바이너리 로드 시간(605)에, 패킹된 실행가능 바이너리의 헤더 내의 섹션들 모두가 파싱(parsing)된다. 섹션들이 바이너리 헤더 내에 실행가능하고 기록가능한(RWX) 것으로 마킹된 610에서, 판독 및 실행(R_X)의 허가들은 메모리 내의 상기 섹션과 연관되는 페이지들에 VMM(420)를 사용하여 할당된다. 기록 허가들은 이 페이지들의 경우 제거된다. "RWX" 및 "R_X"는 하나 이상의 판독, 기록 및 실행 허가들의 세팅을 나타내는 표시의 예들이다. 이 섹션들의 페이지들이 자체에 기록 없이 향후의 시간에 실행을 시도하면, 플래그(flag)가 걸리지 않을 것이다. 그러나, 이 섹션들 중 하나로부터의 페이지가 기록된 후에 실행하면, 이는 실행되고 있는 원래의 언패킹된 코드일 가능성이 있다. 이것은 원래의 코드가 언패킹 프로세스(즉, 기록 액세스) 동안 메모리 페이지 내로 기록되었을 수 있고 후속 실행은 원래의 실행파일이 실행 중임을 나타낼 수 있기 때문이다. 파일이 다수 회 패킹되었던 상황에서, 기록은 언패킹 코드의 다음 층을 메모리 페이지 내로 기록해야 할 수 있고 이에 따른 후속 실행은 원래의 실행파일의 실행이 아니라, 언패킹 코드의 반복일 것이다. 어느 경우이든, 이 시간 기간은 멀웨어 스캔이 실행될 수 있는 포인트를 제공한다. 그러므로, 이 페이지들 중 임의의 페이지로의 기록 액세스는 "vmexit"를 생성하고, 제어는 VMM(420)로 이전된다.
Vmexit는 제어를 OS(430)에서 VMM(420)로 제어를 이전하는 하드웨어 보조 가상화 메커니즘이다. 제어가 VMM(420)에 의하는 동안, 프로세서 등록 상태들, 스택 포인트 및 언패커 코드의 실행과 관련되는 다른 상태들이 기록될 수 있다. 일단 상태들이 기록되고 다른 업무들이 수행되면(예를 들어, 휴리스틱 데이터를 구축, 스캐닝), 제어는 vmexit를 생성했던 OS(430)로 역으로 통과될 수 있거나 에러 처리 루틴으로 통과될 수 있다.
615에서, 자가 추출 실행파일의 엔트리 포인트를 포함하는 페이지는 식별될 수 있고, 이 페이지에 대한 허가들은 (R_)만을 판독하도록 세팅되어야만 한다. 결국 페이지 메모리 내의 모든 허가들은 VMM(420)에 의해 세팅되었고 제어는 620에서 OS(430)로 리턴(return)된다. 엔트리 포인트의 실행으로 625에서 도시되는 바와 같이 엔트리 포인트 실행 위반 시간에 vmexit가 생성될 것이고 VMM(420)는 제어를 얻을 것이다. 이에 따라, 이 지점에서, 실행의 시작을 나타내는 스택 컨텐츠 및 스택 포인터 값이 제네릭 언패커(422)의 휴리스틱 통계 데이터(428) 내에 기록될 수 있다. 실행의 시작 시의 상태는 휴리스틱들을 구축하는 데 유용한데 왜냐하면 이는 원래의 언패킹 프로그램에 의해 예측되는 상태이기 때문이다. 제어가 위반 시간 이후에 VMM(420)로 통과될 때마다, 메모리의 스캔은 또한 630에 도시되는 바와 같이, 휴리스틱 엔진(424)에 의한 휴리스틱 분석에 기초하여 스캐너(426)에 의해 수행될 수 있다. 섹션들이 바이너리 헤더 내에서 기록가능 및 실행가능(RWX)으로서 마킹되는 635에서, 판독 및 실행의 허가 및 기록의 비허가(R_X)가 할당된다. 페이지 허가들이 변경된 후, 제어는 OS(430)로 리턴될 수 있다.
자가 추출 실행파일의 언패커 스터브가 실행을 시작할 때, 다수의 페이지 액세스 위반들이 있을 수 있고, 이 위반들 각각에 의해 제어가 VMM(420)으로 통과된다. 이 시간들 각각에서, 휴리스틱 통계치(428)들이 수집될 수 있고(625), 스캔들이 수행될 수 있고(630), 허가들이 조정되고 제어가 OS로 리턴될 수 있다(635). 위반들 및 위반들에 기초하는 행위들의 예들은 이후에 더 상세하게 논의될 것이다. 특정한 상황들에서, 제어가 VMM(420)에 있는 동안, 제네릭 언패커(422)는 스캔을 통해 반복해서 패킹된 실행파일의 패킹 반복에 대해 공지되어 있는 패킹 알고리즘이 인식되는 것을 결정할 수 있다. 만일 그렇다면, 제네릭 언패커(422)는 제어 실행에 의해서보다는 컨텐츠 자체를 언패킹함으로써 진행될 수 있다. 후속하는 패킹 반복이 인식되지 않으면, 제네릭 언패커(422)는 실행파일의 제어 실행으로 리턴될 수 있다.
도 6b는 실행파일의 실행 동안 상태 전이들을 보여주는 상태도(650)를 도시한다. 상태 1(655)은 상술하였던 바이너리 로드 시간을 나타낸다. 바이너리 로드 시간에서 허가들을 세팅하고 상태를 기록한 후에, 엔트리 포인트 실행 위반 시간에서의 vmexit는 결과적으로 상태 2로 진입하고(660), 이 시간에서 이미지 엔트리 포인트 상태가 기록된다. 제어는 OS로 리턴되고 실행을 상태 3에서 정상적으로 계속된다(665).
기록 위반 시간에, 상태 5(675)에 진입되고, VMM(420)은 제어를 제네릭 언패커(422)로 이전한다. 제네릭 언패커(422)는 자체의 내부 부기(bookkeeping) 휴리스틱 통계 데이터(428)를 업데이트한다. 이것은 특정한 섹션이 기록되어 있는 페이지들의 수, 이 특정한 페이지가 기록되었던 횟수 등을 포함한다. 제네릭 언패커(422)는 또한 OS(430)에 대해 기록 가능한 특정한 페이지를 제작하지만(+W) 실행가능 액세스를 제거한다(-X). 상태 6에서(680), 휴리스틱들에 기초하여, 제네릭 언패커(422)의 휴리스틱 엔진(424)은 멀웨어 서명들의 메모리에서 스캔을 트리거(tirgger)할 수 있다. 서명이 발견되지 않으며 또는 휴리스틱들에 기초하여 스캔이 수행되지 않으면, 제네릭 언패커(422)는 언패킹이 여전히 완료되지 않음을 결정하고 제어가 OS(430)로 통과되고 실행이 상태 3에서 계속된다(665). 멀웨어 서명이 발견되면, 실행파일의 실행은 상태 7로의 전이에서 도시된 바와 같이 강제로 종료될 수 있다(685).
유사하게, 페이지 실행 위반 시간에, 상태 4(670)에 진입되고, VMM(420)은 제어를 제네릭 언패커(422)로 이전한다. 제네릭 언패커(422)는 실행 액세스 허가들을 위반했던 특정한 섹션의 페이지들의 수, 특정한 페이지가 실행 액세스 허가들을 위반했던 횟수들 등을 포함할 수 있는 자체의 내부 부기 휴리스틱 통계 데이터(428)를 업데이트한다. 제네릭 언패커(422)는 또한 OS(430)에 대해 실행 가능한 특정한 페이지를 제작하지만(+X) 기록 액세스를 제거한다(-W). 스캔은 상태 6에서 수행될 수 있고(680), 실행은 상태 3에서 계속되거나(665) 또는 상태 7에서 종료될 수 있다(685).
서명들에 대한 스캐닝은 각 페이지 위반 시간마다 수행될 수 있지만, 휴리스틱들은 페이지 위반이 발생할 때마다 스캐닝하는 것을 방지하기 위해 프로세싱 자원들을 최적화하고 보존하는 데 사용될 수 있다. 예를 들어, 각 페이지 실행 위반 시간마다, 사용될 수 있는 하나의 휴리스틱은 스택 포인터 및 스택 컨텐츠를 이들의 원래의 값들과 비교할 수 있다. 스택 포인터 값이 엔트리 포인트 실행 위반 시간에서 기록된(즉, 상태 2(660)) 스택 포인터 값과 동일하고, 스택 컨텐츠가 또한 동일하면, OEP가 실행하려고 할 가능성이 있다. 자신들의 원래의 엔트리 포인트 실행 위반 시간 값들로 리턴하는 스택 포인터 및 스택 컨텐츠는 언패커 프로세스들이 완료했음을 나타낼 수 있고 스캐닝이 수행되어야 한다.
다른 휴리스틱은 페이지 실행 위반이 트랩(trap)되었던 섹션을 찾아야만 할 수 있다. 이 섹션의 모든 페이지들이 기록되었고, 이것이 기록에 후속하는 이 섹션으로부터의 제 1 실행 위반이면, 이 섹션 내의 모든 페이지들이 언패커 스터브에 의해 언패킹되었을 가능성이 높을 수 있고 제어는 OEP로 이전된다. 이 지점에서, 스캐닝이 수행되어야 한다. 다른 상황에서, 특정한 섹션의 모든 페이지들이 기록되지 않았고 제 1 실행 위반이 섹션으로부터 트랩되면, 섹션이 완전히 언패킹될 가능성이 여전히 있고 스캐닝이 수행되어야 한다. 실행파일의 언패킹의 완료를 인식하기 위해 다른 기술들이 사용될 수 있다.
휴리스틱들은 또한 페이지 기록 위반 시간에서 사용될 수 있다. 기록 위반 시에, 기록 위반이 시작되었던 페이지가 기록되어 있는 특정 섹션의 마지막 페이지인 경우, 섹션이 완전히 언패킹될 가능성이 높다. 이 지점에서, 스캐닝이 수행되어야 한다.
위의 예의 휴리스틱들은 제어가 언패킹된 바이너리의 OEP로 통과되고 있을 수 있는 상황들의 식별에 기초한다. 다른 휴리스틱들은 원하는 바에 따라 사용될 수 있다. 예를 들어, 추가 휴리스틱들은 적어도 부분적으로 패커 코드의 서명들과 같은 다른 패커들의 특정한 특성들, 다른 패커들의 실행 특성들 등에 기초하여 구축될 수 있다. 상술한 휴리스틱들은 이 다른 휴리스틱들과 결합될 수 있거나, 다른 휴리스틱들은 상술한 예의 휴리스틱들을 대체할 수 있다. 새로운 휴리스틱들이 특정한 패커들을 식별하는 데 필요할 경우, 새로운 휴리스틱 메커니즘들의 업데이트가 안티바이러스 프로그램에 대한 새로운 언패커를 기록하는 것보다 더 빠르고 더 효율적일 가능성이 있을 것이다.
위에 설명되는 바와 같이, 바이러스 서명을 바이너리와 비교하는 것은 이 바이너리가 완전히 언패킹된 이후에 그러나 이 바이너리가 실행하기를 시작하기 전에 수행되는 것이 바람직하다. 이 방식에서, 바이너리 실행파일은 패킹 프로세스를 통해 혼란되고 감춰지지 않으며 멀웨어 스캐닝이 수행되기 전에 바이너리가 실행되는 것을 방지하면서도 메모리 내에서 직접적으로 바이러스 서명 파일들과 비교될 수 있다. 더욱이, 서명 스캐닝 외, 또는 서명 스캐닝을 대신하여 다른 멀웨어 검출 기술들이 수행될 수 있다. 요약하면, 언패킹 코드의 실행이 허용될 수 있지만 비압축되고, 언패킹된 바이너리는 원래의 엔트리 포인트의 실행을 시작하기 전에 방지 또는 중단된다.
도 7은 원래의 엔트리 포인트의 실행의 시작 및 후속하는 이의 실행의 방지를 결정하는 휴리스틱의 예를 도시한다. 도 7에서, 휴리스틱의 4개의 상태들(710, 720, 730 및 740)이 도시된다. 각각의 상태들은 실행 동안 하나의 시점에서의 소정의 세트의 메모리 페이지 액세스들을 위한, OS 메모리 페이지들(P1, P2, P3, P4 및 P5)에 대한 허가 세트들을 도시한다. 아래에서 상세하게 설명되는 바와 같이, 실행이 진행하면 상태들이 변하게 된다. 메모리 페이지들(P1 내지 P4)은 가상 코드 섹션(125)을 형성하고 페이지(P5)는 패커 코드 섹션(130)을 형성한다. 이 예에서, 언패커 코드 섹션(130)은 단지 하나의 페이지, 즉 페이지(P5)를 점유한다. 페이지(P5)로부터의 언패커 스터브는 코드를 페이지들(P1 내지 P4) 로 언패킹할 것이다. 페이지들(P1 내지 P5)에 대한 허가들은 바이너리 헤더(120)(도 6b에 도시되지 않음)에 의해 정의된다.
초기 상태(710)에서, 페이지들에 대한 허가들은 바이너리 헤더들에서의 정의들과 상이하게 세팅된다. 그러므로, 바이너리 헤더는 실행가능 언패커 스터브를 포함하는 페이지(P5)가 실행 및 기록 허가들을 가지고 있음을 명시하는 동안, 페이지(P5)는 초기 상태(710)에서 판독 및 기록 허가들이 가능하지만 실행 허가가 가능하지 않도록 세팅된다. 이에 따라, 페이지(P5)는 초기 상태(660)에서 "RW_"로서 표현되고 실행이 vmexit를 트리거할 것이다. 유사하게, 페이지들(P1 내지 P4)이 바이너리 헤더 내에 판독, 기록 및 실행 허가들을 가지는 것으로 정의되는 동안, 페이지들(P1 내지 P4)은 초기 상태(660)에서 판독 및 실행 허가들이 가능하나 기록 허가가 가능하지 않도록 세팅된다. 이에 따라, 페이지들(P1 내지 P4)는 초기 상태(660)에서 "R_X"로서 표현된다.
페이지(P5)에서의 코드가 먼저 실행을 시도할 때, vmexit는 페이지(P5)가 실행 허가 세트를 가지지 않기 때문에 트리거될 것이다. 다수의 페이지들이 액세스를 기록하도록 세팅되면, vmexit를 트리거하기 위하여 상기 페이지들 중 제 1 페이지는 엔트리 포인트 실행 위반 시간으로 식별될 수 있다. 이 예에서, 페이지(P5)가 단지 그와 같은 페이지이므로, 페이지(P5) 내 어딘가에 저장되는 코드를 실행하는 제 1 시도는 엔트리 포인트 실행 위반 시간의 표시이다. 적절한 프로세싱이 완료된 후에, 상술한 바와 같이(스택 포인터, 컨텐츠 및 다른 상태 정보를 기록하는 것과 같은), 페이지(P5) 허가들은 실행 허가들을 추가하지만(즉, 'X'가 가능하도록) 기록 허가들을 제거하도록(즉, 'W'가 불가능하도록) 변경된다. 이것이 제 2 상태(720)에 도시된다.
페이지들(P1 내지 P4)를 보면, 이 페이지들은 기록 허가들 없이 시작하였다. 후속해서, 기록이 페이지들(P1 내지 P4) 중 임의의 페이지에서 시도되면, vmexit가 트리거된다. 이 페이지들 중 임의의 페이지 내의 어딘가에서의 기록은 또한 기록되어 있는 코드가 이후의 언젠가 실행되도록 의도된다는 표시이다. 이 예에서, 페이지(P1)으로의 기록이 시도되고, vmeixt가 트리거된다. 상태(730)에서, 페이지(P1) 허가들은 기록 허가들을 추가하지만(즉, 'W'가 가능하도록) 실행 허가들을 제거하도록(즉, 'X'가 불가능하도록)변경되었다. 그러므로, 페이지(P1)에서의 임의의 후속 실행 시도는 vmexit를 트리거하여, 제어를 다시 VMM(420)로 리턴할 것이다. 일단 P1에 대한 허가들이 조정되었으면, VMM(420)은 제어를 OS(430)로 리턴하고, 이 OS(430)는 순차적으로 제어를 언패커 스터브로 리턴한다. 이 지점에서, 원래의 기록 명령(vmexit를 트리거했던)은 완료되는 것이 가능할 수 있고 언패커 스터브는 페이지(P1)에 기록한다.
이 방식에서, 페이지들(P1 내지 P4)에는 다수 회로 기록될 수 있다. 페이지에서 제 1 기록 시도가 발행할 때마다, vmexit는 트리거될 것이고, 허가들은 페이지(P1)에 대하여 상술한 바와 같이 변경될 것이다. 상술한 바와 같이, 이 지점들의 각각에서, 휴리스틱 통계치들(428)은 허가들이 변경되고 제어가 OS(430)로 리턴되기 전에 수집될 수 있다. 상태(740)는 페이지들(P1 내지 P4)의 각각이 기록되도록 시도되었고, vmexit가 생성되었고 허가들이 실행 액세스를 제거하고 기록 액세스를 허가하도록 변경된 상황을 도시한다. 상술한 바와 같이, 다양한 상태들에서, 휴리스틱 분석에 기초하여, 스캔들은 서명이 인식될 수 있는지를 결정하도록 수행될 수 있다.
상태(690)에서, 이 예에서, 모든 기록하기(즉, 언패킹)가 완료되었다고 가정하자. 이 지점에서, P5로부터의 언패커 코드 스터브는 실행을 완료하고 제어를 언패킹된 실행파일의 원래의 엔트리 포인트(P1 내지 P4 내의 어딘가에 상주하는)로 이전하는 시도를 행한다. 페이지(P3)가 원래의 언패킹된 실행가능 바이너리에 대한 원래의 엔트리 포인트(OEP)를 가지고 페이지(P5)가 제어를 이로 이전하는 시도를 행한다고 가정하자. 페이지(P3) 내에 어딘가에서의 실행 시도는 vmexit를 생성한다. 이 지점에서, 제어는 VMM(420)으로 이전되고, 휴리스틱 제네릭 언패커 엔진은 제어를 획득한다. 이 지점에서의 제네릭 언패커 엔진은 페이지들(P1 내지 P4)이 모두 기록되었고 이것이 이 섹션에서 제 1 실행 위반이라고 결정할 수 있다. 이에 따라, 상술한 바와 같이, OEP가 실행되고 있고 따라서 전체 섹션이 스캐닝되어야 할 가능성이 높다.
이 스테이지에서, 페이지들(P1 내지 P4)이 언패킹된 멀웨어를 포함하면, 멀웨어는 서명 스캔에 의해 식별될 수 있다. 한편, 발견되는 것이 없으면, 페이지(P3) 허가들은 실행 액세스가 가능하고 기록 액세스가 가능하지 않는 것으로 마킹될 수 있다. 실행은 vmexit가 다시 트리거되고 새로운 휴리스틱 기준이 만족될 때까지 계속될 수 있다. 결국, 추가 휴리스틱이 트리거되지 않거나 멀웨어에 대한 어떠한 식별 없이 언패킹을 다수 회 반복한 후 페이지들(P1 내지 P4)이 실행을 완료하면, 언패킹된 실행파일이 멀웨어가 아님이(또는, 적어도 멀웨어 서명에 언패킹된 바이너리에 대하여 공지되어 있지 않음이) 결정될 수 있다.
예들
다음의 예들은 본 발명의 추가 실시예들에 관한 것이다.
1. 자가 추출 실행파일을 메모리로 로딩함으로써 멀웨어를 검출하기 위해 자가 추출 실행파일을 언패킹하는 방법으로서, 자가 추출 실행파일은 제 1 언패킹 스터브 및 패킹된 실행파일을 포함하는, 상기 언패킹하는 방법은: 제 1 언패킹 스터브가 패킹된 실행파일을 언패킹된 실행파일로 언패킹하는 것을 허용하는 단계; 하나 이상의 휴리스틱들을 사용하여 제 1 언패킹 스터브의 완료를 검출하는 단계; 및 언패킹된 실행파일을 멀웨어에 대하여 스캐닝하는 단계를 포함한다.
2. 예 1의 방법으로서, 패킹된 실행파일은 하나 이상의 중간 자가 추출 실행파일들을 포함하는 반복하여 패킹된 실행파일이고, 하나 이상의 프로세싱 유닛들로 하여금 제 1 언패킹 스터브가 패킹된 실행파일을 언패킹하는 것을 허용하도록 하는 명령들은 하나 이상의 프로세싱 유닛들로 하여금 제 1 언패킹 스터브가 패킹된 실행파일을 하나 이상의 중간 자가 추출 실행파일들 중 하나로 언패킹하는 것을 허용하고; 그리고 최종 언패킹 스터브가 최종 패킹된 실행파일을 최종 언패킹된 실행파일로 언패킹할 때까지 하나 이상의 중간 자가 추출 실행파일들 중 하나가 연속해서 언패킹하는 것을 허용하도록 하는 명령들을 포함하고, 하나 이상의 프로세싱 유닛들로 하여금 언패킹된 실행파일을 멀웨어에 대하여 스캐닝하도록 하는 명령들은 하나 이상의 프로세싱 유닛들로 하여금 최종 언패킹된 실행파일을 멀웨어에 대하여 스캐닝하도록 하는 명령들을 포함한다.
3. 예 2의 방법으로서, 언패킹된 실행파일을 멀웨어에 대하여 스캐닝하는 단계는 하나 이상의 중간 자가 추출 실행파일 중 적어도 하나를 적어도 멀웨어에 대하여 스캐닝하는 단계를 더 포함한다.
4. 예 2의 방법으로서, 최종 언패킹된 실행파일은 멀웨어가 검출되는 경우 실행되는 것이 허용되지 않는다.
5. 전술한 예들 중 임의의 예로부터의 방법으로서, 제 1 언패킹 스터브가 패킹된 실행파일을 언패킹하는 것을 허용하는 단계는 제 1 언패킹 스터브에 의해 메모리 페이지로 이전에 기록되었던 코드를 실행하기 위한 시도를 검출하기 위해 하드웨어 보조 가상화를 사용하여 메모리 페이지 액세스 허가들을 제어하는 단계를 포함한다.
6. 전술한 예들 중 임의의 예로부터의 방법으로서, 제 1 언패킹된 스터브가 패킹된 실행파일을 언패킹하는 것을 허용하는 단계는 자가 추출 실행파일의 엔트리 포인트의 실행을 검출하기 위해 하드웨어 보조 가상화를 사용하여 메모리 페이지 액세스 허가들을 제어하는 단계를 포함한다.
7. 전술한 예들 중 임의의 예로부터의 방법으로서, 제 1 언패킹 스터브가 패킹된 실행파일을 언패킹하는 것을 허용하는 단계는 코드가 이전에 실행되었던 메모리 페이지로의 기록을 검출하기 위해 하드웨어 보조 가상화를 사용하여 메모리 페이지 액세스 허가들을 제어하는 단계를 포함한다.
8. 전술한 예들 중 임의의 예로부터의 방법으로서, 제 1 언패킹 스터브가 패킹된 실행파일을 언패킹하는 것을 허용하는 단계는: 기록을 검출한 후에, 제 1 언패킹 스터브의 실행을 일시 정시하기 위해 하드웨어 보조 가상화를 사용하는 단계; 제 1 언패킹 스터브의 실행이 일시 정지되어 있는 동안 휴리스틱 통계치들을 수집하는 단계; 휴리스틱 통계치들에 기초하여 메모리가 스캐닝되어야 하는지를 결정하는 단계; 이 결정에 기초하여 메모리를 스캐닝하는 단계; 및 제 1 언패킹 스터브의 실행이 계속되는 것을 허용하는 단계를 더 포함한다.
9. 전술한 예들 중 임의의 예로부터의 방법으로서, 언패킹된 실행파일을 스캐닝하는 단계는 언패킹된 실행파일의 실행 전에 수행된다.
10. 전술한 예들 중 임의의 예로부터의 방법으로서, 패킹된 실행파일은 공지되지 않거나 검출되지 않은 패킹 알고리즘을 사용하여 패킹되었다.
11. 전술한 예들 중 임의의 예로부터의 방법으로서, 하나 이상의 휴리스틱들은 제 1 언패킹 스터브의 완료를 검출하기 전에 기록된 스택 포인터(stack pointer) 값 및 스택 컨텐츠를, 제 1 언패킹 스터브가 패킹된 실행파일을 언패킹하기 시작하는 것을 허용하기 전에 기록된 스택 포인터 값 및 스택 컨텐츠와 비교하는 휴리스틱을 포함한다.
12. 전술한 예들 중 임의의 예로부터의 방법으로서, 제 1 언패킹 스터브가 패킹된 실행파일을 언패킹하는 것을 허용하는 단계는 제 1 언패킹 스터브가 패킹된 실행파일을 언패킹된 실행파일로 언패킹하는 것을 허용하는 동안 제 1 언패킹 스터브의 실행을 제어하는 것을 포함한다.
13. 멀웨어를 검출하기 위해 자가 추출 실행파일을 언패킹하도록 구성되는 시스템은: 메모리; 및 메모리와 통신적으로 결합되는 하나 이상의 프로세싱 유닛들을 포함하고, 메모리는 하나 이상의 프로세싱 유닛들로 하여금: 제 1 언패킹 스터브 및 패킹된 실행파일을 포함하는 자가 추출 실행파일을 메모리로 로딩하고; 제 1 언패킹 스터브가 패킹된 실행파일을 언패킹된 실행파일로 언패킹하는 것을 허용하고; 하나 이상의 휴리스틱들을 사용하여 제 1 언패킹 스터브의 완료를 검출하고; 그리고 언패킹된 실행파일을 멀웨어에 대하여 스캐닝하도록 하는 명령들을 저장한다.
14. 예 13의 시스템으로서, 패킹된 실행파일은 하나 이상의 중간 자가 추출 실행파일을 포함하는 반복하여 패킹된 실행파일이고, 하나 이상의 프로세싱 파일 유닛들로 하여금 제 1 언패킹 스터브가 패킹된 실행파일을 언패킹하는 것을 허용하도록 하는 명령들은 하나 이상의 프로세싱 유닛들로 하여금: 제 1 언패킹 스터브가 패킹된 실행파일을 하나 이상의 중간 자가 추출 실행파일들 중 하나로 언패킹하는 것을 허용하고; 그리고 최종 언패킹 스터브가 최종 패킹된 실행파일을 최종 언패킹 실행파일로 언패킹할 때까지 하나 이상의 중간 자가 추출 실행파일들 중 하나가 자가 추출 실행파일을 연속해서 언패킹하는 것을 허용하도록 하는 명령들을 포함하고, 하나 이상의 프로세싱 유닛들로 하여금 언패킹된 실행파일을 멀웨어에 대하여 스캐닝하도록 하는 명령들은 하나 이상의 프로세싱 유닛들로 하여금 최종 언패킹된 실행파일을 멀웨어에 대하여 스캐닝하도록 하는 명령들을 포함한다.
15. 예 14의 시스템으로서, 언패킹된 실행파일을 멀웨어에 대하여 스캐닝하는 것은 하나 이상의 중간 자가 추출 실행파일들 중 적어도 하나를 적어도 멀웨어에 대하여 스캐닝하는 것을 더 포함한다.
16. 예 14의 시스템으로서, 최종 언패킹된 실행파일은 멀웨어가 검출되는 경우 실행되는 것이 허용되지 않는다.
17. 전술한 예들 중 임의의 예로부터의 시스템으로서, 제 1 언패킹 스터브가 패킹된 실행파일을 언패킹하는 것을 허용하는 것은 제 1 언패킹 스터브에 의해 메모리 페이지 내에 이전에 기록되었던 코드를 실행하기 위한 시도를 검출하기 위해 하드웨어 보조 가상화를 사용하여 메모리 페이지 액세스 허가들을 제어하는 것을 포함한다.
18. 전술한 예들 중 임의의 예로부터의 시스템으로서, 제 1 언패킹 스터브가 패킹된 실행파일을 언패킹하는 것을 허용하는 것은 자가 추출 실행파일의 엔트리 포인트의 실행을 검출하기 위해 하드웨어 보조 가상화를 사용하여 메모리 페이지 액세스 허가들을 제어하는 것을 포함한다
19. 전술한 예들 중 임의의 예로부터의 시스템으로서, 제 1 언패킹 스터브가 패킹된 실행파일을 언패킹하는 것을 허용하는 것은 코드가 이전에 실행되었던 메모리 페이지로의 기록을 검출하기 위해 하드웨어 보조 가상화를 사용하여 메모리 페이지 액세스 허가들을 제어하는 것을 포함한다.
20. 전술한 예들 중 임의의 예로부터의 시스템으로서, 제 1 언패킹 스터브가 패킹된 실행파일을 언패킹하는 것을 허용하는 것은: 기록을 검출한 후에, 제 1 언패킹 스터브의 실행을 일시 정지하기 위해 하드웨어 보조 가상화를 사용하고; 제 1 언패킹 스터브의 실행이 일시 정지되어 있는 동안 휴리스틱 통계치들을 수집하고; 메모리가 휴리스틱 통계치들에 기초하여 스캐닝되어야 하는지를 결정하고; 이 결정에 기초하여 메모리를 스캐닝하고; 그리고 제 1 언패킹 스터브의 실행이 계속되는 것을 허용하는 것을 더 포함한다
21. 전술한 예들 중 임의의 예로부터의 시스템으로서, 언패킹된 실행파일을 스캐닝하는 것은 언패킹된 실행파일의 실행 전에 수행된다.
22. 전술한 예들 중 임의의 예로부터의 시스템으로서, 패킹된 실행파일은 공지되지 않거나 검출되지 않은 패킹 알고리즘을 사용하여 패킹되었다.
23. 전술한 예들 중 임의의 예로부터의 시스템으로서, 하나 이상의 휴리스틱들은 제 1 언패킹 스터브의 완료를 검출하기 전에 기록된 스택 포인트 값 및 스택 컨텐츠를, 제 1 언패킹 스터브가 패킹된 실행파일을 언패킹하기 시작하는 것을 허용하기 전에 기록된 스택 포인터 값 및 스택 컨텐츠와 비교하는 휴리스틱을 포함한다.
24. 전술한 예들 중 임의의 예로부터의 시스템으로서, 제 1 언패킹 스터브가 패킹된 실행파일을 언패킹하는 것을 허용하는 것은 제 1 언패킹 스터브가 패킹된 실행파일을 언패킹된 실행파일로 언패킹하는 것을 허용하는 동안 제 1 언패킹된 스터브의 실행을 제어하는 것을 포함한다.
25. 내부에 저장되는 컴퓨터 실행가능 명령들을 포함하는 컴퓨터 판독가능 매체로서, 상기 명령들은 하나 이상의 프로세싱 유닛들로 하여금: 제 1 언패킹 스터브 및 패킹된 실행파일을 포함하는 자가 추출 실행파일을 메모리 내로 로딩하고; 제 1 언패킹 스터브가 패킹된 실행파일을 언패킹된 실행파일로 언패킹하는 것을 허용하고; 하나 이상의 휴리스틱들을 사용하여 제 1 언패킹 스터브의 완료를 검출하고; 그리고 언패킹된 실행파일을 멀웨어에 대하여 스캐닝하도록 한다.
26. 예 25의 컴퓨터 판독 가능 매체로서, 패킹된 실행파일은 하나 이상의 중간 자가 추출 실행파일들을 포함하는 반복하여 패킹된 실행파일이고, 하나 이상의 프로세싱 유닛들로 하여금 제 1 언패킹 스터브가 패킹된 실행파일을 언패킹하는 것을 허용하도록 하는 명령들은 하나 이상의 프로세싱 유닛들로 하여금 제 1 언패킹 스터프가 패킹된 실행파일을 하나 이상의 중간 자가 추출 실행파일들 중 하나로 언패킹하는 것을 허용하고; 그리고 최종 언패킹 스터브가 최종 패킹된 실행파일을 최종 언패킹된 실행파일로 언패킹할 때까지 하나 이상의 중간 자가 추출 실행파일들 중 하나가 연속해서 언패킹하는 것을 허용하도록 하는 명령들을 포함하고, 하나 이상의 프로세싱 유닛들로 하여금 언패킹된 실행파일을 멀웨어에 대하여 스캐닝하도록 하는 명령들은 하나 이상의 프로세싱 유닛들로 하여금 최종 언패킹된 실행파일을 멀웨어에 대하여 스캐닝하도록 하는 명령들을 포함한다.
27. 예 26의 컴퓨터 판독가능 매체로서, 하나 이상의 프로세싱 유닛들로 하여금 언패킹된 실행파일을 멀웨어에 대하여 스캐닝하도록 하는 명령들은 하나 이상의 프로세싱 유닛들로 하여금 하나 이상의 중간 자가 추출 실행파일들 중 적어도 하나를 멀웨어에 대하여 스캐닝하도록 하는 명령들을 더 포함한다.
28. 예 26의 컴퓨터 판독가능 매체로서, 최종 언패킹된 실행파일은 멀웨어가 검출되는 경우 실행되는 것이 허용되지 않는다.
29. 전술한 예들 중 임의의 예로부터의 컴퓨터 판독가능 매체로서, 하나 이상의 프로세싱 유닛들로 하여금 제 1 언패킹 스터브가 패킹된 실행파일을 언패킹하는 것을 허용하도록 하는 명령들은 제 1 언패킹 스터브에 의해 메모리 페이지 내에 이전에 기록되었던 코드를 실행하기 위한 시도를 검출하기 위해 하나 이상의 프로세싱 유닛들로 하여금 하드웨어 보조 가상화를 사용하여 메모리 페이지 액세스 허가들을 제어하도록 하는 명령들을 포함한다.
30. 전술한 예들 중 임의의 예로부터의 컴퓨터 판독가능 매체로서, 하나 이상의 프로세싱 유닛들로 하여금 제 1 언패킹 스터브가 패킹된 실행파일을 언패킹하는 것을 허용하도록 하는 명령들은 자가 추출 실행파일의 엔트리 포인트의 실행을 검출하기 위해 하나 이상의 프로세싱 유닛들로 하여금 하드웨어 보조 가상화를 사용하여 메모리 페이지 액세스 허가들을 제어하도록 하는 명령들을 포함한다.
31. 전술한 예들 중 임의의 예로부터의 컴퓨터 판독가능 매체로서, 하나 이상의 프로세싱 유닛들로 하여금 제 1 언패킹 스터브가 패킹된 실행파일을 언패킹하는 것을 허용하도록 하는 명령들은 코드가 이전에 실행되었던 메모리 페이지로의 기록을 검출하기 위해 하나 이상의 프로세싱 유닛들로 하여금 하드웨어 보조 가상화를 사용하여 메모리 페이지 액세스 허가들을 제어하도록 하는 명령들을 포함한다.
32. 전술한 예들 중 임의의 예로부터의 컴퓨터 판독가능 매체로서, 하나 이상의 프로세싱 유닛들로 하여금 제 1 언패킹 스터브가 패킹된 실행파일을 언패킹하는 것을 허용하도록 하는 명령들은 하나 이상의 프로세싱 유닛들로 하여금: 기록을 검출한 후에, 제 1 언패킹 스터브의 실행을 일시 정지하기 위해 하드웨어 보조 가상화를 사용하고; 제 1 언패킹 스터브의 실행이 일시 정지되어 있는 동안 휴리스틱 통계치들을 수집하고; 메모리가 휴리스틱 통계치들에 기초하여 스캐닝되어야 하는지를 결정하고; 이 결정에 기초하여 메모리를 스캐닝하고; 그리고 제 1 언패킹 스터브의 실행이 계속되는 것을 허용하도록 하는 명령들을 더 포함한다.
33. 전술한 예들 중 임의의 예로부터의 컴퓨터 판독가능 매체로서, 언패킹된 실행파일을 스캐닝하는 것은 언패킹된 실행파일의 실행 이전에 수행된다.
34. 전술한 예들 중 임의의 예로부터의 컴퓨터 판독가능 매체로서, 패킹된 실행파일은 공지되지 않거나 검출되지 않은 패킹 알고리즘을 사용하여 패킹되었다.
35. 전술한 예들 중 임의의 예로부터의 컴퓨터 판독가능 매체로서, 하나 이상의 휴리스틱들은 제 1 언패킹 스터브의 완료를 검출하기 전에 기록된 스택 포인트 값 및 스택 컨텐츠를, 제 1 언패킹 스터브가 패킹된 실행파일을 언패킹하기 시작하는 것을 허용하기 전에 기록된 스택 포인터 값 및 스택 컨텐츠와 비교하는 휴리스틱을 포함한다.
36. 전술한 예들 중 임의의 예로부터의 컴퓨터 판독가능 매체로서, 하나 이상의 프로세싱 유닛들로 하여금 제 1 언패킹 스터브가 패킹된 실행파일을 언패킹하는 것을 허용하도록 하는 명령들은 제 1 언패킹 스터브가 패킹된 실행파일을 언패킹된 실행파일로 언패킹하는 것을 허용하는 동안 하나 이상의 프로세싱 유닛들로 하여금 제 1 언패킹 스터브의 실행을 제어하도록 하는 명령들을 포함한다.
37. 멀웨어를 검출하기 위해 자가 추출 실행파일을 언패킹하도록 구성되는 디바이스는: 제 1 언패킹 스터브 및 패킹된 실행파일을 포함하는 자가 추출 실행파일을 메모리로 로딩하고; 제 1 언패킹 스터브가 패킹된 실행파일을 언패킹된 실행파일로 언패킹하는 것을 허용하고; 하나 이상의 휴리스틱들을 사용하여 제 1 언패킹 스터브의 완료를 검출하고; 그리고 언패킹된 실행파일을 멀웨어에 대하여 스캐닝하는 모듈을 포함한다.
38. 예 37의 디바이스로서, 패킹된 실행파일은 하나 이상의 중간 자가 추출 실행파일들을 포함하는 반복 패킹된 실행파일이고, 하나 이상의 프로세싱 유닛들로 하여금 제 1 언패킹 스터브가 패킹된 실행파일을 언패킹하는 것을 허용하도록 하는 명령들은 하나 이상의 프로세싱 유닛들로 하여금 제 1 언패킹 스터브가 패킹된 실행파일을 하나 이상의 중간 자가 추출 실행파일들 중 하나로 언패킹하는 것을 허용하고; 그리고 최종 언패킹 스터브가 최종 패킹된 실행파일을 최종 언패킹된 실행파일로 언패킹할 때까지 하나 이상의 중간 자가 추출 실행파일들 중 하나가 연속해서 언패킹하는 것을 허용하도록 하는 명령들을 포함하고, 하나 이상의 프로세싱 유닛들로 하여금 언패킹된 실행파일을 멀웨어에 대하여 스캐닝하도록 하는 명령들은 하나 이상의 프로세싱 유닛들로 하여금 최종 언패킹된 실행파일을 멀웨어에 대하여 스캐닝하도록 하는 명령들을 포함한다.
39. 예 38의 디바이스로서, 언패킹된 실행파일을 멀웨어에 대하여 스캐닝하는 것은 하나 이상의 중간 자가 추출 실행파일들 중 적어도 하나를 적어도 멀웨어에 대하여 스캐닝하는 것을 더 포함한다.
40. 예 38의 디바이스로서, 최종 언패킹된 실행파일은 멀웨어가 검출되는 경우 실행되는 것이 허용되지 않는다.
41. 전술한 예들 중 임의의 예로부터의 디바이스로서, 제 1 언패킹 스터브가 패킹된 실행파일을 언패킹하는 것을 허용하는 것은 제 1 언패킹 스터브에 의해 메모리 페이지 내로 이전에 기록되었던 코드를 실행하기 위한 시도를 검출하기 위해 하드웨어 보조 가상화를 사용하여 메모리 페이지 액세스 허가들을 제어하는 것을 포함한다.
42. 전술한 예들 중 임의의 예로부터의 디바이스로서, 제 1 언패킹 스터브가 패킹된 실행파일을 언패킹하는 것을 허용하는 것은 자가 추출 실행파일의 엔트리 포인트의 실행을 검출하기 위해 하드웨어 보조 가상화를 사용하여 메모리 패이지 액세스 허가들을 제어하는 것을 포함한다.
43. 전술한 예들 중 임의의 예로부터의 디바이스로서, 제 1 언패킹 스터브가 패킹된 실행파일을 언패킹하는 것을 허용하는 것은 코드가 이전에 실행되었던 메모리 페이지로의 기록을 검출하기 위해 하드웨어 보조 가상화를 사용하여 메모리 페이지 액세스 허가들을 제어하는 것을 포함한다.
44. 전술한 예들 중 임의의 예로부터의 디바이스로서, 제 1 언패킹 스터브가 패킹된 실행파일을 언패킹하는 것을 허용하는 것은: 기록을 검출한 후에, 제 1 언패킹 스터브의 실행을 일시 정지하기 위해 하드웨어 보조 가상화를 사용하고; 제 1 언패킹 스터브의 실행이 일지 정지되어 있는 동안 휴리스틱 통계치들을 수집하고; 메모리가 휴리스틱 통계치들에 기초하여 스캐닝되어야 하는지를 결정하고; 이 결정에 기초하여 메모리를 스캐닝하고; 그리고 제 1 언패킹 스터브의 실행이 계속되는 것을 허용하는 것을 더 포함한다.
45. 전술한 예들 중 임의의 예로부터의 디바이스로서, 언패킹된 실행파일은 언패킹된 실행파일의 실행 전에 수행된다.
46. 전술한 예들 중 임의의 예로부터의 디바이스로서, 패킹된 실행파일은 공지되지 않거나 검출되지 않은 패킹 알고리즘을 사용하여 패킹되었다.
47. 전술한 예들 중 임의의 예로부터의 디바이스로서, 하나 이상의 휴리스틱들은 제 1 언패킹 스터브의 완료를 검출하기 전에 기록된 스택 포인트 값 및 스택 컨텐츠를, 제 1 언패킹 스터브가 패킹된 실행파일을 언패킹하기 시작하는 것을 허용하기 전에 기록된 스택 포인터 값 및 스택 컨텐츠와 비교하는 휴리스틱을 포함한다.
48. 전술한 예들 중 임의의 예로부터의 디바이스로서, 제 1 언패킹 스터브가 패킹된 실행파일을 언패킹하는 것을 허용하는 것은 제 1 언패킹 스터브가 패킹된 실행파일을 언패킹된 실행파일로 언패킹하는 것을 허용하는 동안 제 1 언패킹 스터브의 실행을 제어하는 것을 포함한다.
49. 멀웨어를 검출하기 위해 자가 추출 실행파일을 언패킹하도록 구성되는 디바이스는: 제 1 언패킹 스터브 및 패킹된 실행파일을 포함하는 자가 추출 실행파일을 메모리로 로딩하기 위한 수단; 제 1 언패킹 스터브가 패킹된 실행파일을 언패킹된 실행파일로 언패킹하는 것을 허용하기 위한 수단; 제 1 언패킹 스터브의 지식과 관계 없이, 하나 이상의 휴리스틱들을 사용하여 제 1 언패킹 스터브의 완료를 검출하기 위한 수단; 및 언패킹된 실행파일을 멀웨어에 대하여 스캐닝하는 수단을 포함한다.
50. 전술한 예의 디바이스로서, 패킹된 실행파일은 자가 추출 실행파일들의 시퀀스를 포함하고, 마지막을 제외한 시퀀스의 각각의 멤버(member)는 언패킹 스터브 및 후행 자가 추출 실행파일을 포함하고, 마지막 멤버는 최종 언패킹 스터브 및 최종 패킹된 실행파일을 포함하고, 제 1 언패킹 스터브가 패킹된 실행파일을 언패킹하는 것을 허용하기 위한 수단은: 제 1 언패킹 스터브가 패킹된 실행파일을 자가 추출 실행파일의 시퀀스의 제 1 멤버로 언패킹하는 것을 허용하기 위한 수단; 및 제 1 언패킹 스터브가 최종 패킹된 실행파일을 최종 언패킹된 실행파일로 언패킹할 때까지 자가 추출 실행파일들의 시퀀스의 각각의 멤버가 후행 자가 추출 실행파일을 언패킹하는 것을 허용하기 위한 수단을 포함하고, 언패킹된 실행파일을 멀웨어에 대하여 스캐닝하기 위한 수단은 최종 언패킹된 실행파일을 멀웨어에 대하여 스캐닝하기 위한 수단을 포함한다.
위의 예들에서 상술한 것들은 하나 이상의 실시예들에서 어디에서든지 사용될 수 있다. 예를 들어, 상술한 바와 같은 장치의 모든 선택 특징들은 또한 본원에서 설명되는 바에 따른 방법들 또는 프로세스들로서 구현될 수 있다. 더욱이, 상기 예들은 시스템 내에서 하나의 디바이스 또는 다수의 디바이스들로 구현될 수 있다.
상술한 예들 및 실시예들은 컴퓨터 판독 가능 저장 매체에서 구현되는 컴퓨터 실행가능 명령들 또는 코트로서 구현될 수 있다. 컴퓨터 실행가능 명령들 또는 컴퓨터 프로그램 제품뿐만 아니라 개시되는 기술들의 구현 동안 생성되고 사용되는 어떠한 데이터도 광 미디어 디스크(optical media disc)들(예를 들어, DVD들, CD들), 휘발성 메모리 구성요소들(예를 들어, DRAM, SRAM), 비휘발성 메모리 구성요소들(예를 들어, 플래시 메모리, 디스크 드라이브들)과 같은 하나 이상의 유형적인 컴퓨터 판독가능 저장 매체 상에 저장될 수 있다. 컴퓨터 판독가능 저장 매체는 고체 드라이브들, USB 플래시 드라이브들 및 메모리 모듈과 같은 컴퓨터 판독 가능 저장 디바이스 내에 포함될 수 있다.
위의 설명에서, 설명을 위해, 개시된 실시예들의 철저한 이해를 제공하기 위해 많은 특정한 세부사항들이 언급된다. 그러나, 당업자에게는 개시된 실시예들이 이 특정한 세부사항들 없이 실행될 수 있음이 명백할 것이다. 다른 경우들에서, 구조 및 디바이스들은 개시된 실시예들을 모호하기 하는 것을 방지하기 위해 블록도 형태로 도시된다. 숫자들이 아래첨자들 또는 접미사들 없이 언급된 것들은 아래첨자들 및 접미사들의 모든 예를 언급된 번호에 대응하여 칭하는 것으로 이해된다. 더욱이, 본 발명에서 사용되는 언어는 주로 쉽게 읽히고 내용을 알리기 위한 목적들을 위해 선택되었고 본 발명의 특허대상을 상술하거나 제한하도록 선택되지 않았을 수 있고, 본 발명의 특허대상은 그와 같은 특허대상을 결정하는 데 필요한 청구항들에 의존한다. 명세서에서 "하나의 실시예" 또는 "실시예"라 함은 실시예들과 관련되어 기술되는 특정한 특징, 구조 또는 특성이 적어도 하나의 개시된 실시예 내에 포함되는 것을 의미하고, "하나의 실시예" 또는 "실시예"를 다수 언급하는 것이 반드시 모두 동일한 실시예를 언급하는 것으로 이해되어서는 안 된다.
또한 위의 설명은 실례인 것으로 의도되고 제한하는 것으로 의도되지 않는 것이 이해되어야 한다. 예를 들어, 상술한 실시예들은 서로와 결합하여 사용될 수 있고 실례의 프로세스 단계들은 보이는 바와 상이한 순서로 수행될 수 있다. 위의 설명을 검토하면 당업자에게는 많은 다른 실시예들이 명백할 것이다. 그러므로 본 발명의 범위는 첨부된 청구항들을 참조하여, 그와 같은 청구항들의 권리에 속하는 모든 범위의 등가들과 함께 결정되어야 한다. 첨부된 청구항들에서, "including" 및 "in which"는 각각의 용어들의 평이한 영어(plain English)의 등가들 "comprising" 및 "wherein"으로 사용된다.

Claims (25)

  1. 컴퓨터 실행가능 명령어를 포함하는 비일시적 컴퓨터 판독가능 매체로서,
    상기 비일시적 컴퓨터 판독가능 매체에 저장된 상기 컴퓨터 실행가능 명령어는 실행시 하나 이상의 프로세싱 유닛으로 하여금,
    제 1 언패킹 스터브(unpacking stub) 및 패킹된 실행파일(packed executable)을 포함하는 자가 추출 실행파일(a self-extracting executable)을 메모리 내로 로딩(loading)하게 하고,
    상기 제 1 언패킹 스터브가 상기 패킹된 실행파일을 언패킹된 실행파일로 언패킹하는 것을 허용하게 하고,
    하드웨어 보조 가상화(hardware assisted virtualization)를 사용하여 메모리 페이지 액세스 허가를 제어함으로써, 코드가 이전에 실행되었던 메모리 페이지로의 기록 시도를 검출하게 하고,
    상기 하드웨어 보조 가상화를 사용하여 상기 메모리 페이지 액세스 허가를 제어함으로써, 상기 제 1 언패킹 스터브에 의해 메모리 페이지 내로 이전에 기록되었던 코드의 실행 시도를 검출하게 하고,
    하나 이상의 휴리스틱(heuristics)을 사용하여 상기 제 1 언패킹 스터브에 의한 상기 패킹된 실행파일의 언패킹의 완료를 검출하게 하고,
    상기 언패킹된 실행파일에서 멀웨어(malware)를 스캐닝하게 하되,
    상기 하나 이상의 휴리스틱은, 상기 제 1 언패킹 스터브의 완료를 검출하기 전에 기록된 스택 포인터 값 및 스택 컨텐츠를, 상기 제 1 언패킹 스터브가 상기 패킹된 실행파일을 언패킹하기 시작하는 것을 허용하기 전에 기록된 스택 포인터 값 및 스택 컨텐츠와 비교하는 것을 포함하는
    비일시적 컴퓨터 판독가능 매체.
  2. 제 1 항에 있어서,
    상기 패킹된 실행파일은 하나 이상의 중간 자가 추출 실행파일을 포함하는 반복하여 패킹된 실행파일이고,
    실행시 상기 하나 이상의 프로세싱 유닛으로 하여금 상기 제 1 언패킹 스터브가 상기 패킹된 실행파일을 언패킹하는 것을 허용하도록 하는 상기 명령어는,
    실행시 상기 하나 이상의 프로세싱 유닛 중 적어도 일부로 하여금
    상기 제 1 언패킹 스터브가 상기 패킹된 실행파일을 상기 하나 이상의 중간 자가 추출 실행파일 중 하나로 언패킹하는 것을 허용하게 하고,
    최종 언패킹 스터브가 최종 패킹된 실행파일을 최종 언패킹된 실행파일로 언패킹할 때까지 상기 하나 이상의 중간 자가 추출 실행파일 중 상기 하나가 연속해서 언패킹하는 것을 허용하도록 하는
    명령어를 포함하고,
    실행시 상기 하나 이상의 프로세싱 유닛으로 하여금 상기 언패킹된 실행파일에서 멀웨어를 스캐닝하게 하는 상기 명령어는, 실행시 상기 하나 이상의 프로세싱 유닛 중 적어도 일부로 하여금 상기 최종 언패킹된 실행파일에서 멀웨어를 스캐닝하게 하는 명령어를 포함하는
    비일시적 컴퓨터 판독가능 매체.
  3. 제 2 항에 있어서,
    실행시 하나 이상의 프로세싱 유닛으로 하여금 상기 언패킹된 실행파일에서 멀웨어를 스캐닝하게 하는 상기 명령어는, 실행시 상기 하나 이상의 프로세싱 유닛 중 적어도 일부로 하여금 상기 하나 이상의 중간 자가 추출 실행파일 중 적어도 하나에서 멀웨어를 스캐닝하게 하는 명령어를 더 포함하는
    비일시적 컴퓨터 판독가능 매체.
  4. 제 2 항에 있어서,
    멀웨어가 검출되면 상기 최종 언패킹된 실행파일은 실행하는 것이 허용되지 않는
    비일시적 컴퓨터 판독가능 매체.
  5. 제 1 항에 있어서,
    상기 명령어는,
    상기 하나 이상의 프로세싱 유닛 중 적어도 일부로 하여금
    상기 하드웨어 보조 가상화를 사용함으로써, 상기 실행 시도를 검출한 후에 상기 제 1 언패킹 스터브의 실행을 일시 정지(pause)하게 하고,
    상기 제 1 언패킹 스터브의 실행이 일시 정지되어 있는 동안 휴리스틱 통계치를 수집하게 하고,
    상기 휴리스틱 통계치에 기초하여 상기 메모리가 스캐닝되어야 하는지 여부를 결정하게 하고,
    상기 메모리가 스캐닝되어야 하는지 여부의 결정에 기초하여 상기 메모리를 스캐닝하게 하고,
    상기 제 1 언패킹 스터브의 실행이 계속되는 것을 허용하게 하는 명령어를 더 포함하는
    비일시적 컴퓨터 판독가능 매체.
  6. 제 1 항에 있어서,
    상기 명령어는, 상기 하드웨어 보조 가상화를 사용하여 메모리 페이지 액세스 허가를 제어함으로써 상기 하나 이상의 프로세싱 유닛 중 적어도 일부로 하여금 상기 자가 추출 실행파일의 엔트리 포인트(entry point)의 실행을 검출하게 하는 명령어를 더 포함하는
    비일시적 컴퓨터 판독가능 매체.
  7. 제 1 항에 있어서,
    상기 명령어는,
    상기 하나 이상의 프로세싱 유닛 중 적어도 일부로 하여금
    상기 하드웨어 보조 가상화를 사용함으로써 상기 기록 시도를 검출한 후에 상기 제 1 언패킹 스터브의 실행을 일시 정지하게 하고,
    상기 제 1 언패킹 스터브의 실행이 일시 정지되어 있는 동안 휴리스틱 통계치를 수집하게 하고,
    상기 휴리스틱 통계치에 기초하여 상기 메모리가 스캐닝되어야 하는지 여부를 결정하게 하고,
    상기 메모리가 스캐닝되어야 하는지 여부의 결정에 기초하여 상기 메모리를 스캐닝하게 하고,
    상기 제 1 언패킹 스터브의 실행이 계속되는 것을 허용하게 하는 명령어를 더 포함하는
    비일시적 컴퓨터 판독가능 매체.
  8. 제 1 항에 있어서,
    실행시 하나 이상의 프로세싱 유닛으로 하여금 상기 언패킹된 실행파일에서 멀웨어를 스캐닝하게 하는 상기 명령어는, 실행시 상기 하나 이상의 프로세싱 유닛 중 적어도 일부로 하여금 상기 언패킹된 실행파일의 실행 이전에 상기 언패킹된 실행파일에서 멀웨어를 스캐닝하게 하는 명령어를 포함하는
    비일시적 컴퓨터 판독가능 매체.
  9. 제 1 항에 있어서,
    상기 패킹된 실행파일은 알려져 있지 않거나 검출 불가한 패킹 알고리즘을 사용하여 패킹된 것인
    비일시적 컴퓨터 판독가능 매체.
  10. 멀웨어를 검출하기 위해 자가 추출 실행파일을 언패킹하는 방법으로서,
    프로세서를 사용하여, 제 1 언패킹 스터브 및 패킹된 실행파일을 포함하는 자가 추출 실행파일을 메모리 내로 로딩하는 단계와,
    상기 제 1 언패킹 스터브가 상기 패킹된 실행파일을 언패킹된 실행파일로 언패킹하는 것을 허용하는 단계와,
    하드웨어 보조 가상화를 사용하여 메모리 페이지 액세스 허가를 제어함으로써, 코드가 이전에 실행되었던 메모리 페이지로의 기록 시도를 검출하는 단계와,
    상기 하드웨어 보조 가상화를 사용하여 상기 메모리 페이지 액세스 허가를 제어함으로써, 상기 제 1 언패킹 스터브에 의해 메모리 페이지 내로 이전에 기록되었던 코드의 실행 시도를 검출하는 단계와,
    하나 이상의 휴리스틱을 사용하여 상기 제 1 언패킹 스터브의 완료를 상기 프로세서에 의해 검출하는 단계와,
    상기 언패킹된 실행파일에서 멀웨어를 스캐닝하는 단계
    를 포함하되,
    상기 하나 이상의 휴리스틱은, 상기 제 1 언패킹 스터브의 완료를 검출하기 전에 기록된 스택 포인터 값 및 스택 컨텐츠를, 상기 제 1 언패킹 스터브가 상기 패킹된 실행파일을 언패킹하기 시작하는 것을 허용하기 전에 기록된 스택 포인터 값 및 스택 컨텐츠와 비교하는 것을 포함하는
    방법.
  11. 제 10 항에 있어서,
    상기 패킹된 실행파일은 하나 이상의 중간 자가 추출 실행파일을 포함하는 반복하여 패킹된 실행파일이고,
    상기 제 1 언패킹 스터브가 상기 패킹된 실행파일을 언패킹하는 것을 허용하는 단계는,
    상기 제 1 언패킹 스터브가 상기 패킹된 실행파일을 상기 하나 이상의 중간 자가 추출 실행파일 중 하나로 언패킹하는 것을 허용하는 단계와,
    최종 언패킹 스터브가 최종 패킹된 실행파일을 최종 언패킹된 실행파일로 언패킹할 때까지 상기 하나 이상의 중간 자가 추출 실행파일 중 상기 하나가 연속해서 언패킹하는 것을 허용하는 단계
    를 포함하고,
    상기 언패킹된 실행파일에서 멀웨어를 스캐닝하는 단계는 상기 최종 언패킹된 실행파일에서 멀웨어를 스캐닝하는 단계를 포함하는
    방법.
  12. 제 11 항에 있어서,
    상기 언패킹된 실행파일에서 멀웨어를 스캐닝하는 단계는 상기 하나 이상의 중간 자가 추출 실행파일 중 적어도 하나에서 멀웨어를 스캐닝하는 단계를 더 포함하는
    방법.
  13. 제 10 항에 있어서,
    상기 제 1 언패킹 스터브가 상기 패킹된 실행파일을 언패킹하는 것을 허용하는 단계는,
    상기 하드웨어 보조 가상화를 사용함으로써, 상기 기록 시도 또는 상기 실행 시도를 검출한 후에 상기 제 1 언패킹 스터브의 실행을 일시 정지하는 단계와,
    상기 제 1 언패킹 스터브의 실행이 일시 정지되어 있는 동안 휴리스틱 통계치를 수집하는 단계와,
    상기 휴리스틱 통계치에 기초하여 상기 메모리가 스캐닝되어야 하는지 여부를 결정하는 단계와,
    상기 메모리가 스캐닝되어야 하는지 여부의 결정에 기초하여 상기 메모리를 스캐닝하는 단계와,
    상기 제 1 언패킹 스터브의 실행이 계속되는 것을 허용하는 단계
    를 더 포함하는
    방법.
  14. 제 10 항에 있어서,
    상기 언패킹된 실행파일에서 멀웨어를 스캐닝하는 단계는 상기 언패킹된 실행파일의 실행 이전에 수행되는
    방법.
  15. 제 10 항에 있어서,
    상기 패킹된 실행파일은 알려져 있지 않거나 검출 불가한 패킹 알고리즘을 사용하여 패킹된 것인
    방법.
  16. 멀웨어를 검출하기 위해 자가 추출 실행파일을 언패킹하도록 구성된 시스템으로서,
    명령어를 저장하는 메모리와,
    상기 메모리와 통신 가능하게 결합되는 하나 이상의 프로세싱 유닛을 포함하되,
    상기 명령어는 상기 하나 이상의 프로세싱 유닛으로 하여금,
    제 1 언패킹 스터브 및 패킹된 실행파일을 포함하는 자가 추출 실행파일을 메모리로 로딩하게 하고,
    상기 제 1 언패킹 스터브가 상기 패킹된 실행파일을 언패킹된 실행파일로 언패킹하는 것을 허용하게 하고,
    하드웨어 보조 가상화를 사용하여 메모리 페이지 액세스 허가를 제어함으로써, 상기 제 1 언패킹 스터브에 의해 메모리 페이지 내로 이전에 기록되었던 코드의 실행 시도를 검출하게 하고,
    상기 하드웨어 보조 가상화를 사용하여 상기 메모리 페이지 액세스 허가를 제어함으로써, 코드가 이전에 실행되었던 메모리 페이지로의 기록 시도를 검출하게 하고,
    하나 이상의 휴리스틱을 사용하여 상기 제 1 언패킹 스터브에 의한 상기 패킹된 실행파일의 언패킹의 완료를 검출하게 하고,
    상기 언패킹된 실행파일에서 멀웨어를 스캐닝하게 하되,
    상기 하나 이상의 휴리스틱은, 상기 제 1 언패킹 스터브의 완료를 검출하기 전에 기록된 스택 포인터 값 및 스택 컨텐츠를, 상기 제 1 언패킹 스터브가 상기 패킹된 실행파일을 언패킹하기 시작하는 것을 허용하기 전에 기록된 스택 포인터 값 및 스택 컨텐츠와 비교하는 것을 포함하는
    시스템.
  17. 제 16 항에 있어서,
    상기 패킹된 실행파일은 하나 이상의 중간 자가 추출 실행파일을 포함하는 반복하여 패킹된 실행파일이고,
    하나 이상의 프로세싱 유닛으로 하여금 상기 제 1 언패킹 스터브가 상기 패킹된 실행파일을 언패킹하는 것을 허용하도록 하는 상기 명령어는,
    상기 하나 이상의 프로세싱 유닛 중 적어도 일부로 하여금
    상기 제 1 언패킹 스터브가 상기 패킹된 실행파일을 상기 하나 이상의 중간 자가 추출 실행파일 중 하나로 언패킹하는 것을 허용하게 하고,
    최종 언패킹 스터브가 최종 패킹된 실행파일을 최종 언패킹된 실행파일로 언패킹할 때까지 상기 하나 이상의 중간 자가 추출 실행파일 중 상기 하나가 연속해서 언패킹하는 것을 허용하도록 하는
    명령어를 포함하고,
    상기 하나 이상의 프로세싱 유닛으로 하여금 상기 언패킹된 실행파일에서 멀웨어를 스캐닝하게 하는 상기 명령어는, 상기 하나 이상의 프로세싱 유닛 중 적어도 일부로 하여금 상기 최종 언패킹된 실행파일에서 멀웨어를 스캐닝하게 하는 명령어를 포함하는
    시스템.
  18. 제 17 항에 있어서,
    상기 하나 이상의 프로세싱 유닛으로 하여금 상기 언패킹된 실행파일에서 멀웨어를 스캐닝하게 하는 상기 명령어는, 상기 하나 이상의 프로세싱 유닛 중 적어도 일부로 하여금 상기 하나 이상의 중간 자가 추출 실행파일 중 적어도 하나에서 멀웨어를 스캐닝하게 하는 명령어를 더 포함하는
    시스템.
  19. 제 16 항에 있어서,
    상기 하나 이상의 프로세싱 유닛으로 하여금 상기 제 1 언패킹 스터브가 상기 패킹된 실행파일을 언패킹하는 것을 허용하도록 하는 상기 명령어는,
    상기 하나 이상의 프로세싱 유닛 중 적어도 일부로 하여금
    상기 하드웨어 보조 가상화를 사용함으로써, 상기 기록 시도 또는 상기 실행 시도를 검출한 후에 상기 제 1 언패킹 스터브의 실행을 일시 정지하게 하고,
    상기 제 1 언패킹 스터브의 실행이 일시 정지되어 있는 동안 휴리스틱 통계치를 수집하게 하고,
    상기 휴리스틱 통계치에 기초하여 상기 메모리가 스캐닝되어야 하는지 여부를 결정하게 하고,
    상기 메모리가 스캐닝되어야 하는지 여부의 결정에 기초하여 상기 메모리를 스캐닝하게 하고,
    상기 제 1 언패킹 스터브의 실행이 계속되는 것을 허용하게 하는 명령어를 더 포함하는
    시스템.
  20. 제 1 항에 있어서,
    상기 하나 이상의 휴리스틱은, 상기 코드의 실행 시도가 상기 메모리 페이지를 포함하는 코드 섹션의 모든 페이지의 기록 이후 상기 코드 섹션으로부터의 코드의 첫번째 실행 시도인지 여부를 결정하는 것을 더 포함하는
    비일시적 컴퓨터 판독가능 매체.
  21. 제 1 항에 있어서,
    상기 하나 이상의 휴리스틱은, 페이지 기록 예외(exception)를 생성하는 메모리 페이지에 대한 기록이 메모리 페이지의 섹션의 마지막 페이지에 대한 기록인지 여부를 결정하는 것을 더 포함하는
    비일시적 컴퓨터 판독가능 매체.
  22. 제 10 항에 있어서,
    상기 하나 이상의 휴리스틱은, 상기 코드의 실행 시도가 상기 메모리 페이지를 포함하는 코드 섹션의 모든 페이지의 기록 이후 상기 코드 섹션으로부터의 코드의 첫번째 실행 시도인지 여부를 결정하는 것을 더 포함하는
    방법.
  23. 제 10 항에 있어서,
    상기 하나 이상의 휴리스틱은, 페이지 기록 예외를 생성하는 메모리 페이지에 대한 기록이 메모리 페이지의 섹션의 마지막 페이지에 대한 기록인지 여부를 결정하는 것을 더 포함하는
    방법.
  24. 제 16 항에 있어서,
    상기 하나 이상의 휴리스틱은, 상기 코드의 실행 시도가 상기 메모리 페이지를 포함하는 코드 섹션의 모든 페이지의 기록 이후 상기 코드 섹션으로부터의 코드의 첫번째 실행 시도인지 여부를 결정하는 것을 더 포함하는
    시스템.
  25. 제 16 항에 있어서,
    상기 하나 이상의 휴리스틱은, 페이지 기록 예외를 생성하는 메모리 페이지에 대한 기록이 메모리 페이지의 섹션의 마지막 페이지에 대한 기록인지 여부를 결정하는 것을 더 포함하는
    시스템.
KR1020157021878A 2013-03-15 2014-03-03 멀웨어 검출을 위한 애플리케이션들의 제네릭 언패킹 KR101740604B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/838,663 2013-03-15
US13/838,663 US9471783B2 (en) 2013-03-15 2013-03-15 Generic unpacking of applications for malware detection
PCT/US2014/019960 WO2014149627A1 (en) 2013-03-15 2014-03-03 Generic unpacking of applications for malware detection

Related Child Applications (1)

Application Number Title Priority Date Filing Date
KR1020177013801A Division KR101806090B1 (ko) 2013-03-15 2014-03-03 멀웨어 검출을 위한 애플리케이션들의 제네릭 언패킹

Publications (2)

Publication Number Publication Date
KR20150106451A KR20150106451A (ko) 2015-09-21
KR101740604B1 true KR101740604B1 (ko) 2017-06-01

Family

ID=51535108

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020177013801A KR101806090B1 (ko) 2013-03-15 2014-03-03 멀웨어 검출을 위한 애플리케이션들의 제네릭 언패킹
KR1020157021878A KR101740604B1 (ko) 2013-03-15 2014-03-03 멀웨어 검출을 위한 애플리케이션들의 제네릭 언패킹

Family Applications Before (1)

Application Number Title Priority Date Filing Date
KR1020177013801A KR101806090B1 (ko) 2013-03-15 2014-03-03 멀웨어 검출을 위한 애플리케이션들의 제네릭 언패킹

Country Status (6)

Country Link
US (2) US9471783B2 (ko)
EP (1) EP2973177A4 (ko)
KR (2) KR101806090B1 (ko)
CN (2) CN105009139B (ko)
RU (2) RU2658132C1 (ko)
WO (1) WO2014149627A1 (ko)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9208314B1 (en) * 2013-12-19 2015-12-08 Symantec Corporation Systems and methods for distinguishing code of a program obfuscated within a packed program
EP3087475A4 (en) 2013-12-26 2017-07-19 McAfee, Inc. Generic unpacking of program binaries
JP6163678B2 (ja) * 2013-12-26 2017-07-19 マカフィー, インコーポレイテッド プログラムバイナリの汎用的なアンパッキング
US9171154B2 (en) * 2014-02-12 2015-10-27 Symantec Corporation Systems and methods for scanning packed programs in response to detecting suspicious behaviors
US9516055B1 (en) * 2015-05-29 2016-12-06 Trend Micro Incorporated Automatic malware signature extraction from runtime information
WO2017216735A1 (en) * 2016-06-14 2017-12-21 Cymmetria, Inc. Employing code signing as a tool in cyber-security deception
RU2637997C1 (ru) * 2016-09-08 2017-12-08 Акционерное общество "Лаборатория Касперского" Система и способ обнаружения вредоносного кода в файле
EP3352110B1 (en) * 2017-01-23 2020-04-01 Cyphort Inc. System and method for detecting and classifying malware
US10645107B2 (en) * 2017-01-23 2020-05-05 Cyphort Inc. System and method for detecting and classifying malware
US10691791B2 (en) * 2017-06-29 2020-06-23 Paypal, Inc. Automatic unpacking of executables
KR101908517B1 (ko) * 2017-09-14 2018-10-16 주식회사 엔에스에이치씨 스트링과 코드 시그니처를 이용한 악성코드 탐지 및 패커 해제 방법
US20220261481A1 (en) * 2021-02-12 2022-08-18 Palo Alto Networks, Inc. Software packer-agnostic unpacking of packed executables
US11841948B2 (en) * 2021-11-01 2023-12-12 Fortinet, Inc. Systems and methods for unpacking protected data from obfuscated code

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100011441A1 (en) 2007-05-01 2010-01-14 Mihai Christodorescu System for malware normalization and detection
US20110258163A1 (en) 2010-04-20 2011-10-20 Smith Micro Software, Inc. Dynamically created two-stage self extracting archives

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030115479A1 (en) * 2001-12-14 2003-06-19 Jonathan Edwards Method and system for detecting computer malwares by scan of process memory after process initialization
GB2400934B (en) * 2003-04-25 2005-12-14 Messagelabs Ltd A method of,and system for detecting mass mailing viruses
US7251735B2 (en) * 2003-07-22 2007-07-31 Lockheed Martin Corporation Buffer overflow protection and prevention
US8151117B2 (en) * 2003-11-05 2012-04-03 Vocalcomm Group, Llc Detection of items stored in a computer system
US7620990B2 (en) * 2004-01-30 2009-11-17 Microsoft Corporation System and method for unpacking packed executables for malware evaluation
US7636856B2 (en) * 2004-12-06 2009-12-22 Microsoft Corporation Proactive computer malware protection through dynamic translation
US7797746B2 (en) 2006-12-12 2010-09-14 Fortinet, Inc. Detection of undesired computer files in archives
US9246938B2 (en) 2007-04-23 2016-01-26 Mcafee, Inc. System and method for detecting malicious mobile program code
US7996904B1 (en) * 2007-12-19 2011-08-09 Symantec Corporation Automated unpacking of executables packed by multiple layers of arbitrary packers
KR101110308B1 (ko) 2008-12-22 2012-02-15 한국전자통신연구원 실행압축 특성을 이용한 악성코드 탐지장치 및 그 방법
RU91205U1 (ru) * 2009-10-01 2010-01-27 ЗАО "Лаборатория Касперского" Система асинхронной обработки событий для обнаружения неизвестных вредоносных программ
US8176559B2 (en) * 2009-12-16 2012-05-08 Mcafee, Inc. Obfuscated malware detection
RU2430411C1 (ru) * 2010-03-02 2011-09-27 Закрытое акционерное общество "Лаборатория Касперского" Система и способ обнаружения вредоносного программного обеспечения
CN102402449A (zh) * 2011-12-30 2012-04-04 成都三零瑞通移动通信有限公司 一种在计算机上直接解析Android安装文件APK文件信息的方法
RU2514141C1 (ru) * 2012-09-28 2014-04-27 Закрытое акционерное общество "Лаборатория Касперского" Способ эмуляции вызовов системных функций для обхода средств противодействия эмуляции

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100011441A1 (en) 2007-05-01 2010-01-14 Mihai Christodorescu System for malware normalization and detection
US20110258163A1 (en) 2010-04-20 2011-10-20 Smith Micro Software, Inc. Dynamically created two-stage self extracting archives

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
"OmniUnpack: Fast, Generic, and Safe Unpacking of Malware", Computer Security Applications Conference 2007, pp431-441

Also Published As

Publication number Publication date
RU2632163C2 (ru) 2017-10-02
US20170004308A1 (en) 2017-01-05
EP2973177A4 (en) 2016-08-17
RU2658132C1 (ru) 2018-06-19
RU2015134172A (ru) 2017-02-16
EP2973177A1 (en) 2016-01-20
CN105009139A (zh) 2015-10-28
CN105009139B (zh) 2018-02-06
US9471783B2 (en) 2016-10-18
KR20170061179A (ko) 2017-06-02
US9811663B2 (en) 2017-11-07
WO2014149627A1 (en) 2014-09-25
US20140283058A1 (en) 2014-09-18
KR20150106451A (ko) 2015-09-21
CN108319856A (zh) 2018-07-24
KR101806090B1 (ko) 2017-12-07

Similar Documents

Publication Publication Date Title
KR101740604B1 (ko) 멀웨어 검출을 위한 애플리케이션들의 제네릭 언패킹
Olivier et al. A binary-compatible unikernel
KR102206115B1 (ko) 인터프리터 가상 머신을 이용한 행동 멀웨어 탐지
US8621279B1 (en) System and method for generating emulation-based scenarios for Error Handling
US10698668B1 (en) Custom code transformations during compilation process
RU2622627C2 (ru) Способ обнаружения вредоносных исполняемых файлов, содержащих интерпретатор, посредством комбинирования эмуляторов
US8479174B2 (en) Method, computer program and computer for analyzing an executable computer file
US8726255B2 (en) Recompiling with generic to specific replacement
RU2665911C2 (ru) Система и способ анализа файла на вредоносность в виртуальной машине
US9900324B1 (en) System to discover and analyze evasive malware
US20130031291A1 (en) System and method for virtual partition monitoring
US10372908B2 (en) System and method for detecting malware in a stream of bytes
JP2019502197A (ja) ランタイム生成コードにおける悪意のあるコードの検出のためのシステムおよび方法
US11061695B2 (en) Unikernel provisioning
CN109857520B (zh) 一种虚拟机自省中的语义重构改进方法及系统
US10311233B2 (en) Generic unpacking of program binaries
CN113176926B (zh) 一种基于虚拟机自省技术的api动态监控方法及系统
US20190102279A1 (en) Generating an instrumented software package and executing an instance thereof
KR102323621B1 (ko) 펌웨어 퍼징 장치 및 방법
US11914711B2 (en) Systems and methods for automatically generating malware countermeasures
CN113821297A (zh) 仿真器和仿真方法
RU2815242C1 (ru) Способ и система перехвата .net вызовов посредством патчей на промежуточном языке
US11989569B2 (en) Unikernel provisioning
RU2521265C2 (ru) Система и способ автоматической обработки системных ошибок программного обеспечения
WO2022044021A1 (en) Exploit prevention based on generation of random chaotic execution context

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
A107 Divisional application of patent
GRNT Written decision to grant