Download presentation
Presentation is loading. Please wait.
1
Format String Attack! 포맷 스트링 공격 경일대학교 사이버보안학과 학년 남주호
2
실습 시 필요한 툴 및 프로그램 프로그램 VMware-workstation-6.5.2-156735.exe keygen.exe
RedHat 6.2 (vmware) - Linux_RedHat_Now.zip
3
프로그램 및 RedHot Linux 다운로드 URL
암호 test1234
4
목차 1. 포맷스트링이란? 2. 포맷스트링 공격이란? 3. 주요 포맷스트링 종류 4. 포맷스트링의 취약점 발생이유
5. 포맷스트링 사용 예 6. 포맷스트링 실습
5
1. 포맷스트링이란? C언어에서 버퍼에 저장된 문자열을 printf()함수를 이용하여 출력할 때 사용되는 %s와 같은 문자열을 가르켜 포맷 스트링 이라고 한다. ex) #include <stdio.h> Main(){ Char *buffer = “wishfree”; Printf(“%s\n”,buffer); 포맷스트링 }
6
2. 포맷스트링 공격이란? - Ret값을 변조하여 관리자 권한을 얻을 수 있는 공격기법
- 프로그래밍 의 실수를 이용한 공격기법 - 여전히 사용되는 공격기법 - 공격 기법을 이해하기만 하면 제어하기 매우 쉽다
7
문자 스트링((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바이트 단위
8
4. 포맷스트링의 취약점 발생이유 포맷스트링 문자를 이용하지 않고, printf와 같은 함수를 이용하는 데 있다.
9
5. 포맷스트링 사용 예 올바른 사용 예 잘못된 사용 예 #include <stdio.h> main() {
char *buffer = "wishfree"; printf("%s\n", buffer); } 올바른 사용 예 #include <stdio.h> main() { char *buffer = "wishfree"; printf(buffer); } 잘못된 사용 예
10
6. 포맷스트링 실습 정상적인 포맷스트링 Esc 를 누르고 :wq! 입력 후 엔터
11
포맷스트링 실습 취약점이 있는 포맷스트링 Esc 를 누르고 :wq! 입력 후 엔터
12
gcc 옵션 옵션 설명 --help 간단한 옵션 출력 --version gcc 버전 출력 -o 출력 파일명 지정 -c
링킹 과정 진행하지 않고 오브젝트 파일까지만 생성 -s 어셈블러까지 진행하지 않고 컴파일러 출력까지 진행 -g 디버깅을 위한 정보를 컴파일 하면서 생성 -D define 할 수 있는 옵션 -l(엘) 라이브러리 이름 지정 -L 추가 라이브러리 디렉토리 지정 -W 모든 에러 메시지 출력 -w 모든 에러 메시지 출력 안함 -i(아이) 추가 헤더 파일이 있는 디렉토리 지정
13
포맷스트링 실습 주소값 확인 Esc 를 누르고 :wq! 입력 후 엔터
15
포맷스트링 실습 포맷스트링 변조 Esc 를 누르고 :wq! 입력 후 엔터
16
Q & A
17
Thank you
Similar presentations