버퍼 오버플로우 시스템보안 20061912 류기환 20072204 권재홍.

Slides:



Advertisements
Similar presentations
03 변수와 자료형 세종대학교 최옥경 교수 참고 : 한빛미디어 뇌를 자극하는 C, INFINITY Perfect C.
Advertisements

- 1 - 정보 보안 개론과 실습 시스템 해킹과 보안 팀원 : 박진영 한동섭 · 권혁진.
순천향대학교 정보보호연구회 김 홍 기 포인터와 문자열 순천향대학교 정보보호연구회 김 홍 기
2007 1학기 12 배열.
예외 상황 예제 개발 1실 서버팀 우상욱 소스 첨가(…).
제12장 표준 입출력과 파일 입출력.
Basic of Buffer Over Flow
Linux/UNIX Programming APUE (The Environment of a UNIX Process)
Power C++ 제6장 포인터와 문자열.
C++ Espresso 제3장 배열과 포인터.
C++ Espresso 제3장 배열과 포인터.
공격/대응 Examples.
2014 ITA 8월 강의 C Programming -1주차- C언어 기초 정대진 ( )
-Part3- 제3장 콘솔 입출력과 파일 입출력.
C 프로그래밍 소개 숙명여대 창병모 2011 가을.
Department of Computer Engineering
공학기초설계 Youn-Hee Han 강의 소개 & MinGW & gcc 공학기초설계 Youn-Hee Han
C언어: 배열 (Arrays).
컴퓨터의 기초 제 4강 - 표준 입출력, 함수의 기초 2006년 4월 10일.
버퍼 오버플로우에 대한 대책과 발전된 공격 안전한 함수 사용 버퍼 오버플로우에 취약한 함수 사용하지 않기
ProFrame Utility Template 사용법
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 14. 포인터와 함수에 대한 이해.
쉽게 풀어쓴 C언어 Express 제16장 파일 입출력 C Express Slide 1 (of 23)
HW#1 Source 파일 제출 3.20(수)까지 제출 학번_이름_01.c
Software Exploit and Kernel Protection
Chapter 13 문자 데이터와 문자열 문자 데이터 문자열.
Part 11 문자열 ©우균, 창병모 ©우균, 창병모.
시스템 보안 [Buffer Overflow] DEC, 15, 2013 By 박동혁.
4장. 컴퓨터 시스템의 구성과 기능 다루는 내용 컴퓨터 분해를 통한 본체 살펴보기 컴퓨터 구성요소 컴퓨터의 기능
버퍼 오버플로우 시스템보안 인터넷공학전공 권영락.
10장 메모리 관리.
Department of Computer Engineering
3장. 포인터, 배열, 구조체 포인터, 배열, 구조체 학습목표 기본적 데이터 타입
쉽게 풀어쓴 C언어 Express 제3장 C프로그램 구성요소 C Express.
Computer Architecture
표준 출력 함수 printf 출력 데이터 서식화(formatting) 표준 입력 함수 scanf 입력 데이터 서식화
처음으로 배우는 C 프로그래밍 제5부 추가적인 화제들 제 11 장 파일 처리.
Part 04 입출력과 전처리 ©우균, 창병모 이 슬라이드는 부산대학교 우균이 작성하였습니다. 오류나 수정할 사항 있으면 연락 주세요.
BOF of 2.6 Kernel ! 박수완 / Su-Wan, PARK [ L1nkC] 숭실대학교 정보보호동아리 ACK
Chapter 11 Strings.
C언어 프로그래밍의 이해 Ch14. 파일 입출력.
14주차.
임베디드 소프트웨어 설계.
17장. 문자열 01_ 문자열 사용의 기본 02_ 문자열의 사용.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
Buffer Overflow
배열과 연결리스트 연결리스트 배열 메모리 할당이 연속적이어서 인덱스 사용시 검색이 빠르다.
11장. 1차원 배열 IT응용시스템공학과 김 형 진 교수.
발표자료는 다음링크에서 다운로드 받으실 수 있습니다.
Security and Programming
게임프로그래밍 I - 1차원 배열 - 공주대학교 게임디자인학과 박 찬 교수 2011년 4월 25일.
많은 자료가 있을 때는 배열을 사용한다. 아래는 배열을 사용하는 경우의 예시이다. 상황에 따라 1차원 또는 다차원 배열 필요.
Byte Alignment ㈜ 웰컴정보시스템 김 정 은.
Chapter 4 변수 및 바인딩.
C89(C++03) 프로그래밍 (Part 2) 7 배열 8 변수 범위 9 포인터 10 유도 자료형.
C-언어와 기반구조 정보보호학과 이정수 교수.
Department of Computer Engineering
C언어 (8) 정명희.
HW 1: Buffer Overflow.
JVM의 구조와 메모리 모델 JVM의 내부 구조 클래스 파일 클래스 로더 메소드(method) 영역 힙(heap) 영역
FTZ 과제풀이 Level 11,12 HyunJae Lee
자료구조 세미나 발표 주제: 자료구조 기초 - 1회 차: 자료구조의 정의, 기초 지식 (함수, 포인터, 레퍼런스)
②하단에 장안포털(Portal) 로 접속한다
C.
Virtual Machine Management
C 프로그래밍은 매우 도전적인 작업이다. 도전의 이면에 철저한 준비와 체계적인 노력
Chapter 09. 배열.
한국 휴렛팩커드/고객지원사업본부/IT 기술사업부 박기영
배열.
⊙ 입출력 처리란? data를 입력장치로부터 program 내부로 읽어 들이거나
Presentation transcript:

