힙 오버플로

Heap overflow

오버플로, 오버런 또는스매싱 데이터 영역에서 발생하는 버퍼 오버플로우의 일종입니다.힙 오버플로우는 스택 기반 오버플로와는 다른 방식으로 악용될 수 있습니다.힙의 메모리는 런타임에 동적으로 할당되며 일반적으로 프로그램 데이터가 포함됩니다.부정 이용은 특정 방법으로 이 데이터를 파손하여 응용 프로그램이 링크된 목록 포인터와 같은 내부 구조를 덮어쓰게 함으로써 수행됩니다.표준 힙 오버플로우 기술은 동적 메모리 할당 링크를 덮어씁니다(예:malloc메타데이터) 및 결과 포인터 교환을 사용하여 프로그램 함수 포인터를 덮어씁니다.

예를 들어 이전 버전의 Linux에서는 힙에서 서로 옆에 두 개의 버퍼가 할당되면 첫 번째 버퍼가 두 번째 버퍼의 메타데이터를 덮어쓸 수 있습니다.프로그램이 호출할 때 사용 중인 비트를 두 번째 버퍼의 0으로 설정하고 길이를 null 바이트를 복사할 수 있는 작은 음수 값으로 설정합니다.free()첫 번째 버퍼에서는 이들2개의 버퍼를 1개의 버퍼로 Marge하려고 합니다.이 경우 해방된 것으로 간주되는 버퍼는 이전에 할당된 버퍼의 첫 번째 8바이트에 2개의 포인터 FD와 BK를 보유하게 됩니다.BK는 FD에 기록되며 포인터를 덮어쓰는 데 사용할 수 있습니다.

결과들

우발적인 오버플로로 인해 영향을 받는 메모리 영역에 액세스하는 프로세스에 의해 데이터가 손상되거나 예기치 않은 동작이 발생할 수 있습니다.메모리 보호 기능이 없는 운영 체제에서는 이 프로세스가 시스템상의 모든 프로세스일 수 있습니다.

예를 들어 Microsoft JPEG GDI+ 버퍼 오버플로 취약성이 있으며 이를 통해 영향을 받는 [1]시스템에서 원격으로 코드가 실행될 수 있습니다.

iOS 탈옥은 종종 힙 오버플로우를 사용하여 임의 코드 실행을 얻습니다.

검출 및 방지

버퍼 오버플로우의 경우와 마찬가지로 힙 오버플로로부터 보호하는 방법은 크게 3가지입니다.Windows 나 Linux 와 같은 몇 가지 최신 운영체제는 이 세 가지 모두를 구현합니다.

  • 코드와 데이터를 분리하여 페이로드 실행 방지(일반적으로 NX비트 등의 하드웨어 기능 사용)
  • ASLR(Address Space Layout Randomization)과 같은 커널 기능을 사용하여 히프가 고정된 오프셋에서 발견되지 않도록 랜덤화를 도입합니다.
  • 힙 관리자에 건전성 검사 도입

버전 2.3.6 이후 GNU libc에는 예를 들어 호출 시 포인터의 일관성을 체크하는 등 사후 힙 오버플로우를 검출할 수 있는 보호 기능이 포함되어 있습니다.unlink그러나 이전 악용에 대한 이러한 보호는 거의 즉시 악용 가능한 [2][3]것으로 나타났습니다.또한 Linux는 2005년부터 ASLR에 대한 지원을 포함시켰지만, PaX는 몇 년 전에 더 나은 구현을 도입했습니다.또, Linux 는 2004년부터 NX-bit 를 서포트하고 있습니다.

Microsoft는 2003년 4월부터 Windows Server 2003 및 2004년8월부터 Windows XP Service Pack 2에서 힙 상주 버퍼 오버플로에 대한 보호를 제공하고 있습니다.이러한 경감은 안전한 링크 해제 및 힙엔트리 헤더 쿠키입니다.Vista, Server 2008, Windows 7 의 최신 버전의 Windows는 다음과 같습니다.공통 타깃 데이터 구조 삭제, 힙 엔트리 메타데이터 랜덤화, 힙 헤더 쿠키의 확장된 역할, 랜덤화된 힙 기반 주소, 함수 포인터 인코딩, 힙 손상 종료 및 알고리즘 변동.Normal Data Execution Prevention(DEP) 및 ASLR도 이 [4]공격을 완화하는 데 도움이 됩니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ "Microsoft Security Bulletin MS04-028, Buffer Overrun in JPEG Processing (GDI+) Could Allow Code Execution (833987)". Microsoft. 14 Sep 2004. Retrieved 29 Mar 2016.
  2. ^ "The Malloc Maleficarum". Oct 2005. Retrieved 24 April 2017.
  3. ^ "MALLOC DES-MALEFICARUM". 2009. Retrieved 29 Mar 2016.
  4. ^ "Preventing the exploitation of user mode heap corruption vulnerabilities". Technet blog, Microsoft Security Research & Defense. 4 Aug 2009. Retrieved 29 Mar 2016.

외부 링크