주소공간배치 무작위화 (Address Space Layout Randomization (ASLR))

정보보안학
한 줄 정의: 프로그램 실행 시마다 코드와 데이터가 메모리에 배치되는 주소를 무작위로 바꿔 공격자가 특정 주소를 예측하기 어렵게 만드는 보안 기법입니다.

쉽게 풀면

과거에는 프로그램이 실행될 때마다 특정 함수나 데이터가 항상 같은 메모리 주소에 놓이는 경우가 많아, 공격자가 미리 그 주소를 알고 정확히 그곳을 노려 공격할 수 있었습니다. 주소공간배치 무작위화는 매번 실행할 때마다 건물의 각 방 위치를 무작위로 바꿔버리는 것과 비슷합니다. 도둑이 예전 설계도를 들고 와도 방 위치가 바뀌어 있어 원하는 곳을 정확히 찾기 어려워집니다. 이 때문에 같은 취약점이 있어도 공격 성공률이 크게 낮아집니다.

왜 중요한가

버퍼 오버플로우 등 메모리 손상 취약점을 이용한 공격은 대부분 특정 함수나 셸코드의 메모리 주소를 정확히 알아야 성립하는 경우가 많습니다. 주소공간배치 무작위화는 이런 공격의 전제 조건 자체를 무너뜨리는 기초적이면서도 효과적인 방어 기법이기 때문에, 정보보안학에서 시스템 보안의 기본 방어선으로 폭넓게 연구되고 다뤄집니다.

논문에서는 이렇게 쓰입니다

"본 연구에서는 정보 유출 취약점을 결합하여 주소공간배치 무작위화를 우회하는 공격 시나리오를 재현하였다."

ASLR이 적용되어 있어도 다른 취약점으로 메모리 주소 정보를 빼내면 방어가 무력화될 수 있음을 보여준 연구라는 뜻입니다.

"커널 주소공간배치 무작위화(KASLR)는 사용자 영역뿐 아니라 커널 영역의 주소 예측 공격도 어렵게 만든다."

ASLR이 일반 응용 프로그램뿐 아니라 운영체제 커널 자체에도 적용될 수 있다는 설명입니다.

조금 더 깊게 보면

ASLR은 스택, 힙, 공유 라이브러리, 실행 파일의 베이스 주소 등을 각각 독립적으로 무작위화하는 방식으로 구현되는 경우가 많습니다. 다만 무작위화에 사용할 수 있는 비트 수가 시스템 아키텍처(32비트 대 64비트)에 따라 다르기 때문에, 전체적인 방어 강도도 이에 따라 달라집니다. 정보 유출 취약점을 통해 실제 로드된 주소 하나를 알아내면 나머지 무작위화된 영역의 위치도 역산할 수 있어, 최근 연구에서는 이런 우회 공격 기법도 함께 다뤄지고 있습니다.

주의할 점

ASLR은 공격을 어렵게 만드는 완화 기법(mitigation)이지 취약점 자체를 없애는 근본적 해결책은 아니므로, 다른 방어 기법과 함께 사용되어야 합니다.

관련 용어