본문 바로가기

Hacking & Security/System

Linux 환경에서의 메모리 보호기법

이번 글에서는 리눅스 환경에서 사용되는 메모리 보호기법들에 대하여 요약해보도록 하자!



기법들에 대하여 알아보기 전 , 메모리 보호 의 정의에 대하여 알아둘 필요가 있다.



메모리 보호란 ?


말 그대로 , 컴퓨터에서 사용하는 메모리의 사용을 제어하는 방법을 칭한다.


컴퓨터의 운영체제에서 실행 되어지는 프로세스가 자신에게 할당되지 않은 영역의 메모리에 접근하는 것을 막는 것이 메모리의 주된 목적이며 ,

이를 통하여 프로세스 내의 버그가 다른 프로세스의 동작에 영향을 미치는 것을 예방하고 멀웨어가 시스템에서 허가되지 않은 접근권한을

갖고 시스템에 영향을 끼치는것을 막는다.



이제 실제 리눅스 환경에서 사용되어지는 메모리 보호기법들에 대하여 알아보자.


1) ASLR : Address Space Layout Randomization


ASLR 이란 , 메모리상의 공격을 어렵게 하기 위하여 리눅스 메모리 구조에 포함되는 스택 , 힙 , 라이브러리 등의 주소를

랜덤하게 프로세스 주소 공간에 배치함으로써 실행할 때 마다 데이터의 주소가 바뀌게 하는 기법이다.


메모리 손상 취약점 공격 방지를 위한 보호기법으로 , 공격에 필요한 Target Address를 예측하기 어렵게 만든다.


간단한 예시로 RTL ( Return to libc ) 기법을 통한 공격의 경우 , 공유 라이브러리의 함수 주소를 필요로 한다.


이러한 주소 값들이 프로그램이 호출 될 때 마다, 고정적인 주소를 가진다면 공격자가 공격하는데는 훨씬 수월할 것이다.


만일 , ASLR의 적용으로 프로그램이 호출 될 때 마다 스택, 힙, 라이브러리 영역의 주소가 변경된다면 불가능하지는 않지만 보다 공격이 어려워진다.



2) ASCII - Armor


ASCII - Armor란 , 공유 라이브러리 영역의 상위주소에 0x00 ( NULL ) 을 포함시키는 방법이다.


이 보호기법은 , RTL  공격에 대응하기 위한 방법으로 , 공격자가 라이브러리를 호출하는 BOF 공격을 시도해도 NULL바이트가 삽입된 주소로는 접


근이 불가하다.


아스키 아머를 사용하면 , RTL처럼 라이브러리 함수를 사용하는 공격은 뒤에 인자를 수반할 수도 없고 , 연쇄적인 RET도 불가능하게 된다.


공격실행 중 , 라이브러리 함수를 호출할 때 최상위 1바이트 null을 읽어버리기 때문에 동작이 끝나버린다.



3) Stack Canary


스택 카나리는 함수 진입시 , 스택에 SFP ( Stack Frame Pointer ) 와 RET addr의 정보를 저장할 떄 이 정보들이 공격자에 의해

덮어씌워지는 것으로부터 보호하기 위해 스택상의 변수들의 공간과 SFP 사이에 특정한 값을 추가하는데 이를 Canary라고 한다.


예를들어 , 공격자가 BOF공격을 시도하여 ret addr를 조작하려 할 때 , return address를 덮기 이전에 Canary값이 덮어지기 때문에


이 canary값의 변조확인을 통해 BOF 공격 탐지가 가능하다.





'Hacking & Security > System' 카테고리의 다른 글

CyberPlatform Security #1  (0) 2019.11.18
PLT & GOT  (0) 2018.10.31
환경변수란 ?  (0) 2018.01.30
Buffer Overflow Basic 3  (0) 2018.01.16
Buffer Overflow Basic 2  (0) 2018.01.16