1 |
1
컴퓨팅 장치의 프로세서를 이용한 객체지향형 프로그래밍 언어의 바이너리 코드 대상의 타입 컨퓨전 버그(type confusion bug) 탐지 방법으로서, 상기 방법은:객체지향형 프로그래밍 언어의 바이너리 코드를 분석하여, 적어도 하나의 클래스 및 상기 적어도 하나의 클래스의 상속 관계를 복원하는 단계;상기 적어도 하나의 클래스 및 상기 상속 관계를 이용하여, 상기 적어도 하나의 클래스의 레이아웃을 인식하는 단계; 및상기 적어도 하나의 클래스의 레이아웃을 이용하여, 상기 타입 컨퓨전 버그를 탐지하는 단계;를 포함하는,타입 컨퓨전 버그 탐지 방법
|
2 |
2
제 1 항에 있어서,상기 객체지향형 프로그래밍 언어의 바이너리 코드를 분석하여, 적어도 하나의 클래스 및 상기 적어도 하나의 클래스의 상속 관계를 복원하는 단계는,적어도 하나의 다형성 클래스(polymorphic class) 각각에 대한 적어도 하나의 가상 함수 테이블(virtual function table)을 추출하는 단계;상기 적어도 하나의 가상 함수 테이블을 이용하여, 상기 적어도 하나의 다형성 클래스 각각에 대한 생성자(constructor) 및 소멸자(destructor)를 인식하는 단계; 및상기 생성자 및 상기 소멸자를 이용한 덮어쓰기(overwrite) 분석을 통해 상기 적어도 하나의 클래스의 상속 관계를 복원하는 단계;를 포함하는,타입 컨퓨전 버그 탐지 방법
|
3 |
3
제 2 항에 있어서,상기 생성자는,상기 적어도 하나의 클래스에서 오브젝트가 생성될 때 이용되는 메소드(method)이고,상기 소멸자는,상기 적어도 하나의 클래스에서 상기 오브젝트가 파괴될 때 이용되는 메소드인,타입 컨퓨전 버그 탐지 방법
|
4 |
4
제 1 항에 있어서,상기 적어도 하나의 클래스 및 상기 상속 관계를 이용하여, 상기 적어도 하나의 클래스의 레이아웃을 인식하는 단계는,상기 적어도 하나의 클래스 각각의 크기를 인식하는 단계; 및상기 적어도 하나의 클래스 각각의 크기 및 상기 상속 관계를 이용하여, 상기 적어도 하나의 클래스의 레이아웃을 인식하는 단계;를 포함하는,타입 컨퓨전 버그 탐지 방법
|
5 |
5
제 4 항에 있어서,상기 적어도 하나의 클래스 각각의 크기를 인식하는 단계는,CPU의 레지스터로부터 상기 적어도 하나의 클래스에 대한 시작 오프셋(start offset)을 인식하는 단계;상기 적어도 하나의 클래스의 오브젝트의 크기를 인식하여, 상기 적어도 하나의 클래스에 대한 종료 오프셋(end offset)을 인식하는 단계; 및상기 시작 오프셋 및 상기 종료 오프셋을 이용하여, 상기 적어도 하나의 클래스 각각의 크기를 인식하는 단계;를 포함하는,타입 컨퓨전 버그 탐지 방법
|
6 |
6
제 1 항에 있어서,상기 적어도 하나의 클래스의 레이아웃을 이용하여, 상기 타입 컨퓨전 버그를 탐지하는 단계는,적어도 하나의 정상 바이너리 코드를 실행하여, 상기 적어도 하나의 클래스와 관련된 오브젝트에 대한 적어도 하나의 타겟 영역(target area)을 식별하는 단계; 및상기 타겟 영역에 기초하여, 상기 바이너리 코드의 상기 타입 컨퓨전 버그를 탐지하는 단계;를 포함하는,타입 컨퓨전 버그 탐지 방법
|
7 |
7
제 6 항에 있어서,상기 적어도 하나의 정상 바이너리 코드를 실행하여, 상기 적어도 하나의 클래스와 관련된 오브젝트에 대한 적어도 하나의 타겟 영역을 식별하는 단계는,상기 적어도 하나의 정상 바이너리 코드의 어셈블리 인스트럭션이 메모리에 접근할 때, 상기 메모리에 저장된 오브젝트에 대한 접근인지 여부를 판단하는 단계;상기 어셈블리 인스트럭션이 상기 메모리에 저장된 상기 오브젝트에 대한 접근이라고 판단한 경우, 접근 대상의 주소를 인식하는 단계;상기 접근 대상의 주소와 상기 오브젝트의 시작 지점의 차이 값을 산출하여, 상기 오브젝트의 오프셋을 인식하는 단계; 및상기 오브젝트의 오프셋 및 상기 적어도 하나의 클래스의 레이아웃을 이용하여, 상기 오브젝트의 상기 오프셋에 대한 타겟 영역을 식별하는 단계;를 포함하는,타입 컨퓨전 버그 탐지 방법
|
8 |
8
제 6 항에 있어서,상기 타겟 영역에 기초하여, 상기 바이너리 코드의 상기 타입 컨퓨전 버그를 탐지하는 단계는,타겟 바이너리가 실행되어, 클래스 생성자가 호출될 때, 타겟 오브젝트의 메모리 주소 및 클래스 타입을 기록하는 단계; 및상기 타겟 오브젝트에 대한 접근이 발생할 경우, 상기 타겟 오브젝트와 관련된 상기 타겟 영역의 존재 여부에 따라, 상기 타입 컨퓨전 버그의 발생 여부를 판단하는 단계;를 포함하는,타입 컨퓨전 버그 탐지 방법
|
9 |
9
제 8 항에 있어서,상기 타겟 오브젝트에 대한 접근이 발생할 경우, 상기 타겟 오브젝트와 관련된 상기 타겟 영역의 존재 여부에 따라, 상기 타입 컨퓨전 버그의 발생 여부를 판단하는 단계는,상기 기록된 클래스 타입에 상기 타겟 오브젝트와 관련된 상기 타겟 영역이 존재하지 않는 경우, 상기 타입 컨퓨전 버그가 발생됐다고 판단하는 단계;를 포함하는,타입 컨퓨전 버그 탐지 방법
|