힙오버플로우 (Heap Overflow)
한 줄 정의: 프로그램이 동적으로 할당한 힙 메모리 영역의 버퍼 경계를 넘어서는 데이터를 기록하여 인접한 메모리 구조를 손상시키는 취약점입니다.
쉽게 풀면
힙은 프로그램이 실행 중에 필요한 만큼씩 빌려 쓰는 창고 공간과 같습니다. 이 창고 칸에 원래 정해진 크기보다 많은 짐을 억지로 밀어 넣으면 옆 칸에 있던 물건까지 망가뜨릴 수 있습니다. 힙오버플로우는 바로 이렇게 할당된 메모리 공간을 초과하는 데이터를 기록해서, 옆에 있던 다른 데이터나 관리 정보를 손상시키는 취약점입니다. 이를 악용하면 프로그램의 동작을 공격자가 원하는 방향으로 조작할 수 있습니다.
왜 중요한가
힙오버플로우는 스택오버플로우 공격보다 탐지와 방어가 더 까다로운 경우가 많아, 정보보안학의 시스템 및 운영체제 보안 연구에서 메모리 안전성을 확보하기 위한 할당자 설계와 방어 기법 연구의 주요 대상으로 다루어집니다.
논문에서는 이렇게 쓰입니다
"해당 취약점은 동적으로 할당된 버퍼에 대한 경계 검사 누락으로 인해 힙오버플로우가 발생할 수 있음을 보여준다."
경계 검사 부재가 힙오버플로우로 이어지는 사례를 설명하는 예문입니다.
"강화된 힙 할당자는 인접 청크의 메타데이터를 보호하는 무결성 검사 기법을 통해 힙오버플로우 공격의 영향을 제한한다."
방어 목적의 힙 할당자 설계 연구를 다루는 문맥입니다.
조금 더 깊게 보면
힙오버플로우는 흔히 인접한 메모리 청크의 관리 정보를 손상시켜 이후 메모리 해제나 할당 과정에서 임의 코드 실행으로 이어질 수 있습니다. 이 때문에 해제후사용(UAF) 취약점과 함께 다루어지는 경우가 많으며, 방어를 위해 할당자 수준에서 메타데이터 무결성을 검증하는 기법이 연구되고 있습니다.
주의할 점
힙오버플로우는 스택오버플로우와 손상되는 메모리 영역과 악용 방식이 다르므로 동일한 방어 기법을 그대로 적용하기 어렵습니다. 발생 즉시 눈에 띄는 오류로 나타나지 않는 경우도 많아 탐지가 상대적으로 어렵습니다.