해제후사용(UAF) (Use-After-Free)

정보보안학
한 줄 정의: 이미 해제된 메모리 영역을 가리키는 포인터를 프로그램이 계속 참조하여 사용할 때 발생하는 메모리 손상 취약점입니다.

쉽게 풀면

해제후사용은 이미 반납한 호텔 방 열쇠를 여전히 가지고 있다가 그 방에 다시 들어가는 상황과 비슷합니다. 방은 이미 반납되어 다른 손님에게 배정될 수 있는 상태인데, 옛 열쇠로 문을 열면 전혀 다른 손님의 짐이 있는 방에 들어가게 됩니다. 프로그램도 마찬가지로, 메모리를 반납한 뒤에도 그 위치를 가리키는 포인터를 계속 쓰면 이미 다른 용도로 재사용되고 있는 메모리를 건드리게 되어 예기치 않은 동작이나 보안 문제가 발생합니다.

왜 중요한가

해제후사용 취약점은 브라우저와 운영체제 등 주요 소프트웨어에서 반복적으로 발견되어 온 심각한 메모리 안전성 문제로, 정보보안학의 시스템 및 운영체제 보안 연구에서 메모리 관리 방식의 안전성을 평가하는 핵심 주제로 다루어집니다.

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

"해당 함수는 객체를 해제한 이후에도 참조 포인터를 초기화하지 않아 해제후사용(UAF) 취약점이 발생할 수 있다."

포인터 초기화 누락이 취약점으로 이어지는 사례를 설명하는 예문입니다.

"본 연구는 동적 분석을 통해 해제된 메모리에 대한 접근 시점을 추적하여 해제후사용(UAF) 취약점을 탐지하는 기법을 제안하였다."

취약점 탐지를 위한 동적 분석 기법을 다루는 문맥입니다.

조금 더 깊게 보면

해제후사용 취약점은 흔히 해제된 메모리 공간이 이후 다른 목적으로 재할당될 때, 공격자가 그 공간에 원하는 데이터를 채워 넣어 원래 포인터를 통한 접근을 악용하는 방식으로 이어집니다. 이를 방지하기 위해 포인터를 해제 즉시 널 값으로 초기화하는 관행이나, 스마트 포인터와 같은 자동 메모리 관리 기법이 연구되고 실무에 적용됩니다.

주의할 점

해제후사용 취약점은 발생 시점과 실제 악용 시점 사이에 시간 간격이 있을 수 있어 재현과 디버깅이 까다로운 편입니다. 메모리 안전 언어를 사용하더라도 저수준 코드나 외부 라이브러리 연동 부분에서는 여전히 발생할 수 있습니다.

관련 용어