KR100968267B1 - 컴파일러 구분에 의한 악성코드 진단장치 및 방법 - Google Patents

컴파일러 구분에 의한 악성코드 진단장치 및 방법 Download PDF

Info

Publication number
KR100968267B1
KR100968267B1 KR1020080055619A KR20080055619A KR100968267B1 KR 100968267 B1 KR100968267 B1 KR 100968267B1 KR 1020080055619 A KR1020080055619 A KR 1020080055619A KR 20080055619 A KR20080055619 A KR 20080055619A KR 100968267 B1 KR100968267 B1 KR 100968267B1
Authority
KR
South Korea
Prior art keywords
compiler
file
value
code
malware
Prior art date
Application number
KR1020080055619A
Other languages
English (en)
Other versions
KR20090129609A (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 KR1020080055619A priority Critical patent/KR100968267B1/ko
Publication of KR20090129609A publication Critical patent/KR20090129609A/ko
Application granted granted Critical
Publication of KR100968267B1 publication Critical patent/KR100968267B1/ko

Links

Images

Classifications

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

Abstract

본 발명은 PE 컴파일러 구분에 의한 악성코드 진단장치 및 방법에 관한 것이다. 즉, 본 발명에서는 컴퓨터상 실행되는 실행 파일들에 대한 악성코드 진단에 있어서, PE 파일을 컴파일러별로 분류한 후, 컴파일러별 수립된 진단 데이터를 이용하여 악성코드 진단을 수행함으로써, 진단 데이터와의 비교횟수를 현저히 줄일 수 있어 악성코드 진단 시간을 보다 효율적으로 단축시킬 수 있게 된다. 또한, 최근의 악성코드 특성상 동일한 프로젝트와 소스를 이용하여 변수 또는 문자열 변경에 의한 제작이 늘고 있는 것을 감안하여 사용자 함수값에 대한 진단 데이터 비교 시 다양한 사용자 함수값을 선택하면서 재차 진단을 수행함으로써, 동일한 컴파일러를 통해 생성된 동일한 프로젝트에 대한 변형 악성코드도 찾을 수 있어 악성코드 진단의 신뢰성을 높일 수 있다.
악성코드, 진단, 바이러스, 컴파일러, PE, 프로젝트

Description

컴파일러 구분에 의한 악성코드 진단장치 및 방법{APPARATUS AND METHOD FOR CHECKING VIRUS PROGRAM BY DISTINGUISHING COMPILER}
본 발명은 컴퓨터상 실행되는 실행파일에 대한 악성코드 진단방법에 관한 것으로, 특히 컴퓨터상 실행되는 실행파일의 PE(Portable Executable) 파일을 컴파일러(compiler)별로 구분하고 컴파일러별로 수립된 진단 데이터를 이용하여 악성코드 검사를 보다 신속하게 수행할 수 있도록 하는 PE 컴파일러 구분에 의한 악성코드 진단장치 및 방법에 관한 것이다.
통상적으로, Windows OS에서 실행되는 실행파일은 독립적으로 메모리에 로드되고, CPU가 실행 가능한 형태의 PE(Portable Executable) 파일 형식으로 정의된다. 이러한 실행 가능 파일은 프로그램 언어(C, C++, Pascal, Java, Basic 등)를 이용하여 구현되며, 프로그램 언어를 통해 구현된 파일은 다시 Visual C++, 비쥬얼 베이직(Visual Basic), 델파이(Delphi), C++, 빌더(Builder) 등의 컴파일러를 통해 PE 파일형식의 바이너리 데이터(binary data)로 생산된다.
한편, Windows 기반의 악성코드는 프로그램 되어진 PE 파일로 이루어져 있으 며, 안티바이러스(anti-virus) 업체에서는 PE 파일을 다른 MZ(DOS OS 실행파일)파일이나 NE(Unix OS 실행파일) 등과 구분하여 그 형식에 맞는 진단 알고리즘과 데이터를 추출하여 악성코드와 정상코드를 진단하고 있다.
즉, 종래 일반적인 악성코드 진단 알고리즘에서는 PE 파일 전체에 대한 해쉬(hash)를 통해 PE 헤더(header)의 특징과 실행시작위치의 코드, PE 파일의 마지막 섹션 또는 섹션의 특성, PE 파일의 크기와 경로, 이름, MD5 등의 진단 데이터를 추출하여 악성코드 여부를 진단한다.
그러나, 위와 같은 종래 PE 파일을 이용한 악성코드 검사에서는 도 1에서 보여지는 바와 같이, 예를 들어 검사해야할 10000개의 진단 데이터가 존재하는 경우에는 각각의 PE 파일에 대해 10000개의 진단 데이터와 일일이 비교를 수행해야 함에 따라 악성코드 진단을 위한 검사시간이 너무 많이 소요되어 효율적이지 못한 문제점이 있었다.
상술한 본 발명은 컴파일러 구분에 의한 악성코드 진단장치로서, 컴퓨터상 악성코드 여부 검사대상이 되는 실행파일들의 PE파일을 수집하는 PE 파일 수집부와, 상기 PE 파일 수집부에서 수집된 PE 파일에 대해 각 PE 파일을 생성한 컴파일러를 분석하여 컴파일러별로 분류하는 컴파일러 분류부와, 상기 컴파일러 분류부로부터 분류된 PE 파일에 대해 각 컴파일러별로 수립된 진단 데이터를 이용하여 악성코드 여부를 검사하는 진단부와, 상기 PE 파일에 대한 컴파일러별 악성코드 검사를 위해 컴파일러별 진단 데이터를 저장하고 있는 진단 데이터 DB를 포함하며, 상기 진단부는, 상기 컴파일러별 분류된 각 PE 파일에 대해 엔트리 포인트값과, 프로젝트 정보값, 사용자 함수값을 추출하여 악성코드의 판단을 위해 컴파일러별로 미리 저장된 각각의 진단 데이터와 비교하고 일치하는 경우 악성코드를 판단하는 것을 특징으로 한다.
또한, 본 발명은 컴파일러 구분에 의해 악성코드를 진단하는 방법으로서, 컴퓨터상 활성화된 실행파일의 PE 파일을 악성코드 여부 검사를 위해 수집하는 단계와, 상기 수집된 검사대상 PE 파일에 대해 각 PE 파일을 생성한 컴파일러를 분석하여 컴파일러별로 분류하는 단계와, 상기 컴파일러별로 분류된 PE 파일에 대해 각 컴파일러별로 수립된 진단 데이터를 이용하여 악성코드 여부를 진단하는 단계를 포함하며, 상기 진단 단계는 상기 컴파일러별 분류된 각 PE 파일에 대해 엔트리 포인트값과, 프로젝트 정보값, 사용자 함수값을 추출하는 단계와, 상기 추출된 각 값에 대해 컴파일러별로 미리 저장된 제1, 제2, 제3 진단데이터와 각각 비교하는 단계와, 상기 추출된 각 값이 각각의 진단 데이터와 일치하는 경우 악성코드로 진단하는 단계를 포함하는 것을 특징으로 한다.
본 발명에서는 컴퓨터상 실행되는 실행 파일들에 대한 악성코드 진단에 있어서, PE 파일을 컴파일러별로 분류한 후, 컴파일러별 수립된 진단 데이터를 이용하여 악성코드 진단을 수행함으로써, 진단 데이터와의 비교횟수를 현저히 줄일 수 있어 악성코드 진단을 시간을 보다 효율적으로 단축시킬 수 있는 이점이 있다.
또한, 최근의 악성코드 특성상 동일한 프로젝트(project)와 소스(source)를 이용하여 변수 또는 문자열 변경에 의한 제작이 늘고 있는 것을 감안하여 사용자 함수값에 대한 진단 데이터 비교 시 다양한 사용자 함수값을 선택하면서 재차 진단을 수행함으로써, 동일한 컴파일러를 통해 생성된 동일한 프로젝트에 대한 변형 악 성코드도 찾을 수 있어 악성코드 진단 신뢰성을 높일 수 있는 이점이 있다.
따라서, 본 발명에서는 컴퓨터상 실행되는 실행파일의 PE 파일을 컴파일러별로 구분하고 컴파일러별로 수립된 진단 데이터를 이용하여 악성코드 검사를 보다 신속하게 수행할 수 있도록 하는 PE 컴파일러 구분에 의한 악성코드 진단장치 및 방법을 제공하고자 한다.
이하, 첨부된 도면을 참조하여 본 발명의 동작 원리를 상세히 설명한다. 하기에서 본 발명을 설명함에 있어서 공지 기능 또는 구성에 대한 구체적인 설명이 본 발명의 요지를 불필요하게 흐릴 수 있다고 판단되는 경우에는 그 상세한 설명을 생략할 것이다. 그리고 후술되는 용어들은 본 발명에서의 기능을 고려하여 정의된 용어들로서 이는 사용자, 운용자의 의도 또는 관례 등에 따라 달라질 수 있다. 그러므로 그 정의는 본 명세서 전반에 걸친 내용을 토대로 내려져야 할 것이다.
도 2는 본 발명의 실시 예에 따른 PE 컴파일러 구분에 의한 악성코드 진단 개념을 도시한 것으로, 위 도 2에서 보여지는 바와 같이, 다양한 컴파일러들로 생성된 PE 파일에 대해 각각의 컴파일러에 의한 진단 데이터로 세분화하여 그룹 지운 후, 컴파일러별로 악성코드를 검사하는 경우, 위 도 1에서와 같이 단일한 PE 기반의 진단 데이터들로 검사하는 경우 보다 진단 데이터 비교횟수가 몇 배로 줄어들게 되어 파일에 대한 악성코드 검사시간을 현저하게 줄일 수 있게 된다.
즉, 도 2에서 같이, PE 파일을 컴파일러별로 구분하는 경우 컴파일러별 진단 데이터가 2500개로 가정한다면, PE 파일을 세분화시킨 컴파일러에 의한 진단 데이터 비교횟수가 2500번이 되는 것으로, 이는 종래 위 도 1에서 각 PE 파일당 소요되는 10000번의 비교횟수에 비해 4배 정도로 검사시간이 줄어들게 됨을 의미한다. 이때 위 도 2의 예시에서는 컴파일러로 주로 사용되는 Visual C++, Visual Basic, C++, Builder, Delphi 등에 대해서 예를 들었으며, 모두 동일한 크기의 진단 데이터를 가지는 것을 가정하였다.
도 3은 본 발명의 실시 예에 따른 PE 컴파일러 구분에 의한 악성코드 진단 장치의 모듈 구성을 도시한 것이다. 위 악성코드 진단장치는 안티바이러스 업체에 의해 개발되어 컴퓨터상 설치되는 백신 프로그램을 기능적으로 모듈(module)화하여 도시한 것이다.
이하, 위 도 3을 참조하여 본 발명의 악성코드 진단장치 각 모듈에서의 동작을 상세히 설명하기로 한다.
먼저, PE 파일 수집부(300)는 컴퓨터상 활성화되어 실행되는 EXE, DLL 등의 실행파일에서 악성코드 검사를 위해 실행파일들의 PE 파일을 수집한다.
컴파일러 분류부(302)는 PE 파일 수집부(300)에서 수집된 PE 파일에 대해 각 PE 파일을 생성한 컴파일러를 분석하여 컴파일러별로 분류한다. 위 PE 파일은 기계어로 구성된 바이너리 데이터로 Visual C++, Visual Basic, C++, Builder, Delphi 등의 다양한 컴파일러에 의해서 생산되는데, 모든 PE 파일은 각각의 컴파일러 특성 에 의한 구조적인 특성을 나타내게 된다. 즉, PE 파일의 실행코드 영역인 .Text 섹션 내에는 고유 컴파일러의 정보와 구조체, 프로젝트의 정보, 자원에 대한 링크정보, 컴파일러 자체의 고유코드 등 컴파일러 자신만의 고유한 특성정보를 가지고 있다.
이러한 고유 컴파일러의 정보들 중에는 프로젝트 정보라는 전체 프로그램의 기본정보가 존재하게 되며, 각각의 컴파일러마다 프로젝트의 구조와 원리, 성분은 다르게 구성되어 있으나 그 기본적인 특성은 같다고 할 수 있다. 따라서 위와 같은 프로젝트 정보는 동일한 컴파일러로부터 파생한 PE 파일을 구분하는 독립적 데이터로 이용 가능하게 된다. 즉, 컴파일러 분류부(302)는 PE 파일의 실행코드내 존재하는 프로젝트 정보(project information)를 분석하여 PE 파일의 구조와 내부 기계어의 구성, 리소스(resource), 임포트 라이브러리(import library), 각 컴파일러의 스텁코드(stupcode) 등을 확인함으로써 각 PE 파일이 어떤 컴파일러를 통해 생성되었는지 검사한 후, 컴파일러별로 분류하게 된다.
진단부(304)는 컴파일러 분류부(302)로부터 컴파일러별 분류된 각 PE 파일에 대해 엔트리 포인트(entry point)값과, 프로젝트 정보(project information)값, 사용자 함수(user function)값을 추출하여 진단 데이터 DB(Data Base)(306)내 각 컴파일러별로 저장된 대응되는 진단 데이터와 각각 비교하고, 일치하는 경우 악성코드를 진단하게 된다.
즉, 진단부(304)는 PE 파일의 헤더내 실행코드 시작 시점을 지시하는 엔트리 포인트값을 추출하여 해당 컴파일러의 악성코드로 미리 알려진 PE 파일 엔트리 포 인트값의 집합인 제1 진단 데이터와 비교하여 일치여부를 검사한다. 또한, PE 파일의 실행 코드내 컴파일러 특성 정보를 포함하는 프로젝트 정보 값을 추출하여 해당 컴파일러의 악성코드로 미리 알려진 PE 파일에 대한 프로젝트 정보값의 집합인 제2 진단 데이터와 비교하여 일치여부를 검사한다.
또한, 진단부(304)는 PE 파일의 일치된 제1 진단 데이터, 제2 진단 데이터로부터 진단 데이터 DB(306)내에 존재하는 사용자 함수의 파일 오프셋 위치와 함수 크기를 바탕으로 검사대상 PE 파일의 제3 진단 데이터인 사용자 함수 OP 코드값(OPcode value)을 계산하여 진단 데이터 DB(306)의 제3 진단 데이터 사용자 함수 OP 코드값과 비교하여 일치여부를 검사한다.
이때, 진단부(304)는 진단 데이터 DB(306)에 존재하는 사용자 함수 파일 오프셋의 위치부터 함수 크기만큼으로 연산된 사용자 함수 OP 코드값이 진단 데이터 DB(306)의 제3 진단 데이터인 사용자 함수 OP코드값과 일치하지 않을 경우, 변형된 악성코드의 진단을 위해 PE파일의 실행코드내 프로젝트 구조를 분석하여 실행코드내 삽입된 사용자 함수 중 파일 크기가 가장 크거나 가장 작은 함수 또는 제일 처음 위치한 함수거나 마지막 함수를 검색하고, 임의로 하나의 함수를 선택하여 사용자 함수값을 얻은 후 제3 진단 데이터와 재차 비교를 수행한다.
도 4는 본 발명의 실시 예에 따른 컴파일러 구분에 의해 악성코드를 진단하는 동작 제어 흐름을 도시한 것이다. 이하 도 3 및 도 4를 참조하여 본 발명의 실시 예를 상세히 설명하기로 한다.
먼저, 컴퓨터상 본 발명의 안티바이러스 프로그램인 악성코드 진단장치가 활 성화되는 경우, 악성코드 진단장치내 PE 파일 수집부(300)는 (S400)단계에서 컴퓨터상 실행되는 EXE, DLL 등의 실행파일로부터 PE 파일을 수집한다. 이어, 컴파일러 분류부(302)는 (S402)단계에서 PE 파일 수집부(300)를 통해 수집된 PE 파일에 대해 프로젝트 정보를 분석하여 각 PE 파일을 컴파일러별로 분류한다.
위와 같이, 컴퓨터상 실행되는 악성코드 검사대상 PE 파일에 대한 수집 및 컴파일러별 분류가 수행된 경우, 진단부(304)는 (S404)∼(S408)단계를 수행하면서 각 PE 파일에 대해 컴파일러별 수립된 진단 데이터를 이용한 악성코드 여부 검사를 수행하게 된다.
즉, 진단부(304)는 (S404)단계에서 검사대상 PE 파일내 이미지 옵셔널(image optional) 헤더 구조체에 존재하는 AddressOfEntryPoint 필드(field)값을 추출하여, 도 5에서 보여지는 바와 같이 PE 파일의 실행시작 시점인 엔트리 포인트값으로 추출한다. 그런 후, 진단부(304)는 위와 같이 추출된 검사 대상 PE 파일의 엔트리 포인트값을 해당 컴파일러의 악성코드로 미리 알려진 PE 파일 엔트리 포인트값의 집합인 제1 진단 데이터와 비교하여 일치여부를 검사한다.
이어, 진단부(304)는 (S406)단계에서 PE 파일의 실행 코드내 컴파일러 특성 정보를 포함하는 프로젝트 정보 값을 추출한다. 이때 위 프로젝트 정보는 구조체 등으로 표현될 수 있는데, 진단부(304)는 해당 구조체의 특정 값들을 해쉬 또는 MD5, CRC 등의 암호화 방식으로 도 5에서 보여지는 바와 같이 기설정된 n 바이트 값 즉 예를 들어 고유한 4 바이트(bite) 값으로 만들어 활용하게된다. 진단부(304)는 위와 같이 추출된 검사 대상 PE 파일의 프로젝트 정보값을 해당 컴파일러의 악 성코드로 미리 알려진 PE 파일에 대한 프로젝트 정보값의 집합인 제2 진단 데이터와 비교하여 일치여부를 검사한다.
이어, 진단부(304)는 (S408)단계에서 PE 파일의 실행 코드내 삽입된 사용자 함수값을 추출하여 해당 컴파일러의 악성코드로 미리 알려진 사용자 함수값의 집합인 제3 진단 데이터와 비교하여 일치여부를 검사한다. 이때, 위 사용자 함수값은 PE 파일의 실행코드내 사용자에 의해 삽입되는 함수에 대한 관련 데이터를 의미하는 것으로, 도 5에서 보여지는 바와 같이 사용자 함수의 시작 지점의 파일 오프셋값과, 함수 크기값 및 파일 오프셋에서부터 함수 크기만큼의 사용자 함수 OP 코드값을 의미한다.
위 사용자 함수값 중 첫 번째 값인 파일 오프셋값은 예를 들어 사용자 함수에서 가장 크기가 큰 함수, 사용자 함수 중에서 가장 크기가 작은 함수, 사용자 함수 중에서 제일 첫 파일 오프셋에 위치한 함수 등으로 임의로 선택될 수 있다. 위와 같이 사용자 함수가 선택된 이후 사용자 함수값의 두 번째 값으로 해당 사용자 함수의 함수 크기값이 추출되며, 사용자 함수값의 세 번째 값으로 파일 오프셋에서부터 함수 크기만큼의 OP 코드값이 추출된다. 이때, 사용자 함수값에 대한 파일 오프셋값, 함수 크기값, OP 코드값에 대해 해쉬, MD5, CRC 등의 암호화 방식으로 기설정된 n 바이트 값 즉 예를 들어 고유한 4바이트 값으로 만들게 된다.
또한, 진단부(304)는 PE 파일이 진단 데이터 DB(306)의 제1 진단 데이터 그리고 제2 진단 데이터가 일치하는 진단 데이터 레코드로부터 제3 진단 데이터의 사용자 함수 파일 오프셋위치에서 함수 크기만큼을 사용자 함수 OP 코드값을 계산하 여 제3 진단 데이터의 사용자 함수 OP 코드값과 비교하게 된다. 만약 일치하지 않을 경우, 변형된 악성코드의 진단을 위해서 진단부(304)는 PE 파일의 실행코드내 프로젝트 구조를 분석하여 실행코드내 삽입된 사용자 함수 중 파일 크기가 가장 크거나 가장 작은 함수 또는 제일 처음 위치한 함수거나 마지막 함수를 검색하고, 임의로 하나의 함수를 선택하여 사용자 함수값을 얻은 후, 다시 제3 진단 데이터인 사용자 함수 OP 코드값과 비교하게 된다. 이에 따라 동일한 컴파일러에 대한 동일한 프로젝트에서의 다양한 변종의 악성코드를 진단할 수 있게 된다.
위와 같이, 진단부(304)는 (S404)∼(S408)단계를 통해 PE 파일로 추출된 악성코드 검사를 위한 고유 진단값과 컴파일러별 수립된 진단 데이터와의 비교를 수행한 후, 검사 대상 PE 파일로부터 추출된 고유 진단값이 컴파일러별 대응되는 진단 데이터와 일치하는 경우에는 (S410)단계에서 (S412)단계로 진행하여 해당 PE 파일에 대하여 악성코드로 진단한다. 그런 후, 진단부(304)는 (S414)단계로 진행해서 악성코드로 진단된 해당 PE 파일을 포함하는 실행파일에 대해 바이러스를 치료하거나 치료가 불가능한 경우 삭제시킴으로써 컴퓨터상 악성코드 프로그램의 실행을 차단시키게 되는 것이다.
도 6은 본 발명의 실시 예에 따른 컴파일러별 구분에 의한 악성코드 진단 과정 중 특히 비쥬얼 베이직 컴파일러(Visual Basic compiler)에서 진단 데이터 설정 및 악성코드 진단 처리 흐름을 도시한 것이다. 이하, 도 3, 도 4 및 도 6을 참조하여 본 발명의 실시 예를 상세히 설명하기로 한다.
먼저, 비쥬얼 베이직 컴파일러로 생성된 PE 파일은 OOP(Object Oriented Program)에 기반된 구조화된 .Text 섹션을 가지고 있으며, 실행파일에 대한 전반적으로 구체적인 정보와 사용자 함수 정보를 알려준다. 모든 비쥬얼 베이직 프로그램은 VB_HEADER 라는 프로젝트 구조체를 기반으로 PROJECT_INFO, GUI_OBJECT, COMPONENT, COM_REG_DATA 의 4개의 중요한 구조체 정보를 가지고 있다. 위에서 프로젝트 정보(PROJECT_INFO) 구조체는 실제 내포하고 있는 비쥬얼 베이직의 오브젝트(object)에 대한 정보를 가지고 있으며, 각 오브젝트는 제어(control) 또는 방법(method)에 대한 정보를 링크하고 있다.
위와 같은 비쥬얼 베이직 컴파일링된 PE 파일의 진단 데이터는 도 7에서 보여지는 바와 같이 PE 파일 실행코드의 코드 특성에 따라 P 코드 형식의 진단 데이터와 Native 형식의 진단 데이터로 구분된다. 또한 P 코드는 비쥬얼 베이직의 가상머신(MSVBVM50.DLL, MSVBVM60.DLL)에서 스택을 기반으로 하는 가상엔진의 OP 코드로서 x86 CPU 계열의 레지스터와 스택을 기반으로 하는 Native 코드와 구별된다.
즉, 진단부(304)는 비쥬얼 베이직으로 컴파일링된 것으로 분류된 PE 파일에 대해서 (S600)단계에서 PE 파일의 코드 시작 시점 정보인 엔트리 포인트값을 추출하고, (S602)단계에서 비쥬얼 베이직 컴파일링된 PE 파일에서 악성코드로 미리 알려진 엔트리 포인트값인 제1 진단 데이터와 일치하는지 여부를 검사한다.
이때, 검사대상 PE 파일의 코드 시작 시점 정보인 엔트리 포인트값과 제1 진단 데이터가 일치하지 않는 경우 진단부(304)는 (S602)단계에서 (S604)단계로 진행해서 해당 PE 파일에 대해 악성코드가 아님을 진단한다.
그러나, 검사대상 PE 파일의 코드 시작 시점 정보인 엔트리 포인트값과 제1 진단 데이터가 일치하는 경우 진단부(304)는 (S602)단계에서 (S606)단계로 진행해서 검사 대상 PE 파일의 실행 코드내 비쥬얼 베이직 컴파일러의 특성 정보를 포함하는 프로젝트 정보를 추출하고, (S608)단계에서 비쥬얼 베이직 컴파일링된 PE 파일에서 악성코드로 미리 알려진 프로젝트 정보값인 제2 진단 데이터와 일치하는지 여부를 검사한다. 이때 위 프로젝트 정보값은 비쥬얼 베이직 실행파일에 대한 프로젝트의 정보 구조체인 VB_HEADER 구조체의 특정 고유데이터 정보를 해쉬(hash), MD5, CRC 등의 암호화 방식을 통해 기설정된 n 바이트 값 즉 예를 들어 고유한 4바이트 값으로 만들게 된다.
이때, 검사대상 PE 파일의 프로젝트 정보값과 제2 진단 데이터가 일치하지 않는 경우 진단부(304)는 (S608)단계에서 (S604)단계로 진행해서 해당 PE 파일에 대해 악성코드가 아님을 진단한다.
그러나, 검사대상 PE 파일의 프로젝트 정보값과 제2 진단 데이터가 일치하는 경우 진단부(304)는 (S608)단계에서 (S610)단계로 진행해서 PE 파일내 사용자 함수값을 추출하기 위해 PE 파일의 실행코드가 어떤 코드로 작성되었는지 여부를 검사하고, (S612)단계에서 PE 파일의 실행코드 특성에 따라 사용자 함수값을 추출을 위한 사용자 함수의 파일 오프셋값을 산출한다.
이어, 진단부(304)는 (S614)단계로 진행해서 검사 대상 PE 파일의 실행코드 특성에 따라 사용자 함수가 위치한 PE 파일 실행코드내 오프셋값을 산출하여 사용자 함수값을 추출한다.
즉, 비쥬얼 베이직으로 컴파일링된 PE 파일은 그 실행코드의 생성에 있어서 P 코드 또는 Native 코드로 서로 다른 종류의 코드로 생성될 수 있다. 따라서 비쥬얼 베이직 컴파일링된 PE 파일에서의 사용자 함수값 추출 시에는, 검사 대상 PE 파일의 비쥬얼 베이직 컴파일링된 실행코드가 P 코드로 생성되었는지 또는 Native 코드로 생성되었는지에 따라 사용자 함수값을 추출을 위한 파일 오프셋값을 다르게 설정하여야 한다.
예를 들어, 비쥬얼 베이직으로 컴파일링된 PE 파일이 P 코드로 생성된 경우 진단부(304)는 비쥬얼 베이직 실행파일에 대한 프로젝트 구조를 통해서 얻은 사용자 함수들로부터 크기가 가장 크거나 작은 함수 또는 제일 처음 위치한 함수거나 또는 마지막 함수 등 적절한 사용자 함수 선정 알고리즘에 의해서 선정된 사용자 함수에 대해 사용자 함수의 시작 지점의 파일 오프셋값과 함수 크기값을 얻고 파일 오프셋에서부터 함수 크기 만큼의 OP 코드 데이터를 해쉬, MD5, CRC 등의 암호화 방식으로 기설정된 n 바이트 값 즉 예를 들어 4바이트 고유데이터 값으로 추출한다.
또한, 이와 달리 비쥬얼 베이직으로 컴파일링된 PE 파일이 Native 코드로 생성된 경우 진단부(304)는 프로젝트 구조를 통해서 얻은 사용자 함수들로부터 크기가 가장 크거나 작은 함수 또는 제일 처음 위치한 함수거나 또는 마지막 함수 등 적절한 사용자 함수 선정 알고리즘에 의해서 선정된 사용자 함수에 대해 사용자 함수의 시작 지점의 파일 오프셋값과 함수 크기값을 얻는 것은 P 코드 방식에서와 동일하게 수행하나, 사용자 함수 시작에서부터 사용자 함수 파일 크기만큼의 OP 코드데이터 중 첫 데이터만을 추출한 데이터들에 대해서 해쉬, MD5, CRC 등의 암호화 방식으로 기설정된 n 바이트 값 즉 예를 들어 4바이트 고유데이터 값으로 추출한다.
이때, 제3 진단 데이터와 비교되는 PE 파일의 사용자 함수값 추출에 있어서, 비쥬얼 베이직 컴파일러의 특성상 비쥬얼 베이직 PE 파일은 EXE 또는 DLL, P 코드 또는 Native 코드, Form 또는 Module 로 구분되어 사용자 함수의 파일 오프셋값이 달라질 수 있다. 따라서, P 코드와 Native 코드의 차이에 따른 사용자 함수의 파일 오프셋값 뿐만 아니라 EXE 또는 DLL, P 코드 또는 Native 코드, Form 또는 Module 등의 특성도 고려하여 사용자 함수값을 추출하게 된다.
이어, 진단부(304)는 (S616)단계에서 검사대상 PE 파일로부터 추출된 사용자 함수값을 해쉬, MD5, CRC 등의 암호화 방식으로 기설정된 n 바이트 값 즉 예를 들어 4바이트 진단 값으로 만들어 비쥬얼 베이직 컴파일링된 PE 파일에서 악성코드로 미리 알려진 제3 진단 데이터와 일치하는지 여부를 검사한다.
이때 만일 검사대상 PE 파일로부터 추출된 사용자 함수값이 비쥬얼 베이직 컴파일링된 PE 파일에서 악성코드로 미리 알려진 제3 진단 데이터와 일치하는 경우 진단부(304)는 (S624)단계로 진행해서 해당 검사대상 PE 파일을 악성코드로 진단한다.
그러나, 이와 달리, (S616)단계 검사결과 검사대상 PE 파일로부터 추출된 사용자 함수값이 비쥬얼 베이직 컴파일링된 PE 파일에서 악성코드로 미리 알려진 제3 진단 데이터와 일치하지 않는 경우 진단부(304)는 (S618)단계로 진행해서 다시 사용자 함수 선정 알고리즘을 동일하게 적용하여 검사대상 PE 파일내 다른 사용자 함 수를 선택한다.
이어 진단부(304)는 (S620)단계에서 해당 사용자 함수로부터 사용자 함수값을 추출한 후, (S622)단계에서 이를 해쉬, MD5, CRC 등의 암호화 방식으로 기설정된 n 바이트 값 즉 예를 들어 4바이트 진단 값으로 만들어 비쥬얼 베이직 컴파일링된 PE 파일에서 악성코드로 미리 알려진 제3 진단 데이터와 일치하는지 여부를 재차 검사한다. 이에 따라 동일한 컴파일러를 통해 생성된 동일한 프로젝트에 대한 변형 악성코드를 찾을 수 있게 된다.
그런 후, 진단부(304)는 검사대상 PE 파일로부터 다시 추출된 사용자 함수값이 비쥬얼 베이직 컴파일링된 PE 파일에서 악성코드로 미리 알려진 제3 진단 데이터와 일치하는 경우에는 (S624)단계로 진행해서 해당 검사대상 PE 파일을 악성코드로 진단한다. 그러나, 이와 달리, (S622)단계 검사결과 검사대상 PE 파일로부터 재차 추출된 사용자 함수값이 비쥬얼 베이직 컴파일링된 PE 파일에서 악성코드로 미리 알려진 제3 진단 데이터와 일치하지 않는 경우 진단부(304)는 (S604)단계로 진행해서 해당 PE 파일이 악성코드가 아닌 것으로 진단한다.
상기한 바와 같이 본 발명에서는 컴퓨터상 실행되는 실행 파일들에 대한 악성코드 진단에 있어서, PE 파일을 컴파일러별로 분류한 후, 컴파일러별 수립된 진단 데이터를 이용하여 악성코드 진단을 수행함으로써, 진단 데이터와의 비교횟수를 현저히 줄일 수 있어 악성코드 진단을 시간을 보다 효율적으로 단축시킬 수 있게 된다. 또한, 최근의 악성코드 특성상 동일한 프로젝트와 소스를 이용하여 변수 또는 문자열 변경에 의한 제작이 늘고 있는 것을 감안하여 사용자 함수값에 대한 진 단 데이터 비교 시 다양한 사용자 함수값을 선택하면서 재차 진단을 수행함으로써, 동일한 컴파일러를 통해 생성된 동일한 프로젝트에 대한 변형 악성코드도 찾을 수 있어 악성코드 진단 신뢰성을 높일 수 있다.
한편 상술한 본 발명의 설명에서는 구체적인 실시 예에 관해 설명하였으나, 여러 가지 변형이 본 발명의 범위에서 벗어나지 않고 실시될 수 있다. 따라서 발명의 범위는 설명된 실시 예에 의하여 정할 것이 아니고 특허청구범위에 의해 정하여져야 한다.
도 1은 종래 PE 파일 악성코드 진단 개념도,
도 2는 본 발명의 실시 예에 따른 PE 컴파일러 구분에 의한 악성코드 진단 개념도,
도 3은 본 발명의 실시 예에 따른 컴파일러 구분에 의한 악성코드 진단 장치의 블록 구성도,
도 4는 본 발명의 실시 예에 따른 컴파일러 구분에 의해 악성코드를 진단하는 동작 제어 흐름도,
도 5는 본 발명의 실시 예에 따른 컴파일러별 특성에 따른 고유 진단값 예시도,
도 6은 본 발명의 실시 예에 따른 비쥬얼 베이직 컴파일링된 PE 파일의 악성코드 진단 처리 흐름도,
도 7은 본 발명의 실시 예에 따른 비쥬얼 베이직 컴파일러 특성에 따른 고유 진단값 예시도.
<도면의 주요 부호에 대한 간략한 설명>
300 : PE 파일 수집부 302 : 컴파일러 분류부
304 : 진단부 306 : 진단 데이터 DB

Claims (49)

  1. 컴파일러 구분에 의한 악성코드 진단장치로서,
    컴퓨터상 악성코드 여부 검사대상이 되는 실행파일들의 PE파일을 수집하는 PE 파일 수집부와,
    상기 PE 파일 수집부에서 수집된 PE 파일에 대해 각 PE 파일을 생성한 컴파일러를 분석하여 컴파일러별로 분류하는 컴파일러 분류부와,
    상기 컴파일러 분류부로부터 분류된 PE 파일에 대해 각 컴파일러별로 기 수립된 진단 데이터를 이용하여 악성코드 여부를 검사하는 진단부
    를 포함하는 컴파일러 구분에 의한 악성코드 진단장치.
  2. 제 1 항에 있어서,
    상기 악성코드 진단장치는,
    상기 PE 파일에 대한 컴파일러별 악성코드 검사를 위해 컴파일러별 진단 데이터를 저장하고 있는 진단 데이터 DB
    를 더 포함하는 것을 특징으로 하는 컴파일러 구분에 의한 악성코드 진단장치.
  3. 제 1 항에 있어서,
    상기 진단부는,
    상기 컴파일러별 분류된 각 PE 파일에 대해 엔트리 포인트값과, 프로젝트 정보값, 사용자 함수값을 추출하여 악성코드의 판단을 위해 컴파일러별로 미리 저장된 각각의 진단 데이터와 비교하고 일치하는 경우 악성코드를 판단하는 것을 특징으로 하는 컴파일러 구분에 의한 악성코드 진단장치.
  4. 제 3 항에 있어서,
    상기 진단부는,
    상기 PE 파일의 헤더내 실행코드 시작 시점을 지시하는 엔트리 포인트값을 추출하여 해당 컴파일러의 제1 진단 데이터와 비교하는 것을 특징으로 하는 컴파일러 구분에 의한 악성코드 진단장치.
  5. 제 4 항에 있어서,
    상기 제1 진단 데이터는,
    컴파일러별 악성코드로 미리 알려진 PE 파일 엔트리 포인트값의 집합으로, 상기 검사대상 PE 파일의 엔트리 포인트값과 비교되는 것을 특징으로 하는 컴파일러 구분에 의한 악성코드 진단장치.
  6. 제 3 항에 있어서,
    상기 진단부는,
    상기 PE 파일의 실행 코드내 컴파일러 특성 정보를 포함하는 프로젝트 정보 값을 추출하여 해당 컴파일러의 제2 진단 데이터와 비교하는 것을 특징으로 하는 컴파일러 구분에 의한 악성코드 진단장치.
  7. 제 6 항에 있어서,
    상기 제2 진단 데이터는,
    컴파일러별 악성코드로 미리 알려진 PE 파일에 대한 프로젝트 정보값의 집합으로 상기 검사대상 PE 파일의 프로젝트 정보 값과 비교되는 것을 특징으로 하는 컴파일러 구분에 의한 악성코드 진단장치.
  8. 제 3 항에 있어서,
    상기 진단부는,
    상기 검사대상 PE 파일의 실행 코드내 삽입된 사용자 함수값을 추출하여 해당 컴파일러의 제3 진단 데이터와 비교하는 것을 특징으로 하는 컴파일러 구분에 의한 악성코드 진단장치.
  9. 제 8 항에 있어서,
    상기 진단부는,
    상기 PE 파일의 실행코드내 프로젝트 구조를 분석하여 상기 실행코드내 삽입된 사용자 함수 중 파일 크기가 가장 크거나 가장 작은 함수 또는 제일 처음 위치한 함수거나 마지막 함수를 선택하여 사용자 함수값을 얻는 것을 특징으로 하는 컴파일러 구분에 의한 악성코드 진단장치.
  10. 제 9 항에 있어서,
    상기 진단부는,
    상기 선택된 사용자 함수의 시작 지점의 파일 오프셋값과 파일 크기값을 얻고, 상기 파일 오프셋에서부터 파일 크기만큼의 사용자 함수 OP 코드값을 산출하여 상기 제3 진단 데이터와의 비교를 위한 사용자 함수값을 얻는 것을 특징으로 하는 컴파일러 구분에 의한 악성코드 진단장치.
  11. 제 10 항에 있어서,
    상기 진단부는,
    상기 선택된 사용자 함수로부터 추출된 사용자 함수값이 상기 제3 진단 데이터와 일치하지 않는 경우, 상기 PE 파일의 실행코드내 삽입된 다른 사용자 함수를 선택하여 재차 상기 제3 진단 데이터와 비교를 수행하는 것을 특징으로 하는 컴파일러 구분에 의한 악성코드 진단장치.
  12. 제 8 항에 있어서,
    상기 제3 진단 데이터는,
    컴파일러별 악성코드로 미리 알려진 PE 파일에 대한 사용자 함수값의 집합으로, 상기 검사대상 PE 파일의 사용자 함수값과 각각 비교되는 것을 특징으로 하는 컴파일러 구분에 의한 악성코드 진단장치.
  13. 제 3 항에 있어서,
    상기 프로젝트 정보 값과 사용자 함수값은,
    미리 설정된 암호화 방식으로 기 설정된 n 바이트 값으로 생성되어 각각의 진단 데이터와 비교되는 것을 특징으로 하는 컴파일러 구분에 의한 악성코드 진단장치.
  14. 제 13 항에 있어서,
    상기 n 바이트 값은,
    해쉬, MD5 또는 CRC 방식을 통해 4바이트로 생성되는 값인 것을 특징으로 하는 컴파일러 구분에 의한 악성코드 진단장치.
  15. 제 1 항에 있어서,
    상기 컴파일러 분류부는,
    상기 PE 파일의 실행코드내 프로젝트 정보 내용을 분석하여 상기 PE 파일을 생성한 컴파일러 종류를 판별하는 것을 특징으로 하는 컴파일러 구분에 의한 악성코드 진단장치.
  16. 제 1 항에 있어서,
    상기 PE 파일을 생성하는 컴파일러는,
    비쥬얼 베이직, 비쥬얼 C++, 델파이, C++ 또는 빌더인 것을 특징으로 하는 컴파일러 구분에 의한 악성코드 진단장치.
  17. 제 1 항에 있어서,
    상기 진단부는,
    상기 컴파일러 중 비쥬얼 베이직 컴파일러로 생성된 검사대상 PE 파일에 대해서, 엔트리 포인트값과, 프로젝트 정보값을 추출한 후, 상기 비쥬얼 베이직 컴파일링된 PE 파일의 실행코드 특성에 대응되게 사용자 함수값을 추출하여 악성코드의 판단을 위해 미리 저장된 각각의 진단 데이터와 비교하고 일치하는 경우 악성코드를 판단하는 것을 특징으로 하는 컴파일러 구분에 의한 악성코드 진단장치.
  18. 제 17 항에 있어서,
    상기 진단부는,
    상기 PE 파일의 헤더내 실행코드의 시작 시점을 지시하는 엔트리 포인트값을 추출하여 상기 비쥬얼 베이직 컴파일링된 PE 파일에서 악성코드로 미리 알려진 엔트리 포인트값인 제1 진단 데이터와 비교하는 것을 특징으로 하는 컴파일러 구분에 의한 악성코드 진단장치.
  19. 제 17 항에 있어서,
    상기 진단부는,
    상기 PE 파일의 실행 코드내 상기 비쥬얼 베이직 컴파일러 특성 정보를 포함 하는 프로젝트 정보값을 추출하여 상기 비쥬얼 베이직 컴파일링된 PE 파일에서 악성코드로 미리 알려진 프로젝트 정보값인 제2 진단 데이터와 비교하는 것을 특징으로 하는 컴파일러 구분에 의한 악성코드 진단장치.
  20. 제 17 항에 있어서,
    상기 진단부는,
    상기 검사대상 PE 파일의 비쥬얼 베이직 컴파일링된 실행코드가 P 코드 또는 Native 코드인지를 검사한 후, 검사된 코드 종류에 대응되게 상기 검사대상 PE 파일의 실행 코드내 삽입된 사용자 함수값을 추출하여 상기 비쥬얼 베이직 컴파일러의 제3 진단 데이터와 비교하는 것을 특징으로 하는 컴파일러 구분에 의한 악성코드 진단장치.
  21. 제 20 항에 있어서,
    상기 진단부는,
    상기 비쥬얼 베이직 컴파일링된 PE 파일의 실행코드내 프로젝트 구조를 분석하여 상기 실행코드내 삽입된 사용자 함수 중 파일 크기가 가장 크거나 가장 작은 함수 또는 제일 처음 위치한 함수거나 마지막 함수를 선택하여 사용자 함수값을 얻는 것을 특징으로 하는 컴파일러 구분에 의한 악성코드 진단장치.
  22. 제 21 항에 있어서,
    상기 진단부는,
    상기 검사대상 PE 파일의 실행코드가 P 코드인 경우, 상기 선택된 사용자 함수의 시작 지점의 파일 오프셋값과 파일 크기값을 얻고, 상기 파일 오프셋에서부터 파일 크기만큼의 사용자 함수 OP 코드값을 산출하여 상기 제3 진단 데이터와의 비교를 위한 사용자 함수값을 얻는 것을 특징으로 하는 컴파일러 구분에 의한 악성코드 진단장치.
  23. 제 21 항에 있어서,
    상기 진단부는,
    상기 PE 파일의 실행코드가 Native 코드인 경우에는, 상기 사용자 함수값 중 OP 코드값 산출에 있어서 상기 선택된 함수의 파일 오프셋 시작에서부터 파일 크기만큼의 OP 코드데이터중 OP 코드의 첫 데이터를 OP 코드값으로 산출하는 것을 특징으로 하는 컴파일러 구분에 의한 악성코드 진단장치.
  24. 제 21 항에 있어서,
    상기 진단부는,
    상기 선택된 사용자 함수로부터 추출된 사용자 함수값이 상기 제3 진단 데이터와 일치하지 않는 경우, 상기 PE 파일의 실행코드내 삽입된 다른 사용자 함수를 선택하여 재차 상기 제3 진단 데이터와 비교를 수행하는 것을 특징으로 하는 컴파일러 구분에 의한 악성코드 진단장치.
  25. 제 22 항 또는 제 23 항에 있어서,
    상기 제3 진단 데이터는,
    상기 비쥬얼 베이직 컴파일링된 PE 파일의 악성코드로 미리 알려진 사용자 함수값의 집합으로, 상기 검사대상 PE 파일의 사용자 함수값과 각각 비교되는 것을 특징으로 하는 컴파일러 구분에 의한 악성코드 진단장치.
  26. 제 17 항에 있어서,
    상기 프로젝트 정보 값과 사용자 함수값은,
    미리 설정된 암호화 방식으로 기 설정된 n 바이트 값으로 생성되어 각각의 진단 데이터와 비교되는 것을 특징으로 하는 컴파일러 구분에 의한 악성코드 진단장치.
  27. 제 26 항에 있어서,
    상기 n 바이트 값은,
    해쉬, MD5 또는 CRC 방식을 통해 4바이트로 생성되는 값인 것을 특징으로 하는 컴파일러 구분에 의한 악성코드 진단장치.
  28. 컴파일러 구분에 의해 악성코드를 진단하는 방법으로서,
    컴퓨터상 활성화된 실행파일의 PE 파일을 악성코드 여부 검사를 위해 수집하는 단계와,
    상기 수집된 검사대상 PE 파일에 대해 각 PE 파일을 생성한 컴파일러를 분석하여 컴파일러별로 분류하는 단계와,
    상기 컴파일러별로 분류된 PE 파일에 대해 각 컴파일러별로 수립된 진단 데이터를 이용하여 악성코드 여부를 진단하는 단계
    를 포함하는 컴파일러 구분에 의한 악성코드 진단방법.
  29. 제 28 항에 있어서,
    상기 진단하는 단계는,
    상기 컴파일러별 분류된 각 PE 파일에 대해 엔트리 포인트값과, 프로젝트 정보값, 사용자 함수값을 추출하는 단계와,
    상기 추출된 각 값에 대해 컴파일러별로 미리 저장된 제1, 제2, 제3 진단데이터와 각각 비교하는 단계와,
    상기 추출된 각 값이 각각의 진단 데이터와 일치하는 경우 악성코드로 진단하는 단계
    를 포함하는 컴파일러 구분에 의한 악성코드 진단방법.
  30. 제 29 항에 있어서,
    상기 엔트리 포인트값은,
    상기 검사대상 PE 파일의 헤더내 존재하며, 상기 PE 파일의 실행코드 시작 시점을 지시하는 값인 것을 특징으로 하는 컴파일러 구분에 의한 악성코드 진단방법.
  31. 제 30 항에 있어서,
    상기 제1 진단 데이터는,
    컴파일러별 악성코드로 미리 알려진 PE 파일 엔트리 포인트값의 집합으로, 상기 검사대상 PE 파일의 엔트리 포인트값과 비교되는 것을 특징으로 하는 컴파일러 구분에 의한 악성코드 진단방법.
  32. 제 29 항에 있어서,
    상기 프로젝트 정보값은,
    상기 검사대상 PE 파일의 실행 코드내 존재하며, 컴파일러 특성 정보를 포함하는 값인 것을 특징으로 하는 컴파일러 구분에 의한 악성코드 진단방법.
  33. 제 32 항에 있어서,
    상기 제2 진단 데이터는,
    컴파일러별 악성코드로 미리 알려진 PE 파일에 대한 프로젝트 정보값의 집합으로 상기 검사대상 PE 파일의 프로젝트 정보 값과 비교되는 것을 특징으로 하는 컴파일러 구분에 의한 악성코드 진단방법.
  34. 제 29 항에 있어서,
    상기 사용자 함수값은,
    상기 검사대상 PE 파일의 실행 코드내 존재하며, 사용자에 의해 삽입된 함수의 시작지점의 파일 오프셋값과, 파일 크기값과 상기 파일 오프셋에서부터 파일 크기만큼의 사용자 함수 OP 코드값인 것을 특징으로 하는 컴파일러 구분에 의한 악성코드 진단방법.
  35. 제 34 항에 있어서,
    상기 사용자 함수값은,
    상기 검사대상 PE 파일의 실행코드내 삽입된 사용자 함수 중 파일 크기가 가장 크거나 가장 작은 함수 또는 제일 처음 위치한 함수거나 마지막 함수 중 선택된 하나의 함수로부터 얻어지는 것을 특징으로 하는 컴파일러 구분에 의한 악성코드 진단방법.
  36. 제 35 항에 있어서,
    상기 제3 진단 데이터는,
    컴파일러별 악성코드로 미리 알려진 PE 파일에 대한 사용자 함수값의 집합으로, 상기 검사대상 PE 파일의 사용자 함수값과 각각 비교되는 것을 특징으로 하는 컴파일러 구분에 의한 악성코드 진단방법.
  37. 제 36 항에 있어서,
    상기 비교하는 단계에서,
    상기 선택된 사용자 함수로부터 추출된 사용자 함수값이 상기 제3 진단 데이터와 일치하지 않는 경우에는, 상기 PE 파일의 실행코드내 삽입된 다른 사용자 함수가 선택되어 재차 상기 제3 진단 데이터와 비교되는 것을 특징으로 하는 컴파일러 구분에 의한 악성코드 진단방법.
  38. 제 29 항에 있어서,
    상기 프로젝트 정보값과 사용자 함수값은,
    미리 설정된 암호화 방식으로 기 설정된 n 바이트 값으로 생성되어 각각의 진단 데이터와 비교되는 것을 특징으로 하는 컴파일러 구분에 의한 악성코드 진단방법.
  39. 제 38 항에 있어서,
    상기 n 바이트 값은,
    해쉬, MD5 또는 CRC 방식을 통해 4바이트로 생성되는 값인 것을 특징으로 하는 컴파일러 구분에 의한 악성코드 진단방법.
  40. 컴파일러 구분에 의해 악성코드를 진단하는 방법으로서,
    컴퓨터상 악성코드 여부 검사대상이 되는 실행파일들의 PE파일을 수집하는 단계와,
    상기 수집된 PE 파일 중 비쥬얼 베이직 컴파일러로 생성된 PE 파일을 분류하는 단계와,
    상기 비쥬얼 베이직 컴파일러로 생성된 PE 파일로부터 엔트리 포인트값, 프로젝트 정보값, 사용자 함수값을 추출하는 단계와,
    상기 추출된 각 값을 악성코드 판단을 위해 미리 저장된 비쥬얼 베이직 컴파일러의 제1, 제2, 제3 진단 데이터와 각각 비교하는 단계와,
    상기 추출된 각 값이 각각의 진단 데이터와 일치하는 경우 악성코드로 진단하는 단계
    를 포함하는 컴파일러 구분에 의한 악성코드 진단방법.
  41. 제 40 항에 있어서,
    상기 엔트리 포인트값은,
    상기 검사대상 PE 파일의 헤더내 존재하며, 상기 PE 파일의 실행코드 시작 시점을 지시하는 값으로, 상기 비쥬얼 베이직 컴파일링된 PE 파일에서 악성코드로 미리 알려진 엔트리 포인트값인 제1 진단 데이터와 비교되는 것을 특징으로 하는 컴파일러 구분에 의한 악성코드 진단방법.
  42. 제 40 항에 있어서,
    상기 프로젝트 정보값은,
    상기 검사대상 PE 파일의 실행 코드내 존재하며, 상기 비쥬얼 베이직 컴파일러 특성 정보를 포함하는 값으로, 상기 비쥬얼 베이직 컴파일링된 PE 파일에서 악성코드로 미리 알려진 프로젝트 정보값인 제2 진단 데이터와 비교되는 것을 특징으로 하는 컴파일러 구분에 의한 악성코드 진단방법.
  43. 제 40 항에 있어서,
    상기 사용자 함수값은,
    상기 검사대상 PE 파일의 실행코드내 사용자에 의해 삽입된 함수로, 상기 검사대상 PE 파일의 비쥬얼 베이직 컴파일링된 실행코드가 P코드 인 경우에는 사용자 함수의 시작지점의 파일 오프셋값과, 파일 크기값과 상기 파일 오프셋에서부터 파일 크기만큼의 사용자 함수 OP 코드값으로 추출되는 것을 특징으로 하는 컴파일러 구분에 의한 악성코드 진단방법.
  44. 제 40 항에 있어서,
    상기 사용자 함수값은,
    상기 검사대상 PE 파일의 실행코드내 사용자에 의해 삽입된 함수로, 상기 검 사대상 PE 파일의 비쥬얼 베이직 컴파일링된 실행코드가 Native코드 인 경우에는 사용자 함수의 시작지점의 파일 오프셋값과, 파일 크기값과 상기 파일 오프셋에서부터 파일 크기만큼의 사용자 함수 OP 코드데이터 중 OP 코드의 첫 데이터가 OP 코드값으로 추출되는 것을 특징으로 하는 컴파일러 구분에 의한 악성코드 진단방법.
  45. 제 43 항 또는 제 44 항에 있어서,
    상기 사용자 함수값은,
    상기 검사대상 PE 파일의 실행코드내 삽입된 사용자 함수 중 파일 크기가 가장 크거나 가장 작은 함수 또는 제일 처음 위치한 함수거나 마지막 함수 중 선택된 하나의 함수로부터 얻어지는 것을 특징으로 하는 컴파일러 구분에 의한 악성코드 진단방법.
  46. 제 45 항에 있어서,
    상기 제3 진단 데이터는,
    상기 비쥬얼 베이직 컴파일링된 PE 파일의 악성코드로 미리 알려진 사용자 함수값의 집합으로, 상기 검사대상 PE 파일의 사용자 함수값과 각각 비교되는 것을 특징으로 하는 컴파일러 구분에 의한 악성코드 진단방법.
  47. 제 46 항에 있어서,
    상기 비교하는 단계에서,
    상기 선택된 사용자 함수로부터 추출된 사용자 함수값이 상기 제3 진단 데이터와 일치하지 않는 경우에는, 상기 PE 파일의 실행코드내 삽입된 다른 사용자 함수가 선택되어 재차 상기 제3 진단 데이터와 비교되는 것을 특징으로 하는 컴파일러 구분에 의한 악성코드 진단방법.
  48. 제 40 항에 있어서,
    상기 프로젝트 정보 값과 사용자 함수값은,
    미리 설정된 암호화 방식으로 기 설정된 n 바이트 값으로 생성되어 각각의 진단 데이터와 비교되는 것을 특징으로 하는 컴파일러 구분에 의한 악성코드 진단방법.
  49. 제 48 항에 있어서,
    상기 n 바이트 값은,
    해쉬, MD5 또는 CRC 방식을 통해 4바이트로 생성되는 값인 것을 특징으로 하는 컴파일러 구분에 의한 악성코드 진단방법.
KR1020080055619A 2008-06-13 2008-06-13 컴파일러 구분에 의한 악성코드 진단장치 및 방법 KR100968267B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020080055619A KR100968267B1 (ko) 2008-06-13 2008-06-13 컴파일러 구분에 의한 악성코드 진단장치 및 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020080055619A KR100968267B1 (ko) 2008-06-13 2008-06-13 컴파일러 구분에 의한 악성코드 진단장치 및 방법

Publications (2)

Publication Number Publication Date
KR20090129609A KR20090129609A (ko) 2009-12-17
KR100968267B1 true KR100968267B1 (ko) 2010-07-06

Family

ID=41689517

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020080055619A KR100968267B1 (ko) 2008-06-13 2008-06-13 컴파일러 구분에 의한 악성코드 진단장치 및 방법

Country Status (1)

Country Link
KR (1) KR100968267B1 (ko)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101162051B1 (ko) 2010-12-21 2012-07-03 한국인터넷진흥원 문자열 비교 기법을 이용한 악성코드 탐지 및 분류 시스템 및 그 방법
KR101428781B1 (ko) 2012-11-15 2014-08-08 한국전자통신연구원 컴파일러 정보 유사도를 이용한 실행파일 분류 장치 및 방법

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101138746B1 (ko) * 2010-03-05 2012-04-24 주식회사 안철수연구소 실행 파일을 이용한 악성 코드 차단 장치 및 방법
KR101217709B1 (ko) 2010-12-31 2013-01-02 주식회사 안랩 악성코드 탐지 장치 및 방법
KR101299099B1 (ko) * 2011-09-07 2013-09-16 주식회사 팬택 임베디드 시스템에서 최적화된 가상화 모듈을 관리하는 장치 및 방법
KR102246405B1 (ko) 2019-07-25 2021-04-30 호서대학교 산학협력단 Tf-idf 기반 벡터 변환 및 데이터 분석 장치 및 방법
CN112989339B (zh) * 2021-02-24 2023-05-02 西安理工大学 一种基于机器学习的gcc编译器恶意代码入侵检测方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20040051322A (ko) * 2002-12-12 2004-06-18 주식회사 안철수연구소 실행중인 파일에 대한 실시간 데이터 수정 방법 및 이를이용한 바이러스 치료방법
KR100620313B1 (ko) * 2005-06-15 2006-09-06 (주)이월리서치 마이크로소프트 실행파일의 구조적 특성을 이용한 악성프로그램 검출 시스템 및 방법

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20040051322A (ko) * 2002-12-12 2004-06-18 주식회사 안철수연구소 실행중인 파일에 대한 실시간 데이터 수정 방법 및 이를이용한 바이러스 치료방법
KR100620313B1 (ko) * 2005-06-15 2006-09-06 (주)이월리서치 마이크로소프트 실행파일의 구조적 특성을 이용한 악성프로그램 검출 시스템 및 방법

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
"악성코드 분석가 입장에서 본 PE 구조", ASEC Report 5월, (주)안철수연구소, 2007.6

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101162051B1 (ko) 2010-12-21 2012-07-03 한국인터넷진흥원 문자열 비교 기법을 이용한 악성코드 탐지 및 분류 시스템 및 그 방법
KR101428781B1 (ko) 2012-11-15 2014-08-08 한국전자통신연구원 컴파일러 정보 유사도를 이용한 실행파일 분류 장치 및 방법

Also Published As

Publication number Publication date
KR20090129609A (ko) 2009-12-17

Similar Documents

Publication Publication Date Title
KR100968267B1 (ko) 컴파일러 구분에 의한 악성코드 진단장치 및 방법
US11258813B2 (en) Systems and methods to fingerprint and classify application behaviors using telemetry
US8171551B2 (en) Malware detection using external call characteristics
US9015814B1 (en) System and methods for detecting harmful files of different formats
KR101246623B1 (ko) 악성 애플리케이션 진단 장치 및 방법
US11048798B2 (en) Method for detecting libraries in program binaries
US20170372068A1 (en) Method to identify known compilers functions, libraries and objects inside files and data items containing an executable code
Ng et al. Expose: Discovering potential binary code re-use
KR100942798B1 (ko) 악성코드 탐지장치 및 방법
KR101228899B1 (ko) 벡터량 산출을 이용한 악성코드의 분류 및 진단 방법과 장치
KR20090051956A (ko) 악성 코드에 의해 삽입된 동적 연결 라이브러리 검출 장치 및 방법
KR20150103903A (ko) 악성 코드 검출 장치 및 그 방법
Ahmadi et al. Finding bugs using your own code: detecting functionally-similar yet inconsistent code
KR101110308B1 (ko) 실행압축 특성을 이용한 악성코드 탐지장치 및 그 방법
JP6559600B2 (ja) 情報処理装置、情報処理プログラムおよび検査システム
Mitchell et al. Systematic audit of third-party android phones
KR102380434B1 (ko) 도커 파일 분석을 수행하는 도커 이미지 취약점 검사 장치 및 방법
Brito et al. Study of JavaScript Static Analysis Tools for Vulnerability Detection in Node. js Packages
Kim et al. Malicious behavior detection method using api sequence in binary execution path
CN114328168A (zh) 异常检测方法、装置、计算机设备和存储介质
CN111753298A (zh) 文件异常识别方法、装置、设备和计算机可读存储介质
US11270000B1 (en) Generation of file digests for detecting malicious executable files
CN114925369A (zh) 一种针对业务系统容器安全的静态分析方法与系统
JP6911928B2 (ja) 仮説検証装置、仮説検証方法、及びプログラム
Santos et al. Generating Features of Windows Portable Executable Files for Static Analysis using Portable Executable Reader Module (PEFile)

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20130701

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20140630

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20160629

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20190701

Year of fee payment: 10