1 / 10

포맷 스트링

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

shay
Télécharger la présentation

포맷 스트링

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 포맷 스트링 시스템보안 20072250 최영환 20072230 이완형 20072225 양해민

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

  3. 포맷 스트링이란? • 포맷 스트링이란? • 포맷 스트링이란 일반적으로 사용자로부터 입력을 받아 들이거나 결과를 출력하기 위하여 사용하는 형식. • 포맷스트링 공격은 프로그램 권한을 얻을 수 있는 또 다른 공격 기법 • 버퍼 오버플로우 공격처럼 포맷 스트링 공격도 보안과 아무 관계도 없어 보이는 프로그래밍 실수를 이용한다. • 프로그래머에게 있어 다행인 것은 일단 포맷 스트링 기법을 이해하기만 하면 공격대상을 찾아내 제어하기 매우 쉽다는 것이다.

  4. 포맷 스트링의 종류

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

  6. 포맷 스트링 공격 • 포맷 스트링 공격은 포맷 스트링 문자를 사용하지 않고 출력함수를 사용하는 데 대한 공격으로, 버퍼 오버플로우 공격과 마찬가지로 RET 값을 변조하여 임의의 코드를 실행시킬 수 있다. • 포맷 스트링의 취약 함수 Fprintf (fp, const char *fmt, ….) Int sprintf (char *str, const char *fmt, ….) Int snprintf (char *str, size_t count, const char *fmt….)

  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에 대한 보안 설정 사항이 늘어가고 잇어 이러한 취약점을 보완해준다.

  8. 포맷스트리밍 실습 [포캣 스트링 공격 수행하기] 1’ 일반 사용자로 bugfile.c 와 eggshell.c을 컴파일 한다. 2’bugfile 을 실행해보자 입력 값을 받아 출력해주는 것을 확인할 수 있다. 여기에 AAAAAA와 함께 적당한 길이의 %x 를 입력해보자. EBP값 : bffffb68, RET: 400349cb 이라고 예측할 수 있다. • 먼저 egg쉘을 실행하자. • 이제 RET값이 있는 주소를 얻어보자.

  9. 포맷스트리밍 실습 (2) • RET위치를 확인하기 위해 0x804842b에 break 한다. 여기에서 400349cb가 RET값인데 0xbffff13c 이곳이 RET를 가리키는 주소다. 그러므로 이곳을 egg쉘 값 0xbffffb18로 고치면 셀을 따 낼수 있다. 3’ 관리자 권한으로 bugfile 를 root 소유 파일로 바꾸고 SetUID를 걸어주자. 4; 이제 egg쉘 값을 10진수로 바꿔보자. 1bfff : 114687 fb18 : 64280 이다. 여기서 bffff13c부터 bffff13f까지 4바이트를 바꿔야하므로 앞에 값은 64280-16=64264 뒤에 값은 114687-64264-16=50407이다.

  10. 포맷스트리밍 실습 (3) 엔터키를 몇번 누른다음, 명령을 입력해 보자. 포맷스트링 공격이 성공하였다........

More Related