Presentation is loading. Please wait.

Presentation is loading. Please wait.

FSB 숭실대학교 ACK 박수완(LinkC) skyhwen@naver.com.

Similar presentations


Presentation on theme: "FSB 숭실대학교 ACK 박수완(LinkC) skyhwen@naver.com."— Presentation transcript:

1 FSB 숭실대학교 ACK 박수완(LinkC)

2 What is FSB? FSB(Format String Bug) Format String?
버퍼오버플로우와 함께 대표적인 시스템 해킹으로 꼽히는 기술 버퍼오버플로우가 나온지 20여년 후에 기술 발견 포맷스트링의 버그를 이용해 메모리를 변조하는 기술 Format String? ex) printf(“%s\n”,Welcome ACK!”); C언어의 변환 명세를 의미

3 Kind of Format String 파라미터 변수형식 %d 정수형 10진수 상수 %f 실수형 상수 %c 문자 값 %s
문자 스트링 %x 양의 정수(16진수) %n 쓰인 총 바이트 수를 지정할 정수형 포인터

4 Format String : %n을 이용한 변조
%n을 사용했을 뿐인데 i와 j의 값이 변했음을 알 수 있다. %n 과 대응하는 주소의 실제 값이 변했다. 변환 값은 앞에 쓰인 총 바이 트에 해당한다. 즉 %n은 자신과 대응하는 값에 앞서 쓰인 총 바이트 의 정수값을 넣는다는 것 을 짐작할 수 있다.

5 A vulnerable code 배열 buf를 선언하고 사용자에게 값을 입력받은 후 출력하는 간단한 프로그램
▲invulnerable code

6 What is the problem? Q.단순히 쓰레기 값 일까? A의 아스키 코드는 41 임을 주목하자
첫번째 결과는 아무 이상이 없어 보이지만 %x 라는 Format String 을 사용하자 42130a14 라는 알 수 없는 8자리 숫자가 나타남을 알 수 있다. Q.단순히 쓰레기 값 일까? A의 아스키 코드는 41 임을 주목하자 4번째 명세부터 사용 자가 입력한 값을 가 리킨다. AAAA <-%x 0x 0xbfffd5f8 0x42130a14

7 What is the key? 취약한 Printf() 로 사용자가 입력한 값에 접 근할 수 있다.
즉, printf와 %n을 함께 이용하면 사용자가 입력한 특정 주소의 값을 변경 할 수 있다

8 메모리 변조 시도 #1 Printf 함수내용을 cat으로 읽어 그 출 력결과를 | (pipe) 를 통해 level20의 입력값으로 넘겨준다.

9 메모리 변조 시도 #2 Q. 메모리 상에 정확히 기입이 됐는데 변조는 일 어나지 않았다.
◆%를 두번써준 이유는 cat 을 지나며 하나가 사라지기 때문 ◆0xbffffb20에 값을 넣어주는데 2byte씩 작은 값부터 넣어주는 이유는 메모리 적재 방식이 Little endian 이기 때문 Q. 메모리 상에 정확히 기입이 됐는데 변조는 일 어나지 않았다.

10 메모리 변조 시도 #3 Q. 왜 22byte가 들어간건가?
4번째 Format String 부터 입력값을 받았다는 것을 기억하라. 특정 메모리 값의 변조에 성공했다. Q. 왜 22byte가 들어간건가?

11 메모리 변조 시도 #4 Q. 왜 22byte가 들어간건가?
4byte+??+??+??=22byte 4byte + 2 byte + 8byte + 8byte= 22byte! FSB는 1이라도 값이 달라지면 실패하는 정교 한 공격이기 때문에 정확한 값을 위해서 x의 최대 자리수 8을 앞에 붙여주자.

12 Hacker School FTZ level20
Setreuid:권한 상승 Fgets : 사용자에게 79자 입력을 받는다. BOF는 불가! BOF:buffer를 overflow시켜서 메모 리를 변조시키는 방법 Printf : FSB 의 단 서

