Format String Attack! 포맷 스트링 공격 경일대학교 사이버보안학과 20154015 3학년 남주호.

Slides:



Advertisements
Similar presentations
프로그램이란 프로그램 생성 과정 프로젝트 생성 프로그램 실행 컴퓨터를 사용하는 이유는 무엇인가 ? – 주어진 문제를 쉽고, 빠르게 해결하기 위해서 사용한다. 컴퓨터를 사용한다는 것은 ? – 컴퓨터에 설치 혹은 저장된 프로그램을 사용하는 것이다. 문제를 해결하기 위한.
Advertisements

6 장. printf 와 scanf 함수에 대한 고찰 printf 함수 이야기 printf 는 문자열을 출력하는 함수이다. – 예제 printf1.c 참조 printf 는 특수 문자 출력이 가능하다. 특수 문자의 미 \a 경고음 소리 발생 \b 백스페이스 (backspace)
1 08 배열. 한국대학교 객체지향연구소 2 C 로 배우는 프로그래밍 기초 2 nd Edition 배열  동일한 자료유형의 여러 변수를 일괄 선언  연속적인 항목들이 동일한 크기로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는.
- 1 - 정보 보안 개론과 실습 시스템 해킹과 보안 팀원 : 박진영 한동섭 · 권혁진.
Chapter 9 Format String Bug (FSB)
기초C언어 제1주 실습 강의 소개, C언어 개요, Cygwin/Eclipse 사용 컴퓨터시뮬레이션학과 2016년 봄학기
ㅎㅎ 구조체 C++ 프로그래밍 기초 : 객체지향의 시작 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스
ㅎㅎ C++ 프로그래밍의 첫 걸음 C++로 프로그래밍한다는 것의 의미 세상에서 가장 간단한 C++ 프로그램
2장. 프로그램의 기본 구성. 2장. 프로그램의 기본 구성 2-1"Hello, World!" 들여다 보기 /* Hello.c */ #include int main(void) { printf("Hello, World! \n"); return 0;
컴퓨터프로그래밍 1주차실습자료 Visual Studio 2005 사용법 익히기.
Image & Video processing
Introduction To Computers
Cross Compiler를이용한 커널 컴파일 및 포팅 1
실습 7-3 gdb 분석을 통해 취약 프로그램의 힙 버퍼 오버플로우 개념 이해하기
컴퓨터 프로그래밍 기초 [Final] 기말고사
HeartBleed.
Power Java 제2장 자바 개발 도구.
C 언어 1 1주차 C언어 시작하기 - 1차시 C 언어 특징 및 프로젝트 생성 Programming Language.
발표자 : 손충호 조원 : 유진우, 노유성, 조사랑, 손충호
ANSYS17.2 Student 제품 무료 다운로드
나민영 서경대학교 컴퓨터공학과 CGVR Lab 같이만들어보자 5주차 OpenCV 설정 및 기초.
제15장 파일 입출력 문자열을 출력하는 여러가지 방법 (15-2쪽) 문자열만 처리하는 입출력 함수
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
Java 기초 (Java JDK 설치 및 환경설정)
한국골프대학 종합정보시스템 Windows Vista 사용자를 위한 Component 설치안내서
한국골프대학 종합정보시스템 Windows 7 사용자를 위한 Component 설치안내서
CHAPTER 02 OpenCV 개요 PART 01 영상 처리 개요 및 OpenCV 소개.
25강. Security-I 보안 관련 프로젝트 생성 보안 관련 라이브러리 추가 보안 관련 설정 파일 만들기
C / C++ Programming in multi platform
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
8장 함수 함수의 필요성 라이브러리 함수와 사용자 정의 함수 함수의 정의, 원형, 호출 배열을 함수 인자로 전달 재귀호출.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
22강. 파일 업로드 - 파일 업로드 라이브러리 설치 - 파일 업로드 프로그래밍 Lecturer Kim Myoung-Ho
ARM Development Suite v1.2
Cross Compiler 설치.
11 표준 입출력과 파일 입출력 데이터를 읽고 쓰는 다양한 방법 익히기!.
6장. printf와 scanf 함수에 대한 고찰
14장. 포인터와 함수에 대한 이해.
11장. 1차원 배열.
Cross Compiler를이용한 커널 컴파일 및 포팅
AVR – ATmega103(ATMEL) Compilers & ISP
13. 연산자 오버로딩.
C 2장. C 프로그램 시작하기 #include <stdio.h> int main(void) { int num;
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
이름 : 황 상 두 전화번호 : 이메일 : PinTool 이름 : 황 상 두 전화번호 : 이메일 :
Device Driver 임베디드 시스템 I.
제 1장. C++ 시작하기.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
자바 5.0 프로그래밍.
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
문자열 컴퓨터시뮬레이션학과 2015년 봄학기 담당교수 : 이형원 E304호,
Internet Protocol and Programming
컴퓨터 프로그래밍 기초 [01] Visual Studio 설치 및 사용방법
컴퓨터 계측 및 실습 디지털 출력 영남대학교 기계공학부.
Canary value 스택 가드(Stack Guard).
제 6 강 Getting started.
OpenCV 설정 2.21 만든이 딩딩.
제 15 강 문자와 코드 shcho.pe.kr.
Internet Protocol and Programming
문자열 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
기초C언어 제2주 실습 프로그래밍의 개념, 프로그램 작성 과정 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원
Internet Protocol and Programming
실습과제 (변수와 자료형, ) 1. 다음 작업 (가), (나), (다)를 수행하는 프로그램 작성
동적메모리와 연결 리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
제 29 강 스트링(string) 다루기 s a i s . s T i h t g r i n.
김선균 컴퓨터 프로그래밍 기초 - 12th : 문자열 - 김선균
29장. 템플릿과 STL 01_ 템플릿 02_ STL.
윈도우에서의 유니코드.
2019 2학기 9장 배열과 포인터 1. 주소, 주소연산자(&) 2. 포인터, 역참조연산자(*) 3. 배열과 포인터.
Presentation transcript:

