1 |
1
컴퓨팅 장치에서 수행되는 방법으로서,대상 바이너리 내에 패치 코드 블록을 삽입하는 단계; 및상기 대상 바이너리의 취약점 발생 영역의 적어도 일부 인스트럭션을, 상기 패치 코드 블록으로 점프하는 인스트럭션으로 치환하는 단계를 포함하되,상기 패치 코드 블록은, 상기 취약점 발생 영역을 포함하는 함수의 프롤로그부 인스트럭션; 상기 함수의 스택 프레임을 벗어나지 않은 채로, 스택 포인터 레지스터가 가리키는 메모리 주소와 베이스 포인터 레지스터가 가리키는 메모리 주소 사이의 메모리 값들을 초기화하여, 상기 함수의 스택 프레임의 데이터를 초기화하는 인스트럭션; 및 상기 취약점 발생 영역에서 치환된 인스트럭션의 다음 인스트럭션으로 점프하는 인스트럭션을 포함하며,상기 패치 코드 블록의 스택 프레임은 상기 함수의 스택 프레임과 동일하고,상기 패치 코드 블록을 삽입하는 단계는, 상기 대상 바이너리의 유휴 영역을 탐색하는 단계; 및 상기 유휴 영역의 크기가 상기 패치 코드 블록의 크기 이상일 경우, 상기 유휴 영역에 상기 패치 코드를 기록하는 단계를 포함하고,상기 유휴 영역은 상기 대상 바이너리의 텍스트 영역 중 연속된 NOP 명령어로 채워진 영역이며,상기 패치 코드 블록의 삽입 전후에 상기 대상 바이너리 내에 포함된 인스트럭션들의 주소는 그대로 유지되는,바이너리 취약점 패치 방법
|
2 |
2
삭제
|
3 |
3
삭제
|
4 |
4
제1항에 있어서,상기 대상 바이너리의 사이즈는 상기 패치 코드 블록의 삽입 전후에 그대로 유지되는,바이너리 취약점 패치 방법
|
5 |
5
삭제
|
6 |
6
제1항에 있어서,상기 패치 코드 블록을 삽입하는 단계는, 상기 대상 바이너리에 상기 패치 코드 블록을 위한 영역을 추가하고, 상기 추가된 영역에 상기 패치 코드 블록을 기록하는 단계를 포함하는,바이너리 취약점 패치 방법
|
7 |
7
제6항에 있어서,상기 패치 코드 블록을 삽입하는 단계는, 상기 유휴 영역의 크기가 상기 패치 코드 블록의 크기 미만이라는 판정에 응답하여, 상기 대상 바이너리에 상기 패치 코드 블록을 위한 영역을 추가하고, 상기 추가된 영역에 상기 패치 코드 블록을 기록하는 단계를 더 포함하는,바이너리 취약점 패치 방법
|
8 |
8
컴퓨팅 장치에서 수행되는 방법으로서,대상 바이너리 내에 패치 코드 블록을 삽입하는 단계; 및상기 대상 바이너리의 취약점 발생 영역의 적어도 일부 인스트럭션을, 상기 패치 코드 블록으로 점프하는 인스트럭션으로 치환하는 단계를 포함하되,상기 패치 코드 블록은, 상기 대상 바이너리의 실행시 상기 취약점 발생 영역에서 크래시가 발생되는지 판정하는 인스트럭션; 상기 대상 바이너리의 실행시 크래시가 발생된다는 판정에 응답하여, 상기 대상 바이너리의 실행을 중단하는 인스트럭션; 및 상기 대상 바이너리의 실행시 크래시가 발생되지 않는다는 판정에 응답하여, 상기 취약점 발생 영역에서 치환된 인스트럭션의 다음 인스트럭션으로 점프하는 인스트럭션을 포함하며,상기 패치 코드 블록에 포함된 인스트럭션들은 상기 취약점 발생 영역을 포함하는 함수의 스택 프레임을 벗어나지 않은 채로 실행되고,상기 패치 코드 블록을 삽입하는 단계는, 상기 대상 바이너리의 유휴 영역을 탐색하는 단계; 및 상기 유휴 영역의 크기가 상기 패치 코드 블록의 크기 이상일 경우, 상기 유휴 영역에 상기 패치 코드를 기록하는 단계를 포함하고,상기 유휴 영역은 상기 대상 바이너리의 텍스트 영역 중 연속된 NOP 명령어로 채워진 영역이며,상기 패치 코드 블록의 삽입 전후에 상기 대상 바이너리 내에 포함된 인스트럭션들의 주소는 그대로 유지되는,바이너리 취약점 패치 방법
|
9 |
9
삭제
|
10 |
10
제8항에 있어서,상기 크래시는, 비정상적 메모리 접근으로 인한 크래시를 포함하며,상기 판정하는 인스트럭션은, 상기 취약점 발생 영역의 적어도 일부 인스트럭션 중 메모리에 접근하는 인스트럭션의 오퍼랜드로 사용된 레지스터의 값에 기초하여, 상기 바이너리의 실행 흐름을 결정하는 인스트럭션을 포함하는,바이너리 취약점 패치 방법
|
11 |
11
제10항에 있어서,상기 비정상적 메모리 접근은, 널 포인터 사용, 버퍼 오버 라이트, 및 버퍼 언더 라이트 중 적어도 하나를 포함하는,바이너리 취약점 패치 방법
|
12 |
12
삭제
|
13 |
13
제8항에 있어서,상기 패치 코드 블록을 삽입하는 단계는, 상기 유휴 영역의 크기가 상기 패치 코드 블록의 크기 미만이라는 판정에 응답하여, 상기 대상 바이너리에 상기 패치 코드 블록을 위한 영역을 추가하고, 상기 추가된 영역에 상기 패치 코드 블록을 기록하는 단계를 더 포함하는,바이너리 취약점 패치 방법
|
14 |
14
패치 영역 생성부; 및패치 실행부를 포함하되,상기 패치 영역 생성부는, 대상 바이너리의 텍스트 영역 중 유휴 영역을 탐색하고, 상기 유휴 영역의 크기가 패치 코드의 크기 미만일 경우, 상기 대상 바이너리에 상기 패치 코드를 위한 영역을 추가하며, 상기 대상 바이너리 내에 상기 패치 코드가 삽입될 패치 영역을 결정하고,상기 패치 실행부는, 상기 패치 영역에 상기 패치 코드를 삽입하고, 상기 대상 바이너리의 취약점 발생 영역의 적어도 일부 인스트럭션을, 상기 패치 영역으로 점프하는 인스트럭션으로 치환하며,상기 패치 코드는, 상기 취약점 발생 영역을 포함하는 함수의 프롤로그부 인스트럭션; 상기 함수의 스택 프레임을 벗어나지 않은 채로, 스택 포인터 레지스터가 가리키는 메모리 주소와 베이스 포인터 레지스터가 가리키는 메모리 주소 사이의 메모리 값들을 초기화하여, 상기 함수의 스택 프레임의 데이터를 초기화하는 인스트럭션; 및 상기 취약점 발생 영역에서 치환된 인스트럭션의 다음 인스트럭션으로 점프하는 인스트럭션을 포함하고,상기 유휴 영역은 상기 대상 바이너리의 텍스트 영역 중 연속된 NOP 명령어로 채워진 영역이며,상기 패치 코드의 삽입 전후에 상기 대상 바이너리 내에 포함된 인스트럭션들의 주소는 그대로 유지되는,바이너리 취약점 패치 장치
|