힙오버플로우 (Heap Overflow)

정보보안학
한 줄 정의: 프로그램이 동적으로 할당한 힙 메모리 영역의 버퍼 경계를 넘어서는 데이터를 기록하여 인접한 메모리 구조를 손상시키는 취약점입니다.

쉽게 풀면

힙은 프로그램이 실행 중에 필요한 만큼씩 빌려 쓰는 창고 공간과 같습니다. 이 창고 칸에 원래 정해진 크기보다 많은 짐을 억지로 밀어 넣으면 옆 칸에 있던 물건까지 망가뜨릴 수 있습니다. 힙오버플로우는 바로 이렇게 할당된 메모리 공간을 초과하는 데이터를 기록해서, 옆에 있던 다른 데이터나 관리 정보를 손상시키는 취약점입니다. 이를 악용하면 프로그램의 동작을 공격자가 원하는 방향으로 조작할 수 있습니다. glibc 같은 메모리 할당자는 이런 공격에 대응해 청크 크기·연결 포인터 무결성 검사와 safe-linking 같은 포인터 보호 기법을 도입해 왔습니다.

왜 중요한가

힙오버플로우는 스택오버플로우 공격보다 탐지와 방어가 더 까다로운 경우가 많아, 정보보안학의 시스템 및 운영체제 보안 연구에서 메모리 안전성을 확보하기 위한 할당자 설계와 방어 기법 연구의 주요 대상으로 다루어집니다.

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

"해당 취약점은 동적으로 할당된 버퍼에 대한 경계 검사 누락으로 인해 힙오버플로우가 발생할 수 있음을 보여준다."

경계 검사 부재가 힙오버플로우로 이어지는 사례를 설명하는 예문입니다.

"강화된 힙 할당자는 인접 청크의 메타데이터를 보호하는 무결성 검사 기법을 통해 힙오버플로우 공격의 영향을 제한한다."

방어 목적의 힙 할당자 설계 연구를 다루는 문맥입니다.

조금 더 깊게 보면

힙오버플로우는 흔히 인접한 메모리 청크의 관리 정보를 손상시켜 이후 메모리 해제나 할당 과정에서 임의 코드 실행으로 이어질 수 있습니다. 이 때문에 해제후사용(UAF) 취약점과 함께 다루어지는 경우가 많으며, 방어를 위해 할당자 수준에서 메타데이터 무결성을 검증하는 기법이 연구되고 있습니다. 힙 오버플로우는 스택이 아닌 동적 메모리 영역(힙)에서 할당된 버퍼의 경계를 초과해 데이터를 쓸 때 발생하며, 힙 청크의 관리 메타데이터(크기 정보, 포인터)를 손상시켜 메모리 할당자의 내부 구조를 조작하는 방식으로 악용됩니다.

주의할 점

힙오버플로우는 스택오버플로우와 손상되는 메모리 영역과 악용 방식이 다르므로 동일한 방어 기법을 그대로 적용하기 어렵습니다. 발생 즉시 눈에 띄는 오류로 나타나지 않는 경우도 많아 탐지가 상대적으로 어렵습니다.

스택 오버플로우보다 공격 성공 조건이 까다롭지만, 힙 메타데이터 손상을 통한 임의 주소 쓰기(write-what-where) 공격이 가능해 성공 시 파급력은 오히려 더 클 수 있습니다.

개념 계통

분야 전체 개념 지도 보기 →

관련 용어