Format String Attack! 포맷 스트링 공격 경일대학교 사이버보안학과 20154015 3학년 남주호

실습 시 필요한 툴 및 프로그램 프로그램 VMware-workstation-6.5.2-156735.exe keygen.exe RedHat 6.2 (vmware) - Linux_RedHat_Now.zip

프로그램 및 RedHot Linux 다운로드 URL 암호 http://me2.do/G4sREgE4 test1234 http://me2.do/G69qcYGK

목차 1. 포맷스트링이란? 2. 포맷스트링 공격이란? 3. 주요 포맷스트링 종류 4. 포맷스트링의 취약점 발생이유 5. 포맷스트링 사용 예 6. 포맷스트링 실습

1. 포맷스트링이란? C언어에서 버퍼에 저장된 문자열을 printf()함수를 이용하여 출력할 때 사용되는 %s와 같은 문자열을 가르켜 포맷 스트링 이라고 한다. ex) #include <stdio.h> Main(){ Char *buffer = “wishfree”; Printf(“%s\n”,buffer); 포맷스트링 }

2. 포맷스트링 공격이란? - Ret값을 변조하여 관리자 권한을 얻을 수 있는 공격기법 - 프로그래밍 의 실수를 이용한 공격기법 - 여전히 사용되는 공격기법 - 공격 기법을 이해하기만 하면 제어하기 매우 쉽다

문자 스트링((const)(unsigned) char *) 3. 주요 포맷스트링 종류 매개변수 형식 %d 정수형 10진수 상수(Integer) %f 실수형 상수(float) %lf 실수형 상수(double) %c 문자 값(char) %s 문자 스트링((const)(unsigned) char *) %u 10진수 양의 정수 %o 8진수 양의 정수 %x 16진수 양의 정수 문자열 %n *Int(총 바이트 수) 지금까지 출력한 총 바이트 수 %hn %n의 반인 2바이트 단위

4. 포맷스트링의 취약점 발생이유 포맷스트링 문자를 이용하지 않고, printf와 같은 함수를 이용하는 데 있다.

5. 포맷스트링 사용 예 올바른 사용 예 잘못된 사용 예 #include <stdio.h> main() { char *buffer = "wishfree"; printf("%s\n", buffer); } 올바른 사용 예 #include <stdio.h> main() { char *buffer = "wishfree"; printf(buffer); } 잘못된 사용 예

6. 포맷스트링 실습 정상적인 포맷스트링 Esc 를 누르고 :wq! 입력 후 엔터

포맷스트링 실습 취약점이 있는 포맷스트링 Esc 를 누르고 :wq! 입력 후 엔터

gcc 옵션 옵션 설명 --help 간단한 옵션 출력 --version gcc 버전 출력 -o 출력 파일명 지정 -c 링킹 과정 진행하지 않고 오브젝트 파일까지만 생성 -s 어셈블러까지 진행하지 않고 컴파일러 출력까지 진행 -g 디버깅을 위한 정보를 컴파일 하면서 생성 -D define 할 수 있는 옵션 -l(엘) 라이브러리 이름 지정 -L 추가 라이브러리 디렉토리 지정 -W 모든 에러 메시지 출력 -w 모든 에러 메시지 출력 안함 -i(아이) 추가 헤더 파일이 있는 디렉토리 지정

포맷스트링 실습 주소값 확인 Esc 를 누르고 :wq! 입력 후 엔터

포맷스트링 실습 포맷스트링 변조 Esc 를 누르고 :wq! 입력 후 엔터

Q & A

Thank you