05.01.2014 Views

2.버퍼 오버플로우(Buffer overflow)의 뜻이 뭔가요? “버퍼(Buffer)”란 ...

2.버퍼 오버플로우(Buffer overflow)의 뜻이 뭔가요? “버퍼(Buffer)”란 ...

2.버퍼 오버플로우(Buffer overflow)의 뜻이 뭔가요? “버퍼(Buffer)”란 ...

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

버퍼 <strong>오버플로우</strong>-왕기초편<br />

<strong>2.버퍼</strong> <strong>오버플로우</strong>(<strong>Buffer</strong> <strong>overflow</strong>)<strong>의</strong> <strong>뜻이</strong> <strong>뭔가요</strong>?<br />

<strong>“버퍼</strong>(<strong>Buffer</strong>)<strong>”란</strong> 어떤 데이터가 한 곳에서 다른 곳으로 이동할 때,<br />

그 데이터가 일시적으로 보관되는 임시 기억 공간을 말합니다.<br />

예를 들어 한 프로그램 내에서 데이터가 이동할 때,<br />

한 프로그램에서 다른 프로그램으로 데이터가 이동할 때,<br />

한 프로그램에서 하드웨어(예를 들면 프린터)로 데이터가 이동할 때,<br />

한 네트워크에서 다른 네트워크로 데이터가 이동할 때, 등등..<br />

버퍼는 그 중간에서 데이터를 받거나 건네주는 역할을 합니다.<br />

앞<strong>의</strong> 예에서 우리가 “멍멍” 혹은 “구타”라고 입력한 데이터 역시 버퍼에<br />

임시 저장되고, 이후 그 값을 다시 화면에 출력할 때 사용하고 있습니다.<br />

./01/test.c<br />

main()<br />

{<br />

}<br />

char name[20];<br />

// 변수(버퍼) 선언<br />

printf(“당신<strong>의</strong> 이름을 입력하세요. : “);<br />

gets(name);<br />

// 변수(버퍼)에 입력<br />

printf(“아, 당신<strong>의</strong> 이름은 %s이군요.\n”, name); // 변수(버퍼)로부터 출력<br />

그리고 이처럼 C언어에선 변수(variable)가 버퍼로서 사용될 수 있습니다.<br />

23


버퍼 <strong>오버플로우</strong>-왕기초편<br />

<strong>2.버퍼</strong> <strong>오버플로우</strong>(<strong>Buffer</strong> <strong>overflow</strong>)<strong>의</strong> <strong>뜻이</strong> <strong>뭔가요</strong>?<br />

그럼 이번엔 <strong>오버플로우</strong>(Overflow)라는 단어를 생각해봅시다.<br />

over라는 단어는 “과하다”, “지나치다”는 <strong>의</strong>미를 가지고 있으며,<br />

flow란 “넘치다”라는 <strong>의</strong>미를 가지고 있습니다.<br />

두 <strong>의</strong>미를 합쳐보면, “과해서 넘쳐버리다.” 라는 <strong>의</strong>미가 됩니다.<br />

즉 버퍼 <strong>오버플로우</strong>란 용어를 풀어서 쓰면, “사용자가 입력한 데이터<strong>의</strong> 크기가 너무<br />

과하여 제한된 버퍼<strong>의</strong> 용량에서 넘쳐버렸다.” 가 됩니다.<br />

이는 앞서 우리가 경험 했었던 긴 문자열을 버퍼에 입력했던 행동과 일맥상통합니다.<br />

그리고 제한된 버퍼 영역을 벗어나면 다른 애꿎은 메모리 영역을 침범하면서 프로그램<br />

에 문제를 일으킬 수 있습니다.<br />

이 특성을 이용하면 재밌는 것들을 할 수 있는데, 예를 들면 패스워드 인증을 통과한다<br />

든지, 더 높은 권한을 획득한다든지, 혹은 원격<strong>의</strong> 다른 PC로<strong>의</strong> 접근 권한을 획득한다<br />

든지 하는 식입니다.<br />

24


버퍼 <strong>오버플로우</strong>-왕기초편<br />

<strong>2.버퍼</strong> <strong>오버플로우</strong>(<strong>Buffer</strong> <strong>overflow</strong>)<strong>의</strong> <strong>뜻이</strong> <strong>뭔가요</strong>?<br />

...공부를 너무 많이 했더니만<br />

나<strong>의</strong> 뇌 용량을 초과해버렸다...<br />

25

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!