KR20170042602A - 가상 머신을 나가자 마자 현재 프로세서 명령을 노출하기 위한 시스템 및 방법 - Google Patents

가상 머신을 나가자 마자 현재 프로세서 명령을 노출하기 위한 시스템 및 방법 Download PDF

Info

Publication number
KR20170042602A
KR20170042602A KR1020177004413A KR20177004413A KR20170042602A KR 20170042602 A KR20170042602 A KR 20170042602A KR 1020177004413 A KR1020177004413 A KR 1020177004413A KR 20177004413 A KR20177004413 A KR 20177004413A KR 20170042602 A KR20170042602 A KR 20170042602A
Authority
KR
South Korea
Prior art keywords
guest
execution
processor
guest command
violation
Prior art date
Application number
KR1020177004413A
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 비트데펜더 아이피알 매니지먼트 엘티디
Publication of KR20170042602A publication Critical patent/KR20170042602A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1009Address translation using page tables, e.g. page table structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1027Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/109Address translation for multiple virtual address spaces, e.g. segmentation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1458Protection against unauthorised use of memory or access to memory by checking the subject access rights
    • G06F12/1466Key-lock mechanism
    • G06F12/1475Key-lock mechanism in a virtual system, e.g. with translation means
    • 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
    • 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/554Detecting local intrusion or implementing counter-measures involving event detection and direct action
    • 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
    • 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/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/14Network architectures or network communication protocols for network security for detecting or protecting against malicious traffic
    • H04L63/1441Countermeasures against malicious traffic
    • H04L63/145Countermeasures against malicious traffic the attack involving the propagation of malware through the network, e.g. viruses, trojans or worms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1458Protection against unauthorised use of memory or access to memory by checking the subject access rights
    • G06F12/1483Protection against unauthorised use of memory or access to memory by checking the subject access rights using an access-table, e.g. matrix or list
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45587Isolation or security of virtual machine instances
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1052Security improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/15Use in a specific computing environment
    • G06F2212/151Emulated environment, e.g. virtual machine
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/65Details of virtual memory and virtual address translation
    • G06F2212/651Multi-level translation tables
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/65Details of virtual memory and virtual address translation
    • G06F2212/657Virtual address space management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/033Test or assess software

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Health & Medical Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Virology (AREA)
  • Computing Systems (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Storage Device Security (AREA)
  • Debugging And Monitoring (AREA)

Abstract

하드웨어 가상화 구성에서 작동할 때 호스트 시스템이 컴퓨터 보안 활동들을 효과적으로 수행하도록 하기 위한 시스템들과 방법들이 설명된다. 프로세서는 게스트 가상 머신 내에서 실행되는 소프트웨어가 메모리 접근 위반을 수행할 때 가상 머신 중단 이벤트(예를 들어서, 가상 머신 종료 또는 가상화 예외)를 생성하도록 구성된다. 일부 실시예에서, 상기 프로세서는 상기 가상 머신 중단 이벤트를 상기 이벤트 생성 전에 특정 위치(예를 들어서, 특정 프로세서 레지스터)로 트리거링한 프로세서 명령에 대하여 결정된 분해 데이터를 저장하도록 추가적으로 구성된다. 저장된 분해 데이터는 Intel® 플랫폼 상에 Prefix, Opcode, Mod R/M, SIB, Displacement, 및 Immediate 필드들과 같은 개별 명령 엔코딩 필드들의 콘텐트들을 포함할 수 있다.

Description

가상 머신을 나가자 마자 현재 프로세서 명령을 노출하기 위한 시스템 및 방법{Systems And Methods for Exposing A Current Processor Instruction Upon Exiting A Virtual Machine}
본 출원은 2014년 8월 18일에 출원된 미합중국 가특허출원 번호 제62/038,476호(발명의 명칭 "가상 머신을 나가자 마자 현재 프로세서 명령을 노출하기 위한 시스템 및 방법(Systems And Methods for Exposing A Current Processor Instruction Upon Exiting A Virtual Machine)")의 출원일에 대한 우선권을 주장하며 그 전체 내용은 본 명세서에서 참조로서 포함된다.
본 발명은 컴퓨터 보안에 대한 것이고, 특히 하드웨어 가상화 구성에서 컴퓨터 보안 작업들을 수행하기 위한 것에 대한 것이다.
멀웨어로도 알려진 악성 소프트웨어는 세계적으로 많은 수의 컴퓨터 시스템에 영향을 주고 있다. 멀웨어는 컴퓨터 바이러스, 웜, 루트킷(rootkit) 및 스파이웨어와 같은 많은 형태로, 수백만의 컴퓨터 사용자에게 심각한 위협이 되고 있으며, 무엇보다도 데이터 및 민감한 정보의 손실, 신원 도용, 및 생산성 손실에 있어 이들을 취약하게 하고 있다.
많은 방면에서 물리적 컴퓨터 시스템으로 거동하는 가상 머신(virtual machine, VM)으로 알려진 시뮬레이티드 컴퓨터 환경(simulated computer environment)을 생성하기 위하여 현대의 컴퓨팅 어플리케이션(computing application)들은 종종 하드웨어 가상화 기술을 채용한다. 서버 통합 및 서비스로서의 인프라스트럭쳐와 같은 어플리케이션에서, 몇몇 가상 머신은 동일한 컴퓨터 시스템 상에서 동시에 실행될 수 있어서, 하드웨어 자원을 그들 사이에서 공유함으로써, 투자 및 운영 비용을 줄일 수 있다. 각각의 가상 머신은 다른 가상 머신들과 별개로 고유의 운영 시스템 및/또는 소프트웨어를 구동할 수 있다. 멀웨어와 스파이웨어와 같은 컴퓨터 보안 위협들의 지속적인 확산으로 인해, 각각의 그러한 가상 머신은 잠재적으로 보호를 필요로 한다.
일부 보안 솔루션들은 피보호 VM(protected VM) 내에서 실행되는 게스트 프로세스들이 잠재적 악성 활동을 확인하기 위하여 메모리에 접근하는 방식을 모니터링함으로써 가상 머신을 보호한다. 일 실시예에서, 컴퓨터 보안 프로그램은 메모리의 특정 영역, 예를 들어서 게스트 프로세스에 의하여 사용되는 메모리 영역에 쓰거나 또는 이것으로부터 코드를 실행하려는 시도가 행해질 때 내부 이벤트(예를 들어서, 예외 또는 VM 종료 이벤트)를 생성하도록 상기 프로세서를 구성할 수 있다. 그러한 프로세서 이벤트는 통상적으로 현재의 쓰레드(current thread)의 실행을 중단하고 상기 프로세서를 컴퓨터 보안 프로그램의 일부를 형성할 수 있는 이벤트 핸들러 경로(event handler routine)를 실행하는 것으로 전환한다. 컴퓨터 보안 프로그램은 따라서 멀웨어를 나타낼 수 있는 방식으로 메모리에 접근하려는 시도를 탐지할 수 있다. 상기 이벤트를 분석한 이후에, 상기 컴퓨터 보안 프로그램은 상기 이벤트가 발생했을 때 실행 중이었던 프로세서 명령을 모방할 수 있고, 원래 쓰레드(original thread)로 실행을 리턴할 수 있다. 그러한 방법들은 트랩 및 에뮬레이트(trap-and-emulate)로 본 기술분야에 일반적으로 알려져 있다.
종래의 트랩 및 에뮬레이트 방법들은 호스트 컴퓨터 시스템에 실질적인 연산적 부담을 가할 수 있고, 잠재적으로는 사용자 경험과 생산성에 영향을 준다. 따라서, 가상화 환경을 위하여 적합한 효과적인 컴퓨터 보안 시스템과 방법을 개발할 상당한 필요가 있다.
일 태양에 따르면, 호스트 시스템은 가상 머신과 컴퓨터 보안 프로그램을 실행하도록 구성된 적어도 하나의 하드웨어 프로세서를 포함한다. 상기 적어도 하나의 프로세서는 상기 가상 머신 내에서 게스트 명령(guest instruction)을 실행하는 것이 메모리 접근 허가의 위반을 유발하는지 여부를 결정하도록 추가적으로 구성된다. 응답으로, 상기 게스트 명령을 실행하는 것이 상기 위반을 유발할 때, 상기 적어도 하나의 하드웨어 프로세서는 상기 컴퓨터 보안 프로그램에 접근가능한 소정의 위치에 상기 게스트 명령의 머신 코드 표현(machine code representation)의 일부를 쓰도록, 상기 게스트 명령의 실행을 중단하도록, 그리고 상기 게스트 명령의 실행의 중단의 응답으로 상기 컴퓨터 보안 프로그램의 실행으로 전환하도록 추가적으로 구성되고, 이 때 상기 컴퓨터 보안 프로그램은 상기 위반이 컴퓨터 보안 위협을 나타내는지 여부를 결정하도록 구성된다.
다른 태양에 따르면, 호스트 시스템을 컴퓨터 보안 위협들로부터 보호하는 방법으로서, 상기 방법은 실행을 위한 게스트 명령을 수신하는 것에 응답하여 상기 게스트 명령을 실행하는 것이 메모리 접근 허가의 위반을 유발하는지 여부를 결정하도록 상기 호스트 시스템의 적어도 하나의 하드웨어 프로세서를 채용하는 것을 포함하며, 상기 게스트 명령은 상기 호스트 시스템에 의하여 노출된 가상 머신 내에서 실행된다. 상기 방법은 상기 게스트 명령이 상기 위반을 유발하는지 여부를 결정하는 것에 응답으로 상기 게스트 명령을 실행하는 것이 상기 위반을 유발할 때 상기 컴퓨터 보안 프로그램에 접근가능한 소정의 위치에 상기 게스트 명령의 머신 코드 표현(machine code representation)의 일부를 쓰도록 상기 적어도 하나의 하드웨어 프로세서를 채용하는 것과, 상기 게스트 명령의 실행을 중단하기 위하여 상기 적어도 하나의 하드웨어 프로세서를 채용하는 것을 추가적으로 포함한다. 상기 방법은 상기 게스트 명령의 실행을 중단하는 것에 응답으로, 상기 위반이 컴퓨터 보안 위협을 나타내는 지를 결정하도록 구성된 컴퓨터 보안 프로그램을 실행하는 것으로 전환하는 것을 추가적으로 포함한다.
다른 태양에 따르면, 호스트 시스템의 적어도 하나의 하드웨어 프로세서는 실행을 위한 게스트 명령을 수신하는 것에 응답으로 상기 게스트 명령을 실행하는 것이 메모리 접근 허가의 위반을 유발하는지 여부를 결정하도록 구성가능하며, 이 때 상기 게스트 명령은 상기 호스트 시스템에 의하여 노출되는 게스트 가상 머신 내에서 실행된다. 상기 적어도 하나의 하드웨어 프로세서는 상기 게스트 명령이 상기 위반을 유발하는지 여부를 결정하는 것에 응답으로, 상기 게스트 명령을 실행하는 것이 상기 위반을 유발할 때, 상기 컴퓨터 보안 프로그램에 접근가능한 소정의 위치에 상기 게스트 명령의 머신 코드 표현(machine code representation)의 일부를 쓰도록, 상기 게스트 명령의 실행을 중단하도록, 그리고 상기 게스트 명령의 실행의 중단의 응답으로 컴퓨터 보안 프로그램의 실행으로 전환하도록 추가적으로 구성되고, 이 때 상기 컴퓨터 보안 프로그램은 상기 위반이 컴퓨터 보안 위협을 나타내는지 여부를 결정하도록 구성된다.
다른 태양에 따르면, 비-일시적 컴퓨터 판독가능 매체(non-transitory computer-readable medium)는 호스트 시스템의 적어도 하나의 하드웨어 프로세서에 의하여 실행될 때, 상기 호스트 시스템이 메모리 접근 허가의 위반이 컴퓨터 보안 위협으로 표시되는지 여부를 결정하도록 구성된 컴퓨터 보안 프로그램을 형성하도록 하는 명령들을 저장한다. 상기 적어도 하나의 하드웨어 프로세서는 실행을 위한 게스트 명령을 수신하는 것에 응답으로 상기 게스트 명령을 실행하는 것이 상기 위반을 유발하는 지를 결정하도록 구성될 수 있고, 이 때 상기 게스트 명령은 상기 호스트 시스템에 의하여 노출되는 가상 머신 내에서 실행된다. 상기 적어도 하나의 하드웨어 프로세서는 상기 게스트 명령이 상기 위반을 유발하는지 여부를 결정하는 것에 응답으로, 상기 게스트 명령을 실행하는 것이 상기 위반을 유발할 때, 상기 컴퓨터 보안 프로그램에 접근가능한 소정의 위치에 상기 게스트 명령의 머신 코드 표현(machine code representation)의 일부를 쓰도록, 상기 게스트 명령의 실행을 중단하도록, 그리고 상기 게스트 명령의 실행의 중단의 응답으로 상기 컴퓨터 보안 프로그램의 실행으로 전환하도록 추가적으로 구성될 수 있다.
본 발명의 전술한 태양들 및 장점은 후술하는 상세한 설명 및 도면을 참조로 이해하면 더욱 잘 이해될 것이다.
도 1은 본 발명의 일부 실시예에 따른 호스트 컴퓨터 시스템의 예시적인 하드웨어 구성을 보여준다.
도 2a는 본 발명의 일부 실시예에 따른, 상기 호스트 시스템 상에서 실행되는 하이퍼바이저에 의하여 노출되는 가상 머신들의 예시적인 세트와, 상기 가상 머신들의 세트를 보호하는 컴퓨터 보안 모듈(CSM)을 보여준다.
도 2b는 CSM이 가상 머신 아래에서 실행되고, 예외 핸들러(exception handler)가 상기 피보호 가상 머신 내에서 실행되는 본 발명의 다른 실시예를 보여준다.
도 2c는 상기 CSM과 상기 예외 핸들러 모두 상기 피보호 가상 머신 내에서 실행되는 본 발명의 또 다른 실시예를 보여준다.
도 3은 본 발명의 일부 실시예에 따른 게스트 가상 머신으로서 노출되는 가상화된 하드웨어의 예시적 구성을 보여준다.
도 4는 본 발명의 일부 실시예에 따른 도 2a에서 도시된 바와 같은 하드웨어 가상화 구성에서 예시적 메모리 주소 변환(translation)의 세트를 보여준다.
도 5는 본 발명의 일부 실시예에 따른 프로세서의 예시적 요소를 보여준다.
도 6은 본 발명의 일부 실시예에 따른 상기 프로세서의 예시적 중단 이벤트 레지스터를 보여준다.
도 7은 x86 명령 세트의 예시적 프로세서 명령의 어셈블리 언어 표현(assembly language representation)과 그 대응하는 머신 코드 표현을 보여준다.
도 8은 본 발명의 일부 실시예에 따라 프로세서 명령을 실행하기 위한 상기 프로세서에 의하여 수행되는 단계들의 예시적 시퀀스를 보여준다.
도 9는 본 발명의 일부 실시예에 따라 게스트 가상 머신을 보호하기 위하여 컴퓨터 보안 모듈에 의하여 수행되는 단계들의 예시적 시퀀스를 보여준다.
이하의 설명에서, 구조들 사이에서 언급된 모든 연결들은 직접적인 동작 연결들 또는 매개 구조들을 통한 간접적인 동작 연결들일 수 있는 것으로 이해된다. 구성 요소들의 세트는 하나 이상의 구성 요소를 포함한다. 구성 요소의 임의의 열거는 적어도 하나의 구성 요소를 언급하는 것으로 이해된다. 복수의 구성 요소는 적어도 2개의 구성 요소를 포함한다. 달리 요구되지 않는다면, 기술된 어떠한 방법 단계들도 설명된 특정 순서로 반드시 실행될 필요는 없다. 제2 구성 요소로부터 유도되는 제1 구성 요소(예컨대, 데이터)는 제2 구성 요소와 동일한 제1 구성 요소는 물론, 제2 구성 요소 그리고 선택적으로는 다른 데이터를 처리하는 것에 의해 생성된 제1 구성 요소를 포함한다. 파라미터에 따라 결정 또는 판정하는 것은 파라미터에 따라 그리고 선택적으로는 다른 데이터에 따라 결정 또는 판정하는 것을 포함한다. 달리 구체화되지 않는다면, 일부 수량/데이터의 표시자는 수량/데이터 그 자체, 또는 수량/데이터 그 자체와 상이한 표시자일 수 있다. 컴퓨터 프로그램은 과업을 수행하는 프로세서 명령들의 시퀀스이다. 본 발명의 일부 실시예들에서 설명되는 컴퓨터 프로그램들은 독립형 소프트웨어 개체들 또는 다른 컴퓨터 프로그램들의 서브-개체들(예를 들어, 서브루틴들, 라이브러리들)일 수 있다. 달리 특정되지 않는다면, 컴퓨터 보안 프로그램은 의도되지 않거나 인가되지 않은 접근, 수정 또는 파괴에 대해서 장비와 데이터를 보호하는 컴퓨터 프로그램이다. 달리 특정되지 않는다면, 프로세스는 어플리케이션이나 또는 운영 시스템의 일부와 같은 컴퓨터 프로그램의 인스턴스(instance)이고, 적어도 실행 쓰레드(execution thread)와 이것에 할당된 가상 메모리 공간을 가지는 특징을 가지며, 개별 가상 메모리 공간의 콘텐트는 실행가능 코드(executable code)를 포함한다. 달리 특정되지 않는다면, 페이지는 호스트 시스템의 물리적 메모리에 개별적으로 매핑될 수 있는 가상 메모리의 최소 유닛을 나타낸다. "로직"(logic, 논리)이라는 단어는 고정된 또는 재구성가능한 기능성(functionality)을 가지는 하드웨어 회로망(hardware circuitry)(예를 들어서, 필드 프로그래머블 게이트 어레이 회로들)을 포함하나, 일반 용도 컴퓨터 상에 그러한 기능성을 모방하는 소프트웨어는 포함하지 않는다. 달리 특정되지 않는다면, 레지스터는 프로세서와 일체화되거나 또는 그 일부를 형성하는 저장 요소를 나타내고 램(RAM, random access memory)과는 다르다. 컴퓨터 판독 가능 매체는 자성, 광, 및 반도체 저장 매체(예컨대, 하드 드라이브, 광 디스크, 플래시 메모리, DRAM)와 같은 비-일시적 매체(non-transitory medium)는 물론, 전도성 케이블 및 파이버 옵틱 링크와 같은 통신 링크들을 포함한다. 일부 실시예들에 따르면, 본 발명은, 그 중에서도, 본원에 설명된 방법들을 수행하기 위해 프로그래밍된 하드웨어(예컨대, 하나 이상의 프로세서)는 물론, 본원에서 설명된 방법들을 수행하기 위한 명령들을 엔코딩하는 컴퓨터-판독 가능 매체를 포함하는 컴퓨터 시스템을 제공한다.
후술하는 설명은 본 발명의 실시예들을 예시적으로 설명하는 것이며, 반드시 제한적인 것은 아니다.
도 1은 본 발명의 일부 실시예들에 따른 호스트 시스템(10)의 예시적인 하드웨어 구성을 도시한다. 호스트 시스템(10)은 엔터프라이즈 서버와 같은 기업용 컴퓨팅 장치, 또는 개인용 컴퓨터나 태블릿 컴퓨터나 스마트폰과 같은 엔드-유저 장치를 나타낼 수 있다. 다른 예시적인 호스트 시스템들은 TV, 게임 콘솔, 웨어러블 컴퓨팅 장치, 또는 메모리와 프로세서를 구비하는 임의의 다른 전자 장치를 포함한다. 호스트 시스템(10)은 특히 브라우저, 워드 프로세싱 어플리케이션 및 전자 통신 (예를 들어, 이메일, 인스턴트 메시징) 어플리케이션과 같은 소프트웨어 어플리케이션의 세트를 실행하는 데 사용될 수 있다. 일부 실시예에서, 호스트 시스템(10)은 이하에서 보여지는 바와 같이, 하드웨어 가상화를 지원하고 가상 머신들의 세트를 노출하도록 구성될 수 있다.
도 1은 컴퓨터 시스템을 도시한다. 스마트폰과 태블릿 컴퓨터와 같은 다른 호스트 시스템들의 하드웨어 구성은 다를 수 있다. 시스템(10)은 컨트롤러 허브(24)에 의해 모두 연결되어 있는 프로세서(12), 메모리 유닛(14), 입력 장치(16) 세트, 출력 장치(18) 세트, 저장 장치(20) 세트, 및 네트워크 어댑터(22) 세트를 포함하는 물리적 장치들의 세트를 포함한다. 일부 실시예들에서, 프로세서(12)는 신호 및/또는 데이터의 세트로 산술 및/또는 논리 연산을 실행하도록 구성된 물리적 장치(예컨대, 반도체 기판에 형성된 멀티-코어 집적 회로)를 포함한다. 일부 실시예들에서, 이러한 논리 연산들은 프로세서 명령(예를 들어, 머신 코드 또는 다른 유형의 소프트웨어)의 시퀀스 형태로 프로세서(12)에 전달된다. 본 발명의 일부 실시예들은 종래의 프로세서의 구조와 기능성(functionality)에 변화를 도입하고, 상기 각각의 변화들은 프로세서(12)가 하드웨어 가상화 구성들에서 보다 효과적으로 작동할 수 있게 할 수 있다.
메모리 유닛(14)은 명령들을 수행하는 도중에 프로세서(12)에 의해 액세스되거나 생성되는 데이터/신호들을 저장하는 휘발성 컴퓨터-판독 가능 매체(예컨대, RAM)를 포함할 수 있다. 입력 장치(16)는 사용자가 호스트 시스템(10)으로 데이터 및/또는 명령들을 도입할 수 있게 하는 개별 하드웨어 인터페이스 및/또는 어댑터를 포함하는, 특히 컴퓨터 키보드, 마우스, 및 마이크를 포함할 수 있다. 출력 장치(18)는 특히 모니터와 같은 디스플레이 장치 및 스피커는 물론, 호스트 시스템(10)이 사용자에게 데이터를 통신하게 할 수 있는 그래픽 카드와 같은 하드웨어 인터페이스/어댑터를 포함할 수 있다. 일부 실시예들에서, 입력 장치(16)와 출력 장치(18)는 터치-스크린 장치들의 경우와 같이, 하드웨어의 공통적인 부품을 공유할 수 있다. 저장 장치(20)는 프로세서 명령들 및/또는 데이터의 비휘발성 저장, 판독, 및 기록을 가능하게 하는 컴퓨터-판독 가능 매체를 포함한다. 예시적인 저장 장치(20)는 자기 디스크 및 광 디스크 및 플래시 메모리 장치들은 물론, CD 및/또는 DVD 디스크들 및 드라이브들과 같은 소거 가능 매체를 포함한다. 네트워크 어댑터(22)들 세트는 호스트 시스템(10)이 컴퓨터 네트워크 및/또는 다른 장치들/컴퓨터 시스템들에 연결될 수 있게 한다. 컨트롤러 허브(24)는 프로세서(12)와 장치(14, 16, 18, 20 및 22)들 사이의 통신을 가능하게 하는 복수의 시스템, 주변, 및/또는 칩셋 버스들, 및/또는 다른 모든 회로망을 일반적으로 나타낸다. 예를 들어, 컨트롤러 허브(24)는 특히 메모리 관리 유닛(memory management unit, MMU), 입력/출력(I/O) 컨트롤러, 및 인터럽트 컨트롤러(interrupt controller)를 포함할 수 있다. 다른 실시예에서, 컨트롤러 허브(24)는 프로세서(12)를 메모리(14)에 연결시키는 노스브리지, 및/또는 프로세서(12)를 장치들(16, 18, 20 및 22)에 연결시키는 사우스브리지를 포함할 수 있다. 일부 실시예에서 (MMU와 같은) 컨트롤러 허브의 부분들은 프로세서(12)와 일체화될 수 있고, 즉, 프로세서(12)와 공통의 기판을 공유할 수 있다.
도 2a는 본 발명의 일부 실시예에 따른 예시적인 기능적 구성을 보여주며, 여기서 호스트 시스템(10)은 하이퍼바이저(50)에 의하여 노출되는 게스트 가상 머신(52a-b)들의 세트를 작동하기 위하여 하드웨어 가상화 기술을 사용한다. 그러한 구성들은 특히 클라우드 컴퓨팅과 서버 통합과 같은 어플리케이션에서 공통된다. 가상 머신(Virtual machine, VM)들은 본 기술분야에서 실제 물리적 머신/컴퓨터 시스템의 추상화(abstraction)로서, 예를 들어서 소프트웨어 에뮬레이션(emulation)으로 알려져 있으며, 상기 가상 머신은 운영 시스템 및 다른 소프트웨어를 구동할 수 있다. 일부 실시예에서, 하이퍼바이저(50)는 가상 프로세서와 가상 컨트롤러 허브와 같은 복수의 가상화된 장치들을 생성하거나 가능하게 하고, 그리고 그러한 가상화된 장치들에 호스트 시스템(10)의 실제의 물리적인 장치들 대신에 소프트웨어를 제공하도록 구성된 소프트웨어를 포함한다. 하이퍼바이저(50)의 그러한 작동은 통상적으로 본 기술분야에서 가상 머신 노출로 알려져 있다. 일부 실시예에서, 하이퍼바이저(50)는 호스트 시스템(10)의 하드웨어 자원들의 복수의 가상 머신에 의한 멀티플렉싱(공유)을 가능하게 한다. 하이퍼바이저(50)는 각각의 게스트 VM(52a-b)가 독립적으로 작동하고 호스트 시스템(10)에서 동시에 실행되는 다른 VM들을 알지 못하도록 그러한 멀티플렉싱을 추가적으로 관리할 수 있다. 유명한 하이퍼바이저의 예로는, 특히 VMware Inc.의 VMware vSphere™ 및 오픈 소스 Xen 하이퍼바이저가 있다.
각각의 VM(52a-b)은 게스트 운영 시스템(OS)(54a-b)를 각각 실행할 수 있다. 예시적 어플리케이션(56a-d)들의 세트는 특히, 워드 프로세싱, 이미지 프로세싱, 미디어 플레이어, 데이터베이스, 캘린더, 개인 연락처 관리, 브라우저, 게임, 보이스 커뮤니케이션, 데이터 통신 및 안티 멀웨어 어플리케이션들과 같은 임의의 소프트웨어 어플리케이션을 일반적으로 나타낸다. 운영 시스템(54a-b)은 특히, Microsoft Windows®, MacOS®, Linux®, iOS®, 또는 Android™과 같은 임의의 널리 이용가능한 운영 시스템을 포함할 수 있다. 각 OS(54a-b)는 각각의 VM의 가상화된 하드웨어 장치들과 각각의 VM 내에서 실행되는 어플리케이션들 사이의 인터페이스를 제공한다. 이하의 설명에서, 가상 머신의 가상 프로세서에서 실행되는 소프트웨어는 개별 가상 머신 내에서 실행된다고 생각된다. 예를 들어서, 도 2a의 예에서, 어플리케이션(56a-b)들은 게스트 VM(52a) 내에서 실행되는 것으로 생각되고, 반면에 어플리케이션(56c-d)들은 게스트 VM(52b) 내에서 실행되는 것으로 생각된다. 반대로 하이퍼바이저(50)는 게스트 VM(52a-b)들 밖에 또는 아래에서 실행되는 것으로 생각된다.
도 3은 하이퍼바이저(50)에 의해 노출되는 가상 머신(52)의 예시적 구성을 보여준다. VM(52)은 도 2a의 VM(52a-b)들 중 임의의 것을 나타낼 수 있다. VM(52)은 가상화된 프로세서(112), 가상화된 메모리 유닛(114), 가상화된 입력 장치(116), 가상화된 출력 장치(118), 가상화된 저장소(120), 가상화된 네트워크 어댑터(122) 및 가상화된 컨트롤러 허브(124)를 포함한다. 가상화된 프로세서(112)는 프로세서(12)의 기능성의 적어도 일부의 모방(emulation)을 포함하고, 운영 시스템과 다른 어플리케이션들과 같은 소프트웨어 일부를 형성하는 프로세서 명령들을 실행을 위하여 수신하도록 구성된다. 실행을 위하여 프로세서(112)를 이용하는 소프트웨어는 가상 머신(52) 내에서 실행되는 것으로 생각된다. 일부 실시예에서, 가상화된 메모리 유닛(114)은 가상화된 프로세서(112)에 의하여 사용되는 데이터를 검색(retrieving)하고 저장하기 위하여 주소 지정 가능한 공간(addressable space)을 포함한다. 다른 가상화된 장치(예를 들어서, 가상화된 입력, 출력, 저장 장치 등)는 호스트 시스템(10)의 개별 물리적 장치들의 기능성의 적어도 일부를 모방한다. 가상화된 프로세서(112)는 마치 상응하는 물리적 장치들과 하는 것과 같이 그러한 가상화된 장치들과 상호작용하도록 구성될 수 있다. 예를 들어서, VM(52) 내에서 실행되는 소프트웨어는 가상화된 네트워크 어댑터(들)(122)를 통하여 네트워크 트래픽을 발신 및/또는 수신할 수 있다. 일부 실시예에서, 하이퍼바이저(50)는 가상화된 장치들의 서브세트만을 VM(52)에 노출시킬 수 있다(예를 들어서, 가상화된 프로세서 112, 가상화된 메모리 114, 및 허브 부분들 124만). 하이퍼바이저(50)는 또한 선택된 VM에게 호스트 시스템(10)의 일부 하드웨어 장치들의 독점적 사용권을 줄 수 있다. 그러한 일 예에서, VM(52a)(도 2a)은 입력 장치(16)들과 출력 장치(18)들의 독점적 사용권을 가질 수 있고, 가상화된 네트워크 어댑터는 없을 수 있다. 반면, VM(52b)은 네트워크 어댑터(들)(22)의 독점적 사용권을 가질 수 있다. 그러한 구성들은 예를 들어서, Intel®의 VT-d® 기술을 이용하여 실행될 수 있다.
현대의 프로세서들은 본 기술분야에서 보호 링(protection ring)으로 또한 알려진 프로세서 권한 레벨(processor privilege level)의 계층을 구현한다. 그러한 링 또는 레벨 각각은 개별 링 내에서 실행되는 소프트웨어가 수행하도록 허락된 활동들 및/또는 프로세서 명령들의 세트에 의하여 특징지어진다. 예시적인 권한 레벨들/고리들은 사용자 모드(링 3)와 커널 모드(고리 0)를 포함한다. 하드웨어 가상화를 지원하도록 구성된 일부 호스트 시스템들은 최고 프로세서 권한(예를 들어서, 링-1, 루트 모드, 또는 Intel® 플랫폼들 상의 VMXroot)를 가지는 추가 링을 포함할 수 있다. 일부 실시예에서, 하이퍼바이저(50)는 최고 권한 레벨(링-1)에서 프로세서(12)를 제어하고, 따라서 호스트 시스템(10) 상에서 실행되는 다른 소프트웨어에 가상 머신으로서 노출되는 하드웨어 가상화 플랫폼을 생성한다. 도 2a의 게스트 OS(54a)와 같은 운영 시스템은 개별 VM의 가상 환경 내에서, 통상적으로 하이퍼바이저(50)보다 낮은 프로세서 권한으로 실행된다(예를 들어서, 링 0 또는 커널 모드에서). 56a-b와 같은 공통의 사용자 어플리케이션들은 통상적으로 OS(34a)보다 낮은 프로세서 권한에서 실행된다(예를 들어서, 링 3 또는 사용자 모드). 어플리케이션(56a-b)들의 몇몇 부분들은 커널 권한 레벨에서 실행될 수 있고, 반면에 OS(34a)의 일부 부분들은 사용자 모드(링 3)에서 실행될 수 있다. 소프트웨어 객체가 그것에 할당된 보호 링에 의하여 허용되는 것보다 높은 프로세서 권한을 필요하는 활동 또는 명령을 실행하려고 시도할 때, 그러한 시도는 통상적으로 상기 활동 각각을 수행할 충분한 권한을 가진 링에서 실행되는 엔터티(예를 들어서, 핸들러 루틴)로 프로세서(12)의 제어를 넘기는 예외 또는 오류와 같은 프로세서 이벤트를 생성한다.
구체적으로, 특정 활동을 수행하려하거나 또는 게스트 VM 내로부터의 특정 명령을 실행하려고 하는 시도는 본 명세서에서 일반적으로 VM 중단 이벤트라고 칭해지는 프로세서 이벤트의 특별 카테고리를 촉발할 수 있다. 일부 실시예에서, VM 중단 이벤트는 게스트 VM 내의 현재 쓰레드의 실행을 중단하고 프로세서(12)가 핸들러 루틴을 실행하도록 전환한다. 예시적인 VM 중단 이벤트들은 특히 VM 종료 이벤트(예를 들어서, Intel® 플랫폼들 상의 VMExit)와 가상화 예외(예를 들어서, Intel® 플랫폼들 상의 #VE)를 포함한다. VM 종료 이벤트(VM exit event)는 프로세서(12)를 개별 게스트 VM 밖에서, 통상적으로는 하이퍼바이저(50)의 레벨에서 핸들러 루틴(handler routine)을 실행하는 것으로 전환한다. 가상화 예외(virtualization exception)는 프로세서(12)를 개별 VM을 나가는 것(exiting) 대신에 개별 게스트 VM 내에서 핸들러 루틴을 실행하는 것으로 전환할 수 있다.
VM 중단 이벤트를 촉발하는 예시적인 명령들은 Intel® 플랫폼들 상의 VMCALL을 포함한다. VM 중단 이벤트들은 또한 메모리 접근 위반들과 같은 다른 이벤트에 의하여 촉발될 수 있다. 그러한 일 예에서, VM 내에서 실행되는 소프트웨어 객체가 쓰기 금지(non-writable)로 표시된 메모리 섹션에 쓰려고 하거나, 또는 실행 금지(non-executable)로 표시된 메모리 섹션으로부터의 코드를 실행하도록 시도하는 경우, 프로세서(12)는 VM 종료 이벤트를 생성할 수 있다. 그러한 VM 전환 메커니즘(VM switching mechanism)들은 예를 들어서 컴퓨터 보안 프로그램이 개별 VM 밖으로부터 가상 머신을 보호할 수 있게 한다. 상기 컴퓨터 보안 프로그램은 상기 VM 내에서 작동하는 소프트웨어에 의해서 수행되는 특정 활동들, 보안 위협으로 표시될 수 있는 활동들에 응답으로 발생하는 VM 종료 이벤트들을 인터셉트(intercept)할 수 있다. 다음으로 상기 컴퓨터 보안 프로그램은 잠재적으로 VM 내 소프트웨어에 대한 정보 없이도 그러한 활동들을 차단 및/또는 추가 분석할 수 있다. 그러한 구성들은 실질적으로 컴퓨터 보안을 강화할 수 있다.
일부 실시예(예를 들어서 도 2a)에서, 하이퍼바이저(50)는 특히 그러한 컴퓨터 보안 작업들을 수행하도록 구성된 컴퓨터 보안 모듈(computer security module, CSM, 60)을 포함한다. 모듈(60)은 (예를 들어서 라이브러리로서) 하이퍼바이저(50)로 병합될 수 있고, 또는 하이퍼바이저(50)와 다르고 독립적이나 하이퍼바이저(50)의 권한 레벨에서 실행되는 컴퓨터 프로그램으로서 전달될 수 있다. 단일 모듈(single module, 60)은 호스트 시스템(10)에서 실행되는 복수의 게스트 VM들을 보호하도록 구성될 수 있다. 모듈(60)에 의해서 수행되는 보안 작업들은 게스트 VM 내에서 실행되는 프로세스에 의해서 수행되는 활동(예를 들어서, OS의 특정 함수들을 호출, OS의 레지스트리에 접근, 원격 위치로부터 파일을 다운로드, 파일에 데이터를 쓰기 등)을 탐지하는 것을 포함할 수 있다. 모듈(60)의 다른 보안 작업들은 게스트 VM 내에서 실행되는 소프트웨어 객체의 일부를 포함하는 메모리 섹션의 주소를 결정하는 것, 개별 메모리 섹션에 접근하는 것, 및 개별 메모리 섹션 내에 저장된 콘텐트를 분석하는 것을 포함할 수 있다. 보안 작업들의 다른 예들은 그러한 메모리 섹션들에 접근을 차단하는 것 및/또는 인터셉트하는 것, 예를 들어서 피보호 프로세스에 속하는 코드 또는 데이터의 덮어 쓰기(over-writing)를 방지하는 것, 및 특정 메모리 페이지들에 저장된 코드의 실행을 방지하는 것을 포함한다. 일부 실시예에서, CSM(60)은 게스트 VM(52a-b)들 내에서 발생하는 VM 종료 이벤트들을 인터셉트하도록 구성된 VM 종료 이벤트 핸들러(61)를 포함한다. 선택적 실시예에서, 핸들러(61)는 발생된 각각의 VM 종료의 유형 및/또는 이유를 결정한 후에 CSM(60)에 선택적으로 제어권을 넘기고 VM 종료 이벤트들을 인터셉트하는 CSM(60)과는 별개의, 하이퍼바이저(50)의 특징적 모듈(distinct module)(예를 들어서, 라이브러리)일 수 있다.
도 2b는 컴퓨터 보안 모듈(60)이 게스트 VM(52c)을 개별 VM 밖으로부터 보호하는 선택적 실시예를 설명한다. 그러한 실시예에서, 프로세서(12)는 메모리 접근 위반이 발생할 때 (도 2a와 관련하여 상술한 바와 같은 VM 종료 이벤트 대신에) 가상화 예외를 생성하도록 구성될 수 있다. 도 2b의 예시적 실시예에서, 가상화 예외 핸들러(63)는 VM(52c) 내에서, 예를 들어서 운영 시스템(54c)의 권한 레벨에서 실행되고 가상화 예외들을 인터셉트하고 CSM(60)과 인터페이스하도록 구성된다.
핸들러(63)와 CSM(60) 사이의 통신은 본 기술 분야에서 알려진 임의의 프로세스간 통신(inter process communication) 방법에 따라서 진행될 수 있다. 피보호 VM 내로부터 하이퍼바이저(50)의 레벨로 데이터를 전송하기 위하여, 핸들러(63)의 일부 실시예들은 개별 VM으로부터 하이퍼바이저(50)로 프로세서(12)의 제어를 넘기는 특별 명령(예를 들어서 Intel® platform 상의 VMCALL)을 사용한다. 전송된 데이터는 CSM(60)과 공유된 소정의 메모리 섹션에 예외 핸들러(63)에 의하여 위치될 수 있다. 핸들러(63)로 데이터를 전송하기 위하여, CSM(60)의 일부 실시예들은 VM(52c) 내로 인터럽트(interrupt)를 삽입할 수 있고, 상기 인터럽트는 핸들러(63)에 의하여 처리된다. 개별 데이터는 상술한 공유된 메모리 섹션을 통하여 다시 전달될 수 있다.
도 2c에 도시된 바와 같은 또 다른 실시예에서, CSM(60)과 핸들러(63) 모두는 피보호 VM 내에서, 예를 들어서 커널 모드(링 0)에서 실행된다. 또한, 그러한 실시예들은 메모리 접근 위반들을 탐지하기 위하여 가상화 예외들을 채용할 수 있다. 구성(2a/2b/2c)들 사이에서 결정하는 것은 성능과 보안 사이의 균형(trade-off)을 평가하는 것을 포함할 수 있다. VM 종료 이벤트들은 컴퓨팅에 있어서 상대적으로 비용이 들고, 통상적으로 각각의 종료 및 재진입 사이클(exit and re-entry cycle)에서 메모리 내외로 대형 데이터 구조를 로딩 및/언로딩하는 것이 필요하다. 따라서, 2a와 같은 구성들은 2b/2c와 같은 구성보다 이벤트를 인터셉트하는데 컴퓨팅이 더 필요할 수 있다. 반면에, (2a/2b의 예에서와 같이) CSM(60)과 핸들러(61-63)들과 같은 중요 보안 요소들을 피보호 VM 밖에 유지하는 것은 보안을 강화할 수 있는데, 이는 개별 VM 내에서 실행되는 멀웨어가 그러한 요소들의 작동에 간섭하기가 더 어려울 수 있기 때문이다.
도 2a/2b에 도시된 구성에서 (즉, 개별 VM 밖으로부터) 게스트 VM을 보호할 수 있도록 CSM(60)의 일부 실시예들은 프로세서(12)의 주소 변환 메커니즘 및/또는 주소 변환 데이터 구조를 채용한다. 가상 머신들은 통상적으로 본 기술분야에서 또한 게스트 물리적 메모리로 알려진 가상화된 물리적 메모리(예를 들어서 도 3의 메모리 114 참조)와 함께 작동한다. 가상화된 물리적 메모리는 통상적으로 게스트 물리적 주소(guest-physical address, GPA)로 불리는, 예를 들어서 주소의 연속적 공간(contiguous space of address)들로서 실질적 물리적 메모리(14)의 추상적 표현(abstract representation)을 포함한다. 그러한 주소 공간 각각은 게스트 VM에 특징적으로 부착되고 상기 주소 공간의 부분들은 물리적 메모리(14) 및/또는 물리적 저장 장치(20)들의 섹션들에 맵핑된다. 가상화를 지원하도록 구성된 시스템들에서, 그러한 맵핑은 통상적으로, 제2 레벨 주소 변환(second level address translation, SLAT)으로 알려진, 프로세서(12)에 의하여 제어되고, 하드웨어 가속되는, 전용 데이터 구조 및 메커니즘(hardware-accelerated, dedicated data structures and mechanisms)을 사용하여 달성된다. 유명한 SLAT 구현은 Intel® 플랫폼에서 확장된 페이지 테이블(extended page table, EPT)과 AMD®플랫폼에서 빠른 가상화 인덱싱(rapid virtualization indexing, RVI)/내포된 페이지 테이블(nested page table, NPT)을 포함한다. 그러한 시스템들에서, 가상화된 물리적 메모리는 당해 기술분야에서 페이지로 알려진 유닛들로 파티션될 수 있고, 여기서 페이지는 EPT/NPT와 같은 메커니즘을 통해서 물리적 메모리에 개별적으로 맵핑된 가상화된 물리적 메모리의 최소 유닛을 나타내며, 다시 말해서 물리적 메모리와 가상화된 물리적 메모리 사이의 맵핑은 페이지 단위(page granularity)로 수행된다. 모든 페이지들은 통상적으로 소정의 크기, 예를 들어 4 킬로바이트, 2 메가바이트 등의 크기를 가진다. 가상화된 물리적 메모리를 페이지들로 파티셔닝하는 것은 대개 하이퍼바이저(50)에 의하여 설정된다. 일부 실시예에서, 하이퍼바이저(50)는 SLAT 구조를 또한 설정하고 따라서 물리적 메모리와 가상화된 물리적 메모리 사이의 주소 변환을 설정한다. 그러한 주소 변환은 본 기술분야에서 게스트 물리적 - 호스트 물리적(guest-physical to host-physical, GPA-to-HPA) 변환으로 알려져 있다.
일부 실시예에서, VM 내에서 실행되는 운영 시스템은 개별 VM 내에서 실행되는 각 프로세스에 대한 가상 메모리 공간을 설정하고, 상기 가상 메모리 공간은 물리적 메모리의 추상화를 나타낸다. 프로세스 가상 메모리는 통상적으로, 게스트 가상 주소(guest-virtual address, GVA) 또는 게스트 선형 주소(guest-linear address, GLA)로 본 기술분야에서 일반적으로 알려진 주소의 연속적 공간(contiguous space of address)을 포함한다. 일부 실시예에서, 프로세스 가상 메모리 공간은 또한 페이지들로 파티션되고, 그러한 페이지들은 OS에 의하여 개별 VM의 가상화된 물리적 메모리로 개별적으로 맵핑되는 가상 메모리의 최소 유닛을 나타내며, 다시 말해서 가상-가상화된 물리적 메모리 맵핑은 페이지 단위로 수행된다. OS는 게스트 가상 - 게스트 물리, 또는 GVA-GPA 주소 변환을 수행하기 위하여 개별 VM의 가상화된 프로세서에 의하여 사용되는 페이지 테이블과 같은 전용 데이터 구조를 구성할 수 있다.
도 4는 도 2a의 실시예의 예시적 메모리 주소 변환을 보여준다. 하이퍼바이저(50)에 의한 노출 이후에, 게스트 VM(52a)은 가상화된 물리적 메모리 공간(114a)을 그 자신의 물리적 메모리 공간으로 간주한다. 게스트 VM(52a) 내에서 실행되는 프로세스는 게스트 OS(54a)에 의해서 가상 메모리 공간(214a)이 할당된다. 프로세스가 게스트 가상 주소(62)에서 메모리에 접근 시도할 때, GVA(62)는 가상화된 물리적 메모리 공간(114a) 내에서 게스트 물리적 주소(64)로 게스트 VM(52a)의 (가상화된) MMU에 의하여 변환된다. GVA-GPA 변환(70a)은 예를 들어서 게스트 OS(34a)에 의해서 구성되고 제어되는 페이지 테이블들을 따라서 진행될 수 있다. GPA(64)는 호스트 시스템(10)의 물리적 메모리(14) 내에서 호스트 물리적 주소(host physical address, HPA, 66)로 MMU에 의해서 추가적으로 맵핑된다. GPA-HPA 변환(70b)은 예를 들어서 하이퍼바이저(50)에 의해서 구성되는 SLAT 구조에 따라서 진행될 수 있다.
게스트 VM(52a-b) 아래에서 실행되는 각 프로세스는 호스트 가상 주소(host virtual address, HVA)들로 본 기술분야에서 알려진 것을 통하여 주소지정이 가능한 가상 메모리 공간으로 대개 할당된다. 도 4의 예에서, 하이퍼바이저(50)는 컴퓨터 보안 모듈(60)을 위하여 가상 메모리 공간(214b)을 설정한다. 다음으로 CSM(60)은 HVA(68)를 통해서 HPA(66)을 참조한다. 모듈(60)이, 예를 들어서 라이브러리로서 하이퍼바이저(50) 내에서 일체화될 때 메모리 공간(214b)은 하이퍼바이저(50)의 가상 메모리 공간과 일치할 수 있다. 그러한 공간들을 관리하기 위하여, 하이퍼바이저(50)는 변환(70c)과 같은 HVA-HPA 변환을 수행하도록 MMU에 의하여 사용되는 전용 데이터 구조와 메커니즘(예를 들어서, 페이지 테이블)을 구성할 수 있다.
일부 실시예에서, 하이퍼바이저(50) 및/또는 CSM(60)은 물리적 메모리 페이지들의 서브세트 각각에 대하여 접근 허가를 설정할 수 있다. 그러한 메모리 페이지들은 예를 들어서 안티-멀웨어 루틴 및/또는 OS의 프로세스와 같은 피보호 VM 내에서 실행되는 특정 중요 게스트 프로세스들에 의하여 사용될 수 있다. 접근 허가는 예를 들어서 개별 페이지가 불러 읽혀지고 쓰여질 수 있는지와, 그리고 개별 페이지로부터 코드를 소프트웨어가 실행하도록 허가되는지를 가리킨다. 접근 허가들은 예를 들어서 개별 메모리 페이지를 나타내는 SLAT 엔트리의 일부로서 표시될 수 있다. 일부 호스트 시스템들은 서브 페이지 단위로 접근 허가를 설정하는 것을 허락할 수 있다.
게스트 VM 내에서 실행되는 소프트웨어가 접근 허가를 위반하는 방식으로 메모리에 접근하려고 시도할 때(예를 들어서 쓰기 금지로 표시된 메모리 페이지에 쓰려고 시도), 하이퍼바이저(50) 및/또는 CSM(60)은 VM 중단 이벤트를 생성하기 위하여 프로세서(12)를 추가적으로 설정할 수 있다. 그러한 시도는 본 명세서에서 메모리 접근 위반으로 호칭된다. 개별 VM 중단 이벤트는 도 2a와 같은 구성에서는 VM 종료 이벤트일 수 있고, 도 2b/2c와 같은 구성에서는 가상화 예외일 수 있다.
본 발명의 일부 실시예는 프로세서가 하드웨어 가상화 구성에서 보다 효율적으로 기능할 수 있도록 종래의 하드웨어 프로세서의 구조와 기능성에 변화를 가한다. 도 5는 본 발명의 일부 실시예에 따른 프로세서(12)의 예시적 하드웨어 요소를 보여준다. 도시된 요소들은 설명된 기능성을 수행하는 일반적 장치들을 의미한다. 구조 상세는 구현예 사이에서 실질적으로 변화될 수 있다. 예를 들어서, 각각의 도시된 요소는 서로 물리적으로 반드시 인접할 필요는 없는 복수의 상호 연결된 서브시스템들을 포함할 수 있다. 도시된 요소들은 완전하지는 않다. 프로세서(12)는 표현을 단순화하기 위하여 도 5에는 생략되어 있는 많은 다른 요소(예를 들어서, 스케줄러, 인터럽트 컨트롤러, 여러 캐시 등)를 포함할 수 있다.
프로세서(12)는 프로세서 파이프라인(pipeline)의 다양한 단계들을 수행하도록 구성된 로직/회로망을 포함할 수 있다. 예를 들어서, 명령 디코더(decoder, 30)는 각각의 프로세서 명령을 기본 프로세서 작업(elementary processor operation)들 및/또는 마이크로-작업(micro-op)들의 세트로 변화하는 것을 포함할 수 있는 명령 디코딩 작업을 수행한다. 디코더(30)에 연결된 실행 유닛(36)들의 세트는 상기 파이프라인의 실행 단계를 수행할 수 있다. 예시적 실행 유닛(들)(36)은 특히 산술 로직 유닛(arithmetic logic unit, ALU)과 부동 소수점 유닛(floating-point unit, FPU)을 포함한다.
일부 실시예에서, 명령을 위한 파이프라인의 실행 단계는 개별 명령의 피연산자(operand)에 개별 명령의 연산자(operator)를 적용하는 결과를 결정하는 것을 포함한다. 그러한 결과들은, 특히, 메모리 주소, 메모리 주소 또는 프로세서 레지스터(예를 들어서, AX와 같은 범용 레지스터, 모델 특정 레지스터-MSR(model specific register), EFLAGS와 같은 컨트롤 레지스터, x86 세그먼트 레지스터의 숨은 부분과 같은 숨은 레지스터(또한 디스크립터 캐시, descriptor cache로 알려짐))에 커미트되는 값, 명령 포인터(예를 들어서 RIP)의 값, 및 스택 포인터(예를 들어서, RSP)의 값을 포함할 수 있다.
명령의 피연산자(들)은 상기 명령의 문장에서 명백할 수도 있고 또는 암시적일 수도 있다. 암시적 피연산자들을 가지는 예시적 x86 명령은, 상기 프로세서의 EFLAGS 컨트롤 레지스터의 자리올림 플래그(carry flag)를 1로 설정하는 STC 명령이다. 일부 실시예에서, 상기 레지스터 EFLAGS 및 값 1은, 비록 이들이 STC 명령의 문장에서 명확하게 나타나지 않는다고 해도 (암시적) 피연산자들로 해석된다.
커미트 유닛(commit unit, 38)은 파이프라인의 커미트 단계를 수행할 수 있는데, 이는 메모리(14)의 실행 유닛(들)(36)의 출력을 저장하거나 그리고/또는 실행 단계에 의해서 생성된 변화/결과를 반영하기 위하여 특정 프로세서 레지스터의 콘텐트를 업데이트 하기 위함이다. 커미트 유닛(38)은 폐기 유닛(retirement unit)으로서 본 기술분야에서 알려진 로직 모듈을 포함할 수 있다.
디코더(30) 및 실행 유닛들(36)에 연결된 메모리 접근 모듈(34)은 메모리(14)와 인터페이스 하도록, 예를 들어서, 메모리로부터 명령들을 불러내도록, 메모리로부터 데이터를 로딩하도록, 그리고 프로세서 명령들의 실행 결과를 메모리에 저장하도록 구성된 로직을 포함한다. 일부 실시예에서, 메모리 접근 모듈은 메모리 접근을 위하여 필요한 가상-물리적 주소 변환을 수행하도록 구성된 MMU를 포함한다.
현대의 프로세서들은 통상적으로 프로세서 명령들의 비순차적(out-of-order) 및/또는 무작위적(speculative) 실행을 지원한다. 일부 시스템에서, 복수의 명령들이 동일한 실행 유닛(들)(36)에 의해서 동시에 불러내지고, 디코딩되고, 실행된다. 그리고 나서 그러한 실행들의 결과들은 규칙대로(in-order) 커미트되서 개별 컴퓨터 프로그램의 의도한 플로우를 보존한다. 그와 같은 구성은, 예를 들어서, 분기 예측 알고리즘(branch prediction algorithm)과 함께 사용되어 프로세서(12)의 성능을 강화한다. 비순차적 실시를 위하여 구성된 일부 실시예에서, 프로세서(12)는 디코더(30)와 실행 유닛(36)들에 연결된 배정기 유닛(dispatcher unit, 32)과, 실행 유닛(36)들과 커미트 유닛(38)에 연결된 레지스터 파일(40)을 추가적으로 포함할 수 있다. 배정기 유닛(36)은 실행을 위한 개별 마이크로-작업을 스케줄링 할 수 있고, 각 마이크로-작업을 이것의 개별 명령과 맵핑해서 연계하는 것을 유지할 수 있어, 실행과 커미트의 순서를 제어한다. 레지스터 파일(40)은 예를 들어서 리오더 버퍼(reorder buffer)로 조직된 내부 프로세서 레지스터들의 어레이를 포함한다. 레지스터 파일(40)은, 배정기 유닛(36)이 스케줄된 마이크로-작업 각각, 본 기술 분야에서 레지스터 리네이밍(register renaming)으로 알려진 작업에 파일(40)의 레지스터들의 열을 연계시킬 수 있게 하는 로직을 추가적으로 포함할 수 있다. 그러한 구성들에서, 레지스터들의 그러한 각 열은 예를 들어서 프로세서(12)의 상태 레지스터들 및/또는 범용의 값들을 갖고 있을 수 있으며, 상기 값들은 특정 프로세서 명령의 실행의 중간 단계에 대응한다.
프로세서(12)는 가상 머신 상태 데이터를 관리하도록 구성된 가상 머신 제어 유닛(38)을 추가적으로 포함할 수 있다. 일부 실시예에서, 가상 머신 상태 객체(virtual machine state object, VMSO)는 호스트 시스템(10)에 노출된 개별 가상화된 프로세서의 현재 상태를 나타내기 위하여 프로세서(12)에 의하여 내부적으로 사용되는 데이터 구조를 포함한다. 예시적인 VMSO는 Intel® 플랫폼의 가상 머신 제어 구조(virtual machine control structure, VMCS)와 AMD® 플랫폼의 가상 머신 제어 블록(virtual machine control block, VMCB)을 포함한다. VMSO는 통상 개별 가상 머신을 노출하는 것의 일부로서 하이퍼바이저(50)에 의하여 설정된다. 일부 실시예에서, 프로세서(12)는 메모리의 영역을 각 VMSO에 연계시켜서 소프트웨어가 메모리 주소 또는 포인터(예를 들어서, Intel® 플랫폼의 VMCS 포인터)를 사용하여 특정 VMSO를 참조할 수 있다.
각 VMSO는 게스트 상태 영역(guest state area)과 호스트 상태 영역(host state area)을 포함할 수 있고, 게스트 상태 영역은 개별 게스트 VM의 CPU 상태를 가지고 있고 호스트 상태 영역은 하이퍼바이저(50)의 현재 상태를 저장하고 있다. 일부 실시예에서, VMSO의 게스트 상태 면적은 특히 개별 게스트 VM의 가상 프로세서의 제어 레지스터(예를 들어서, CR0, CR3 등), 명령 포인터(예를 들어서, RIP), 범용 레지스터(예를 들어서, EAX, ECX 등), 및 상태 레지스터(예를 들어서, EFLAGS)의 콘텐트를 포함한다. VMSO의 호스트 상태 영역은 개별 게스트 VM에 대하여 GPA-HPA 주소 변환을 위하여 구성된 SLAT 데이터 구조로의 포인터(예를 들어서, Intel® 플랫폼의 EPT 포인터)를 포함할 수 있다.
일부 실시예에서, 프로세서(12)는 전용 내부 레지스터들/캐시들 내에 VMSO의 일부를 저장할 수 있고, 반면에 개별 VMSO의 다른 부분들은 메모리에 위치할 수 있다. 임의의 주어진 시간에서, 대개 하나의 VMSO(여기서는 현재의 VMSO를 가리킴)는 프로세서에 로딩될 수 있고 현재 프로세서(12)를 제어하고 있는 가상 머신을 식별한다. 현대의 프로세서들은 통상적으로 멀티쓰레딩(multithreading)을 위하여 구성된다. 그러한 구성에서 물리적 프로세서(12)는 복수의 코어(core)를 작업할 수 있고, 각 코어는 복수의 논리 프로세서(logical processor)를 추가적으로 포함하고, 각 논리 프로세서는 다른 논리 프로세서에 독립적이고 다른 논리 프로세서와 함께 실행 쓰레드를 처리할 수 있다. 복수의 논리 프로세서는 일부 하드웨어 리소스들, 예를 들어서, 공통의 MMU를 공유할 수 있다. 멀티쓰레드식 실시예에서, 특징적 VMSO(distinct VMSO)가 각각의 특징적 논리 프로세서(distinct logical processor)에 로딩될 수 있다.
프로세서(12)가 개별 VM을 실행하는 것으로부터 하이퍼바이저(50)를 실행하는 것으로 전환할 때(예를 들어서, VM 종료 시에), 프로세서(12)는 개별 VM의 상태를 현재 VMSO의 게스트 상태 영역에 저장할 수 있다. 프로세서(12)가 제1 VM을 실행하는 것으로부터 제2 VM을 실행하는 것으로 전환할 때, 제1 VM과 연관된 VMSO는 언로딩되고, 제2 VM과 연관된 VMSO는 프로세서에 로딩되며, 제2 VMSO는 현재의 VMSO가 된다. 일부 실시예에서, VMSO 데이터의 프로세서(12)로 그리고/또는 이로부터의 그러한 로딩/언로딩은 가상 머신 컨트롤 모듈(38)에 의해서 수행된다. 모듈(38)은 또한 메모리(14)로 그리고/또는 이로부터의 VMSO 데이터의 검색 및/또는 저장을 수행할 수 있다.
일부 실시예에서, 프로세서(12)는 실행 유닛(들)(36) 및/또는 커미트 유닛(38)에 연결되고 게스트 명령과 연관된 명령 특정 데이터(instruction-specific data)를 저장하도록 구성된 중단 이벤트 레지스터(44)를 추가로 포함하고, 상기 게스트 명령들의 실행은 VM 중단 이벤트(예를 들어서, VM 종료 또는 가상화 예외)를 유발한다. 일부 실시예에서, 중단 이벤트 레지스터(44)는 호스트 시스템(10) 상에서 실행되는 소프트웨어에 접근 가능한 노출된 레지스터이고, 다시말해서, 레지스터(44)에 저장된 데이터는 보안 모듈(60)과 같은 소프트웨어에 의하여 판독가능할 수 있다. 그러한 일부 실시예에서, 중단 이벤트 레지스터(44)는 프로세서(12)의 모델 특정 레지스터(model specific register, MSR)를 포함한다. 일부 실시예는 프로세서 권한(예를 들어서, 링-1 또는 루트 모드만), 또는 객체 타입(예를 들어서, 드라이버들만)과 같은 기준에 따라서 선택된 소프트웨어 객체들의 서브세트로 레지스터(44)로의 접근을 제한할 수 있다. 일부 실시예는 레지스터(44)로의 소프트웨어 접근을 작업들의 서브세트들(예를 들어서, 읽기 전용)로만으로 제한할 수 있다.
도 6은 본 발명의 일부 실시예에 따른 중단 이벤트 레지스터(44)의 필드들의 예시적인 세트를 보여준다. 레지스터(44)는 분해 필드(disassembly field)(46a)와 실행 결과 필드(execution result field)(46b)를 포함할 수 있다. 분해 필드(46a)는 개별 게스트 명령을 분해한 결과의 데이터를 저장할 수 있다.
도 7은 예시적 Intel® x86 프로세서 명령의 어셈블리 언어 표현(45)을 보여준다. 도시된 명령은 (가상) 주소 EBX + 4*ECX + 0x02에서 메모리에 저장된 콘텐트를 레지스터 AX에 현재 저장된 값 만큼 프로세서가 증가시키도록 명령한다. 개별 명령은 메모리에서 머신 코드(47)로 표현된다. 표현(45, 47)들 사이의 변환은 통상적으로 컴파일러 또는 어셈블러에 의하여 행해진다. 머신 코드 표현(47)은 개별 ISA 및/또는 프로세서들의 개별 군(family)에 특정적인 엔코딩 필드(49a-f)들의 시퀀스를 포함하는 일반적 형태(48)를 가진다. Intel® 프로세서에서, 그러한 엔코딩 필드들은 Prefix, Opcode, Mod R/M, SIB, Displacement, 및 Immediate 필드들을 가진다. 도 7은 주어진 예시적 x86 명령을 위한 개별 엔코딩 필드의 인스턴스를 보여준다. 일부 ISA들에서, 머신 코드 표현(47)은 변화 가능한 길이를 가질 수 있는데, 예를 들어서, 일부 엔코딩 필드들은 특정 명령들의 머신 코드 표현에서 나타날 수 있지만 다른 명령들의 표현에서는 나타나지 않을 수 있다. 도 7의 예에서, 표현(47)은 Immediate 엔코딩 필드가 없다.
일부 실시예에서, 명령을 분해하는 것은 도 7의 필드(49a-f)들과 같은 개별 명령 엔코딩 필드들을 확인하기 위하여 명령의 머신 코드 표현을 파싱(parsing)하는 것을 포함한다. 분해는 또한 개별 엔코딩 필드들의 콘텐트를 추출하는 것(extracting), 그리고/또는 게스트 명령의 시맨틱 요소(semantic element)의 세트를 결정하기 위하여 그러한 콘텐트를 사용하는 것을 포함한다. 그러한 시맨틱 요소들은 특히, 명령의 연산자(예를 들어서, MOV, ADD 등)와 피연산자(예를 들어서, AX, [EBX+4*ECX+0x02] 등)를 포함할 수 있다. 명령 분해는 적어도 부분적으로, 명령 디코더(30) 및/또는 실행 유닛(들)(36)에 의하여 수행될 수 있다.
도 7의 예에서, 도시된 명령을 분해하는 것은 ADD 연산자를 식별하는 것 그리고/또는, 개별 명령이 두 개의 피연산자를 갖고 상기 피연산자 중에 하나가 AX 레지스터의 콘텐트이고, 상기 두 번째 피연산자는 메모리의 콘텐트인 머신 코드(47)에 따라서 결정하는 것과, 개별 메모리 주소의 표현(예를 들어서, EBX+4*ECX+0x02)을 결정하는 것을 포함할 수 있다. 일부 실시예에서, 명령을 분해하는 것은 개별 명령의 피연산자에 의해서 표시된 메모리 주소를 컴퓨팅하는 것을 추가로 포함한다(예를 들어서, 표현 EBX+4*ECX+0x02의 값). 다른 예에서, 게스트 명령은 상대적 점프 명령(relative jump instruction)(예를 들어서, 기계 코드에서 0xEB 0x08로 표현되는 x86 플랫폼 상에서의 JMP $+10)인데, 게스트 명령을 분해하는 것은 게스트 명령의 주소, 게스트 명령의 길이, 및/또는 상대적 점프의 크기에 따른 목적지(destination)의 절대적 메모리 주소를 계산하는 것을 포함할 수 있다.
일부 실시예에서, 레지스터(44)의 분해 필드(46a)(도 6)는 Opcode, Mod R/M, 및 SIB 필드들과 같은 게스트 명령의 개별 명령 엔코딩 필드들의 콘텐트를 저장하도록 구성된다. 필드(46a)의 다른 예시적 콘텐트는 개별 명령의 연산자를 나타내는 연산자 식별자(operator identifier), 개별 명령의 피연산자의 표시자(indicator)를 포함한다. 피연산자 표시자는 또한 프로세서 레지스터의 식별자(예를 들어서 AX)와, 이를 테면 개별 피연산자가 메모리의 콘텐트 또는 레지스터의 콘텐트인지를 나타내는 플래그를 포함할 수 있다. 분해 필드(46a)는 피연산자에 의해서 표시된 메모리 주소(예를 들어서, GVA, GPA 및/또는 HPA)를 또한 포함할 수 있다. 분해 필드(46a)의 구조는 ISA 및/또는 플랫폼 특정적일 수 있다.
일부 실시예에서, 중단 이벤트 레지스터(44)의 실행 결과 필드(46b)는 개별 프로세서 명령을 실행하는 결과를 나타내는 데이터를 저장할 수 있다. 그러한 결과들은 상태 레지스터(예를 들어서, FLAGS)의 값, 명령 포인터(예를 들어서, RIP)의 값, 및 개별 명령을 실행하는 결과로부터의 범용 레지스터(예를 들어서, EAX)의 값을 포함할 수 있다. 필드(46b)는, 개별 명령의 실행의 결과로서 메모리에 커미트되는 값, 개별 값의 크기(예를 들어서, 바이트, 워드 등), 그리고/또는 개별 값이 커미트되는 메모리 주소를 추가적으로 포함할 수 있다.
일부 실시예에서, 실행 유닛(들)(36) 및/또는 커미트 유닛(38)은 게스트 명령의 실행이 VM 프로세서 이벤트(예를 들어서, 가상화 예외의 VM 종료)를 유발하는지 결정하도록 구성될 수 있고, 또한 만일 그렇다면, 개별 이벤트를 생성하기 전에 이벤트 레지스터(44)를 중단하기 위한 명령 분해 데이터(instruction disassembly data)를 저장하도록 구성될 수 있다. 프로세서(12)는 개별 게스트 명령의 실행 단계의 완료 때까지 프로세서 이벤트의 생성을 지연하도록, 그리고 개별 명령의 실행 결과들을 메모리 및/또는 프로세서(12)의 범용 레지스터로 커미팅하는 대신에 그러한 결과들을 이벤트 레지스터(44)로 저장하도록 추가적으로 구성될 수 있다. 그러한 명령들의 결과를 커미팅하는 것을 피하기 위하여, 프로세서(12)는 개별 명령을 위한 파이프라인의 커미트 단계 전에 VM 프로세서 이벤트를 생성하도록 구성될 수 있다. 그러한 기능은 이하에서 상술된다.
도 8은 본 발명의 일부 실시예에 따라서 게스트 명령을 실행하기 위하여 프로세서(12)에 의해서 수행되는 단계들의 상세하고 예시적인 시퀀스를 보여준다. 도 8은, 프로세서(12)가 메모리 접근 위반에 응답하여 VM 종료 이벤트를 생성하도록 구성되는 실시예를 보여준다. 통상의 기술자는 여기서의 설명 내용이 VM 종료 이벤트 대신에 (가상화 예외와 같은) 다른 VM 중단 이벤트를 생성하는 실시예를 포함하도록 용이하게 변경될 수 있다는 것을 이해할 것이다. "게스트 명령(guest instruction)"은 도 2a에서 VM(52a-b)와 같은 게스트 VM 내에서 실행되는 컴퓨터 프로그램의 일부를 형성하는 프로세서 명령들을 표시하기 위하여 본 명세서에서 사용되는 용어이다.
단계(302)는 게스트 명령을 불러오려고 시도한다. 상기 불러오기(fetch) 시도가 실패할 때, 단계(303)는 상기 실패가 메모리 접근 위반(예를 들어서, 게스트 명령이 게스트 VM의 SLAT 구조에서 실행불가로 표시된 메모리 페이지에 존재할 때)에 의하여 위반되었는지 여부를 결정할 수 있다. 아니라면, 단계(306)에서, 프로세서(12)는 VM 종료 이벤트를 생성하고 도 2a에서 핸들러(61)와 같은 이벤트 핸들러로 실행을 전달할 수 있다. 상기 게스트 명령의 불러오기 실패가 메모리 접근 위반에 의하여 유발되었을 때, 그러한 실패는 보안 프로그램(예를 들어서 안티 멀웨어 모듈)이 개별 메모리 페이지의 콘텐트를 보호하려고 시도하는 것을 나타낼 수 있다. 그러한 방식으로 실행으로부터 통상적으로 보호되는 하나의 예시적 메모리 섹션은 게스트 프로세스의 실행 스택(execution stack)을 저장한다. 상기 스택을 실행불가로 표시하는 것은 게스트 프로세스를 예를 들어서 스택 익스플로잇(stack exploit)으로부터 보호할 수 있다. 그러한 상황에서, 일부 실시예들은 개별 메모리 접근 허가를 무시하고서 게스트 명령 불러오기를 재시도할 수 있다(단계 305). 단계(307)에서, 불러오기된 게스트 명령은 상기 개별 명령이 "강제 불러오기됨(force-fetched", 즉 메모리 접근 허가를 위반하고 불러오기된 것이라는 것을 표시하기 위하여 전용 플래그로 표시된다. 프로세서(12)는 그리고 나서 단계(308)로 진행할 수 있다.
불러오기 단계(인출 단계, fetch stage) 다음으로, 단계(308)는 게스트 명령을 디코딩하고 배정(dispatch)한다. 단계(310)에서, 게스트 명령은 실행으로 론칭된다. 게스트 명령을 실행하는 것이 VM 종료를 위한 기준을 만족할 때(여기서 상기 기준은 메모리 접근과 관련 없음), 프로세서(12)는 이하 상술하는 단계(322)로 진행한다. 그러한 VM 종료는 다양한 상황에서 촉발될 수 있다. 예를 들어서, 게스트 명령은 게스트 VM 내에서로부터 호출될 때 VM 종료 이벤트를 자동으로 촉발하는 VMCALL과 같은 특화된 명령일 수 있다. 메모리 접근과 관련되지 않은 VM 종료를 위한 다른 예시적 이유는 게스트 명령의 실행 중에 하드웨어 이벤트(예를 들어서, 인터럽트)의 발생이다.
게스트 명령을 실행하는 것이 메모리 접근 위반을 유발할 때 (예를 들어서, 게스트 명령이 프로세서로 하여금 쓰기 금지로 표시된 메모리 페이지에 결과를 쓰도록 명령할 때), 종래의 프로세서는 통상적으로 게스트 명령의 실행을 중단하고, 프로세서 파이프라인(들)을 플러슁(flushing)하고 VM 중단 이벤트(예를 들어서, VMExit)를 생성한다. 반대로, 본 발명의 일부 실시예에서, 게스트 명령의 실행은 중단되지 않는다. 대신에, 단계(318)에서, VM 종료 이벤트가 게스트 명령을 위한 파이프라인의 실행 단계가 종료될 때까지 연기된다. 그러나, 일부 실시예에서, 완료된 실행 단계의 결과들은 종래의 시스템들에서 발생되는 것과 같이 커미팅되지 않는다. 대신에, 단계(320)에서, 프로세서(12)는 커미트 유닛(38)이 중단 이벤트 레지스터(44)에 게스트 명령의 완료된 실행 단계의 결과들을 저장하도록 명령할 수 있다. 그러한 기능은 예를 들어서 프로세서(12)의 범용 레지스터들 및/또는 메모리로 결과들을 커미팅하는 것으로부터 메모리 접근 위반이 발생할 때 레지스터(44)에 결과들을 저장하는 것으로 커미트 유닛(38)을 전환하는 활성화 신호(activation signal)를 이용하여 달성될 수 있다. 제어 신호는 게스트 명령의 실행이 메모리 접근 위반을 유발하는지 여부를 나타낼 수 있다. 커미트 유닛(38)은 그러한 신호를 예를 들어서, MMU로부터 메모리 접근 모듈(34)를 통하여 수신할 수 있다. 일부 실시예에서, 단계(320)는 레지스터 파일(40)로부터 게스트 명령을 실행하는 결과를 검색하는 커미트 유닛(38)을 포함한다.
선택적 실시예에서, 게스트 명령의 실행 결과들을 레지스터(44)에 저장하는 대신에, 단계(320)는 그러한 결과들을 개별 게스트 VM의 VMSO의 게스트 상태 영역과 같은 전용 메모리 영역에 저장할 수 있다. 또 다른 실시예에서는, 프로세서(12)는 그러한 결과들을 VM 종료를 실행할 때 VM 종료 핸들러(61)로 전송할 수 있다(단계 306).
단계(322)에서, 프로세서(12)는 게스트 명령을 분해한 결과 데이터를 중단 이벤트 레지스터(44) (및/또는 상술한 메모리)로 저장할 수 있다. 일부 실시예에서, 단계(322)는 게스트 명령의 개별 엔코딩 필드의 콘텐트를 레지스터(44)에 쓰는 것을 포함한다. 명령 분해 데이터는 게스트 명령을 디코딩 및/또는 실행하는 과정에서 명령 디코더(30) 및/또는 실행 유닛(들)(36)에 의해서 생성될 수 있다. 단계(322)는 개별 프로세서 모듈로부터 그러한 데이터를 검색하는 것을 포함할 수 있다. 게스트 명령에 대한 분해 데이터 및/또는 실행 결과들을 저장한 이후에, 프로세서(12)는 VM 종료 이벤트를 생성할 수 있다(단계 306).
현재 게스트 명령의 실행이 메모리 접근 위반을 유발하지 않고서(단계 314) 그리고 VM 종료를 위한 메모리에 관련 없는 이유 없이(단계 312) 진행될 때, 단계(315)는 상기 현재 게스트 명령이 강제로 불려오기된 것인지 결정할 수 있다(위 단계 305-307 참조). 아니라면, 단계(316)는 그 실행의 결과들을 메모리 및/또는 범용 프로세서 레지스터들에 커미트한다. 현재의 게스트 명령이 강제로 불려오기된 것일 때, 일부 실시예들은 개별 명령을 메모리 접근 위반을 유발하는 명령으로 취급할 수 있다(즉, VM 종료 이벤트를 생성하기 전에 개별 명령이 파이프라인의 실행 단계를 완료하는 것을 기다려서 결과들 및/또는 명령 분해 데이터를 레지스터(44)에 저장함으로써(위 단계 318-320-322-306 참조)).
도 9는 컴퓨터 보안과 관련된 본 발명의 일부 실시예에 따라서 게스트 VM 및/또는 컴퓨터 보안 모듈(60)(도 2a/2b)에 의해서 수행되는 단계들의 예시적인 시퀀스를 보여준다. 어플리케이션(예를 들어서 도 2a의 56a)과 같은 게스트 프로세스 또는 운영 시스템(예를 들어서, 도 2a의 게스트 OS(54a))의 프로세스는 게스트 VM 내에서 실행될 수 있는데 게스트 명령들의 시퀀스를 통해서 단계적으로 진행된다(단계 332). 예를 들어서 도 8과 관련하여 상술한 시나리오에 따라서 게스트 프로세스의 실행은 VM 종료가 발생될 때까지 계속된다. 통상의 기술자라면 본 명세서의 내용이, 프로세서(12)가 VM 종료 이벤트 대신에 가상화 예외를 생성하고 게스트 VM 내에서 실행되는 예외 핸들러(예를 들어서, 도 2b의 핸들러 63)가 개별 예외를 인터셉트하도록 구성되는 시스템에 적용될 수 있다는 것을 알 수 있을 것이다.
단계(336)에서, 핸들러(61)는 보안 위협의 증거에 대하여 분석되는 VM 종료 이벤트를 인터셉트한다. 상기 이벤트가 보안 위협(예를 들어서, 악성적인 의도로 실행되는 작업)을 나타낼 때, 단계(340)에서, CSM(60)은 게스트 VM에 대해서 그리고/또는 게스트 프로세스에 대해서 보호 작용을 취할 수 있다. 그러한 작용은 특히 게스트 프로세스의 실행 차단하는 것, 에러 메시지 또는 더미 결과들의 세트를 게스트 프로세스에 리턴하는 것, 및 호스트 시스템의 운영자를 경고하는 것을 포함할 수 있다.
VM 종료 이벤트가 보안 위협을 나타내지 않을 때, 단계(342)는 게스트 명령을 실행하는 결과가 (프로세서(12)의 이벤트 레지스터(44) 또는 메모리에서) 이용가능한지 여부를 결정한다. 아니라면, CSM(60)은 후술하는 단계(348)로 나아간다. 맞다면, 단계(344)는 레지스터(44) 및/또는 메모리(예를 들어서, 개별 게스트 VM의 VMSO의 게스트 상태 영역)로부터 개별 결과들을 검색한다. 단계(346)에서, CSM(60)은 현재 게스트 명령의 실행 결과를 적용할 수 있다. 일부 실시예에서, 단계(346)는 커미트 단계(commit stage)에서 종래 시스템들에서 실시되는 작업들의 세트를 포함한다. 예를 들어서, 단계(346)는 개별 게스트 VM의 가상화된 프로세서의 범용, 제어 및 상태 프로세서 레지스터들의 값들을 업데이트하는 것을 포함할 수 있다. 일부 실시예에서, 그러한 레지스터들은 개별 게스트 VM의 VMSO의 게스트 상태 영역 내에서 접근가능하다. 단계(346)는 현재 게스트 명령의 피연산자에 의해서 표시되는 메모리 주소들에 일부 결과들을 저장하는 것을 추가적으로 포함할 수 있다. 단계(346)는 현재 게스트 명령의 실행이 완료되었다는 것을 보여주기 위하여 명령 포인터(예를 들어서, x86 플랫폼들에서 RIP)를 증가시키는 것을 추가적으로 포함할 수 있다.
본 발명의 일부 실시예들은 프로세서(12)의 현재 명령 세트 구조(instruction set architecture, ISA)에 전용 명령을 추가하고, 상기 새로운 명령은 프로세서(12)로 하여금 게스트 명령의 실행 결과를 직접 개별 게스트 명령을 실행하는 게스트 VM 아래서부터 적용하도록 한다. 상기 새로운 명령(예시적 연상부호는 VMAPPLY임)은 단계(346)의 작업들을 실행할 수 있고(도 9), 예를 들어서 중단 이벤트 레지스터(44)로부터 메모리 및/또는 개별 게스트 VM의 가상화된 프로세서의 가상 레지스터들로 콘텐트를 복사한다.
일부 실시예에서, 단계(346)는 현재의 게스트 명령이 원자적 명령(atomic instruction)(예를 들어서, 접두사 LOCK로 표시되는 것과 같은 것)을 추가적으로 확인할 수 있다. 맞다면, 메모리 및/또는 게스트의 레지스터들에 직접 결과들을 적용하는 대신에 단계(346)는 게스트 VM에 회귀하자 마자 현재의 게스트 명령의 재실행을 강제할 수 있다(이하 단계 356 참조).
현재의 게스트 명령의 실행 결과들이 이용가능하지 않을 때(예를 들어서, 현재 VM 종료가 VMCALL과 같은 특권 명령(privileged instruction)에 의하여 유발될 때), 단계(348)에서, 컴퓨터 보안 모듈(60)은 분해 데이터가 현재 게스트 명령에 대하여 이용가능한지 결정한다. 그렇다면, 단계(350)에서, CSM(computer security module, 60)은 그러한 데이터를 예를 들어서 레지스터(44)의 분해 필드(46a)로부터 검색할 수 있다(예를 들어서 도 6 참조). CSM(60)은 그리고 나서 검색된 분해 데이터에 따라서 현재의 게스트 명령을 모방하는 것을 진행할 수 있다(단계 354).
분해 데이터가 이용가능하지 않을 때, 단계(352)는 모방(emulation)을 진행하기 전에 현재 게스트 명령을 분해할 수 있다. 단계(356)에서, CSM(60)은 (예를 들어서, Intel® 플랫폼의 VMRESUME를 발급함으로써) 개별 게스트 VM을 재가동할 수 있다. 단계(346)가 명령 포인터의 수정을 포함하는 일부 실시예에서, 게스트 프로세스의 실행은 현재 게스트 명령 바로 다음에 프로세서 명령과 함께, 또는 현재 게스트 명령에 의해서 지시된 프로세서 명령과 함께 시작할 수 있다(예를 들어서, JMP, CALL 등과 같은 제어 플로우 변경 명령 등의 경우에).
상술한 예시적 시스템들과 방법들은 하드웨어 가상화 구성에서 작동할 때 컴퓨터 또는 스마트폰과 같은 호스트 시스템이 효과적으로 컴퓨터 보안 작업들을 수행할 수 있게 한다. 보안 작업들은 특히 컴퓨터 바이러스와 스파이웨어와 같은 멀웨어에 대해서 호스트 시스템을 보호하는 것을 포함할 수 있다. 일부 실시예에서, 호스트 시스템은 가상 머신 내에서 소프트웨어 어플리케이션들의 세트와 운영 시스템을 실행하도록 구성된다. 보안 모듈은 개별 가상 머신 밖에서, 예를 들어서 하이퍼바이저의 레벨에서 실행될 수 있고, 개별 가상 머신을 멀웨어에 대해서 보호할 수 있다.
일부 실시예에서, 상기 보안 모듈은 피보호 VM의 보안에 중대한 데이터 및/또는 코드를 포함하고 있는 메모리의 섹션(예를 들어서, 메모리 페이지들의 세트)을 식별하고, 메모리의 개별 섹션에 대한 접근 허가를 설정한다. 그러한 접근 허가는 예를 들어서, 메모리의 개별 섹션이 쓰기 금지 및/또는 실행 금지인 것을 나타낼 수 있다. 보안 모듈은 예를 들어서, 피보호 VM 내에서 실행되는 소프트웨어가 쓰기 금지로 표시된 메모리의 섹션에 쓰기를 시도하거나 또는 실행 금지로 표시된 메모리의 섹션으로부터 코드를 실행하려고 시도할 때, 메모리 접근 위반에 응답으로 (VM 종료 또는 가상화 예외와 같은) VM 중단 이벤트를 생성하기 위하여 호스트 시스템의 프로세서를 추가적으로 설정할 수 있다. 그리고 나서 보안 모듈은 이벤트 핸들러를 통하여 그러한 프로세서 이벤트들을 인터셉트할 수 있고, 그리고 이벤트들이 컴퓨터 보안 위협을 나타내는지를 결정할 수 있다. 보안 모듈이 피보호 VM 밖에서 실행되는 구성에서, 보안 모듈의 활동은 멀웨어를 포함하여 피보호 VM 내에서 실행되는 소프트웨어에는 잠재적으로 보이지 않는다.
종래의 시스템에서, VM 중단 이벤트를 인터셉트하는 것은 본 기술분야에서 일반적으로 "트랩 앤드 에뮬레이트(trap and emulate)"로 알려진 방법에 따라서 진행된다. 종래 기술의 일 예에서, 개별 이벤트(예를 들어서 VM 종료)를 유발한 명령을 결정한 이후에, 안티-멀웨어 프로그램이 피보호 VM으로 실행을 리턴하기 전에 개별 명령을 에뮬레이트하고, 그리고 개별 명령이 이미 실행되었다는 것을 나타내는 명령 포인터를 수정한다. 에뮬레이트하는 단계가 없으면, 피보호 VM으로 실행을 리턴하는 것은 통상적으로 VM 종료를 재촉발하고 따라서 무한 루프를 생성한다.
종래의 트랩 앤드 에뮬레이트 시스템들과 방법들은 따라서 안티 멀웨어 프로그램이 명령 분해기(instruction disassembler) 및/또는 명령 모방기(instruction emulator)를 포함할 것을 필요로 할 수 있다. 그러한 요소들은 개발 및 관리가 복잡할 수 있고, 예를 들어서 하나의 프로세서에서 다른 것으로 이동이 불가할 수 있다. 더욱이, 종래 시스템들에서, 분해 및/또는 모방(에뮬레이션) 단계들은 통상적으로 모든 VM 중단 이벤트에 대해서 실행되고 호스트 시스템에 상당한 컴퓨팅 부담을 가한다. 반대로, 본 발명의 일부 실시예들은 분해기 및/또는 모방기의 필요를 없애서 컴퓨터 보안 작동을 실질적으로 가속화한다.
본 발명의 일부 실시예들은 종래 프로세서들의 구성과 작동에 변화를 가해서 그러한 프로세서들이 하드웨어 가상화 구성에서 보다 효율적으로 작동할 수 있게 한다.
일부 실시예에서, 프로세서는 VM 중단 이벤트를 생성하기 위한 조건이 만족된다는 결정에 대한 응답으로 특정 프로세서 레지스터 또는 특정 메모리 영역(예를 들어서, 피보호 VM의 실행을 관리하기 위하여 하이퍼바이저에 의하여 사용되는 가상 머신 상태 객체의 게스트 상태 영역)과 같은 소정의 위치에 현재 실행되는 게스트 명령에 대하여 결정된 분해 데이터를 저장하도록 구성된다. 그러한 분해 데이터는 예를 들어서 현재 게스트 명령의 피연산자와 연산자의 표시자를 포함할 수 있다. 예시적 일 실시예에서, 분해 데이터는 특히 opcode, mod R/M, 및 SIB 필드들과 같은 게스트 명령의 개별 엔코딩 필드들의 콘텐트를 포함한다.
그와 같은 개선점들은 컴퓨터 보안 어플리케이션들에게 특히 유리할 수 있고, 외부로부터, 예를 들어서 개별 VM을 노출하는 하이퍼바이저의 레벨로부터 가상 머신의 효율적 보호를 용이하게 한다. 종래의 컴퓨터 보안 솔루션과 비교했을 때, 본 발명의 일부 실시예들은 VM 종료 이벤트들을 인터셉트하고 분석하도록 구성된 보안 소프트웨어의 작업으로부터 명령 분해 단계를 제거함으로써 컴퓨팅(연산)을 실질적으로 감소시킬 수 있게 한다.
상기의 실시예들이 본 발명의 범위를 벗어나지 않는다면 다양한 방법으로 변경될 수 있음은 통상의 기술자에게 당연한 것이다. 따라서 본 발명의 범위는 이하의 청구항과 그들의 법적 균등물에 의해서 결정되어야 한다.

Claims (23)

  1. 가상 머신과 컴퓨터 보안 프로그램을 실행하도록 구성된 적어도 하나의 하드웨어 프로세서를 포함하는 호스트 시스템으로서,
    상기 적어도 하나의 프로세서는, 상기 가상 머신 내에서 게스트 명령(guest instruction)을 실행하는 것이 메모리 접근 허가의 위반을 유발하는지 여부를 결정하도록;
    상기 적어도 하나의 프로세서는 응답으로, 상기 게스트 명령을 실행하는 것이 상기 위반을 유발할 때, 상기 컴퓨터 보안 프로그램에 접근가능한 소정의 위치에 상기 게스트 명령의 머신 코드 표현(machine code representation)의 일부를 쓰도록; 그리고 상기 게스트 명령의 실행을 중단하도록; 그리고 상기 게스트 명령의 실행의 중단의 응답으로 상기 컴퓨터 보안 프로그램의 실행으로 전환하도록(이 때 상기 컴퓨터 보안 프로그램은 상기 위반이 컴퓨터 보안 위협을 나타내는지 여부를 결정하도록 구성됨); 추가적으로 구성되는 것을 특징으로 하는 호스트 시스템.
  2. 제1항에 있어서,
    상기 머신 코드 표현은 엔코딩 필드들의 시퀀스를 포함하고, 그 일부는 상기 게스트 명령의 개별 엔코딩 필드의 콘텐트를 포함하는 것을 특징으로 하는 호스트 시스템.
  3. 제2항에 있어서,
    상기 개별 엔코딩 필드는 상기 머신 코드 표현의 Prefix 필드, Opcode 필드, Mod R/M 필드, SIB 필드, Displacement 필드, 및 Immediate 필드로 구성된 군으로부터 선택되는 것을 특징으로 하는 호스트 시스템.
  4. 제1항에 있어서,
    상기 일부는 상기 게스트 명령의 연산자를 나타내는 것을 특징으로 하는 호스트 시스템.
  5. 제1항에 있어서,
    상기 일부는 상기 게스트 명령의 피연산자를 나타내는 것을 특징으로 하는 호스트 시스템.
  6. 제1항에 있어서,
    상기 적어도 하나의 하드웨어 프로세서는 상기 게스트 명령을 실행하는 것이 상기 위반을 유발하는지 여부를 결정하는 것에 응답으로, 상기 게스트 명령을 실행하는 것이 상기 위반을 유발할 때, 상기 게스트 명령에 의하여 표시된 메모리 주소를 상기 소정의 위치에 쓰도록 추가적으로 구성되는 것을 특징으로 하는 호스트 시스템.
  7. 제6항에 있어서,
    상기 메모리 주소는 상기 가상 머신의 메모리 공간 내에 위치된 게스트 물리적 주소(guest-physical address, GPA)이고, 상기 GPA는 상기 머신 코드 표현에 의하여 나타내진 가상 주소를 변환해서 결정되는 것을 특징으로 하는 호스트 시스템.
  8. 제6항에 있어서,
    상기 메모리 주소는 상기 호스트 시스템의 물리적 메모리 내에 위치된 호스트 물리적 주소(host-physical address, HPA)이고, 상기 HPA는 상기 머신 코드 표현에 의하여 나타내진 가상 주소를 변환해서 결정되는 것을 특징으로 하는 호스트 시스템.
  9. 제6항에 있어서,
    상기 메모리 주소는 상기 게스트 명령의 메모리 위치에 따라서 결정되는 것을 특징으로 하는 호스트 시스템.
  10. 제1항에 있어서,
    상기 적어도 하나의 하드웨어 프로세서는 상기 게스트 명령을 실행하는 것이 상기 위반을 유발하는지 여부를 결정하는 것에 응답으로, 상기 게스트 명령을 실행하는 것이 상기 위반을 유발할 때, 프로세서 레지스터의 표시자를 상기 소정의 위치에 쓰고, 상기 레지스터는 상기 게스트 명령에 의하여 나타내지도록 추가적으로 구성되는 것을 특징으로 하는 호스트 시스템.
  11. 제1항에 있어서,
    상기 컴퓨터 보안 프로그램은 상기 가상 머신 내에서 실행되는 것을 특징으로 하는 호스트 시스템.
  12. 제1항에 있어서,
    상기 컴퓨터 보안 프로그램은 상기 가상 머신 밖에서 실행되는 것을 특징으로 하는 호스트 시스템.
  13. 제1항에 있어서,
    상기 소정의 위치는 상기 적어도 하나의 하드웨어 프로세서의 소정의 레지스터를 포함하는 것을 특징으로 하는 호스트 시스템.
  14. 제13항에 있어서,
    상기 소정의 레지스터는 상기 적어도 하나의 하드웨어 프로세서의 모델 특정 레지스터(MSR)인 것을 특징으로 하는 호스트 시스템.
  15. 제1항에 있어서,
    상기 소정의 위치는 상기 호스트 시스템의 메모리의 소정 섹션을 포함하는 것을 특징으로 하는 호스트 시스템.
  16. 제1항에 있어서,
    상기 소정의 위치는 상기 가상 머신의 현재 상태를 나타내는 데이터 구조를 포함하는 것을 특징으로 하는 호스트 시스템.
  17. 호스트 시스템을 컴퓨터 보안 위협들로부터 보호하는 방법으로서,
    상기 방법은, 실행을 위한 게스트 명령을 수신하는 것에 응답하여 상기 게스트 명령을 실행하는 것이 메모리 접근 허가의 위반을 유발하는지 여부를 결정하도록 상기 호스트 시스템의 적어도 하나의 하드웨어 프로세서를 채용하는 것(상기 게스트 명령은 상기 호스트 시스템에 의하여 노출된 가상 머신 내에서 실행됨)을 포함하고,
    상기 방법은, 상기 게스트 명령이 상기 위반을 유발하는지 여부를 결정하는 것에 응답으로, 상기 게스트 명령을 실행하는 것이 상기 위반을 유발할 때, 상기 컴퓨터 보안 프로그램에 접근가능한 소정의 위치에 상기 게스트 명령의 머신 코드 표현(machine code representation)의 일부를 쓰도록 상기 적어도 하나의 하드웨어 프로세서를 채용하는 것과; 상기 게스트 명령의 실행을 중단하기 위하여 상기 적어도 하나의 하드웨어 프로세서를 채용하는 것과; 상기 게스트 명령의 실행을 중단하는 것에 응답으로, 상기 위반이 컴퓨터 보안 위협을 나타내는 지를 결정하도록 구성된 컴퓨터 보안 프로그램을 실행하는 것으로 전환하는 것;을 포함하는 것을 특징으로 하는 호스트 시스템을 컴퓨터 보안 위협들로부터 보호하는 방법.
  18. 제17항에 있어서,
    상기 머신 코드 표현은 엔코딩 필드들의 시퀀스를 포함하고, 그 일부는 상기 게스트 명령의 개별 엔코딩 필드의 콘텐트를 포함하는 것을 특징으로 하는 호스트 시스템을 컴퓨터 보안 위협들로부터 보호하는 방법.
  19. 제17항에 있어서,
    상기 일부는 상기 게스트 명령의 연산자를 나타내는 것을 특징으로 하는 호스트 시스템을 컴퓨터 보안 위협들로부터 보호하는 방법.
  20. 제17항에 있어서,
    상기 일부는 상기 게스트 명령의 피연산자를 나타내는 것을 특징으로 하는 호스트 시스템을 컴퓨터 보안 위협들로부터 보호하는 방법.
  21. 제17항에 있어서,
    상기 소정의 위치는 상기 적어도 하나의 하드웨어 프로세서의 소정의 레지스터를 포함하는 것을 특징으로 하는 호스트 시스템을 컴퓨터 보안 위협들로부터 보호하는 방법.
  22. 호스트 시스템의 적어도 하나의 하드웨어 프로세서로서,
    상기 적어도 하나의 하드웨어 프로세서는, 실행을 위한 게스트 명령을 수신하는 것에 응답으로 상기 게스트 명령을 실행하는 것이 메모리 접근 허가의 위반을 유발하는지 여부를 결정하도록(이 때 상기 게스트 명령은 상기 호스트 시스템에 의하여 노출되는 게스트 가상 머신 내에서 실행됨) 구성될 수 있고,
    상기 적어도 하나의 하드웨어 프로세서는, 상기 게스트 명령이 상기 위반을 유발하는지 여부를 결정하는 것에 응답으로, 상기 게스트 명령을 실행하는 것이 상기 위반을 유발할 때, 상기 컴퓨터 보안 프로그램에 접근가능한 소정의 위치에 상기 게스트 명령의 머신 코드 표현(machine code representation)의 일부를 쓰도록; 상기 게스트 명령의 실행을 중단하도록; 그리고 상기 게스트 명령의 실행의 중단의 응답으로 컴퓨터 보안 프로그램의 실행으로 전환하도록(이 때 상기 컴퓨터 보안 프로그램은 상기 위반이 컴퓨터 보안 위협을 나타내는지 여부를 결정하도록 구성됨) 구성될 수 있는 것을 특징으로 하는 호스트 시스템의 적어도 하나의 하드웨어 프로세서.
  23. 호스트 시스템의 적어도 하나의 하드웨어 프로세서에 의하여 실행될 때, 상기 호스트 시스템이 메모리 접근 허가의 위반이 컴퓨터 보안 위협을 나타내는지 여부를 결정하도록 구성된 컴퓨터 보안 프로그램을 형성하도록 하는 명령들을 저장하는 비-일시적 컴퓨터 판독가능 매체(non-transitory computer-readable medium)로서,
    상기 적어도 하나의 하드웨어 프로세서는 실행을 위한 게스트 명령을 수신하는 것에 응답으로, 상기 게스트 명령을 실행하는 것이 상기 위반을 유발하는 지를 결정하도록(이 때 상기 게스트 명령은 상기 호스트 시스템에 의하여 노출되는 가상 머신 내에서 실행됨) 구성될 수 있고,
    상기 적어도 하나의 하드웨어 프로세서는 상기 게스트 명령이 상기 위반을 유발하는지 여부를 결정하는 것에 응답으로, 상기 게스트 명령을 실행하는 것이 상기 위반을 유발할 때, 상기 컴퓨터 보안 프로그램에 접근가능한 소정의 위치에 상기 게스트 명령의 머신 코드 표현(machine code representation)의 일부를 쓰도록; 상기 게스트 명령의 실행을 중단하도록; 그리고 상기 게스트 명령의 실행의 중단의 응답으로 상기 컴퓨터 보안 프로그램의 실행으로 전환하도록; 구성될 수 있는 것을 특징으로 하는 비-일시적 컴퓨터 판독가능 매체.
KR1020177004413A 2014-08-18 2015-08-11 가상 머신을 나가자 마자 현재 프로세서 명령을 노출하기 위한 시스템 및 방법 KR20170042602A (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201462038476P 2014-08-18 2014-08-18
US62/038,476 2014-08-18
US14/489,801 US20160048679A1 (en) 2014-08-18 2014-09-18 Systems And Methods for Exposing A Current Processor Instruction Upon Exiting A Virtual Machine
US14/489,801 2014-09-18
PCT/RO2015/050008 WO2016118032A2 (en) 2014-08-18 2015-08-11 Systems and methods for exposing a current processor instruction upon exiting a virtual machine

Publications (1)

Publication Number Publication Date
KR20170042602A true KR20170042602A (ko) 2017-04-19

Family

ID=55302381

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020177004414A KR102116571B1 (ko) 2014-08-18 2015-08-11 가상 머신을 나가자 마자 현재 프로세서 명령의 결과를 노출하기 위한 시스템 및 방법
KR1020177004413A KR20170042602A (ko) 2014-08-18 2015-08-11 가상 머신을 나가자 마자 현재 프로세서 명령을 노출하기 위한 시스템 및 방법

Family Applications Before (1)

Application Number Title Priority Date Filing Date
KR1020177004414A KR102116571B1 (ko) 2014-08-18 2015-08-11 가상 머신을 나가자 마자 현재 프로세서 명령의 결과를 노출하기 위한 시스템 및 방법

Country Status (12)

Country Link
US (2) US20160048679A1 (ko)
EP (2) EP3183660A2 (ko)
JP (1) JP6496401B2 (ko)
KR (2) KR102116571B1 (ko)
CN (2) CN106575236A (ko)
AU (2) AU2015378729B2 (ko)
CA (2) CA2954510A1 (ko)
ES (1) ES2732876T3 (ko)
IL (2) IL249849A0 (ko)
RU (2) RU2017104753A (ko)
SG (2) SG11201700794SA (ko)
WO (2) WO2016118032A2 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20190143214A (ko) * 2018-06-20 2019-12-30 연세대학교 산학협력단 가상화 시스템의 메모리 관리 장치 및 그 방법

Families Citing this family (34)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9756074B2 (en) * 2013-12-26 2017-09-05 Fireeye, Inc. System and method for IPS and VM-based detection of suspicious objects
US20150205962A1 (en) * 2014-01-23 2015-07-23 Cylent Systems, Inc. Behavioral analytics driven host-based malicious behavior and data exfiltration disruption
GB2532415A (en) 2014-11-11 2016-05-25 Ibm Processing a guest event in a hypervisor-controlled system
US9940455B2 (en) * 2015-02-25 2018-04-10 International Business Machines Corporation Programming code execution management
US10726127B1 (en) 2015-06-30 2020-07-28 Fireeye, Inc. System and method for protecting a software component running in a virtual machine through virtual interrupts by the virtualization layer
US10395029B1 (en) 2015-06-30 2019-08-27 Fireeye, Inc. Virtual system and method with threat protection
US10642753B1 (en) 2015-06-30 2020-05-05 Fireeye, Inc. System and method for protecting a software component running in virtual machine using a virtualization layer
US10216927B1 (en) 2015-06-30 2019-02-26 Fireeye, Inc. System and method for protecting memory pages associated with a process using a virtualization layer
US11113086B1 (en) 2015-06-30 2021-09-07 Fireeye, Inc. Virtual system and method for securing external network connectivity
US10033759B1 (en) 2015-09-28 2018-07-24 Fireeye, Inc. System and method of threat detection under hypervisor control
US10121004B2 (en) * 2015-10-07 2018-11-06 Electronics And Telecommunications Research Institute Apparatus and method for monitoring virtual machine based on hypervisor
US10135701B2 (en) * 2016-02-19 2018-11-20 At&T Intellectual Property I, L.P. Context-aware virtualized control decision support system for providing quality of experience assurance for internet protocol streaming video services
US20210026950A1 (en) * 2016-03-07 2021-01-28 Crowdstrike, Inc. Hypervisor-based redirection of system calls and interrupt-based task offloading
US20210049292A1 (en) * 2016-03-07 2021-02-18 Crowdstrike, Inc. Hypervisor-Based Interception of Memory and Register Accesses
US10635479B2 (en) * 2016-12-19 2020-04-28 Bitdefender IPR Management Ltd. Event filtering for virtual machine security applications
US10613897B1 (en) * 2016-12-21 2020-04-07 Ca, Inc. Systems and methods for creating program-specific execution environments
US10243746B2 (en) 2017-02-27 2019-03-26 Red Hat, Inc. Systems and methods for providing I/O state protections in a virtualized environment
US9935818B1 (en) 2017-05-02 2018-04-03 At&T Intellectual Property I, L.P. Diagnostic traffic generation for automatic testing and troubleshooting
US10936353B2 (en) * 2017-05-16 2021-03-02 Dell Products L.P. Systems and methods for hypervisor-assisted hardware accelerator offloads in a virtualized information handling system environment
US10546120B2 (en) * 2017-09-25 2020-01-28 AO Kaspersky Lab System and method of forming a log in a virtual machine for conducting an antivirus scan of a file
US10698783B2 (en) * 2018-01-09 2020-06-30 Vmware, Inc. Virtualization detection in a computing system
US11003777B2 (en) 2018-04-16 2021-05-11 International Business Machines Corporation Determining a frequency at which to execute trap code in an execution path of a process executing a program to generate a trap address range to detect potential malicious code
US10810304B2 (en) * 2018-04-16 2020-10-20 International Business Machines Corporation Injecting trap code in an execution path of a process executing a program to generate a trap address range to detect potential malicious code
JP7035787B2 (ja) * 2018-05-14 2022-03-15 富士通株式会社 演算処理装置および演算処理装置の制御方法
US11385918B2 (en) * 2019-01-23 2022-07-12 Vmware, Inc. Dynamic discovery of internal kernel functions and global data
US11347869B2 (en) * 2019-03-08 2022-05-31 International Business Machines Corporation Secure interface control high-level page management
US11206128B2 (en) 2019-03-08 2021-12-21 International Business Machines Corporation Secure paging with page change detection
US11403409B2 (en) 2019-03-08 2022-08-02 International Business Machines Corporation Program interruptions for page importing/exporting
US11221869B2 (en) 2020-03-25 2022-01-11 Red Hat, Inc. Memory efficient host virtual address management for hypercalls
US11886351B2 (en) 2020-03-25 2024-01-30 Red Hat, Inc. Memory efficient virtual address management for system calls
CN112596921A (zh) * 2020-12-17 2021-04-02 海光信息技术股份有限公司 系统调用处理方法及处理装置
US20220308867A1 (en) * 2021-03-26 2022-09-29 Intel Corporation Apparatus and method for managing unsupported instruction set architecture (isa) features in a virtualized environment
US12020059B2 (en) * 2021-08-30 2024-06-25 International Business Machines Corporation Inaccessible prefix pages during virtual machine execution
US20230334144A1 (en) * 2022-04-19 2023-10-19 Microsoft Technology Licensing, Llc Provisioning a security component from a cloud host to a guest virtual resource unit

Family Cites Families (44)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4985825A (en) * 1989-02-03 1991-01-15 Digital Equipment Corporation System for delaying processing of memory access exceptions until the execution stage of an instruction pipeline of a virtual memory system based digital computer
US5926646A (en) 1997-09-11 1999-07-20 Advanced Micro Devices, Inc. Context-dependent memory-mapped registers for transparent expansion of a register file
US5870575A (en) * 1997-09-22 1999-02-09 International Business Machines Corporation Indirect unconditional branches in data processing system emulation mode
US6625725B1 (en) 1999-12-22 2003-09-23 Intel Corporation Speculative reuse of code regions
US7451324B2 (en) * 2002-05-31 2008-11-11 Advanced Micro Devices, Inc. Secure execution mode exceptions
US20030229794A1 (en) * 2002-06-07 2003-12-11 Sutton James A. System and method for protection against untrusted system management code by redirecting a system management interrupt and creating a virtual machine container
US7124327B2 (en) * 2002-06-29 2006-10-17 Intel Corporation Control over faults occurring during the operation of guest software in the virtual-machine architecture
US6922760B2 (en) * 2002-12-05 2005-07-26 Lsi Logic Corporation Distributed result system for high-performance wide-issue superscalar processor
US7111145B1 (en) 2003-03-25 2006-09-19 Vmware, Inc. TLB miss fault handler and method for accessing multiple page tables
US7620949B2 (en) * 2004-03-31 2009-11-17 Intel Corporation Method and apparatus for facilitating recognition of an open event window during operation of guest software in a virtual machine environment
US7707341B1 (en) 2004-05-11 2010-04-27 Advanced Micro Devices, Inc. Virtualizing an interrupt controller
US7370181B2 (en) 2004-06-22 2008-05-06 Intel Corporation Single stepping a virtual machine guest using a reorder buffer
US7581085B1 (en) 2005-09-08 2009-08-25 Parallels Software International, Inc. Fast stub and frame technology for virtual machine optimization
US20070106986A1 (en) 2005-10-25 2007-05-10 Worley William S Jr Secure virtual-machine monitor
US20070136724A1 (en) 2005-12-12 2007-06-14 Arun Sharma Transferring registers in transitions between computer environments
US20070245117A1 (en) * 2006-04-12 2007-10-18 Hob Gmbh & Co. Kg Processor comprising an instruction set and registers for simplified opcode access
US7634642B2 (en) 2006-07-06 2009-12-15 International Business Machines Corporation Mechanism to save and restore cache and translation trace for fast context switch
US8595487B2 (en) 2006-11-01 2013-11-26 Vmware, Inc. Virtualization hardware for device driver isolation
US7996836B1 (en) 2006-12-29 2011-08-09 Symantec Corporation Using a hypervisor to provide computer security
US8561060B2 (en) 2007-04-26 2013-10-15 Advanced Micro Devices, Inc. Processor and method configured to determine an exit mechanism using an intercept configuration for a virtual machine
JP2009009232A (ja) * 2007-06-26 2009-01-15 Hitachi Ltd コンピュータとカーネル保護方法並びにコンピュータソフトウエア
US8261028B2 (en) 2007-12-31 2012-09-04 Intel Corporation Cached dirty bits for context switch consistency checks
US8307360B2 (en) 2008-01-22 2012-11-06 Advanced Micro Devices, Inc. Caching binary translations for virtual machine guest
US8443363B1 (en) * 2008-05-30 2013-05-14 Symantec Corporation Coordinated virtualization activities
US8201169B2 (en) * 2009-06-15 2012-06-12 Vmware, Inc. Virtual machine fault tolerance
US8612975B2 (en) 2009-07-07 2013-12-17 Advanced Micro Devices, Inc. World switch between virtual machines with selective storage of state information
US8707457B2 (en) * 2010-05-09 2014-04-22 Citrix Systems, Inc. Methods and systems for forcing an application to store data in a secure storage location
US9165136B1 (en) 2010-10-27 2015-10-20 Amazon Technologies, Inc. Supervising execution of untrusted code
US8578080B2 (en) 2011-07-01 2013-11-05 Intel Corporation Secure handling of interrupted events utilizing a virtual interrupt definition table
US8984478B2 (en) * 2011-10-03 2015-03-17 Cisco Technology, Inc. Reorganization of virtualized computer programs
US8694738B2 (en) 2011-10-11 2014-04-08 Mcafee, Inc. System and method for critical address space protection in a hypervisor environment
US9069586B2 (en) 2011-10-13 2015-06-30 Mcafee, Inc. System and method for kernel rootkit protection in a hypervisor environment
WO2013089695A1 (en) 2011-12-14 2013-06-20 Intel Corporation Method and system for monitoring calls to an application program interface (api) function
US20130174144A1 (en) 2011-12-28 2013-07-04 Ati Technologies Ulc Hardware based virtualization system
US8719546B2 (en) * 2012-01-04 2014-05-06 Intel Corporation Substitute virtualized-memory page tables
US9336046B2 (en) 2012-06-15 2016-05-10 International Business Machines Corporation Transaction abort processing
US9361115B2 (en) 2012-06-15 2016-06-07 International Business Machines Corporation Saving/restoring selected registers in transactional processing
US8966324B2 (en) 2012-06-15 2015-02-24 International Business Machines Corporation Transactional execution branch indications
US9311101B2 (en) 2012-06-15 2016-04-12 International Business Machines Corporation Intra-instructional transaction abort handling
KR20150038574A (ko) 2012-08-03 2015-04-08 놀쓰캐롤라이나 스테이트 유니버시티 타겟 디바이스의 능동 모니터링, 메모리 보호 및 무결성 검증을 위한 방법, 시스템 및 컴퓨터 판독 가능 매체
US9256427B2 (en) * 2012-12-11 2016-02-09 International Business Machines Corporation Tracking multiple conditions in a general purpose register and instruction therefor
RU2522019C1 (ru) * 2012-12-25 2014-07-10 Закрытое акционерное общество "Лаборатория Касперского" Система и способ обнаружения угроз в коде, исполняемом виртуальной машиной
US9058415B1 (en) * 2013-03-15 2015-06-16 Google Inc. Counting events using hardware performance counters and annotated instructions
US9292686B2 (en) 2014-01-16 2016-03-22 Fireeye, Inc. Micro-virtualization architecture for threat-aware microvisor deployment in a node of a network environment

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20190143214A (ko) * 2018-06-20 2019-12-30 연세대학교 산학협력단 가상화 시스템의 메모리 관리 장치 및 그 방법

Also Published As

Publication number Publication date
WO2016118033A3 (en) 2016-10-27
EP3183682A2 (en) 2017-06-28
WO2016118032A3 (en) 2016-10-13
EP3183660A2 (en) 2017-06-28
RU2017104752A3 (ko) 2019-02-01
SG11201700795VA (en) 2017-03-30
WO2016118032A8 (en) 2017-01-05
CN106575236A (zh) 2017-04-19
EP3183682B1 (en) 2019-04-03
CA2954604C (en) 2020-09-29
WO2016118032A2 (en) 2016-07-28
US20160048680A1 (en) 2016-02-18
KR20170042603A (ko) 2017-04-19
RU2017104753A (ru) 2018-09-20
WO2016118033A2 (en) 2016-07-28
CA2954510A1 (en) 2016-07-28
JP6496401B2 (ja) 2019-04-03
IL249849A0 (en) 2017-03-30
ES2732876T3 (es) 2019-11-26
CN106575237A (zh) 2017-04-19
IL249848A0 (en) 2017-03-30
US20160048679A1 (en) 2016-02-18
JP2017526071A (ja) 2017-09-07
AU2015378729A1 (en) 2017-01-19
US9672354B2 (en) 2017-06-06
RU2017104752A (ru) 2018-09-20
CA2954604A1 (en) 2016-07-28
AU2015378728A1 (en) 2017-01-19
RU2686552C2 (ru) 2019-04-29
AU2015378729B2 (en) 2020-07-09
SG11201700794SA (en) 2017-03-30
KR102116571B1 (ko) 2020-06-01

Similar Documents

Publication Publication Date Title
KR102116571B1 (ko) 가상 머신을 나가자 마자 현재 프로세서 명령의 결과를 노출하기 위한 시스템 및 방법
US9400885B2 (en) Computer security systems and methods using virtualization exceptions
US10635479B2 (en) Event filtering for virtual machine security applications
US10140448B2 (en) Systems and methods of asynchronous analysis of event notifications for computer security applications
US20160210069A1 (en) Systems and Methods For Overriding Memory Access Permissions In A Virtual Machine
US9507727B2 (en) Page fault injection in virtual machines
US20160048458A1 (en) Computer Security Systems and Methods Using Hardware-Accelerated Access To Guest Memory From Below The Operating System
NL2030804B1 (en) Flexible return and event delivery
EP3639132A1 (en) An apparatus and method for controlling a change in instruction set