Download presentation
Presentation is loading. Please wait.
1
Canary value 스택 가드(Stack Guard)
2
INDEX UNDERSTANDING OF BUFFER OVERFLOW BASIC KNOWLEDGE OF STACK GUARD
SIMPLE ATTACK ON SIMPLE BOF with STACK GUARD
3
Buffer OverFlow ? 버퍼 : 변수에 데이터를 저장하기 위해 확보되는 임시 메모리 공간
Main() 함수는 스택 프레임이 구성되면서 지역변수, 스택 프레임 포인터, 인 자수, 인자값, 환경변수의 선형 순서로 스택에 배치됨 버퍼 오버플로우 : 입력값의 크기가 버퍼의 크기를 검증하지 않는 개발자의 실수를 기반으로 메모리에 확보된 버퍼의 크기를 초과해서 데이터를 저장함 으로써 버퍼 주변 공간 즉, 리턴 주소까지 덮어씌워지는 현상
4
SIMPLE VULnerable code (from ftz.11)
5
BuFFER Look like ? 코드에서 Char str[256] 버퍼 할당 공간은 $0x108 = 264Byte
6
Buffer looks like ?
7
WHAT IF WE ATTACK IT In THIS WaY ?
8
WHAT IS CANARY ? 광산에서 사용하던 카나리아에서 유래 출처 :
9
MAIn IDEA OF STACK GUARD
기본적인 버퍼 오버플로우 공격은 연속된 문자열을 버퍼 이상으로 입력하 여 리턴 주소를 변경하는 방식 연속적인 문자입력을 방지하는게 목적 -> 특정 값을 미리 지정
10
SIMPLE BUFFER PIC WITH SG
11
EASY EXAMPLE OF CANARY(feat. Ftz 13)
long i = 0x // 스택 가드 선언 char buf[1024] // 버퍼의 크기 1024 setreuid(3094, 3094) // level14 권한으로 실행되도록 설정 if(i != ){ } // 스택가드 변조 여부 검증
12
EASY EXAMPLE OF CANARY <main+3> sub &0x418, %esp
-> 1048의 버퍼 할당 i 의 논리적인 위치를 찾아야 됨!!
13
Address of long I <Main + 69> cmpl &0x1234567, 0xfffffff4($ebp)
char buf[1024]의 크기만큼 ‘A’ 삽입
14
ADDRESS Of LONG i 0x41 == ‘A’ => ~ 0xbffff8cf
0xbffff8d0으로부터 12바이트 떨어진 곳에 0x 이 위치 <- i에 미리 할당된 값
15
bUffer pic of this
16
HOW TO ATTACK THIS SIMPLE THING ?
17
STEP 1. 쉘 코드 환경변수에 삽입 리턴주소를 쉘 코드가 저장되어 있는 환경변수로 변경예정 <- 제대로 적재 되었음
18
STEP2. 환경변수의 주소값 찾기 Getenv라는 시스템 함수의 도움을 받아 Pwnwizit이라는 이름으로 올라간 환경변수의
주소값을 파밍
19
STEP3. BOF 취약점을 공격!!
20
STEP4. AFTER ATTACK
Similar presentations