13 How to FSB? EGG Shell을 실행시켜 환경변수에 Shell code 를 삽입한다. 환경변수 Shell code
프로세스가 컴퓨터에서 동작하는 방식에 영향을 미치는 , 동적인 값들의 모임 Shell code 쉘에서 사용하는 기계어 코드를 의미 Setuid로 권한상승후에 쉘(/bin/sh)을 실행시키는 코드 적재 Setuid:파일에 걸리는 일종의 속성으로 실행시키는 동안 파일 소유자의 권한을 가지게 된다. 이는 많은 공격의 target이 되 곤 한다.

14 How to FSB?#2 파일이 동작하면서 실행하는 포인터에 EGG Shell로 등록한 코드의 주소를 집어 넣는다.
RET(Return Address) :함수가 끝나고 실행할 주소 가 담겨있는 포인터 파일이 실행되면 Setuid 로 권한 상승이 일어 나고 EGG Shell로 삽입한 코드가 실행되면서 파일 소유자의 권한의 쉘을 얻는다.

15 What is the EGG shell? egg·shell n. 달걀 껍질;깨지기 쉬운 것 ━ a. 얇고 부서지기 쉬 운
특정 환경 변수(EGG)에 사용자가 입력한 shellcode 를 등록시켜 주 고 그 주소를 출력 시켜주는 프로 그램 Shell code 의 의미? 메모리에 /bin/sh라는 문자열 을 위치 시키고 이를 실행시키 는 code로 이루어져있다. Shell code를 수정하여 유동성 있 게 사용할 수 있다.

16 Real FSB#1 -EGG Shell, getenv 실행
▲환경변수를 확인하는 명령어 env로 등록된 EGG의 확인 ◀EGG쉘의 주소를 정확히 알기 위해 getenv 실행

17 Real FSB#2 RET의 검색 Objdump 명령어를 이용해서 level20 이 실행시 호출되 는 것들을 확인해 보자.
Objdump: object file 에 대한 여러 가지 정보 출력 Object file: 컴파 일 도중 만들어지는 파일로 여러가지 정 보를 포함 이중에서 이용 할 것은 main 종료시 실행되 는 .dtors 영역 이다.

18 Real FSB#3 Exploit code! EGG 쉘의 주소를 .dtors 의 두번째 영역에서 +4 한 값에 넣어주면 된다.
Dtors 영역 0x 에 EGG의 주소0xbfffff1c9를 집어 넣는다. Bffff1c9 의 정수값은 ▲각 변환 명세가 가리키는 스택 0x <-%n AAAA <-%8x ??

19 Real FSB#4 Exploit code! Q. 프로그램이 도중에 끝나버린다. 어디가 잘못된것일 까?
은 너무 큰수라 인식할 수 없다. 그렇다면 2byte씩 나눠 넣는것은 어떨까? 그러니까 처음 2byte는 0xbfffff1c9 중 f1c9를 다음 2byte 는 bfff 를 넣는다. F1c9 의 정수값은 이고 앞서 쓴 주소 값과 문자열값 40을 빼면 61857 문자열값 40: 4(aaaa)+4(bbbb)+8(%8x)x3+4(주소값)x2 bfff를 넣어줘야 하는데 스택에서 bf로 시작하는 주소값은 ‘-’를 의미한다. 양수의 경우는 이와 구분짓기 위해 앞에 1을 생략한다. 고로 bfff의 실제 값은 1bfff인셈 1bfff은 이고 앞서 자가 쓰였으므로 이를 빼 주면 이 된다.

20 Real FSB#5 Exploit code! 0x08049596~0x08049597에는 1bfff를 넣어주면
즉, 0x ~0x 에는 f1c9를 넣어주고 0x ~0x 에는 1bfff를 넣어주면 0x 부터 4바이트는 bffff1c9 값을 가지게 된 다. 0x <-%n= =1bfff BBBB <-%52790c 0x <-%n= 61897=f1c9 AAAA <-%61857c ??? <-%x

21 Real FSB#5 Exploit code! 고로 최종 코드는.. 이고 이를 실행시키면

22 Do you have any question?
#final Thank you :) Do you have any question?


Download ppt "FSB 숭실대학교 ACK 박수완(LinkC) skyhwen@naver.com."

Similar presentations


Ads by Google