KR101493076B1 - 버퍼 오버플로우 관리를 통한 바이러스 코드 실행방지장치 및 그 방법 - Google Patents
버퍼 오버플로우 관리를 통한 바이러스 코드 실행방지장치 및 그 방법 Download PDFInfo
- Publication number
- KR101493076B1 KR101493076B1 KR20090029986A KR20090029986A KR101493076B1 KR 101493076 B1 KR101493076 B1 KR 101493076B1 KR 20090029986 A KR20090029986 A KR 20090029986A KR 20090029986 A KR20090029986 A KR 20090029986A KR 101493076 B1 KR101493076 B1 KR 101493076B1
- Authority
- KR
- South Korea
- Prior art keywords
- code
- buffer overflow
- execution
- virus
- interrupt
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/566—Dynamic detection, i.e. detection performed at run-time, e.g. emulation, suspicious activities
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F5/00—Methods or arrangements for data conversion without changing the order or content of the data handled
- G06F5/06—Methods 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/10—Methods 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/12—Means for monitoring the fill level; Means for resolving contention, i.e. conflicts between simultaneous enqueue and dequeue operations
- G06F5/14—Means 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/48—Program 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
버퍼 오버플로우 관리를 통한 바이러스 코드 실행방지장치 및 그 방법이 개시된다. 본 발명의 일 양상에 따른 바이러스 코드 실행 방지장치는 커널모듈 또는 애플리케이션 프로그램의 실행 중 버퍼 오버플로우가 발생하면, 버퍼 오버플로우에 의해 이동한 프로그램 실행영역에 대해 바이러스 검사를 수행한다. 이에 의해 운영체제나 애플리케이션 코드의 변경이나 재 컴파일을 하지 않고도 전역변수나 버퍼 또는 스택에 대한 오버플로우 공격의 탐지율을 높일 수 있을 뿐만 아니라, 하드웨어의 지원없이 소프트웨어적으로 버퍼 오버플로우를 탐지할 수 있다.
버퍼 오버플로우, 가상머신, 바이러스
Description
본 발명의 일양상에 따른 기술분야는 프로그램 보안에 관한 것으로, 보다 상세하게는 버퍼 오버플로우 관리를 통한 바이러스 코드 실행방지장치 및 그 방법에 관한 것이다.
컴퓨터 프로그래밍시 데이터 어레이(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)
- 커널모듈 또는 애플리케이션 프로그램의 실행이 탐지되면, 상기 커널모듈 또는 애플리케이션 프로그램 코드 중 일부를 인터럽트 명령으로 변경하는 코드 변환부;상기 인터럽트 명령의 실행에 의해 예외(exception)가 발생하면, 버퍼 오버플로우 여부를 판단하는 코드 검사부; 및상기 판단결과 버퍼 오버플로우가 발생하면, 상기 버퍼 오버플로우에 의해 이동한 프로그램 실행영역에 대해 바이러스 검사를 수행하는 바이러스 검출엔진을 포함하는 바이러스 코드 실행 방지장치.
- 제1항에 있어서, 상기 바이러스 검출엔진은상기 커널모듈 또는 애플리케이션 프로그램이 실행되는 적어도 하나의 가상머신에 구비되는 바이러스 코드 실행 방지장치.
- 제2항에 있어서,상기 바이러스 검출엔진인 복수개인 경우, 상기 복수개의 바이러스 검출엔진을 연결하고, 상기 커널모듈 또는 애플리케이션 프로그램 코드를 전달하는 바이러스 검출엔진 연결부를 더 포함하는 바이러스 코드 실행 방지장치.
- 제1항에 있어서,상기 코드 변환부에 의해 변경된 코드와, 원 코드를 저장하는 코드 저장부를 더 포함하는 바이러스 코드 실행 방지장치.
- 제1항에 있어서,상기 바이러스 검출엔진에 의해 바이러스가 검출되지 않으면, 상기 커널모듈 또는 애플리케이션 프로그램 코드를 실행하는 코드 에뮬레이터를 더 포함하는 바이러스 코드 실행 방지장치.
- 코드 변환부가 커널모듈 또는 애플리케이션 프로그램의 실행이 탐지되면, 상기 커널모듈 또는 애플리케이션 프로그램 코드 중 일부를 인터럽트 명령으로 변경하는 단계;코드 검사부가 상기 인터럽트 명령의 실행에 의해 예외(exception)가 발생하면, 버퍼 오버플로우 여부를 판단하는 단계; 및바이러스 검출엔진이 상기 판단결과 버퍼 오버플로우가 발생하면, 상기 버퍼 오버플로우에 의해 이동한 프로그램 실행영역에 대해 바이러스 검사를 수행하는 단계를 포함하는 바이러스 코드 실행 방지방법.
- 제6항에 있어서, 상기 코드를 인터럽트 명령으로 변경하는 단계는,상기 커널모듈 또는 애플리케이션 프로그램 코드에 포함되어 있는 명령을 스캔하는 단계;상기 명령이 프로그램 카운터를 변경하는 명령이거나 프로그램 실행 흐름을 변경시키는 분기 또는 점프 명령인지의 여부를 판단하는 단계;상기 판단결과에 따라, 상기 실행위치가 변경 또는 점프된 영역이 실행만(Execute only) 또는 읽고/실행(Read/Execute)으로 설정되지 않은 메모리 영역인지의 여부를 판단하는 단계; 및상기 판단결과 상기 실행위치가 변경 또는 점프된 영역이, 실행만(Execute only) 또는 읽고/실행(Read/Execute)영역이 아닌 영역이면, 인터럽트를 발생시키는 명령으로 코드를 변경하는 단계를 포함하는 바이러스 코드 실행 방지방법.
- 제6항에 있어서, 상기 버퍼 오버플로우 여부를 판단하는 단계는인터럽트가 발생한 주소에 있던 원래의 명령을 가져와, 프로그램 카운터가 새로 가지려고 하는 주소값을 분석하는 단계;상기 프로그램 카운터가 가지려는 주소가 포함된 메모리 영역이, 실행만(Execute Only) 또는 읽고/실행(Read/Execute) 영역인지의 여부를 판단하는 단계;상기 판단결과, 프로그램 카운터가 가지려는 주소가 포함된 메모리 영역이, 실행만(Execute Only) 또는 읽고/실행(Read/Execute) 영역이 아니면 해당 페이지의 버퍼 오버플로우의 여부를 판단하는 단계;캐쉬를 검색하여, 이전에도 해당 코드가 실행되어 검사가 되었는지의 여부를 확인하는 단계; 및상기 캐쉬에 이전 검사 결과가 없으면, 상기 프로그램 카운터가 가지려는 주소의 메모리 영역의 바이러스 검사를 요청하는 단계를 포함하는 바이러스 코드 실행 방지방법.
- 제8항에 있어서,상기 버퍼 오버플로우 여부 판단결과, 버퍼 오버플로우가 발생하지 않으면, 인터럽트 명령으로 대체되었던 원래의 명령을 실행하기 위해 코드 에뮬레이터를 호출하는 단계를 더 포함하는 바이러스 코드 실행 방지방법.
- 제8항에 있어서,상기 프로그램 카운터의 이동영역에 대한 검사 결과를 캐쉬에 저장하며, 인터럽트 루틴을 종료하고 인터럽트가 발생한 다음 명령을 실행하는 단계를 더 포함하는 바이러스 코드 실행 방지방법.
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 KR20100111518A (ko) | 2010-10-15 |
KR101493076B1 true 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) |
Families Citing this family (29)
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 | 华为数字技术(成都)有限公司 | 恶意代码的检测方法、系统及相关装置 |
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 |
US9792430B2 (en) | 2011-11-03 | 2017-10-17 | Cyphort Inc. | Systems and methods for virtualized malware detection |
US9372991B2 (en) * | 2012-03-06 | 2016-06-21 | International Business Machines Corporation | Detecting malicious computer code in an executing program module |
EP2831787B1 (en) * | 2012-03-30 | 2020-07-08 | Irdeto B.V. | Method and system for preventing and detecting security threats |
US10607007B2 (en) | 2012-07-03 | 2020-03-31 | Hewlett-Packard Development Company, L.P. | Micro-virtual machine forensics and detection |
US9092625B1 (en) | 2012-07-03 | 2015-07-28 | 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 | Закрытое акционерное общество "Лаборатория Касперского" | Система и способ обнаружения угроз в коде, исполняемом виртуальной машиной |
KR101432712B1 (ko) * | 2013-03-05 | 2014-08-25 | 충북대학교 산학협력단 | 소프트웨어 안전성 향상을 위한 코드 리팩토링 방법 |
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 |
US11405410B2 (en) | 2014-02-24 | 2022-08-02 | Cyphort Inc. | System and method for detecting lateral movement and data exfiltration |
US10326778B2 (en) | 2014-02-24 | 2019-06-18 | 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 | Акционерное общество "Лаборатория Касперского" | Способ обнаружения вредоносных исполняемых файлов, содержащих интерпретатор, посредством комбинирования эмуляторов |
WO2017108575A1 (en) | 2015-12-24 | 2017-06-29 | British Telecommunications Public Limited Company | Malicious software identification |
US10733296B2 (en) | 2015-12-24 | 2020-08-04 | British Telecommunications Public Limited Company | Software security |
WO2017109128A1 (en) * | 2015-12-24 | 2017-06-29 | British Telecommunications Public Limited Company | Detecting malicious software |
GB2554980B (en) | 2016-08-16 | 2019-02-13 | British Telecomm | Mitigating security attacks in virtualised computing environments |
WO2018033350A1 (en) | 2016-08-16 | 2018-02-22 | British Telecommunications Public Limited Company | Reconfigured virtual machine to mitigate attack |
CN110874473A (zh) * | 2018-09-04 | 2020-03-10 | 成都华为技术有限公司 | 病毒检测方法、装置及系统、云服务系统、存储介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20040058228A (ko) * | 2001-10-25 | 2004-07-03 | 코닌클리케 필립스 일렉트로닉스 엔.브이. | 낮은 오버헤드의 예외 체킹 |
Family Cites Families (18)
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 |
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 |
EP1952240A2 (en) * | 2005-10-25 | 2008-08-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 |
-
2009
- 2009-04-07 KR KR20090029986A patent/KR101493076B1/ko not_active IP Right Cessation
-
2010
- 2010-03-31 US US12/751,886 patent/US8516589B2/en not_active Expired - Fee Related
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20040058228A (ko) * | 2001-10-25 | 2004-07-03 | 코닌클리케 필립스 일렉트로닉스 엔.브이. | 낮은 오버헤드의 예외 체킹 |
Also Published As
Publication number | Publication date |
---|---|
US8516589B2 (en) | 2013-08-20 |
KR20100111518A (ko) | 2010-10-15 |
US20100257608A1 (en) | 2010-10-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101493076B1 (ko) | 버퍼 오버플로우 관리를 통한 바이러스 코드 실행방지장치 및 그 방법 | |
US8117660B2 (en) | Secure control flows by monitoring control transfers | |
KR101174751B1 (ko) | 커널 콜백 매커니즘을 이용한 악성코드 자동 분석 방법 | |
Baliga et al. | Detecting kernel-level rootkits using data structure invariants | |
US8479174B2 (en) | Method, computer program and computer for analyzing an executable computer file | |
US11893106B2 (en) | Apparatus and method for generating system call whitelist of application container and method for controlling system call of application container | |
Pan et al. | Digtool: A {virtualization-based} framework for detecting kernel vulnerabilities | |
US10102373B2 (en) | Method and apparatus for capturing operation in a container-based virtualization system | |
US20110258610A1 (en) | Optimizing performance of integrity monitoring | |
CN110765464B (zh) | 漏洞检测方法、装置、设备及计算机存储介质 | |
WO2007076624A1 (en) | Virtual machine to detect malicious code | |
US9158562B2 (en) | Method and apparatus for supporting virtualization of loadable module | |
CN101183414A (zh) | 一种程序检测的方法、装置及程序分析的方法 | |
KR20080099247A (ko) | 데이터 구조가 저장되어 있는 적어도 하나의 컴퓨터판독가능 매체 및 시스템 | |
CN104346148A (zh) | 获取程序性能消耗信息的方法、装置及系统 | |
JPWO2009102006A1 (ja) | アクセス制御装置、その方法及び情報記録媒体 | |
Lanzi et al. | A smart fuzzer for x86 executables | |
CN113176926B (zh) | 一种基于虚拟机自省技术的api动态监控方法及系统 | |
CN110941534A (zh) | 检测web应用第三方代码调用的方法及系统 | |
CN112231198A (zh) | 一种恶意进程调试方法、装置、电子设备及介质 | |
CN107688481B (zh) | 一种支持多节点的kvm虚拟机隐藏进程检测系统 | |
Lee | JNI program analysis with automatically extracted C semantic summary | |
CN113064601B (zh) | 动态加载文件的确定方法、装置、终端及存储介质 | |
CN115220859A (zh) | 数据输入方式的监测方法、装置、电子设备和存储介质 | |
Tang et al. | Virtav: An agentless antivirus system based on in-memory signature scanning for virtual machine |
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 |