1 |
1
컴퓨팅 장치에 의해 수행되는 방법에 있어서,패치(patch) 대상인 제1 바이너리를 메모리에 로드 하는 단계;상기 제1 바이너리의 취약 함수의 기본 블록에서 상기 취약 함수의 스택 프레임 사이즈를 획득한 후, 상기 제1 바이너리의 취약 함수의 기본 블록에 스택 프레임 초기화 함수가 호출 되도록 패치하여 제2 바이너리를 생성하는 단계; 및상기 제2 바이너리 실행시, 상기 취약 함수가 호출되는 것을 통해 상기 스택 프레임 초기화 함수가 실행됨으로써, 상기 취약 함수의 스택 프레임 사이즈 만큼 상기 취약 함수의 스택 프레임 영역이 초기화 되는 것에 의하여 자동적으로 상기 취약 함수에서 선언된 변수가 초기화 되도록 하는 단계를 포함하는, 취약점이 존재하는 바이너리 패치 방법
|
2 |
2
제1 항에 있어서,제2 바이너리를 생성하는 단계는,상기 패치 수행시 생성되는 복수개의 데이터를 데이터베이스(database)에 저장하는 단계를 포함하되,상기 데이터베이스의 키(Key)는 스택 프레임 초기화 패처의 인식번호이고, 상기 데이터베이스의 값(value)은 상기 제1 바이너리의 해시(hash) 값, 상기 제1 바이너리의 경로, 상기 제2 바이너리의 해시 값, 상기 제2 바이너리의 경로, 상기 스택 프레임 초기화 패처가 적용한 상기 패치의 유형 인식번호, 상기 패치 수행시 사용된 입력값 및 상기 패치의 성공 여부에 관한 정보를 포함하는,취약점이 존재하는 바이너리 패치 방법
|
3 |
3
제1 항에 있어서,제2 바이너리를 생성하는 단계는,제1 바이너리에서, 상기 취약 함수의 기본 블록(basic block)에 포함되는 제1 분석대상 블록을 명령어 단위로 분석하여 상기 취약 함수의 스택 프레임 사이즈를 획득하는 단계; 상기 스택 프레임 사이즈를 실행 설정 파일에 저장하는 단계; 및상기 제1 분석대상 블록의 바로 뒷부분에 패치 포인트를 생성하고, 상기 패치 포인트에 상기 스택 프레임 초기화 함수 호출부 블록을 삽입하는 단계를 포함하는취약점이 존재하는 바이너리 패치 방법
|
4 |
4
제3 항에 있어서,상기 제1 분석대상 블록을 명령어 단위로 분석하여 상기 취약 함수의 스택 프레임 사이즈를 획득하는 단계는,상기 제1 분석대상 블록의 스택 포인터(stack pointer) 레지스터 값을 이용하여 상기 스택 프레임 사이즈를 획득하는 단계를 포함하는,취약점이 존재하는 바이너리 패치 방법
|
5 |
5
제3 항에 있어서,상기 제1 분석대상 블록을 명령어 단위로 분석하여 상기 취약 함수의 스택 프레임 사이즈를 획득하는 단계는,상기 제1 바이너리에, 버퍼 오버플로우(buffer overflow)를 방지하기 위해 카나리(canary) 영역을 생성하는 SSP(Stack Smashing Protector)가 적용되었는지 확인하는 단계; 및상기 카나리 영역을 초기화 하지 않기 위해, 상기 스택 프레임 사이즈에서 상기 카나리 영역의 사이즈를 제외하는 단계를 포함하는취약점이 존재하는 바이너리 패치 방법
|
6 |
6
제5 항에 있어서,상기 제1 바이너리에 상기 SSP가 적용되었는지 확인하는 단계는,상기 제1 바이너리에 상기 SSP가 적용되었는지를 검증하는 스크립트를 이용하여 상기 바이너리의 상기 SSP의 적용 여부를 확인하는 1차 검증 단계; 및상기 취약 함수의 제2 분석대상 블록을 분석하여 상기 취약 함수의 상기 카나리 영역의 존재 여부를 확인하는 2차 검증 단계를 포함하는취약점이 존재하는 바이너리 패치 방법
|
7 |
7
제3 항에 있어서,상기 취약 함수의 스택 프레임 영역이 초기화 되는 것에 의하여 자동적으로 상기 취약 함수에서 선언된 변수가 초기화 되도록 하는 단계는,상기 스택 프레임 초기화 함수가 상기 스택 프레임 초기화 함수의 지역 변수가 저장된 지점에서 상기 취약 함수의 상기 스택 프레임의 시작 지점까지 거리를 연산한 값과 상기 스택 프레임 사이즈를 이용하여 상기 취약 함수의 상기 스택 프레임을 초기화 하는 단계를 포함하는취약점이 존재하는 바이너리 패치 방법
|
8 |
8
컴퓨팅 장치에 의해 수행되는 방법에 있어서,패치(patch) 대상인 제1 바이너리를 메모리에 로드 하는 단계;상기 제1 바이너리의 취약 함수의 호출부 블록에서 상기 취약 함수의 스택 가용 최대값을 획득한 후, 상기 취약 함수가 호출되는 대신 버퍼 크기 검증 함수가 호출 되도록 패치하여 제2 바이너리를 생성하는 단계; 및상기 제2 바이너리 실행시, 상기 취약 함수 실행 보다 버퍼 크기 검증 함수가 먼저 실행됨으로써, 상기 스택 가용 최대값을 이용하여 취약 함수의 버퍼 크기가 변경된 후 상기 취약 함수가 실행되는 것에 의하여 자동적으로 상기 취약 함수에서의 버퍼 오버플로우 발생이 방지되도록 하는 단계를 포함하는취약점이 존재하는 바이너리 패치 방법
|
9 |
9
제8 항에 있어서,상기 제2 바이너리를 생성하는 단계는,제1 바이너리에서, 상기 취약 함수의 호출부 블록을 분석하여 상기 취약 함수의 스택 가용 최대값을 획득하는 단계; 상기 스택 가용 최대값을 실행 설정 파일에 저장하는 단계; 및상기 취약 함수의 호출부 블록을 상기 버퍼 크기 검증 함수의 호출부 블록으로 치환하는 단계를 포함하는취약점이 존재하는 바이너리 패치 방법
|
10 |
10
제9 항에 있어서,상기 취약 함수의 호출부 블록을 분석하여 상기 취약 함수의 스택 가용 최대값을 획득하는 단계는,상기 취약 함수의 매개변수 구조를 분석하여, 상기 취약 함수의 상기 매개변수 중 목적지 매개변수의 순서를 획득하는 단계; 및상기 목적지 매개변수를 저장하는 레지스터 값을 이용하여 상기 스택 가용 최대값을 획득하는 단계를 포함하는,취약점이 존재하는 바이너리 패치 방법
|
11 |
11
제9 항에 있어서,상기 취약 함수의 호출부 블록을 분석하여 상기 취약 함수의 스택 가용 최대값을 획득하는 단계는,상기 제1 바이너리에, 버퍼 오버플로우(buffer overflow)를 방지하기 위해 카나리(canary) 영역을 생성하는 SSP(Stack Smashing Protector)가 적용되었는지 확인하는 단계; 및상기 카나리 영역에 버퍼 쓰기 행위를 허용하지 않기 위해, 상기 스택 가용 최대값에서 상기 카나리 영역의 사이즈를 제외하는 단계를 포함하는,취약점이 존재하는 바이너리 패치 방법
|
12 |
12
제11 항에 있어서,상기 바이너리에 상기 SSP가 적용되었는지 확인하는 단계는,상기 제1 바이너리에 상기 SSP가 적용되었는지를 검증하는 스크립트를 이용하여 상기 바이너리의 SSP적용 여부를 확인하는 1차 검증 단계; 및상기 취약 함수의 제2 분석대상 블록을 분석하여 상기 취약 함수의 카나리 영역의 존재 여부를 확인하는 2차 검증 단계를 포함하는,취약점이 존재하는 바이너리 패치 방법
|
13 |
13
제8 항에 있어서,상기 취약 함수의 버퍼 크기가 검증된 후 상기 취약 함수가 실행되는 것에 의하여 자동적으로 상기 취약 함수에서의 버퍼 오버플로우 발생이 방지되도록 하는 단계는,상기 버퍼 크기 검증 함수가 호출되어, 상기 취약 함수의 버퍼 크기가 스택 가용 최대값을 초과하는지 검증하는 단계; 및상기 취약 함수의 버퍼 크기가 상기 스택 가용 최대값을 초과하는 경우, 상기 취약 함수의 버퍼 크기를 상기 스택 가용 최대값을 이용하여 변경한 후 상기 취약 함수를 호출하는 단계를 포함하는,취약점이 존재하는 바이너리 패치 방법
|