Canary value 스택 가드(Stack Guard).

Slides:



Advertisements
Similar presentations
6 장. printf 와 scanf 함수에 대한 고찰 printf 함수 이야기 printf 는 문자열을 출력하는 함수이다. – 예제 printf1.c 참조 printf 는 특수 문자 출력이 가능하다. 특수 문자의 미 \a 경고음 소리 발생 \b 백스페이스 (backspace)
Advertisements

Format String Attack! 포맷 스트링 공격 경일대학교 사이버보안학과 학년 남주호.
Part 03 상수, 변수, 자료형 ©우균, 창병모 © 우균, 창병모.
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
ㅎㅎ 구조체 C++ 프로그래밍 기초 : 객체지향의 시작 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스
실습 7-3 gdb 분석을 통해 취약 프로그램의 힙 버퍼 오버플로우 개념 이해하기
제 9 장 구조체와 공용체.
컴퓨터 프로그래밍 기초 [Final] 기말고사
-Part2- 제3장 포인터란 무엇인가.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 12. 포인터의 이해.
FSB 숭실대학교 ACK 박수완(LinkC)
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
7장 오버플로우 학습목표 내용 스택과 힙 버퍼 오버플로우 취약점을 이해한다.
시스템 보안 [Buffer Overflow] DEC, 15, 2013 By 박동혁.
5장. 참조 타입.
제 3장. C보다 나은 C++ II.
C 프로그래밍.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
인공지능실험실 박사 1학기 장성만 TCP/IP Socket Programming… 9장 소켓의 다양한 옵션 인공지능실험실 박사 1학기 장성만
TCP/IP 응용 프로그램에 적용 가능한 다양한 소켓 옵션을 이해하고 활용한다.
14장. 포인터와 함수에 대한 이해.
11장. 1차원 배열.
C 8장. 포인터 #include <stdio.h> int main(void) { int num;
C 2장. C 프로그램 시작하기 #include <stdio.h> int main(void) { int num;
C 프로그래밍 C언어 (CSE2035) (Chap11. Derived types-enumerated, structure, and union) (1-1) Sungwook Kim Sogang University Seoul, Korea Tel:
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
컴퓨터 개론 및 실습 11. 동적 메모리 할당.
이름 : 황 상 두 전화번호 : 이메일 : PinTool 이름 : 황 상 두 전화번호 : 이메일 :
3장 상수 변수 기본 자료형 키워드와 식별자 상수와 변수 기본 자료형 형변환 자료형의 재정의.
메모리 관리 & 동적 할당.
Java의 정석 제 5 장 배 열 Java 정석 남궁성 강의 의
C 3장. 변수와 데이터형 #include <stdio.h> int main(void) { int num;
19. 함수 포인터와 void 포인터.
3장. 변수와 연산자 교안 : 전자정보통신 홈페이지 / 커뮤니티/ 학술세미나
Lesson 2. 기본 데이터형.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
포인터 1차원 배열과 포인터 2차원 배열과 포인터 문자열 배열과 포인터 포인터 배열
논리회로 설계 및 실험 5주차.
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
2장. 변수와 타입.
5장 배열과 문자열 C 프로그래밍.
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
8주차: Strings, Arrays and Pointers
5강. 배열 배열이란? 배열의 문법 변수와 같이 이해하는 배열의 메모리 구조의 이해 레퍼런스의 이해 다차원 배열
보고서 #7 (기한: 6/2) 2개의 스택, stk1, stk2를 이용하여 큐를 구현하라.
문자열 컴퓨터시뮬레이션학과 2015년 봄학기 담당교수 : 이형원 E304호,
Choi Seong Yun 컴퓨터 프로그래밍 기초 #03 : 변수와 자료형 Choi Seong Yun
Fucntion 요약.
데이터 동적 할당 Collection class.
FTZ 과제풀이 Level 11,12 HyunJae Lee
함수, 모듈.
TVM ver 최종보고서
컴퓨터 프로그래밍 기초 - 9th : 배열 / 포인터 -
구조체(struct)와 공용체(union)
Summary of Pointers and Arrays
Numerical Analysis Programming using NRs
Chapter 12 파일 입출력.
바이트 순서 변환 함수 주소 변환 함수 바이트 조작 함수 원격지 호스트 정보를 얻는 함수
동적메모리와 연결 리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
제 4 장 Record.
1. 지역변수와 전역변수 2. auto, register 3. static,extern 4. 도움말 사용법
CHAP 15. 데이터 스토리지.
 6장. SQL 쿼리.
