RISS 학술연구정보서비스

검색

인기 검색어

    다국어 입력

    http://chineseinput.net/에서 pinyin(병음)방식으로 중국어를 변환할 수 있습니다.

    변환된 중국어를 복사하여 사용하시면 됩니다.

    예시)
    • 中文 을 입력하시려면 zhongwen을 입력하시고 space를누르시면됩니다.
    • 北京 을 입력하시려면 beijing을 입력하시고 space를 누르시면 됩니다.
    닫기

    기계어 프로그램의 printf() 계열 함수 호출 코드 수정에 의한 실행시간 포맷 스트링 공격 방어 = A Runtime Defense of Binary Programs Against Format String Attacks by Rewriting the Calling Code to printf() Function Family

    한글로보기

    https://www.riss.kr/link?id=T10710931

    • 0

      상세조회
    • 0

      다운로드
    서지정보 열기
    • 내보내기
    • 내책장담기
    • 공유하기
    • 오류접수
    인용문이 복사되었습니다.

    부가정보

    국문 초록 (Abstract) kakao i 다국어 번역

    배포되는 다수의 프로그램들이 개발단계에서 프로그램 내에 존재할 수도 있는 보안 취약점을 탐지하거나 차단하기 위한 처리가 적용되지 않은 채 만들어지고 있다. 비록 기계어 프로그램에 대한 분석이 윈시 프로그램에 비해 어렵지만, 프로그램의 보안취약점을 제거하기 위하여 사용자가 프로그램의 원시 코드를 구해 직접 수정할 수 없는 경우, 개발자로부터 보안 취약점이 수정된 실행 프로그램을 제 시간에 제공받을 수 없는 경우, 그리고 악의적인 개발자에 의해 고의로 만들어진 실행 프로그램내 보안 취약점을 사용자가 직접 수정해야하는 경우에 기계어 실행 프로그램 단계에서 적용할 수 있는 보안 취약점 탐지 및 차단 기법은 매우 유용하다.
    본 논문은 원시 코드 정보를 구할 수 없는 기계어 실행 프로그램을 포맷 스트링 공격으로부터 보호하는 방법을 제시하였다.
    본 논문은 기계어 실행 프로그램을 수정하여 프로그램 실행시간에 포맷 스트링 공격을 방어하는 시스템 도구 Kimchi를 제안하였다. 제안한 방법은 실행 프로그램에 존재하는 printf() 계열 함수들에 대한 호출 코드를 수정하여 포맷 스트링 공격을 탐지하는 기능을 갖도록 작성된 안전한 safe printf() 계열 함수들을 호출하도록 한다. 안전한 safe printf() 계열 함수들은 주어진 매개변수 영역을 넘어서거나 자신을 호출한 부모 함수의 스택 프레임을 넘어서는 매개변수 접근을 차단하여 포맷 스트링 공격 가능성을 완화시킨다. 제안한 함수의 스택 사용에 대한 프로그램 정적분석과 기계어 실행 프로그램 수정 방법은 프레임 포인터 레지스터를 사용하지 않도록 컴파일되거나 printf() 코드가 정적으로 연결된 이진 실행 프로그램에도 적용될 수 있다. 제안한 방법은 printf(buf) 형태와 같은 추가 포맷 매개변수를 갖지 않는 printf() 호출 코드를 printf("%s", buf) 형태와 같이 포맷 스트링 공격에 취약하지 않는 코드로 수정하고, 읽기 전용 기억장소 영역에 있어 포맷 스트링 공격에 취약하지 않는 포맷 스트링을 매개변수로 갖는 printf() 계열 함수 호출은 수정하지 않음으로써 safe printf() 계열 함수의 안전성 검사로 인한 프로그램 속도 저하를 줄인다. 그리고 정적분석을 통해 분석하기 어려운 printf() 계열 함수에 대한 함수 포인터를 이용한 간접 호출을 포맷 스트링 공격으로부터의 보호 방법을 제시하였으며, 사용자 정의형 printf() 계열 함수를 정적분석을 통해 탐지하여 포맷 스트링 공격으로부터 이 함수들을 보호하는 방법을 제시하였다.
    본 논문의 제안 방법은 기계어 실행 프로그램 수준에서 포맷 스트링 공격 방어를 다룬 기존 방법들에 비해 더 다양한 기계어 코드 구성 유형의 기계어 프로그램들을 포맷 스트링 공격으로부터 보호할 수 있으며 공격 차단 능력도 더 강화시키므로 해커 또는 웜 등의 소프트웨어의 보안 취약점에 대한 공격으로부터 시스템을 더욱 안전하게 보호하는데 기여할 것으로 기대된다. 본 논문은 프로그램의 포맷 스트링 보안 취약점을 방어하기 위하여 기존에 시도되지 않은 새로운 접근 방법인 기계어 프로그램을 직접 수정하는 프로그램 변환 기법을 적용하였다. 본 논문의 접근 방법은 Prasad가 제안한 버퍼 오버플로우 취약점을 보호하기 위한 기계어 프로그램 수정 기법과 함께 소프트웨어 보안 취약점 수정을 위한 기계어 프로그램 수정 기법의 가능성과 유용성의 확인에 기여하였다.
    번역하기

    배포되는 다수의 프로그램들이 개발단계에서 프로그램 내에 존재할 수도 있는 보안 취약점을 탐지하거나 차단하기 위한 처리가 적용되지 않은 채 만들어지고 있다. 비록 기계어 프로그램에...

    배포되는 다수의 프로그램들이 개발단계에서 프로그램 내에 존재할 수도 있는 보안 취약점을 탐지하거나 차단하기 위한 처리가 적용되지 않은 채 만들어지고 있다. 비록 기계어 프로그램에 대한 분석이 윈시 프로그램에 비해 어렵지만, 프로그램의 보안취약점을 제거하기 위하여 사용자가 프로그램의 원시 코드를 구해 직접 수정할 수 없는 경우, 개발자로부터 보안 취약점이 수정된 실행 프로그램을 제 시간에 제공받을 수 없는 경우, 그리고 악의적인 개발자에 의해 고의로 만들어진 실행 프로그램내 보안 취약점을 사용자가 직접 수정해야하는 경우에 기계어 실행 프로그램 단계에서 적용할 수 있는 보안 취약점 탐지 및 차단 기법은 매우 유용하다.
    본 논문은 원시 코드 정보를 구할 수 없는 기계어 실행 프로그램을 포맷 스트링 공격으로부터 보호하는 방법을 제시하였다.
    본 논문은 기계어 실행 프로그램을 수정하여 프로그램 실행시간에 포맷 스트링 공격을 방어하는 시스템 도구 Kimchi를 제안하였다. 제안한 방법은 실행 프로그램에 존재하는 printf() 계열 함수들에 대한 호출 코드를 수정하여 포맷 스트링 공격을 탐지하는 기능을 갖도록 작성된 안전한 safe printf() 계열 함수들을 호출하도록 한다. 안전한 safe printf() 계열 함수들은 주어진 매개변수 영역을 넘어서거나 자신을 호출한 부모 함수의 스택 프레임을 넘어서는 매개변수 접근을 차단하여 포맷 스트링 공격 가능성을 완화시킨다. 제안한 함수의 스택 사용에 대한 프로그램 정적분석과 기계어 실행 프로그램 수정 방법은 프레임 포인터 레지스터를 사용하지 않도록 컴파일되거나 printf() 코드가 정적으로 연결된 이진 실행 프로그램에도 적용될 수 있다. 제안한 방법은 printf(buf) 형태와 같은 추가 포맷 매개변수를 갖지 않는 printf() 호출 코드를 printf("%s", buf) 형태와 같이 포맷 스트링 공격에 취약하지 않는 코드로 수정하고, 읽기 전용 기억장소 영역에 있어 포맷 스트링 공격에 취약하지 않는 포맷 스트링을 매개변수로 갖는 printf() 계열 함수 호출은 수정하지 않음으로써 safe printf() 계열 함수의 안전성 검사로 인한 프로그램 속도 저하를 줄인다. 그리고 정적분석을 통해 분석하기 어려운 printf() 계열 함수에 대한 함수 포인터를 이용한 간접 호출을 포맷 스트링 공격으로부터의 보호 방법을 제시하였으며, 사용자 정의형 printf() 계열 함수를 정적분석을 통해 탐지하여 포맷 스트링 공격으로부터 이 함수들을 보호하는 방법을 제시하였다.
    본 논문의 제안 방법은 기계어 실행 프로그램 수준에서 포맷 스트링 공격 방어를 다룬 기존 방법들에 비해 더 다양한 기계어 코드 구성 유형의 기계어 프로그램들을 포맷 스트링 공격으로부터 보호할 수 있으며 공격 차단 능력도 더 강화시키므로 해커 또는 웜 등의 소프트웨어의 보안 취약점에 대한 공격으로부터 시스템을 더욱 안전하게 보호하는데 기여할 것으로 기대된다. 본 논문은 프로그램의 포맷 스트링 보안 취약점을 방어하기 위하여 기존에 시도되지 않은 새로운 접근 방법인 기계어 프로그램을 직접 수정하는 프로그램 변환 기법을 적용하였다. 본 논문의 접근 방법은 Prasad가 제안한 버퍼 오버플로우 취약점을 보호하기 위한 기계어 프로그램 수정 기법과 함께 소프트웨어 보안 취약점 수정을 위한 기계어 프로그램 수정 기법의 가능성과 유용성의 확인에 기여하였다.

    더보기

    다국어 초록 (Multilingual Abstract) kakao i 다국어 번역

    A majority of distributed binary programs are still built without any security protection mechanism. Although the static analysis of binary programs is more difficult compared with source programs, the security protection of a binary program without source code information is expedient when we can neither rebuild it from the patched source code nor obtain the patched binary program from the vendor in a timely manner; or when a malicious developer might introduce security holes deliberately in the binary program.
    This thesis focuses on the protection of a binary program--whose source code is not available--from format string attacks.
    Format string vulnerability occurs when a format string argument of the printf() family function in the standard C library includes a user input string which can be manipulated by an attacker; the attacker can execute arbitrary malicious code by modifying the program's critical memory using this vulnerability.
    This thesis proposes a binary rewriting system called Kimchi that modifies binary programs to protect them from format string attacks in runtime. Kimchi replaces the machine code calling conventional printf() family with code calling the corresponding safer version of printf() family, safe printf() family, that prevents its format string from accessing arguments exceeding the given parameter range or the stack frame of the parent function. With the proposed static analysis and binary rewriting method, it can protect binary programs even if they do not use the frame pointer register or link printf() family statically. Kimchi replaces the calls to printf() family without extra format arguments like printf(buf) with the safe code printf("%s", buf), which are not vulnerable, and reduces the performance overhead of the patched program by not modifying the calls to printf() family with the format string argument located in the read-only memory segment, which are not vulnerable to the format string attack. Kimchi can protect the indirect calls to printf() family via function pointers using the pre-calculated hash table of function-call parameters in binary rewriting stage. In addition, Kimchi detects user defined printf() family functions by static analysis of binary code pattern and protects the calls to the user defined printf() family by the same protection method to printf() family.
    번역하기

    A majority of distributed binary programs are still built without any security protection mechanism. Although the static analysis of binary programs is more difficult compared with source programs, the security protection of a binary program without s...

    A majority of distributed binary programs are still built without any security protection mechanism. Although the static analysis of binary programs is more difficult compared with source programs, the security protection of a binary program without source code information is expedient when we can neither rebuild it from the patched source code nor obtain the patched binary program from the vendor in a timely manner; or when a malicious developer might introduce security holes deliberately in the binary program.
    This thesis focuses on the protection of a binary program--whose source code is not available--from format string attacks.
    Format string vulnerability occurs when a format string argument of the printf() family function in the standard C library includes a user input string which can be manipulated by an attacker; the attacker can execute arbitrary malicious code by modifying the program's critical memory using this vulnerability.
    This thesis proposes a binary rewriting system called Kimchi that modifies binary programs to protect them from format string attacks in runtime. Kimchi replaces the machine code calling conventional printf() family with code calling the corresponding safer version of printf() family, safe printf() family, that prevents its format string from accessing arguments exceeding the given parameter range or the stack frame of the parent function. With the proposed static analysis and binary rewriting method, it can protect binary programs even if they do not use the frame pointer register or link printf() family statically. Kimchi replaces the calls to printf() family without extra format arguments like printf(buf) with the safe code printf("%s", buf), which are not vulnerable, and reduces the performance overhead of the patched program by not modifying the calls to printf() family with the format string argument located in the read-only memory segment, which are not vulnerable to the format string attack. Kimchi can protect the indirect calls to printf() family via function pointers using the pre-calculated hash table of function-call parameters in binary rewriting stage. In addition, Kimchi detects user defined printf() family functions by static analysis of binary code pattern and protects the calls to the user defined printf() family by the same protection method to printf() family.

    더보기

    목차 (Table of Contents)

    • 1 서론 = 1
    • 2 관련 연구 = 5
    • 2.1 Intel IA-32 시스템 구조 = 5
    • 2.1.1 기억장소 = 5
    • 2.1.2 레지스터 = 6
    • 1 서론 = 1
    • 2 관련 연구 = 5
    • 2.1 Intel IA-32 시스템 구조 = 5
    • 2.1.1 기억장소 = 5
    • 2.1.2 레지스터 = 6
    • 2.1.3 IA-32 CPU 기계어 명령 코드 = 7
    • 2.2 IA-32 어셈블리어 프로그래밍 = 8
    • 2.2.1 기본 데이터 처리 명령 = 8
    • 2.2.2 선택과 반복 실행 = 10
    • 2.2.3 함수 = 15
    • 2.2.4 실행시간 기억장소 구조 = 24
    • 2.3 ELF 기계어 실행 프로그램 = 27
    • 2.3.1 ELF 기계어 실행 프로그램 구조 = 27
    • 2.3.2 ELF 기계어 실행 프로그램의 정적 연결과 동적 연결 = 29
    • 2.4 포맷 스트링 보안 취약점 = 38
    • 2.4.1 포맷 스트링과 관련 함수 = 38
    • 2.4.2 포맷 스트링 취약점 = 41
    • 2.4.3 포맷 스트링 취약점을 이용한 공격 방법 = 44
    • 2.4.4 포맷 스트링 취약점 사례 = 54
    • 2.5 포맷 스트링 공격 방어에 관한 기존 방법 = 67
    • 2.5.1 libsafe = 67
    • 2.5.2 libformat = 68
    • 2.5.3 TaintCheck = 69
    • 2.5.4 기계어 프로그램 수정에 의한 보안 공격 차단 기법들 = 71
    • 2.5.5 기계어 프로그램에 대한 일반적인 보안 공격 방어 기법들 = 72
    • 3 포맷 스트링 공격 방어를 위한 기계어 프로그램 수정 = 73
    • 3.1 읽기 전용 포맷 스트링 매개변수 = 73
    • 3.2 추가 포맷 매개변수를 갖지 않는 printf() 함수 호출 = 73
    • 3.3 추가 포맷 매개변수를 갖는 printf() 함수 호출 = 75
    • 3.3.1 실행시간 포맷 스트링 공격 탐지 = 75
    • 3.3.2 결정가능한 포맷 매개변수를 갖는 printf() 함수 호출 = 77
    • 3.3.3 프레임 포인터 레지스터를 사용하는 함수 안의 printf() 함수 호출 = 78
    • 3.3.4 프레임 포인터 레지스터를 사용하지 않는 함수 안의 printf() 함수 호출 = 80
    • 3.4 함수 포인터에 의한 간접 printf() 호출 = 83
    • 3.5 사용자 정의형 printf() 계열 함수 = 87
    • 4 시스템 구현 및 평가 = 91
    • 4.1 시스템의 구성 = 91
    • 4.2 ELF 기계어 프로그램 입력 및 분석 = 92
    • 4.3 기계어 프로그램에 대한 디스어셈블 = 93
    • 4.4 제어 흐름 그래프 구성 = 93
    • 4.5 printf() 계열 함수 코드 검색 = 94
    • 4.6 printf() 계열 함수 호출 코드 분석 및 기계어 프로그램 수정 정보 생성 = 96
    • 4.7 수정된 기계어 프로그램 생성 = 96
    • 4.8 기계어 코드 수정과 실행 시간 포맷 스트링 공격 탐지 실험 = 102
    • 4.9 수정된 기계어 프로그램의 성능 부하 분석 = 105
    • 4.10 관련 연구와의 비교 = 109
    • 4.10.1 Kimchi = 110
    • 4.10.2 libsafe = 111
    • 4.10.3 libformat = 112
    • 4.10.4 TaintCheck = 112
    • 4.10.5 기계어 프로그램 수정에 의한 보안 공격 차단 기법들 = 113
    • 4.10.6 일반적인 기계어 프로그램에 대한 보안 공격 방어 기법들 = 113
    • 5 결론 및 향후 연구 = 115
    • 부록 A 쉘 코드(Shell Code) = 119
    • A.1 execshell = 119
    • A.2 bindshell = 121
    • A.3 reverse-telnet = 124
    • 부록 B 포맷 스트링 취약점 공격 코드 = 129
    • B.1 CFingerD 원격 포맷 스트링 취약점 공격 코드 = 129
    • B.2 GNU Mailutils imap4d 포맷 스트링 취약점 공격 코드 = 137
    • B.3 Wu-ftpd 2.6.0 포맷 스트링 취약점 원격 root 공격 코드 = 141
    • 부록 C safe printf() 함수 구현 코드 = 147
    • C.1 포맷 스트링 구문 분석 및 안전성 검사 코드 = 147
    • C.2 safe printf() 함수 구현 코드 = 156
    • 참고문헌 = 158
    • 영문초록 = 167
    더보기

    분석정보

    View

    상세정보조회

    0

    Usage

    원문다운로드

    0

    대출신청

    0

    복사신청

    0

    EDDS신청

    0

    동일 주제 내 활용도 TOP

    더보기

    주제

    연도별 연구동향

    연도별 활용동향

    연관논문

    연구자 네트워크맵

    공동연구자 (7)

    유사연구자 (20) 활용도상위20명

    이 자료와 함께 이용한 RISS 자료

    나만을 위한 추천자료

    해외이동버튼