KR20100111518A - 버퍼 오버플로우 관리를 통한 바이러스 코드 실행방지장치 및 그 방법 - Google Patents

버퍼 오버플로우 관리를 통한 바이러스 코드 실행방지장치 및 그 방법 Download PDF

Info

Publication number
KR20100111518A
KR20100111518A KR1020090029986A KR20090029986A KR20100111518A KR 20100111518 A KR20100111518 A KR 20100111518A KR 1020090029986 A KR1020090029986 A KR 1020090029986A KR 20090029986 A KR20090029986 A KR 20090029986A KR 20100111518 A KR20100111518 A KR 20100111518A
Authority
KR
South Korea
Prior art keywords
code
execution
virus
buffer overflow
interrupt
Prior art date
Application number
KR1020090029986A
Other languages
English (en)
Other versions
KR101493076B1 (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 삼성전자주식회사
Priority to KR20090029986A priority Critical patent/KR101493076B1/ko
Priority to US12/751,886 priority patent/US8516589B2/en
Publication of KR20100111518A publication Critical patent/KR20100111518A/ko
Application granted granted Critical
Publication of KR101493076B1 publication Critical patent/KR101493076B1/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
    • 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
    • G06F5/00Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F5/06Methods or arrangements for data conversion without changing the order or content of the data handled for changing the speed of data flow, i.e. speed regularising or timing, e.g. delay lines, FIFO buffers; over- or underrun control therefor
    • G06F5/10Methods or arrangements for data conversion without changing the order or content of the data handled for changing the speed of data flow, i.e. speed regularising or timing, e.g. delay lines, FIFO buffers; over- or underrun control therefor having a sequence of storage locations each being individually accessible for both enqueue and dequeue operations, e.g. using random access memory
    • G06F5/12Means for monitoring the fill level; Means for resolving contention, i.e. conflicts between simultaneous enqueue and dequeue operations
    • G06F5/14Means for monitoring the fill level; Means for resolving contention, i.e. conflicts between simultaneous enqueue and dequeue operations for overflow or underflow handling, e.g. full or empty flags
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Virology (AREA)
  • General Health & Medical Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Storage Device Security (AREA)

Abstract

버퍼 오버플로우 관리를 통한 바이러스 코드 실행방지장치 및 그 방법이 개시된다. 본 발명의 일 양상에 따른 바이러스 코드 실행 방지장치는 커널모듈 또는 애플리케이션 프로그램의 실행 중 버퍼 오버플로우가 발생하면, 버퍼 오버플로우에 의해 이동한 프로그램 실행영역에 대해 바이러스 검사를 수행한다. 이에 의해 운영체제나 애플리케이션 코드의 변경이나 재 컴파일을 하지 않고도 전역변수나 버퍼 또는 스택에 대한 오버플로우 공격의 탐지율을 높일 수 있을 뿐만 아니라, 하드웨어의 지원없이 소프트웨어적으로 버퍼 오버플로우를 탐지할 수 있다.
Figure P1020090029986
버퍼 오버플로우, 가상머신, 바이러스

Description

버퍼 오버플로우 관리를 통한 바이러스 코드 실행방지장치 및 그 방법 {Apparatus and method of preventing virus code execution through buffer overflow control}
본 발명의 일양상에 따른 기술분야는 프로그램 보안에 관한 것으로, 보다 상세하게는 버퍼 오버플로우 관리를 통한 바이러스 코드 실행방지장치 및 그 방법에 관한 것이다.
컴퓨터 프로그래밍시 데이터 어레이(array)를 정의하고 이 어레이에 대해 여러가지 연산을 하는 경우가 있다. 이때 어레이의 크기를 넘어서는 영역에 데이터를 기록하도록 하는 연산이 고의 또는 실수로 수행될 수 있는데, 이를 버퍼 오버플로우(buffer overflow)라고 한다. 버퍼 오버플로우가 발생하면 예기치 않은 동작이 일어날 수 있다.
이러한 오류를 방지하기 위해, 프로그래밍시 데이터 어레이의 가용 최대크기를 검사하도록 할 수 있으나, 이러한 검사과정이 실수 또는 고의로 누락될 수 있다. 해커나 크래커와 같은 시스템 공격자는 이러한 버퍼 오버플로우를 이용하여, 버퍼에 저장된 리턴 주소(return address)를 덮어쓰거나, 지역변수(local variable) 또는 전역변수(global variable)로 선언된 함수의 포인터(function pointer)를 덮어씀으로써 프로그램의 진행을 임의의 영역으로 변경시킬 수 있다. 이러한 점을 이용해 이 영역에 바이러스 코드를 삽입하면 바이러스 코드가 실행될 수 있는 것이다.
버퍼 오버플로우를 이용한 시스템 공격은 컴퓨터 뿐만 아니라 모바일 기기에서도 자주 발생할 수 있다. 따라서 버퍼 오버플로우를 이용하여 삽입된 바이러스 코드가 실행되지 않도록 하여 시스템을 보호할 필요가 있다.
따라서, 본 발명의 일 양상에 따라, 버퍼 오버플로우 발생시 해당 메모리 영역에 대한 바이러스 검사를 수행하여, 삽입된 바이러스 코드의 실행을 방지함으로써 시스템의 보안을 강화한, 바이러스 코드 실행방지장치 및 그 방법을 제공하고자 한다.
본 발명의 일 양상에 따른 바이러스 코드 실행 방지장치는 커널모듈 또는 애플리케이션 프로그램의 실행을 탐지하여 프로그램 코드 중 일부를 인터럽트 명령으로 변경하는 코드 변환부와, 인터럽트 명령의 실행에 의해 예외(exception)가 발생하면, 버퍼 오버플로우 여부를 판단하는 코드 검사부와, 그 판단결과 버퍼 오버플로우가 발생하면, 버퍼 오버플로우에 의해 이동한 프로그램 실행영역에 대해 바이러스 검사를 수행하는 바이러스 검출엔진을 포함한다.
또한, 본 발명의 다른 양상에 따른 바이러스 코드 실행 방지방법은, 커널모듈 또는 애플리케이션 프로그램의 실행 중 버퍼 오버플로우가 발생하면, 버퍼 오버플로우에 의해 이동한 프로그램 실행영역에 대해 바이러스 검사를 수행한다.
본 발명의 일실시예에 따르면, 운영체제나 애플리케이션 코드의 변경이나 재 컴파일을 하지 않고도 전역변수나 버퍼 또는 스택에 대한 오버플로우 공격의 탐지율을 높일 수 있을 뿐만 아니라, 하드웨어의 지원없이 소프트웨어적으로 버퍼 오버플로우를 탐지할 수 있다.
이하 첨부된 도면을 참조하여 본 발명의 바람직한 실시예에 대해 상세히 설명한다. 본 발명을 설명함에 있어 관련된 공지 기능 또는 구성에 대한 구체적인 설명이 본 발명의 요지를 불필요하게 흐릴 수 있다고 판단되는 경우에는 그 상세한 설명을 생략할 것이다. 또한, 후술되는 용어들은 본 발명에서의 기능을 고려하여 정의된 용어들로서 이는 사용자, 운용자의 의도 또는 관례 등에 따라 달라질 수 있다. 그러므로 그 정의는 본 명세서 전반에 걸친 내용을 토대로 내려져야 할 것이다.
도 1은 본 발명의 일실시예에 따른 가상머신 커널에 대한 버퍼 오버플로우 탐지를 위한 시스템 구성도이다.
가상머신 모니터(130)는 버퍼 오버플로우 탐지를 통한 바이러스 코드 실행 방지장치로써, 가상머신로더(VM loader)(131), 커널모듈 인식부(Loadable Kernel Module Recognition Module)(132), 코드 변환부(Code Converter)(133), 예외 핸들러 테이블(Exception Handler Table)(134), 코드 검사부(Code Inspection Module)(135), 코드 에뮬레이터(Code Emulator)(136), 코드 저장부(Code Reservoir)(138)를 포함한다. 가상머신 모니터(130)는 버퍼 오버플로우에 대한 검사를 수행하고, 버퍼 오버플로우시 적절한 조치를 취한다. 적절한 조치의 일예는 가상머신 커널에 대한 바이러스 검사를 수행하는 것을 들 수 있다.
제1가상머신(110)은 버퍼 오버플로우 모니터링 대상이 되는 운영체제(OS)나 애플리케이션(application)이 동작하는 가상머신(virtual machine)으로 모니터링 대상이 되는 가상머신은 1개 이상이 될 수 있다. 운영체제나 애플리케이션의 동작을 위해서는 자원(resource)이 필요하므로, 이를 위해 제1가상머신(110)은 자원할당부(112)를 포함한다.
제2가상머신(120)은 버퍼 오버플로우시 바이러스 검사를 수행하는 가상 머신이다. 이에 따라 제2가상머신(120)은 바이러스 검출엔진 연결부(Virus Detection Engine Connector)(122) 및 바이러스 검출엔진(Virus Detection Engine)(124a, 124b)을 포함한다. 제2가상머신(120)은 그 안전성을 높이기 위해 시스템 공격자(attacker)가 접근할 수 없도록 네트워크 접근이나 공유 파일 시스템 접근이 되지 않도록 구성할 수 있다.
가상머신 모니터(130)는 전술한 바와 같이, 가상머신로더(VM loader)(131), 커널모듈 인식부(Loadable Kernel Module Recognition Module)(132), 코드 변환부(Code Converter)(133), 예외 핸들러 테이블(Exception Handler Table)(134), 코 드 검사부(Code Inspection Module)(135), 코드 에뮬레이터(Code Emulator)(136), 바이러스 검출엔진(137) 및 코드 저장부(Code Reservoir)(138)를 포함한다.
커널모듈 인식부(132)는 가상머신 내부(110)에 커널모듈이 삽입되거나 실행되는 것을 탐지한다. 코드 변환부(133)는 운영체제의 바이너리 코드(OS binary code) 중 일부를 변경한다. 코드 저장부(132)는 이렇게 변경된 코드 정보를 저장한다. 코드 검사부(135)는 변경된 운영체제 바이너리 코드로 인한 예외(exception) 발생시 버퍼 오버플로우 여부를 판단한다. 바이러스 검출엔진 연결부(122)는 바이러스 감염 여부를 판단하기 위해 바이러스 검출엔진(124a, 124b)에게 검사가 필요한 코드를 전달한다. 코드 에뮬레이터(136)는 가상머신의 원래의 코드를 실행한다.
가상머신로더(131)는 가상머신의 실행을 위해 메모리 공간 할당, 가상머신 관리를 위한 자료구조 등의 초기화를 수행하면서, 코드 변환부(133)를 호출하여 운영체제 바이너리 코드 또는 운영체제 바이너리 코드의 주소값을 코드 변환부(133)로 전달한다. 코드 변환부(133)는 이 코드의 일부를 인터럽트 명령(interrupt instruction)으로 변환한 다음 변환된 운영체제 바이너리 코드 또는 변환 결과를 가상머신로더(131)로 리턴한다.
또한 가상머신 동작중에 동적으로 커널 모듈을 삽입할 때도 커널모듈 인식부(132)가 이를 탐지해 코드 변환부(133)를 통해 로더블 커널 모듈 바이너리 코드의 일부를 인터럽트 명령으로 변환한다. 로더블 커널 모듈의 삽입은 로더블 커널 모듈의 삽입을 위해 사용되는 사용자 레벨의 애플리케이션 가상머신으로 시스템 콜 을 호출할 때, 가상머신 모니터(130)의 커널모듈 인식부(132)가 모니터링하여, 해당 시스템콜과 이 시스템콜에 사용된 파라미터를 조사함으로써 탐지될 수 있다.
코드 저장부(138)는 바이너리 코드중에서 코드 변환부(133)가 변경한 코드의 주소와 원래의 코드 정보를 저장하고 있는 데이터베이스이다. 코드 검사부(135)는 프로그램 카운터(program counter)가 가지려는 새로운 주소가 포함된 메모리 페이지의 속성에 대해 검사하여, 이상이 있는 경우 보다 정밀한 검사를 위해 제2가상머신(120)의 바이러스 검출엔진 연결부(122)에 추가 검사를 요청한다.
코드 검사부(135)는 코드 변환부(133)가 운영체제 바이너리나 애플리케이션 바이너리 코드에 삽입한 인터럽트를 처리하는 핸들러로써, 예외 핸들러 테이블(135)에 직접 등록되거나 또는 인터럽트 핸들러에 의해 호출될 수 있다. 코드 검사부(135)는 바이러스 검출엔진 연결부(122)에게 변경된 명령의 주소로부터 약 1페이지 또는 2페이지 크기의 프로그램 코드를 전달한다.
바이러스 검출엔진 연결부(122)는 가상머신 모니터(130)의 코드 검사부(135)로부터 전달받은 프로그램 코드를 다수의 바이러스 검출엔진(124a, 124b)에 전달하여 검사를 요청한다. 바이러스 검출엔진(124a, 124b)은 다수개가 될 수 있으며, 가상머신 모니터(130)가 바이러스 검출엔진(137)을 포함할 수도 있다. 바이러스 검출엔진 연결부(122)는 검사대상이 되는 제1가상머신(110)과 다른 가상머신인 제2가상머신(120)에서 동작될 수 있다. 바이러스 검출엔진 연결부(122)는 바이러스 검출엔진(124a, 124b)에 전달하여 수행한 검사결과를 수신하여 코드 검사부(135)로 전달한다.
코드 에뮬레이터(136)는 코드 변환부(133)에 의해 변경된 사용자 애플리케이션의 코드를 에뮬레이션하여 가상머신 모니터(130)에서 원래의 코드를 대신 수행한다.
도 2는 본 발명의 다른 실시예에 따른 사용자 애플리케이션에 대한 버퍼 오버플로우 탐지 시스템 구성도이다.
다시 말하면, 버퍼 오버플로우 탐지의 다른 실시예로 사용자 애플리케이션 레벨에서 발생하는 버퍼 오버플로우를 통한 바이러스 코드의 실행을 방지하기 위한 장치의 구성도이다. 도 1의 구성에서 커널모듈 인식부(132) 대신 애플리케이션 인식부(Application Recognition Module)(232)가 위치하여, 사용자 애플리케이션의 시작시 운영체제가 애플리케이션의 실행을 위해 준비하는 행동들을 탐지해 사용자 애플리케이션의 정보를 유지한다.
애플리케이션 인식부(232)는 코드 변환부(133)를 통해 바이너리 코드의 일부를 버퍼 오버플로우 탐지를 위해 변경한다. 애플리케이션 인식부(232)는 가상머신의 보안정도에 따라 신뢰도가 높은 가상머신에 한해 가상머신의 커널 레벨에 존재 할 수 있다.
도 3은 본 발명의 일실시예에 따른 버퍼 오버플로우 탐지를 위한 시스템에서 각 모듈간 데이터 흐름도이다.
전술한 바와 같이 가상머신로더(131)는 운영체제 바이너리 코드 또는 운영체제 바이너리 코드의 주소값을 코드 변환부(133)로 전달한다. 코드 변환부(133)는 이 코드의 일부를 인터럽트 명령(interrupt instruction)으로 변환한 다음 변환된 운영체제 바이너리 코드 또는 변환 결과를 가상머신로더(131)로 리턴한다. 커널모듈 인식부(132)는 가상머신 동작중에 동적으로 커널 모듈을 삽입할 때 이를 탐지해 코드 변환부(133)에 전달하면, 코드 변환부(133)는 이 로더블 커널 모듈 바이너리 코드의 일부를 인터럽트 명령으로 변환한다. 마찬가지로 애플리케이션 인식부(232)도 애플리케이션 바이너리 코드를 코드 변환부(133)로 전달하면, 코드 변환부(133)는 전달받은 바이너리 코드의 일부를 버퍼 오버플로우 탐지를 위해 변경한다. 그리고 이렇게 변경된 명령 및 원 명령은 코드 저장부(138)에 저장된다.
코드 검사부(135)는 코드 저장부(138)에 저장된 변환된 운영체제 바이너리나 애플리케이션 바이너리 코드에 삽입한 인터럽트를 처리하는 핸들러로써, 바이러스 검출엔진 연결부(122)에게 변경된 명령의 주소로부터 약 1페이지 또는 2페이지 크기의 프로그램 코드를 전달하여 바이러스 검출엔진(124a)이 바이러스 검출을 수행하도록 한다. 한편, 코드 에뮬레이터(136)는 변경된 사용자 애플리케이션의 코드를 에뮬레이션한다.
도 4는 버퍼 오버플로우 모니터링을 위한 바이너리 코드 변환방법의 플로우차트이다.
도 4를 참조하면, 운영체제 바이너리 또는 애플리케이션 바이너리 코드 중 버퍼오버플로우 탐지를 위해 코드 변환부(133)가 코드를 변경하는 순서를 알 수 있다. 가상머신로더(131) 또는 애플리케이션 인식부(232)에 의해 코드 변환부(133)가 호출되면 코드 변경이 시작된다.
코드 변환부(133)는 운영체제 바이너리 또는 커널모듈이나, 애플리케이션 바 이너리 또는 애플리케이션이 사용하는 라이브러리 코드에 있는 명령(instruction)을 하나씩 스캔한다(S410).
스캔을 수행하면서, 프로그램 카운터(program counter)를 변경하는 명령(instruction)이나 프로그램 실행 흐름을 변경시키는 분기(branch) 또는 점프 명령(jump instruction) 들을 찾는다(S420). 프로그램 카운터를 변경시키는 명령이나, 분기(branch) 또는 점프명령(jump instruction)을 찾으면 명령어의 오퍼랜드(operand)를 분석하여 실행만(Execute only) 또는 읽고/실행(Read/Execute)으로 설정되지 않은 메모리 영역으로 프로그램 카운터 또는 실행위치가 이동하는가를 판단한다(S430).
만일 분기 또는 점프명령이 실행만(Execute only) 또는 읽고/실행(Read/Execute) 영역이 아닌 곳으로 실행을 옮긴다면, 가상머신 모니터로 콘트롤이 전환될 수 있도록 인터럽트를 발생시키는 명령으로 코드를 변경한다(S440). 또한, 스캔 중인 명령이 프로그램 카운터의 값에 대한 연산을 하는 명령인 경우에도 인터럽트를 발생시키는 명령으로 코드를 변경한다. 한편, 변경되기 이전의 코드는 코드 저장부(138)에 저장된다(S450).
발생된 인터럽트 명령은 소프트웨어 인터럽트와 같이 애플리케이션 레벨에서 진행하던 코드가 가상머신 모니터 레벨로 진입할 수 있게 하는 명령이다. 소프트웨어 인터럽트 발생시의 파라미터 값은 기존 가상머신 모니터, 운영체제가 사용하지 않는 영역의 값을 사용한다.
인터럽트에 의해 서브루틴을 실행한 후, 서브루틴에서 서브루틴을 호출한 루 틴으로 복귀하기 위해서는, 스택에 저장해 놓았던 리턴주소(return address)를 꺼내서 프로그램 카운터에 대입시키는 명령이 사용된다.
본 실시예에서는 도 4에 도시한 바와 같이 프로그램 카운터를 변경시키는 모든 명령은 코드 검사부(135)가 호출될 수 있는 명령으로 변경시켜 놓았으므로, 서브루틴으로부터 복귀할 때는 언제나 코드 검사부(135)에 의해 스택 또는 버퍼 오버플로우 검사가 이루어진다. 또한 전역 변수 또는 로컬 변수로 선언된 함수 포인터(function pointer)가 버퍼 오버플로우에 의해 변경되었을 때, 변경된 함수를 실행하기 위해서는 프로그램 카운터를 변경시키는 명령을 실행해야 한다. 이 경우에도 마찬가지로 코드 검사를 수행하기 위한 인터럽트 명령으로 코드가 변경되었으므로 버퍼 오버플로우에 대한 검사를 수행 할 수 있다
도 5는 본 발명의 일실시예에 따른 버퍼 오버플로우를 검사하는 방법의 플로우차트이다.
버퍼오버플로우를 검사하기 위해 삽입한 코드에 의해 인터럽트가 발생하면, 인터럽트 핸들러 루틴에 의해 코드 검사부(135)가 호출되어 도 5에 도시된 바와 같이 버퍼 오버플로우 여부를 검사한다.
인터럽트 핸들러 루틴에 의해 인터럽트가 발생되면, 코드 검사부(135)는 코드 저장부(138)로부터 인터럽트가 발생한 주소에 있던 원래의 명령을 가져와, 프로그램 카운터가 새로 가지려고 하는 주소값을 분석한다(S510).
프로그램 카운터가 가지려는 주소가 포함된 메모리 페이지가, 실행만(Execute Only) 또는 읽고/실행(Read/Execute) 페이지인지의 여부를 판단한 다(S520). 프로그램 카운터가 가지려는 주소가 포함된 메모리 페이지가, 실행만(Execute Only) 또는 읽고/실행(Read/Execute) 페이지라고 하면, 해당 주소의 내용은 오버라이트(overwrite) 되지 않았을 것이므로 버퍼 오버플로우가 발생하지 않았다고 판단하여, 인터럽트 명령으로 대치되었던 원래의 명령을 실행하기 위해 에뮬레이션을 수행한다(S530).
만일 해당 주소의 내용이 있는 메모리 페이지가 기록가능 페이지(Writable page) 라고 하면, 점프주소(jumping address)에 있는 명령이 오버라이트(overwrite)가 되었을 수도 있으므로 버퍼 오버플로우의 여부를 판단한다.
이를 위해 이전에도 해당 코드가 실행되어 코드 검사부(135)에 의해 검사가 되었는지를 알아보기 위해서, 코드 검사부(135)가 가지고 있는 캐쉬(cache)를 검색한다(S540). 캐쉬 검색시 입력은 프로그램 카운터가 가지려는 점프주소(Jumping address)와 점프주소에 있는 내용이고, 출력은 이전 버퍼 오버플로우의 검사 결과이다.
만일 캐쉬에 결과가 없다면, 정밀한 검사를 위해 점프주소(Jumping address)를 기점으로 약 1~2 메모리 페이지의 프로그램 코드를 가상머신 모니터(130)의 바이러스 검출엔진(137)에 전달해 검사를 요청한다(S550). 만일 가상머신 모니터(130)가 바이러스 검출엔진(137)을 포함하고 있지 않으면, 제2가상머신(120)의 바이러스 검출엔진 연결부(122)로 전달해 해당 페이지에 바이러스 코드가 있는지 검사하도록 요청한다. 검사 대상이 되는 프로그램 코드의 크기는 사용자에 의해 설정될 수 있다. 바이러스 검출엔진 연결부(122)는 각각의 바이러스 검출엔 진(124a, 124b)에게 프로그램 코드에 바이러스가 있는지의 여부를 검사할 것을 요청하고, 검사된 결과를 취합해 코드 검사부(135)로 전달한다.
코드 검사부(135)는 이 취합결과를 바탕으로 버퍼 오버플로우가 발견되는지의 여부를 판단하여(S560), 버퍼 오버플로우가 발견되지 않았다고 판단하면, 인터럽트 명령으로 대치되었던 원래의 명령을 실행하기 위해 코드 에뮬레이터(136)를 호출한다(S530). 마지막으로 점프 주소(Jumping address)에 대한 검사 결과를 캐쉬에 저장하고(S570), 인터럽트 루틴을 종료하고 인터럽트가 발생한 다음 명령을 실행한다(S580).
그리고, 버퍼 오버플로우가 발견되면 해당 코드에 대해서는 코드 에뮬레이터(136)가 호출되지 않아 원래 명령의 실행 없이 인터럽트 명령 다음을 실행하므로, 바이러스 코드가 있는 영역으로 진입하지 않는다.
한편, 본 발명의 일실시예에 따른 방법은 컴퓨터로 읽을 수 있는 기록 매체에 컴퓨터가 읽을 수 있는 코드로 구현하는 것이 가능하다. 컴퓨터가 읽을 수 있는 기록 매체는 컴퓨터 시스템에 의하여 읽혀질 수 있는 데이터가 저장되는 모든 종류의 기록 장치를 포함한다.
컴퓨터가 읽을 수 있는 기록 매체의 예로는 ROM, RAM, CD-ROM, 자기 테이프, 플로피디스크, 광 데이터 저장장치 등이 있으며, 또한 캐리어 웨이브(예를 들어 인터넷을 통한 전송)의 형태로 구현하는 것을 포함한다. 또한, 컴퓨터가 읽을 수 있는 기록 매체는 네트워크로 연결된 컴퓨터 시스템에 분산되어, 분산 방식으로 컴퓨터가 읽을 수 있는 코드가 저장되고 실행될 수 있다. 그리고 본 발명을 구현하기 위한 기능적인(functional) 프로그램, 코드 및 코드 세그먼트들은 본 발명이 속하는 기술 분야의 프로그래머들에 의하여 용이하게 추론될 수 있다.
이제까지 본 발명의 바람직한 실시 예들을 중심으로 살펴보았다. 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자는 본 발명이 본 발명의 본질적인 특성에서 벗어나지 않는 범위에서 변형된 형태로 구현될 수 있음을 이해할 수 있을 것이다. 그러므로 개시된 실시예들은 한정적인 관점이 아니라 설명적인 관점에서 고려되어야 한다. 본 발명의 범위는 전술한 설명이 아니라 특허청구범위에 나타나 있으며, 그와 동등한 범위 내에 있는 모든 차이점은 본 발명에 포함된 것으로 해석되어야 할 것이다.
도 1은 본 발명의 일실시예에 따른 가상머신 커널에 대한 버퍼 오버플로우 탐지를 위한 시스템 구성도,
도 2는 본 발명의 다른 실시예에 따른 사용자 애플리케이션에 대한 버퍼 오버플로우 탐지 시스템 구성도,
도 3은 본 발명의 일실시예에 따른 버퍼 오버플로우 탐지를 위한 시스템에서 각 모듈간 데이터 흐름도,
도 4는 버퍼 오버플로우 모니터링을 위한 바이너리 코드 변환방법의 플로우차트,
도 5는 본 발명의 일실시예에 따른 버퍼 오버플로우를 검사하는 방법의 플로우차트이다.
<도면의 주요부분에 대한 설명>
110 : 제1가상머신 120 : 제2가상머신
130 : 가상머신 모니터 112 : 자원할당부
122 : 바이러스검출엔진 연결부 124a: 바이러스 검출엔진
131 : 가상머신로더 132 : 커널모듈 인식부
133 : 코드 변환부 134 : 예외핸들러 테이블
135 : 코드 검사부 136 : 코드 에뮬레이터
137 : 바이러스 검출엔진

Claims (10)

  1. 커널모듈 또는 애플리케이션 프로그램의 실행이 탐지되면, 상기 커널모듈 또는 애플리케이션 프로그램 코드 중 일부를 인터럽트 명령으로 변경하는 코드 변환부;
    상기 인터럽트 명령의 실행에 의해 예외(exception)가 발생하면, 버퍼 오버플로우 여부를 판단하는 코드 검사부; 및
    상기 판단결과 버퍼 오버플로우가 발생하면, 상기 버퍼 오버플로우에 의해 이동한 프로그램 실행영역에 대해 바이러스 검사를 수행하는 바이러스 검출엔진을 포함하는 바이러스 코드 실행 방지장치.
  2. 제1항에 있어서, 상기 바이러스 검출엔진은
    상기 커널모듈 또는 애플리케이션 프로그램이 실행되는 적어도 하나의 가상머신에 구비되는 바이러스 코드 실행 방지장치.
  3. 제2항에 있어서,
    상기 바이러스 검출엔진인 복수개인 경우, 상기 복수개의 바이러스 검출엔진을 연결하고, 상기 커널모듈 또는 애플리케이션 프로그램 코드를 전달하는 바이러스 검출엔진 연결부를 더 포함하는 바이러스 코드 실행 방지장치.
  4. 제1항에 있어서,
    상기 코드 변환부에 의해 변경된 코드와, 원 코드를 저장하는 코드 저장부를 더 포함하는 바이러스 코드 실행 방지장치.
  5. 제1항에 있어서,
    상기 바이러스 검출엔진에 의해 바이러스가 검출되면, 상기 커널모듈 또는 애플리케이션 프로그램 코드를 실행하는 코드 에뮬레이터를 더 포함하는 바이러스 코드 실행 방지장치.
  6. 커널모듈 또는 애플리케이션 프로그램의 실행이 탐지되면, 상기 커널모듈 또는 애플리케이션 프로그램 코드 중 일부를 인터럽트 명령으로 변경하는 단계;
    상기 인터럽트 명령의 실행에 의해 예외(exception)가 발생하면, 버퍼 오버플로우 여부를 판단하는 단계; 및
    상기 판단결과 버퍼 오버플로우가 발생하면, 상기 버퍼 오버플로우에 의해 이동한 프로그램 실행영역에 대해 바이러스 검사를 수행하는 단계를 포함하는 바이러스 코드 실행 방지방법.
  7. 제6항에 있어서, 상기 코드 인터럽트 명령으로 변경하는 단계는
    상기 커널모듈 또는 애플리케이션 프로그램 코드에 포함되어 있는 명령을 스캔하는 단계;
    상기 명령이 프로그램 카운터를 변경하는 명령이거나 프로그램 실행 흐름을 변경시키는 분기 또는 점프 명령인지의 여부를 판단하는 단계;
    상기 판단결과에 따라, 상기 실행위치가 변경 또는 점프된 영역이 실행만(Execute only) 또는 읽고/실행(Read/Execute)으로 설정되지 않은 메모리 영역으인지의 여부를 판단하는 단계; 및
    상기 판단결과 상기 실행위치가 변경 또는 점프된 영역이, 실행만(Execute only) 또는 읽고/실행(Read/Execute) 영역이 아닌 영역이면, 인터럽트를 발생시키는 명령으로 코드를 변경하는 단계를 포함하는 바이러스 코드 실행 방지방법.
  8. 제6항에 있어서, 상기 버퍼 오버플로우 여부를 판단하는 단계는
    인터럽트가 발생한 주소에 있던 원래의 명령을 가져와, 프로그램 카운터가 새로 가지려고 하는 주소값을 분석하는 단계;
    상기 프로그램 카운터가 가지려는 주소가 포함된 메모리 영역이, 실행만(Execute Only) 또는 읽고/실행(Read/Execute) 영역인지의 여부를 판단하는 단계;
    상기 판단결과, 프로그램 카운터가 가지려는 주소가 포함된 메모리 영역이, 실행만(Execute Only) 또는 읽고/실행(Read/Execute) 영역이 아니면 해당 페이지의 버퍼 오버플로우의 여부를 판단하는 단계;
    캐쉬를 검색하여, 이전에도 해당 코드가 실행되어 검사가 되었는지의 여부를 확인하는 단계; 및
    상기 캐쉬에 이전 검사 결과가 없으면, 상기 프로그램 카운터가 가지려는 주소의 메모리 영역의 바이러스 검사를 요청하는 단계를 포함하는 바이러스 코드 실행 방지방법.
  9. 제8항에 있어서,
    상기 버퍼 오버플로우 여부 판단결과, 버퍼 오버플로우가 발생하지 않으면, 인터럽트 명령으로 대체되었던 원래의 명령을 실행하기 위해 코드 에뮬레이터를 호출하는 단계를 더 포함하는 바이러스 코드 실행 방지방법.
  10. 제8항에 있어서,
    상기 프로그램 카운터의 이동영역에 대한 검사 결과를 캐쉬에 저장하며, 인터럽트 루틴을 종료하고 인터럽트가 발생한 다음 명령을 실행하는 단계를 더 포함하는 바이러스 코드 실행 방지방법.
KR20090029986A 2009-04-07 2009-04-07 버퍼 오버플로우 관리를 통한 바이러스 코드 실행방지장치 및 그 방법 KR101493076B1 (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR20090029986A KR101493076B1 (ko) 2009-04-07 2009-04-07 버퍼 오버플로우 관리를 통한 바이러스 코드 실행방지장치 및 그 방법
US12/751,886 US8516589B2 (en) 2009-04-07 2010-03-31 Apparatus and method for preventing virus code execution

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR20090029986A KR101493076B1 (ko) 2009-04-07 2009-04-07 버퍼 오버플로우 관리를 통한 바이러스 코드 실행방지장치 및 그 방법

Publications (2)

Publication Number Publication Date
KR20100111518A true KR20100111518A (ko) 2010-10-15
KR101493076B1 KR101493076B1 (ko) 2015-02-12

Family

ID=42827258

Family Applications (1)

Application Number Title Priority Date Filing Date
KR20090029986A KR101493076B1 (ko) 2009-04-07 2009-04-07 버퍼 오버플로우 관리를 통한 바이러스 코드 실행방지장치 및 그 방법

Country Status (2)

Country Link
US (1) US8516589B2 (ko)
KR (1) KR101493076B1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101432712B1 (ko) * 2013-03-05 2014-08-25 충북대학교 산학협력단 소프트웨어 안전성 향상을 위한 코드 리팩토링 방법

Families Citing this family (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
RU2444056C1 (ru) * 2010-11-01 2012-02-27 Закрытое акционерное общество "Лаборатория Касперского" Система и способ ускорения решения проблем за счет накопления статистической информации
EP2466506A1 (fr) * 2010-12-17 2012-06-20 Gemalto SA Procédé dynamique de contrôle de l'intégrité de l'exécution d'un code exécutable
US8707433B1 (en) * 2011-05-03 2014-04-22 Symantec Corporation Fake exception handler detection
CN102254120B (zh) * 2011-08-09 2014-05-21 华为数字技术(成都)有限公司 恶意代码的检测方法、系统及相关装置
US9792430B2 (en) 2011-11-03 2017-10-17 Cyphort Inc. Systems and methods for virtualized malware detection
US9686293B2 (en) 2011-11-03 2017-06-20 Cyphort Inc. Systems and methods for malware detection and mitigation
US9519781B2 (en) * 2011-11-03 2016-12-13 Cyphort Inc. Systems and methods for virtualization and emulation assisted malware detection
US9372991B2 (en) * 2012-03-06 2016-06-21 International Business Machines Corporation Detecting malicious computer code in an executing program module
CN104335220B (zh) * 2012-03-30 2018-04-20 爱迪德技术有限公司 用于防止和检测安全威胁的方法和系统
US10607007B2 (en) 2012-07-03 2020-03-31 Hewlett-Packard Development Company, L.P. Micro-virtual machine forensics and detection
US9223962B1 (en) * 2012-07-03 2015-12-29 Bromium, Inc. Micro-virtual machine forensics and detection
US9922192B1 (en) 2012-12-07 2018-03-20 Bromium, Inc. Micro-virtual machine forensics and detection
RU2522019C1 (ru) * 2012-12-25 2014-07-10 Закрытое акционерное общество "Лаборатория Касперского" Система и способ обнаружения угроз в коде, исполняемом виртуальной машиной
US10430614B2 (en) 2014-01-31 2019-10-01 Bromium, Inc. Automatic initiation of execution analysis
US10225280B2 (en) 2014-02-24 2019-03-05 Cyphort Inc. System and method for verifying and detecting malware
US10326778B2 (en) 2014-02-24 2019-06-18 Cyphort Inc. System and method for detecting lateral movement and data exfiltration
US11405410B2 (en) 2014-02-24 2022-08-02 Cyphort Inc. System and method for detecting lateral movement and data exfiltration
US10095866B2 (en) 2014-02-24 2018-10-09 Cyphort Inc. System and method for threat risk scoring of security threats
RU2568282C2 (ru) * 2014-04-18 2015-11-20 Закрытое акционерное общество "Лаборатория Касперского" Система и способ обеспечения отказоустойчивости антивирусной защиты, реализуемой в виртуальной среде
KR101649909B1 (ko) * 2014-09-25 2016-08-22 한국전자통신연구원 가상 머신 취약점 점검과 복구 방법 및 장치
US10083296B2 (en) * 2015-06-27 2018-09-25 Mcafee, Llc Detection of malicious thread suspension
RU2622627C2 (ru) * 2015-09-30 2017-06-16 Акционерное общество "Лаборатория Касперского" Способ обнаружения вредоносных исполняемых файлов, содержащих интерпретатор, посредством комбинирования эмуляторов
EP3394784B1 (en) 2015-12-24 2020-10-07 British Telecommunications public limited company Malicious software identification
EP3394785B1 (en) * 2015-12-24 2019-10-30 British Telecommunications public limited company Detecting malicious software
US10733296B2 (en) 2015-12-24 2020-08-04 British Telecommunications Public Limited Company Software security
US11562076B2 (en) 2016-08-16 2023-01-24 British Telecommunications Public Limited Company Reconfigured virtual machine to mitigate attack
EP3500970B8 (en) 2016-08-16 2021-09-22 British Telecommunications Public Limited Company Mitigating security attacks in virtualised computing environments
CN110874473A (zh) * 2018-09-04 2020-03-10 成都华为技术有限公司 病毒检测方法、装置及系统、云服务系统、存储介质

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3634379B2 (ja) 1996-01-24 2005-03-30 サン・マイクロシステムズ・インコーポレイテッド スタックキャッシングのための方法及び装置
US7392541B2 (en) 2001-05-17 2008-06-24 Vir2Us, Inc. Computer system architecture and method providing operating-system independent virus-, hacker-, and cyber-terror-immune processing environments
WO2003036467A1 (en) * 2001-10-25 2003-05-01 Koninklijke Philips Electronics N.V. Low overhead exception checking
US20030101381A1 (en) * 2001-11-29 2003-05-29 Nikolay Mateev System and method for virus checking software
US7340777B1 (en) 2003-03-31 2008-03-04 Symantec Corporation In memory heuristic system and method for detecting viruses
US7155741B2 (en) 2002-05-06 2006-12-26 Symantec Corporation Alteration of module load locations
US7228563B2 (en) 2003-02-06 2007-06-05 Symantec Corporation Shell code blocking system and method
KR100506889B1 (ko) 2003-03-31 2005-08-08 엘지엔시스(주) 이중버퍼 구조를 가지는 네트웍 침입탐지 시스템과 그동작방법
US7287281B1 (en) 2003-06-17 2007-10-23 Symantec Corporation Send blocking system and method
US7984304B1 (en) * 2004-03-02 2011-07-19 Vmware, Inc. Dynamic verification of validity of executable code
US7373667B1 (en) 2004-05-14 2008-05-13 Symantec Corporation Protecting a computer coupled to a network from malicious code infections
US7480761B2 (en) 2005-01-10 2009-01-20 Microsoft Corporation System and methods for an overlay disk and cache using portable flash memory
US8074115B2 (en) * 2005-10-25 2011-12-06 The Trustees Of Columbia University In The City Of New York Methods, media and systems for detecting anomalous program executions
US20070226795A1 (en) * 2006-02-09 2007-09-27 Texas Instruments Incorporated Virtual cores and hardware-supported hypervisor integrated circuits, systems, methods and processes of manufacture
US8479174B2 (en) * 2006-04-05 2013-07-02 Prevx Limited Method, computer program and computer for analyzing an executable computer file
US20080148399A1 (en) 2006-10-18 2008-06-19 Microsoft Corporation Protection against stack buffer overrun exploitation
US20080222729A1 (en) 2007-03-05 2008-09-11 Songqing Chen Containment of Unknown and Polymorphic Fast Spreading Worms
US8276201B2 (en) 2007-03-22 2012-09-25 International Business Machines Corporation Integrity protection in data processing systems
US20080250499A1 (en) 2007-03-30 2008-10-09 Motorola, Inc. Method and Apparatus for Reducing Buffer Overflow Exploits by Computer Viruses

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101432712B1 (ko) * 2013-03-05 2014-08-25 충북대학교 산학협력단 소프트웨어 안전성 향상을 위한 코드 리팩토링 방법

Also Published As

Publication number Publication date
US8516589B2 (en) 2013-08-20
US20100257608A1 (en) 2010-10-07
KR101493076B1 (ko) 2015-02-12

Similar Documents

Publication Publication Date Title
KR101493076B1 (ko) 버퍼 오버플로우 관리를 통한 바이러스 코드 실행방지장치 및 그 방법
US10642978B2 (en) Information security techniques including detection, interdiction and/or mitigation of memory injection attacks
US8949797B2 (en) Optimizing performance of integrity monitoring
US8850581B2 (en) Identification of malware detection signature candidate code
US20120079594A1 (en) Malware auto-analysis system and method using kernel callback mechanism
US8763128B2 (en) Apparatus and method for detecting malicious files
US20090320129A1 (en) Secure control flows by monitoring control transfers
US10102373B2 (en) Method and apparatus for capturing operation in a container-based virtualization system
US9424427B1 (en) Anti-rootkit systems and methods
US9158562B2 (en) Method and apparatus for supporting virtualization of loadable module
US11893106B2 (en) Apparatus and method for generating system call whitelist of application container and method for controlling system call of application container
KR20000057010A (ko) 바이트코드 실행 프로세스, 방법 및 데이터 처리 시스템과그를 구현한 컴퓨터 프로그램 제품
KR20080099247A (ko) 데이터 구조가 저장되어 있는 적어도 하나의 컴퓨터판독가능 매체 및 시스템
Gu et al. Face-change: Application-driven dynamic kernel view switching in a virtual machine
CN101183414A (zh) 一种程序检测的方法、装置及程序分析的方法
JPWO2009102006A1 (ja) アクセス制御装置、その方法及び情報記録媒体
EP2988242B1 (en) Information processing device, and information processing method
JPWO2019013033A1 (ja) コールスタック取得装置、コールスタック取得方法、および、コールスタック取得プログラム
CN113176926B (zh) 一种基于虚拟机自省技术的api动态监控方法及系统
CN112231198A (zh) 一种恶意进程调试方法、装置、电子设备及介质
US11361077B2 (en) Kernel-based proactive engine for malware detection
Moffie et al. Hunting trojan horses
Tang et al. Virtav: An agentless antivirus system based on in-memory signature scanning for virtual machine
Tian et al. KEcruiser: A novel control flow protection for kernel extensions
CN113127148B (zh) 一种虚拟化环境主动动态度量方法和系统

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
GRNT Written decision to grant
LAPS Lapse due to unpaid annual fee