10
포포 포포포 포포포포포 20072250 포포포 20072230 포포포 20072225 포포포

포맷 스트링

  • Upload
    shay

  • View
    211

  • Download
    0

Embed Size (px)

DESCRIPTION

포맷 스트링. 시스템보안 20072250 최영환 20072230 이완형 20072225 양해민. 목차. 포맷 스트링이란 ? 포맷 스트링 취약점은 ? 포맷 스트링 공격수행 , 공격방어 실습. 포맷 스트링이란 ?. 포맷 스트링이란 ? 포맷 스트링이란 일반적으로 사용자로부터 입력을 받아 들이거나 결과를 출력하기 위하여 사용하는 형식 . - PowerPoint PPT Presentation

Citation preview

Page 1: 포맷 스트링

포맷 스트링

시스템보안 20072250 최영환

20072230 이완형20072225 양해민

Page 2: 포맷 스트링

목차

• 포맷 스트링이란 ?• 포맷 스트링 취약점은 ?• 포맷 스트링 공격수행 , 공격방어• 실습

Page 3: 포맷 스트링

포맷 스트링이란 ?

• 포맷 스트링이란 ?– 포맷 스트링이란 일반적으로 사용자로부터

입력을 받아 들이거나 결과를 출력하기 위하여 사용하는 형식 .

– 포맷스트링 공격은 프로그램 권한을 얻을 수 있는 또 다른 공격 기법

– 버퍼 오버플로우 공격처럼 포맷 스트링 공격도 보안과 아무 관계도 없어 보이는 프로그래밍 실수를 이용한다 .

– 프로그래머에게 있어 다행인 것은 일단 포맷 스트링 기법을 이해하기만 하면 공격대상을 찾아내 제어하기 매우 쉽다는 것이다 .

Page 4: 포맷 스트링

포맷 스트링의 종류

Page 5: 포맷 스트링

포맷 스트링 취약점

• 포맷 스트링 취약점은 이제는 흔하지 않음에도 불구하고 다음에 소개할 기법으로 여전히 공격 가능하다 .

Page 6: 포맷 스트링

포맷 스트링 공격• 포맷 스트링 공격은 포맷 스트링 문자를 사용하지

않고 출력함수를 사용하는 데 대한 공격으로 , 버퍼 오버플로우 공격과 마찬가지로 RET 값을 변조하여 임의의 코드를 실행시킬 수 있다 .

• 포맷 스트링의 취약 함수Fprintf (fp, const char *fmt, ….)Int sprintf (char *str, const char *fmt, ….)Int snprintf (char *str, size_t count, const char

*fmt….)

Page 7: 포맷 스트링

포맷 스트리밍 공격 대응책포맷 스트링 공격에 대한 대응책은 printf 명령문과 같이포맷 스트링을 사용하는 함수를 정상적으로 사용하면 ,

문제가 생기지 않는다 .

printf("%s\n", buffer);

fprintf (fp, 서식문자열 , 인자 1, ... , 인자 N)

int sprintf (char *str, const char *fmt,...)

snprintf (char *str, size_t count, const char *fmt,...)

유닉스 Sysem V 에서 사용하는 함수 : vfprintf, vprintf, vsprintf, vsnprintf - 또다른 대응책은 시스템 패치를 꾸준히 해주는 것이다 . 커널이 발전하면서

SetUID 에 대한 보안 설정 사항이 늘어가고 잇어 이러한 취약점을 보완해준다 .

Page 8: 포맷 스트링

포맷스트리밍 실습[ 포캣 스트링 공격 수행하기 ]1’ 일반 사용자로 bugfile.c 와 eggshell.c 을 컴파일 한다 .2’ bugfile 을 실행해보자

입력 값을 받아 출력해주는 것을 확인할 수 있다 . 여기에 AAAAAA 와 함께 적당한 길이의 %x 를 입력해보자 .

EBP 값 : bffffb68, RET: 400349cb 이라고 예측할 수 있다 .-먼저 egg 쉘을 실행하자 .

-이제 RET 값이 있는 주소를 얻어보자 .

Page 9: 포맷 스트링

포맷스트리밍 실습 (2)- RET 위치를 확인하기 위해 0x804842b 에 break 한다 .

여기에서 400349cb 가 RET 값인데 0xbffff13c 이곳이 RET 를 가리키는 주소다 . 그러므로 이곳을 egg 쉘 값 0xbffffb18 로 고치면 셀을 따 낼수 있다 .

3’ 관리자 권한으로 bugfile 를 root 소유 파일로 바꾸고 SetUID 를 걸어주자 .4; 이제 egg 쉘 값을 10 진수로 바꿔보자 .1bfff : 114687fb18 : 64280이다 . 여기서 bffff13c 부터 bffff13f 까지 4 바이트를 바꿔야하므로앞에 값은 64280-16=64264뒤에 값은 114687-64264-16=50407 이다 .

Page 10: 포맷 스트링

포맷스트리밍 실습 (3)

엔터키를 몇번 누른다음 , 명령을 입력해 보자 . 포맷스트링 공격이 성공하였다 ........