검색 여닫기
검색
메뉴 여닫기
555
262
4
6.2천
noriwiki
둘러보기
대문
최근 바뀜
임의의 문서로
미디어위키 도움말
특수 문서 목록
파일 올리기
환경 설정 메뉴 여닫기
notifications
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.
user-interface-preferences
한국어
개인 도구
로그인
Buffer 문서 원본 보기
noriwiki
문서 공유하기
다른 명령
←
Buffer
문서 편집 권한이 없습니다. 다음 이유를 확인해주세요:
요청한 명령은 다음 권한을 가진 사용자에게 제한됩니다:
사용자
.
문서의 원본을 보거나 복사할 수 있습니다.
상위 문서: [[컴퓨터 시스템]] ==개요== 버퍼(Buffer)란 데이터를 임시로 저장하는 배열이다. 예를 들면, 동영상 스트리밍 시, 끊김없는 재생을 위해서 일부 데이터를 저장하는 경우가 있으며, 이를 비디오 버퍼링(vedio buffering)이라고 한다. C언어에서는 보통 <code>char buf[256];</code>과 같이 선언되는 문자 배열을 의미하며, 사용자의 입력 문자열을 저장하는데 자주 사용된다. ==Classic Buffer Overflow== 스택 기반 오버플로우(Stack-based buffer overflow)란 스택 메모리에 존재하는 버퍼에 데이터가 초과되어 쓰이면서, 다른 메모리 영역까지 덮어쓰는 오류이다.<ref>이를 stack smashing이라 부르기도 한다.</ref> 해당 오류의 주된 원인은 <code>gets(), scanf("%s"), strcpy(), strcat()</code>와 같은 함수들을 배열 크기를 고려하기 않고 사용하는 것이다. 해당 오류는 해커가 이를 이용해 시스템을 공격하거나 악성코드를 주입할 수 있어서 보안상 매우 위험하다. ===Example Program with BOF=== 아래는 스택 기반 오버플로우 오류가 발생할 수 있는 C언어 코드의 예시이다: <syntaxhighlight lang="c"> void echo(void) { char buf[8]; gets(buf); //Never use this function. 너무 많은 BOF의 원인 puts(buf); } int main(void) { echo(); return 0; } </syntaxhighlight> <syntaxhighlight lang="bash"> jschoi@ubuntu:~$ ./bof Hello Hello </syntaxhighlight> <syntaxhighlight lang="bash"> jschoi@ubuntu:~$ ./bof 0123456789ABCDE 0123456789ABCDE </syntaxhighlight> <syntaxhighlight lang="bash"> jschoi@ubuntu:~$ ./bof 0123456789ABCDEF 0123456789ABCDEF Segmentation fault </syntaxhighlight> 위 코드에서 <code>gets(buf)</code>는 입력 크기를 검사하지 않으므로, 8바이트 초과 입력 시 버퍼를 넘쳐서 다른 데이터를 덮어 쓴다. 이때, 동일하게 8바이트 버퍼를 초과한 입력 "0123456789ABCDE"은 괜찮고, "0123456789ABCDEF"에서 비로소 오류가 생기는 이유는 아래 어셈블리 코드를 관찰하여 알 수 있다: [[파일:Stack Frame Layout.png|대체글=Figure 1. Stack Frame Layout|섬네일|'''Figure 1. Stack Frame Layout''' ]] <syntaxhighlight lang="c"> (gdb) disassemble echo 0x401136: sub $0x18,%rsp 0x40113a: lea 0x8(%rsp),%rdi 0x40113f: mov $0x0,%eax 0x401144: call 0x401040 <gets@plt> 0x401149: lea 0x8(%rsp),%rdi 0x40114e: call 0x401030 <puts@plt> 0x401153: add $0x18,%rsp 0x401157: ret (gdb) disassemble main 0x401158: sub $0x8,%rsp 0x40115c: call 0x401136 <echo> 0x401161: mov $0x0,%eax 0x401166: add $0x8,%rsp 0x40116a: ret </syntaxhighlight> 이때 해당 코드는 figure 1과 같이 스택 프레임을 형성한다. ==각주== [[분류:컴퓨터 시스템]]
Buffer
문서로 돌아갑니다.