버퍼 오버플로우 시스템보안 20061912 류기환 20072204 권재홍

목 차 버퍼 오버플로우? 버퍼 오버플로우 공격 버퍼 오버플로우 보안 대책 실 습

버퍼 오버플로우(Buffer overflow)? 프로그램 처리과정에서 데이터가 일시적으로 저장되는 공간 데이터를 모아 놓은 데이터 블록의 개념 C에서 배열이나 포인터 부분에서 많이 사용(문자열 저장) 버퍼 오버플로우 란? Buffer Overrun 이라고도 불림 지정된 버퍼의 크기보다 더 많은 데이터를 입력해서 프로그램이 비 정상적으로 동작하도록 하는 것 메모리에 할당 된 버퍼의 양을 초과하는 데이터를 입력하여 프로그 램의 복귀 주소(retturn address)를 조작, 궁극적으로 해커가 원하 는 코드를 실행하는 것

버퍼 오버플로우(Buffer overflow)? Lower Memory Address Stack-based Buffer Overflow 스택 영역에 버퍼 크기를 초과하는 데이터를 기록하고 저장된 복귀주소를 변경함으로써 임의의 코드를 실행 Heap-based Buffer Overflow 힙 영역에 버퍼 크기를 초과하는 데이터를 기록하고 저장된 복귀주소를 변경함으로써 임의의 코드를 실행 TEXT 영역 TEXT Area Program Header Table DATA Area Initialized DATA Area Uninitialized DATA Area HEAP Area DATA 영역 Heap 영역 STACK 영역 STACK Area High Memory Address

버퍼 오버플로우 공격 공격 대상 공격 절차 취약점이 있는 시스템 주로 root 소유의 setuid 프로그램 취약점 탐지 및 정보수집 OS, Program, Version, etc Exploit code from the well-know security portal sites 혹은 Exploit 작성 Exploit

버퍼 오버플로우 공격 void main(){ char buffer1[5]; char buffer2[10]; }

