본문 바로가기
카테고리 없음

fine-grained ASLR

by jskimm 2022. 1. 10.
728x90

ASLR(Address Space Layout Randomization) 기법은 메모리 상에서 공격을 어렵게 하기 위해 스택이나 힙, 라이브러리 등의 주소를 랜덤으로 배치함으로써 실행할 때마다 libc 및 데이터 주소가 바뀌게 하는 memory mitigation 기법 중 하나입니다. 하지만 ASLR은 코드의 시작 지점만 randomization하기 때문에 프로그램의 취약점으로 인해 memory가 write, send, stdout 등을 통해 leak이 될 경우 해당 libc에서 함수의 offset을 계산하여 ROP Chaining등의 공격으로 이어져 Arbitary function이 실행될 수 있습니다.

이를 해결하기 위해 나온 개념이 바로 fine-grained ASLR 입니다. Fine-grained 는 한국어로 (결이 고운?) 마땅히 번역할 순 없지만 소프트웨어 공학에서 어떠한 프로세스를 아주 잘게 쪼개는 것을 표현할 때 종종 쓰는 용어입니다. Fine-grained ASLR은 gadget, 즉 코드 조각들을 instruction이 진행 될 때 마다 가젯의 주소를 계속 randomization하게 할당하는 기법입니다. 따라서 실제 취약점으로 인해 libc 주소가 leak이 되더라도 libc를 통해 offset을 구해 해커가 원하는 함수를 실행시킬 수 없도록 합니다.

하지만 모든 코드조각을 randomization 하기 위해서는 당연히 기존에 사용되던 ASLR 기법보다 더 많은 오버헤드가 발생하기 때문에 규모가 큰 프로그램에서는 당연히 성능의 저하가 있을 수 밖에 없습니다. 따라서 성능 보안 사이에서 합의점을 잘 찾는 것이 중요할 것 같습니다.

Ref) On the Effectiveness of Fine-Grained Address Space Layout Randomization

추가)

JIT-ROP 는 동적으로 가젯을 찾기 때문에, 해당 공격 기법을 통해 fine-grained ASLR을 무력화 할 수도 있다고 합니다.

 
728x90

댓글