개정판 누구나 즐기는 C언어 콘서트 제13장 동적 메모리 출처: pixabay.
CODE INJECTION 시스템B 김한슬.
Pointers summary.
7 생성자 함수.
2019 2학기 9장 배열과 포인터 1. 주소, 주소연산자(&) 2. 포인터, 역참조연산자(*) 3. 배열과 포인터.
Presentation transcript:

Canary value 스택 가드(Stack Guard)

INDEX UNDERSTANDING OF BUFFER OVERFLOW BASIC KNOWLEDGE OF STACK GUARD SIMPLE ATTACK ON SIMPLE BOF with STACK GUARD

Buffer OverFlow ? 버퍼 : 변수에 데이터를 저장하기 위해 확보되는 임시 메모리 공간 Main() 함수는 스택 프레임이 구성되면서 지역변수, 스택 프레임 포인터, 인 자수, 인자값, 환경변수의 선형 순서로 스택에 배치됨 버퍼 오버플로우 : 입력값의 크기가 버퍼의 크기를 검증하지 않는 개발자의 실수를 기반으로 메모리에 확보된 버퍼의 크기를 초과해서 데이터를 저장함 으로써 버퍼 주변 공간 즉, 리턴 주소까지 덮어씌워지는 현상

SIMPLE VULnerable code (from ftz.11)

BuFFER Look like ? 코드에서 Char str[256] 버퍼 할당 공간은 $0x108 = 264Byte

Buffer looks like ?

WHAT IF WE ATTACK IT In THIS WaY ?

WHAT IS CANARY ? 광산에서 사용하던 카나리아에서 유래 출처 : https://canary.tools

MAIn IDEA OF STACK GUARD 기본적인 버퍼 오버플로우 공격은 연속된 문자열을 버퍼 이상으로 입력하 여 리턴 주소를 변경하는 방식 연속적인 문자입력을 방지하는게 목적 -> 특정 값을 미리 지정

SIMPLE BUFFER PIC WITH SG

EASY EXAMPLE OF CANARY(feat. Ftz 13) long i = 0x1234567 // 스택 가드 선언 char buf[1024] // 버퍼의 크기 1024 setreuid(3094, 3094) // level14 권한으로 실행되도록 설정 if(i !=1234567){ } // 스택가드 변조 여부 검증

EASY EXAMPLE OF CANARY <main+3> sub &0x418, %esp -> 1048의 버퍼 할당 i 의 논리적인 위치를 찾아야 됨!!

Address of long I <Main + 69> cmpl &0x1234567, 0xfffffff4($ebp) char buf[1024]의 크기만큼 ‘A’ 삽입

ADDRESS Of LONG i 0x41 == ‘A’ => ~ 0xbffff8cf 0xbffff8d0으로부터 12바이트 떨어진 곳에 0x1234567 이 위치 <- i에 미리 할당된 값

bUffer pic of this

HOW TO ATTACK THIS SIMPLE THING ?

STEP 1. 쉘 코드 환경변수에 삽입 리턴주소를 쉘 코드가 저장되어 있는 환경변수로 변경예정 <- 제대로 적재 되었음

STEP2. 환경변수의 주소값 찾기 Getenv라는 시스템 함수의 도움을 받아 Pwnwizit이라는 이름으로 올라간 환경변수의 주소값을 파밍

STEP3. BOF 취약점을 공격!!

STEP4. AFTER ATTACK