리눅스 환경에서의 메모리 보호 기법
1. ASLR / Address Space Layout Randomization
ASLR은 스택, 힙, 라이브러리 등의 주소를 랜덤으로 주소 공간에 배치함으로써 실행할 때마다 각 주소가 바뀌도록 하는 기법이다.
ASLR 기법을 테스트하기 위해 위와 같이 스택과 힙 영역의 주소를 출력해주는 코드를 작성하고 실행해봤다. ASLR이 설정되어 있기 때문에 주소가 변하는 것을 확인할 수 있다.
/proc/sys/kernel/randomize_va_space의 값을 바꿔서 ASLR을 해제할 수 있는데, 각 값의 의미는 다음과 같다.
0 : ASLR 해제
1 : 스택, 라이브러리 랜덤
2 : 스택, 라이브러리, 힙 랜덤
ASLR을 해제하고 다시 파일을 실행하면 주소가 바뀌지 않는다.
다시 ASLR을 설정하면 주소가 바뀐다.
2. DEP / Data Execution Prevention
DEP는 데이터 영역에서 코드가 실행되는 것을 막는 기법이다.
위와 같이 buf 변수에 쉘을 실행하는 shellcode를 입력하고 ret를 buf 변수의 주소로 변조할 수 있다. buf 변수는 스택 영역에 적재되어 있는데 이처럼 스택에 실행권한이 있을 때, 공격이 성공하게 된다.
따라서 스택에서 실행권한을 제거해주면 ret가 스택 영역 값으로 변조되더라도 실행하지 않고 프로그램이 종료된다.
3. ASCII-Armor
ASCII-Amor는 공유 라이브러리 영역의 상위 주소에 0x00을 포함시키는 기법이다.
ASCII-Armor 기법은 RTL(Return To Library) 공격에 대응하기 위한 방법이다. RTL에 대한 설명은 다음 링크를 참고하면 된다.
참고 링크: https://jade9reen.tistory.com/73
RTL / Return To Library
시스템 해킹에서 shellcode는 스택에 적재되어 실행되는데, 스택에서 shellcode를 실행할 수 없는 경우 RTL 기법을 사용할 수 있다. RTL 기법은 공유 라이브러리 내의 함수를 이용하는 것인데, 공유 라이브러리는..
jade9reen.tistory.com
RTL 공격은 ret를 공유 라이브러리 내의 함수 주소로 변조하여 스택 영역을 쓰지 않고 쉘을 실행하는 기법이다. [사진 5]에서 공유 라이브러리 주소는 40으로 시작하는데 이 부분에 "0x00" NULL 값을 삽입해서 공격을 어렵게 하는 것이다.
4. Stack Canary
bof 취약점으로 인해 sfp, ret가 변조되는 것을 막기 위해 스택 상의 변수들과 sfp 사이에 특정 값을 추가한다. bof가 발생하여 이 값이 변조되면 프로그램을 종료시킨다.
canary 변수를 0x1234567 값으로 초기화한다. 그릐고 strcpy 함수로 인해 bof가 발생하는데, canary 변수 값이 변조되면 프로그램을 종료한다.
'ETC > Security' 카테고리의 다른 글
PLT & GOT (0) | 2019.08.01 |
---|---|
RTL / Return To Library (0) | 2019.08.01 |
리눅스 환경에서 공유 라이브러리 내의 함수 주소와 필요한 인자 주소 알아내기 (0) | 2019.08.01 |
리눅스 환경에서 환경변수로 저장한 shellcode 주소 알아내기 (0) | 2019.07.23 |