버퍼 오버플로우 공격 void function(char *str) { } void main() { char buffer[16]; strcpy(buffer,str); } void main() { char large_string[256]; int i; for( i = 0; i < 255; i++) large_string[i] = 'A'; function(large_string); 어떤 프로그램을 실행하게 될때, 스택에는 실행 되는 함수에 관련된 정보들이 쌓이게 된다. 리턴 어드레스(eip), 프레임 포인터(sfp), 지역변수들... 리턴 어드레스에는 해당 함수가 종료되고 난 후 다음 실행 코드의 주소를 저장 하고 있다. 함수가 종료되고 난 후 프로세스는 ret를 스택에서 꺼내어 해당 주 소로 이동하여 다음 코드를 계속 수행하게 될 것이다. 변수의 boundary check를 하지 않은 취약한 프로그램에서 변수를 오버플로우 시켜 이 ret를 덮어쓰므로서 프로그램의 흐름을 원하는 곳으로 바꾸는 것이 바로 stack overflow 공격이다. 원하는 명령을 - 75 - 실행시키는 쉘코드의 작성과 이러한 쉘코드를 실행시킬 수 있도록 return address 를 적절히 지정함으로써 완성되어진다.

버퍼 오버플로우 보안대책 운영체제 커널 패치 경계 검사를 하는 컴파일러 및 링크 사용 사용자 스택 영역에 데이터 기록 금지 함수로부터 복귀할 때 스택의 무결성(integrity) 검사 경계 검사를 하는 컴파일러 및 링크 사용 복귀주소 다음에 “canary” word 를 위치 시킴 “canary” word가 변경되면 스택 오버플로우 공격의 시도 감지 및 보고, 시스템 종료 Random canary 실행할 때마다 canary value를 변경시켜 공격자가 예측 못하도록 함 Null canary(0x00000000) 공격자가 버퍼에 널 문자(0x00)를 넣을 수 없다는 점을 이용 Terminator canary(combination of Null, CR, LF, -l) Null 문자로 끝나지 않는 몇몇 문자열 함수의 문자열 끝문자 이용 어떤 프로그램을 실행하게 될때, 스택에는 실행 되는 함수에 관련된 정보들이 쌓이게 된다. 리턴 어드레스(eip), 프레임 포인터(sfp), 지역변수들... 리턴 어드레스에는 해당 함수가 종료되고 난 후 다음 실행 코드의 주소를 저장 하고 있다. 함수가 종료되고 난 후 프로세스는 ret를 스택에서 꺼내어 해당 주 소로 이동하여 다음 코드를 계속 수행하게 될 것이다. 변수의 boundary check를 하지 않은 취약한 프로그램에서 변수를 오버플로우 시켜 이 ret를 덮어쓰므로서 프로그램의 흐름을 원하는 곳으로 바꾸는 것이 바로 stack overflow 공격이다. 원하는 명령을 - 75 - 실행시키는 쉘코드의 작성과 이러한 쉘코드를 실행시킬 수 있도록 return address 를 적절히 지정함으로써 완성되어진다.

버퍼 오버플로우 보안대책 프로그래머 관점에서의 보안대책 사용 자제 함수들 사용 권장 함수들 Overflow_wrapper 사용 Boundary를 검사하는 컴파일러 및 링커 사용 Boundary를 검사하는 함수 사용 사용 자제 함수들 strcat(), strcpy(), gets(), scanf(), sscanf(), vscanf(), vsscanf(), sprintf(), vsprintf(), gethostbyname() 사용 권장 함수들 strncat(), strncpy(), fgets(), fscanf(), vfscanf(), snprintf(), vsnprintf() Overflow_wrapper 사용 버퍼 크기 검사 후 원래의 프로그램 수행 어떤 프로그램을 실행하게 될때, 스택에는 실행 되는 함수에 관련된 정보들이 쌓이게 된다. 리턴 어드레스(eip), 프레임 포인터(sfp), 지역변수들... 리턴 어드레스에는 해당 함수가 종료되고 난 후 다음 실행 코드의 주소를 저장 하고 있다. 함수가 종료되고 난 후 프로세스는 ret를 스택에서 꺼내어 해당 주 소로 이동하여 다음 코드를 계속 수행하게 될 것이다. 변수의 boundary check를 하지 않은 취약한 프로그램에서 변수를 오버플로우 시켜 이 ret를 덮어쓰므로서 프로그램의 흐름을 원하는 곳으로 바꾸는 것이 바로 stack overflow 공격이다. 원하는 명령을 - 75 - 실행시키는 쉘코드의 작성과 이러한 쉘코드를 실행시킬 수 있도록 return address 를 적절히 지정함으로써 완성되어진다.

정리 버퍼 오버플로우 공격의 위험성 원인 대책 리모트 혹은 로컬에서 인증절차 없이 임의의 권한 획득 손쉽게 구할 수 있는 수없이 많은 exploit 코드 존재 원인 운영체제 : 스택 혹은 힙 영역에 데이터 쓰기 및 실행 허용 컴파일러 : 버퍼의 경계검사 소홀 프로그래머 : 버퍼의 경계검사 소홀 및 적절한 함수 선택에 부주의 대책 운영체제 : 사용자 스택 혹은 힙 영역의 쓰기 및 실행권한 제거 컴파일러 : 버퍼의 경계검사 지원 프로그래머 : 버퍼의 경계검사 철저, 적절한 함수선택, 도구사용 어떤 프로그램을 실행하게 될때, 스택에는 실행 되는 함수에 관련된 정보들이 쌓이게 된다. 리턴 어드레스(eip), 프레임 포인터(sfp), 지역변수들... 리턴 어드레스에는 해당 함수가 종료되고 난 후 다음 실행 코드의 주소를 저장 하고 있다. 함수가 종료되고 난 후 프로세스는 ret를 스택에서 꺼내어 해당 주 소로 이동하여 다음 코드를 계속 수행하게 될 것이다. 변수의 boundary check를 하지 않은 취약한 프로그램에서 변수를 오버플로우 시켜 이 ret를 덮어쓰므로서 프로그램의 흐름을 원하는 곳으로 바꾸는 것이 바로 stack overflow 공격이다. 원하는 명령을 - 75 - 실행시키는 쉘코드의 작성과 이러한 쉘코드를 실행시킬 수 있도록 return address 를 적절히 지정함으로써 완성되어진다.