주소공간 배치 난수화 (Address Space Layout Randomization)
쉽게 풀면
도둑이 미리 도면을 보고 금고 위치를 외워두었는데, 집주인이 매번 방 배치를 바꿔버려서 도면이 쓸모없어지는 상황과 비슷합니다. 프로그램이 실행될 때마다 코드나 데이터가 메모리의 어느 위치에 놓일지를 무작위로 정하면, 공격자가 특정 주소를 미리 알고 있어야 하는 공격 방식이 통하지 않게 됩니다. 이 기법을 줄여서 흔히 ASLR이라고 부릅니다. 대부분의 현대 운영체제에서 기본적으로 적용되는 방어 기법입니다.
왜 중요한가
메모리 손상 취약점을 악용하는 공격은 흔히 특정 코드나 함수가 위치한 메모리 주소를 알아야 성립하기 때문에, ASLR은 이런 공격의 성공률을 크게 낮추는 실질적인 방어 수단으로 연구됩니다. 시스템 및 운영체제 보안 분야에서 가장 널리 배포된 완화 기법 중 하나로서, 이를 우회하는 공격 기법과 이를 보완하는 방어 기법 모두가 활발히 연구되고 있습니다.
논문에서는 이렇게 쓰입니다
ASLR이 적용되어도 다른 취약점을 통해 주소 정보를 알아내면 방어가 무력화될 수 있음을 보여주는 연구입니다.
난수화의 단위를 더 잘게 나누어 방어력을 강화하려는 개선된 접근을 다룬 사례입니다.
조금 더 깊게 보면
ASLR은 프로세스가 시작될 때 코드 영역, 라이브러리, 스택, 힙 등의 시작 주소를 난수를 이용해 결정합니다. 난수화의 범위가 넓을수록 공격자가 올바른 주소를 추측하기 어려워지지만, 정보 유출 취약점이 함께 존재하면 실제 주소가 노출되어 ASLR의 효과가 약해질 수 있습니다. 이 때문에 ASLR은 스택 카나리, DEP/NX 등 다른 완화 기법과 함께 적용되는 것이 일반적입니다.
주의할 점
ASLR은 메모리 손상 취약점 자체를 없애는 것이 아니라 악용을 어렵게 만드는 완화 기법이라는 점에 유의해야 합니다. 정보 유출이나 부분적인 주소 추측이 가능한 환경에서는 ASLR만으로는 충분한 방어가 되지 않을 수 있습니다.