튜기's blogggg

메모리 보호 기법

by St1tch

리눅스


메모리 보호 기법

1. ASLR(Address Space Layout Randomization)

2. DEP / NX(Not Excutable)

3. ASCII-Armor

4. Canary



1) ASLR(Address Space Layout Randomization)

주소공간을 랜덤하게 배치하는 기법이다. 스택, 힙 등 데이터 영역의 주소를 랜덤으로 프로세스 주소 공간에 배치함으로써 실행할 때 마다 데이터의 주소가 바껴 메모리를 보호하게 된다.

#PIE = 바이너리 영역을 랜덤하게 배치하는 기법.


2) DEP / NX(Not Excutable)

주메모리를 보호하기 위해 코드가 Stack이나 Heap영역에서 실행할 수 없게 하는 기법이다. 

DEP가 적용된 상태에서는 BOF공격을 하여도 실행권한이 없어 프로그램에 대한 예외처리후 종료가 되어 메모리를 보호하게 된다.


3) ASCII-Armor

Libc 영역을 보호하기 위한 기법이다. 

상위주소를 \x00으로 시작하게 만들어 공격자가 라이브러리를 호출하는 BOF공격을 하여도 NULL바이트가 삽입된 주소로 접근할 수 없게 됨으로 메모리를 보호하게 된다.


4) Canary

| BUFFER | SFP | RET |

위 처럼 되있는 메모리 구조가

| BUFFER | SFP | CANARY | RET  


이렇게 SFP와 RET 데이터 사이에 CANARY가 추가되어 스택의 BOF를 모니터링하는 기법이다. 

BOF가 발생하면 CANARY 데이터값의 변조로 오버플로우에 대한 경고를 하고 프로그램을 종료시킵니다. 


CANARY 데이터는 다음과 같이 구성되어 있다.


1.  Terminator canaries

문자열 끝문자를 이용하여 canary 를 구성하는 방법으로 

canary 값으로 NULL, CR, LF, Oxff 값의 조합이 사용됩니다. 

공격자는 공격시, 종료문자로 구성된 canary 값에 접근을 할 수 없게 됩니다.


2.  Random canary

프로그램을 실행할 때마다 임의의 canary 값을 삽입을 합니다. 이에 따라 공격자는

Canary 값을 예측불가능하므로 공격에 어려움이 발생합니다.


3.  Null canary(0x00000000)

메모리상의 공격을 막기위해 canary 값을 NULL로 구성합니다. 

공격자는 공격코드상에 NULL 값을 삽입할 수 없으므고 canary 값에 접근이 불가능합니다.




블로그의 정보

튜기's blogg(st1tch)

St1tch

활동하기