본문 바로가기
Study/System

[시스템] 해커스쿨정리

by graygreat 2017. 9. 25.
728x90
반응형

핵심 키워드


BOF(Buffer Overflow), gets() 함수 문제점, 메모리 값 변조, 스택 영역, setuid



BOF (Buffer Overflow)


버퍼(Buffer)란?


어떤 데이터가 한 곳에서 다른 곳으로 이동할 때, 그 데이터가 일시적으로 보관되는 임시 기억 공간을 말한다.


EX)


- 한 프로그램 내에서 데이터가 이동할 때


- 한 프로그램에서 다른 프로그램으로 데이터가 이동할 때


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


- 한 네트워크에서 다른 네트워크로 데이터가 이동할 때



버퍼 오버플로우 (Buffer Overflow)란?


사용자가 입력한 데이터의 크기가 너무 과하여 제한된 버퍼의 용량이 넘쳐버렸다.


제한된 버퍼 영역을 벗어나면 다른 애꿏은 메모리 영역을 침범하면서 프로그램에 문제를 일으킬 수 있다.


이 특성을 이용하면 패스워드 인증을 통과한다든지, 더 높은 권한을 획득한다든지, 혹은 원격의 다른 PC로의 접근 권한을 획득할 수 있다.


리모트 어택


리모트 어택이란 서버로의 정상적인 접근 계정이 없는 상태에서 서버 혹은 관리자(또는 일반 사용자)의 취약점을 이용하여 서버의 안으로 들어갈 수 있는 접근 권한을 획득해내는 과정을 말한다.


그리고 만약 이 리모트 어택 과정에서 버퍼 오버플로우 기술이 사용된다면 그것을 리모트 버퍼 오버플로우라고 부른다.


로컬 어택


현재 자신이 가지고 있는 일반 사용자 권한을 최고관리자 권한으로 상승시키는 공격을 말한다.


버퍼 오버플로우가 로컬 어택에 사용될 경우, 이를 로컬 버퍼 오버플로우라고 부른다.



gets() 함수 문제점


gets() 함수


사용자가 엔터를 치기 전까지 입력한 값들을 인자로 주어진 메모리 주소에 저장한다.



gets() 함수의 문제점


엔터를 입력하기 전까지 얼마든지 많은 값을 입력할 수 있기 때문에 버퍼오버플로우 취약점을 야기하기 충분하다.




메모리 값 변조


1. 버퍼 오버플로우를 통하여 "4바이트 문자열 변수"의 값을 변조하는 것"



DOG를 CAT으로 바꾸자!!




2. "4바이트 정수형 변수"를 다른 값으로 바꿔보기



숫자 1234를 5678로 바꿔보자!!





스택 영역



TOP은 메모리 맵의 낮은 주소쪽인 왼쪽, BOTTOM은 높은 주소쪽인 오른쪽에 해당한다.


스택에 새로운 데이터가 추가될 수록 TOP(Stack Pointer)에 해당하는 메모리 주소 값은 점점 작아지게 되며, 스택의 BOTTOM은 항상 커널과 마닿는 부분에 해당하는 0xc0000000 주소 값이 된다.


스택이 자라날 수록 메모리 주소 값은 반대로 작아지도록 설계를 해놓은 이유?


1. 스택이 항상 커널의 반대 방향으로 자라기 때문에 영원히 커널을 만나지 않게 된다.


스택이 아무리 커져도 접근 불가 영역인 커널을 건드리지 않게 된다.


2. 둘째 이유는 힙과 관련이 있따. 힙 영역은 스택과는 달리 새로운 데이터가 추가될수록 더 큰 메모리 주소를 할당받게 된다.


이처럼 스택 영역과 힙 영역이 공유 라이브러리 영역을 가운데에 두고 서로 마주보는 형태를 갖기 때문에 메모리 공간을 알뜰하게 활용 할 수 있게 된다.




SetUID bit


SetUID bit란?


리눅스 및 유닉스 시스템엔 일반사용자가 일시적으로 최고권리자 권한을 얻을 수 있는 매커니즘(작동방식)이 존재한다.


이와 같은 매커니즘이 바로 SetUID bit라는 것으로 구현되어 있다.


SetUID bit란 한마디로 실행 파일에 설정하는 "속성" 중 하나이다.


이 속성이 부여된 파일은 실행 도중 일시적으로 다른 권한을 가지게 되는 것이다.



SetUID 매커니즘을 통해 일시적으로 최고관리자 권한을 얻게되는 행위가 보안상의 큰 문제가 되지 않는다.


하지만 만약 SetUID bit가 설정된 파일에 버퍼 오버플로우 등의 취약점이 존재한다면, "프로그램의 실행 흐름을 변경"할 수 있따.


그래서 만약 SetUID bit가 설정된 파일에 버퍼 오버플로우 취약점이 존재한다면, 제한된 기능의 틀에서 벗어나 원하는 다른 명령들을 최고관리자의 권한으로 실행 할 수 있게 된다.



반응형

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

[시스템] leave, ret 명령어에 대해 알아보자  (0) 2017.10.01
[시스템] OS(운영체제)란?  (0) 2017.09.26
[시스템] gdb 사용법  (0) 2017.09.26
[시스템] 시스템 해킹이란?  (0) 2017.09.21

댓글