질문&답변
클라우드/리눅스에 관한 질문과 답변을 주고 받는 곳입니다.
리눅스 분류

Buffer Overflow 관련 질문입니다.

작성자 정보

  • DeArto20 작성
  • 작성일

컨텐츠 정보

본문

버퍼 오버플로우에 관해 질문이 있습니다.


우선, 버퍼 오버플로우는 외부에서 들어온 임의의 (버퍼 오버플로우를 위해

조작된) 데이터가 특정 프로세스의 스택 영역에 들어가야만 가능한 것으로

알고 있습니다. 그런 후, 여러가지 방법을 통해서 PC (또는 IP) 가 스택 영

역 내의, 침입자가 원하는 위치를 가리키도록 변경하여 특정 기능을 수행하

는 것으로 알고 있습니다.


그런데 여기서, 궁금한 점이 있습니다. 보통 운영체제는 한 프로세스의 가

상 메모리 공간을 페이지 단위로 관리를 하며 이 페이지들은 각각의 권한

(읽기,쓰기, 실행) 을 가지고 있습니다. 그리고 당연히 프로세스의 텍스트

영역에는 실행 권한이 주어지고, 프로세스의 데이터, 힙, 스택 영역 등에는

실행 권한이 주어지지 않는 것으로 알고 있습니다.


버퍼 오버플로우 같은 경우, 스택 영역으로 할당된 페이지에 실행 권한이

없으면 발생이 힘들 것으로 생각됩니다. 설사 PC (또는 IP) 가 스택 영역

내의 특정 Instruction 을 가리킨다 해도, 그 Instruction 이 포함된 페이

지가 실행 권한을 가지고 있지 않다면 에러가 발생할 테니까요.


윈도우즈의 경우, 운영체제에서는 이러한 권한 설정을 제대로 해주는데 반

해, 특정 CPU, 정확히 말하자면 x86, Alpha 계열의 CPU 가 읽기, 쓰기, 실

행 권한 중 실행 권한을 별도로 인식하지 못하고 읽기 권한과 동일하게 인

식한다고 알고 있습니다. (in Programming Applications for Windows Fou-

rth Edition by Jeffrey Richter) 그렇기 때문에 스택 영역에 해당하는 페

이지에 실행 권한이 없다고 하더라도, 읽기 권한만으로도 버퍼 오버플로우

의 발생이 가능하다고 생각합니다.


그런데, 유닉스 또는 리눅스의 경우에는 어떤지 궁금합니다. 운영체제에서

는 제대로 읽기, 쓰기, 실행 권한을 지원해주는데 특정 CPU (Sparc, Alpha,

PowerPC, etc) 에서 제대로 실행 권한을 지원해주지 못하는 것인지,아니면

CPU 와 관계없이 운영체제가 페이지별 권한 설정을 제대로 못해주는 것인지

알고 싶습니다. 만일에 이도 저도 아니라면, 즉, 운영 체제에서도 제대로

세 가지 권한을 다 지원하고, CPU 역시 세 가지 권한을 완벽하게 지원하는

경우, 이런 경우에도 버퍼 오버플로우가 가능한지 알고 싶습니다. 그리고

가능하다면 도대체 어떤 방법을 이용해서 그런 것이 가능한지 알고 싶습니

다.


긴 글 끝까지 읽어주셔서 감사합니다. 다들 행복한 하루 되시길 바랍니다.

그럼 답글 기다리겠습니다.

 

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,305 명
  • 현재 강좌수 :  36,976 개
  • 현재 접속자 :  317 명