티스토리 뷰

FSB(Format String Bug)란 BOF와 함께 대표적인 시스템 해킹으로 꼽히는 기술이다. C언어가 탄생했을 때 같이 존재 했던 취약점임에도 불구하고 BOF가 나온 지 20여 년 후에 기술이 발견되었다. FSB는 Format String(%s와 같은 C언어의 변환 명세)의 Bug를 이용해 메모리를 변조하는 기술이라고 볼 수 있다. 그렇다면 우선 Format String부터 알아보자. 다음과 같다.

위의 표에 있는 Format String들은 흔히 쓰이는 것이다. 모른다면 알아두기를.

자 그러면 이제 FSB에 취약한 코드와 그렇지 않은 코드를 우선적으로 비교해 보겠다.

위의 사진은 Format String이 들어가지 않은 취약점이 존재하는 코드, 아래 사진은 Format String이 들어간 취약점이 존재하지 않는 코드이다. 하지만 printf를 자주 쓰거나 코딩을 자주하는 사람인 경우에는 손에 익었기 때문에, 좀 더 편하기 때문에 Format String을 쓰지 않는다. 따라서 공격자들은 이 흐름을 통해 공격을 할 수 있는 것이다.

아까 전에 위의 표에서 %n 부분이 빨간 글씨로 되어 있는 것은 %n을 이용하여 FSB를 하기 때문이다. 그러면 예제를 통해 확인해보도록 하자.

다음과 같은 코드를 작성한다. 간단히 "Format String "이라는 글자를 세는 것이다. 컴파일한 후 실행해보면 다음과 같다.

따라서 %n이 문자뿐만 아니라 여백까지 센다는 것을 알 수 있다. 공백을 포함한 문자의 수가 세어져서 i라는 변수에 기록되었으며, i라는 변수는 주소로 참조되고 있다. 이것을 이용하여 원하는 주소에 임의의 값을 기록할 것이다.

이번에는 %x를 사용하여 임의의값을 넣었을 때 어디로 들어가는지, 들어간 주소를 통해 어떻게 조작할 것인지를 알아보자. 일단 다음과 같은 코드를 작성하자.

앞에서 언급되었던 코드이다. BOF에 안전하게 짜여진 코드이다. 하지만 Format String이 정의되지 않았다는 취약점이 존재한다. 이 코드를 실행하고 %x를 이용하여 들여다 보자.

보면 %x를 통해 메모리에 저장된 값들을 출력하고 있는 것이 보인다. 이 때 우리가 알고 있는 것은 AAAA가 아스키코드로 41414141라는 것이다. 보면 네 번째에 값이 출력되는 것을 볼 수 있다. 따라서 우리는 %x와 %n을 사용하여 원하는 주소로 바꾸고 그 주소를 통해 Format String Bug를 할 것이다.

일단 너무 피곤해서 오늘은 이정도까지만.

'System > FSB' 카테고리의 다른 글

FSB(Format String Bug)란 무엇인가? - 2  (0) 2012.09.18
dumpcode.h  (0) 2012.09.17
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함