맨위로가기

힙 오버플로

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

힙 오버플로는 힙 메모리 영역에 데이터를 쓸 때 할당된 버퍼의 경계를 넘어선 상태를 의미하며, 데이터 오염, 예기치 않은 프로그램 동작, 시스템 손상 등을 야기할 수 있다. 악의적인 공격자는 이를 악용하여 임의의 코드를 실행할 수 있다. 힙 오버플로를 방어하기 위해 코드와 데이터 분리, 주소 공간 배치 무작위화(ASLR)와 같은 난수화, 힙 매니저에 대한 검사 등이 사용되며, 최신 운영 체제들은 이러한 방어 기법을 일부 구현하고 있다. 윈도우, 리눅스와 같은 운영체제는 각각 고유한 힙 오버플로 방어 기술을 제공하며, 온라인 동적 분석을 통해 런타임 시 보안 위반을 탐지하기도 한다.

더 읽어볼만한 페이지

  • 취약점 공격 - 보안 취약점
    보안 취약점은 시스템의 설계, 구현, 운영, 관리상 결함이나 약점으로, 위협에 의해 악용되어 시스템 보안 정책을 위반할 수 있는 요소이며, ISO 27005, IETF RFC 4949, NIST SP 800-30, ENISA 등 다양한 기관에서 정의하고 있다.
  • 취약점 공격 - 인터넷 보안
    인터넷 보안은 사이버 위협, 악성 소프트웨어, 서비스 거부 공격 등으로부터 정보와 시스템을 보호하기 위해 네트워크 계층 보안, 다단계 인증, 방화벽 등 다양한 기술과 방법을 포괄한다.
힙 오버플로
기본 정보
힙 오버플로의 예시
힙 오버플로의 예시
취약점 클래스버퍼 오버플로
CWECWE-122
CAPECCAPEC-100, CAPEC-233, CAPEC-234
상세 정보
설명힙 오버플로는 힙 영역에서 버퍼 오버플로가 발생하는 소프트웨어 버그이다.
관련 보안 취약점보안 취약점
메모리 안전성
관련 보안 공격코드 삽입 공격
예방 기술
기술주소 공간 배치 난수화(ASLR)
데이터 실행 방지(DEP)
안전한 libc
힙 풍수
관련 용어
관련 용어힙 스프레이
use-after-free

2. 결과

힙 오버플로는 데이터 오염, 예상치 못한 프로그램 동작, 시스템 손상 등을 야기할 수 있으며, 악의적인 공격자는 이를 이용하여 임의 코드를 실행시킬 수 있다.[6][1] 힙 오버플로는 우연히 발생할 수도 있지만, 의도적인 익스플로잇을 통해 특정 영역의 데이터를 변경하거나 임의 코드를 실행하는 방식으로 악용될 수 있다. 메모리 보호가 없는 운영 체제에서는 시스템의 어느 프로세스에서나 이러한 문제가 발생할 수 있다.

마이크로소프트 JPEG GDI+ 버퍼 오버플로 취약점은 감염된 머신에서 코드의 원격 실행을 허용하여 많은 시스템에 피해를 입혔다.[6][1] iOS 탈옥은 커널 익스플로잇을 위해 힙 오버플로를 사용하는 대표적인 예시이다.[6][1]

3. 탐지와 방어

힙 오버플로를 방어하는 방식에는 세 종류가 있으며, 여러 현대 운영 체제들은 이 세 가지 방식 모두를 구현하여 제공한다.[7][8][9]


  • NX 비트 같은 하드웨어 특징을 이용하여 코드와 데이터를 분리함으로써 페이로드의 실행을 막는다.
  • 힙이 고정된 오프셋에서 발견되지 않도록 ASLR같은 난수화를 도입한다.
  • 힙 매니저에 대한 분별력 있는 검사를 도입한다.


GNU libc는 2.3.6 버전부터 ''unlink''를 호출할 때 포인터의 일관성을 검사하는 것 같이 힙 오버플로를 탐지하는 방어가 포함되었으나, 이러한 방어들은 거의 즉시 공격 가능하다고 밝혀졌다.[2][3] 리눅스는 PaX가 몇 년 전에 더 나은 구현을 도입하였지만, 2005년부터 ASLR을, 2004년부터는 NX 비트의 지원을 포함하였다.

마이크로소프트는 2003년부터 힙에 기반한 버퍼 오버플로에 대한 방어를 포함하였다. 이러한 완화는 안전한 링크해제와 힙 엔트리 헤더 쿠키가 있다. 윈도우의 최근 버전들은 일반적으로 대상이 되는 데이터 구조체들의 제거, 힙 엔트리 메타데이터 난수화, 함수 포인터 인코딩, 힙 오염의 종료 그리고 알고리즘 변이를 포함한다. 일반 데이터 실행 방어(DEP)와 ASLR 도 또한 이 공격을 완화시키는데 도움을 준다.[4] 힙 오버플로우에 대한 가장 일반적인 탐지 방법은 온라인 동적 분석이며, 이 방법은 프로그램의 런타임 실행을 관찰하여 보안 위반 탐지를 통해 취약점을 식별한다.[5]

3. 1. 실행 방지

힙 오버플로를 방어하는 방식에는 세 종류가 있으며, 여러 현대 운영 체제들은 이 세 가지 방식 모두를 구현하여 제공한다.[7][8][9]

  • NX 비트 같은 하드웨어 특징을 이용하여 코드와 데이터를 분리함으로써 페이로드의 실행을 막는다.
  • 힙이 고정된 오프셋에서 발견되지 않도록 ASLR같은 난수화를 도입한다.
  • 힙 매니저에 대한 분별력 있는 검사를 도입한다.


GNU libc는 2.3.6 버전부터 ''unlink''를 호출할 때 포인터의 일관성을 검사하는 것 같이 힙 오버플로를 탐지하는 방어가 포함되었으나, 이러한 방어들은 거의 즉시 공격 가능하다고 밝혀졌다.[2][3] 리눅스는 PaX가 몇 년 전에 더 나은 구현을 도입하였지만, 2005년부터 ASLR을, 2004년부터는 NX 비트의 지원을 포함하였다.

마이크로소프트는 2003년부터 힙에 기반한 버퍼 오버플로에 대한 방어를 포함하였다. 이러한 완화는 안전한 링크해제와 힙 엔트리 헤더 쿠키가 있다. 윈도우의 최근 버전들은 일반적으로 대상이 되는 데이터 구조체들의 제거, 힙 엔트리 메타데이터 난수화, 함수 포인터 인코딩, 힙 오염의 종료 그리고 알고리즘 변이를 포함한다. 일반 데이터 실행 방어(DEP)와 ASLR 도 또한 이 공격을 완화시키는데 도움을 준다.[4] 힙 오버플로우에 대한 가장 일반적인 탐지 방법은 온라인 동적 분석이며, 이 방법은 프로그램의 런타임 실행을 관찰하여 보안 위반 탐지를 통해 취약점을 식별한다.[5]

3. 2. 난수화

ASLR(주소 공간 배치 난수화)과 같은 커널 기능을 사용하여 힙의 메모리 주소를 예측하기 어렵게 만들어 힙 오버플로 공격을 방해한다.[2][3][4][5] 리눅스는 2005년부터 ASLR을 지원하며, 2004년부터 NX 비트를 지원한다.[2][3]

3. 3. 유효성 검사

GNU libc는 2.3.6 버전부터 'unlink'를 호출할 때 포인터의 일관성을 검사하는 것 같이 힙 오버플로를 탐지하는 방어가 포함되었으나, 이러한 방어들은 거의 즉시 공격 가능하다고 밝혀졌다.[7][8] 힙 관리자에 대한 분별력 있는 검사를 도입하여 힙 오버플로를 탐지하고 방어한다.[2][3]

4. 운영 체제별 방어 기법

힙 오버플로를 방어하는 방식으로 세 종류가 있다. 여러 현대 운영 체제들은 세가지 모두의 구현 중 일부를 제공한다.


  • 일반적으로 NX 비트 같은 하드웨어 특징들을 통해 코드와 데이터를 분리함으로써 페이로드의 실행을 막는다.
  • 힙이 고정된 오프셋에서 발견되지 못하게 난수화를 도입한다. 일반적으로 커널 기능, 예를 들어 ASLR (주소 공간 배치 무작위화)을 사용한다.
  • 힙 매니저에 대한 분별력 있는 검사를 도입한다.


GNU libc는 2.3.6 버전부터 ''unlink''를 호출할 때 포인터의 일관성을 검사하는 것 같이 힙 오버플로를 탐지하는 방어가 포함되었다. 그러나 이러한 방어들은 거의 즉시 공격 가능하다고 밝혀졌다.[7][8] 추가적으로 리눅스는 (비록 PaX가 몇 년 전에 더 나은 구현을 도입하였지만) 2005년 이후부터는 ASLR을 포함하였다. 또한 리눅스는 2004년부터는 NX 비트의 지원을 포함하였다.

마이크로소프트는 2003년 4월 Windows Server 2003 및 2004년 8월 Windows XP의 서비스 팩 2부터 힙 내 버퍼 오버플로우에 대한 보호 기능을 포함했다. 이러한 완화 조치는 안전한 언링킹 및 힙 항목 헤더 쿠키였다. Vista, Server 2008 및 윈도우 7과 같은 이후 버전의 윈도우에는 다음과 같은 기능이 포함되어 있다. 일반적으로 대상이 되는 데이터 구조 제거, 힙 항목 메타데이터 무작위화, 힙 헤더 쿠키의 역할 확대, 무작위 힙 기본 주소, 함수 포인터 인코딩, 힙 손상 종료 및 알고리즘 변형. 일반적인 데이터 실행 방지(DEP) 및 ASLR도 이 공격을 완화하는 데 도움이 된다.[9]

4. 1. 리눅스

리눅스는 PaX, ASLR, NX 비트 등의 기술을 통해 힙 오버플로 공격을 완화한다.[7][8][9] 2005년부터 리눅스는 ASLR을 포함하였으며, 2004년부터는 NX 비트의 지원을 포함하였다.[2][3][4] GNU libc는 2.3.6 버전부터 ''unlink''를 호출할 때 포인터의 일관성을 검사하는 것 같이 힙 오버플로를 탐지하는 방어가 포함되었으나, 이러한 방어들은 거의 즉시 공격 가능하다고 밝혀졌다.[2][3]

4. 2. 윈도우

마이크로소프트는 2003년 4월 Windows Server 2003과 2004년 8월 Windows XP의 서비스 팩 2부터 힙 기반 버퍼 오버플로에 대한 방어 기능을 포함했다.[4] 이러한 완화 조치에는 안전한 링크 해제와 힙 엔트리 헤더 쿠키가 있었다. Vista, Server 2008 및 윈도우 7과 같은 이후 버전의 윈도우에는 대상 데이터 구조 제거, 힙 엔트리 메타데이터 난수화, 함수 포인터 인코딩, 힙 손상 종료, 알고리즘 변형 등이 포함된다.[4] 일반 데이터 실행 방어(DEP)와 ASLR도 이러한 공격을 완화하는 데 도움이 된다.[4]

5. 동적 분석

온라인 동적 분석은 프로그램의 런타임 실행을 관찰하여 보안 위반을 탐지하고 취약점을 식별하는 방법이다.[5] 힙 오버플로우를 방지하기 위한 일반적인 방법에는 코드와 데이터 분리, 무작위화 도입, 힙 관리자에 대한 유효성 검사 도입 등이 있다. 여러 현대적인 운영 체제는 이러한 방법들을 일부 구현하고 있다. 예를 들어, GNU libc는 2.3.6 버전부터 포인터 일관성 검사와 같은 힙 오버플로 탐지 방어를 포함했지만, 이러한 방어는 곧 공격에 취약한 것으로 밝혀졌다.[2][3] 리눅스는 2004년부터 NX 비트를, 2005년부터 ASLR을 지원한다. 마이크로소프트는 2003년부터 힙 기반 버퍼 오버플로에 대한 방어를 윈도우에 포함시켰으며, 안전한 링크 해제, 힙 엔트리 헤더 쿠키, 데이터 실행 방지(DEP), ASLR 등의 완화 기법을 제공한다.[4]

5. 1. 온라인 동적 분석

온라인 동적 분석은 프로그램의 런타임 실행을 관찰하여 보안 위반을 탐지하고 취약점을 식별하는 방법이다.[5] 힙 오버플로우를 방지하기 위한 일반적인 방법에는 코드와 데이터 분리, 무작위화 도입, 힙 관리자에 대한 유효성 검사 도입 등이 있다.[2][3] 여러 현대적인 운영 체제는 이러한 방법들을 일부 구현하고 있다. 예를 들어, GNU libc는 2.3.6 버전부터 포인터 일관성 검사와 같은 힙 오버플로 탐지 방어를 포함했지만, 이러한 방어는 곧 공격에 취약한 것으로 밝혀졌다.[7][8] 리눅스는 2004년부터 NX 비트를, 2005년부터 ASLR을 지원한다. 마이크로소프트는 2003년부터 힙 기반 버퍼 오버플로에 대한 방어를 윈도우에 포함시켰으며, 안전한 링크 해제, 힙 엔트리 헤더 쿠키, 데이터 실행 방지(DEP), ASLR 등의 완화 기법을 제공한다.[9]

참조

[1] 웹사이트 Microsoft Security Bulletin MS04-028, Buffer Overrun in JPEG Processing (GDI+) Could Allow Code Execution (833987) http://www.microsoft[...] 2004-09-14
[2] 웹사이트 The Malloc Maleficarum http://packetstormse[...] 2005-10
[3] 웹사이트 MALLOC DES-MALEFICARUM http://www.phrack.or[...] 2009
[4] 웹사이트 Preventing the exploitation of user mode heap corruption vulnerabilities https://msrc.microso[...] Technet blog, Microsoft Security Research & Defense 2009-08-04
[5] 서적 Proceedings of the Second Workshop on Real, Large Distributed Systems: December 13, 2005, San Francisco, CA, USA USENIX Association 2005
[6] 웹인용 Microsoft Security Bulletin MS04-028, Buffer Overrun in JPEG Processing (GDI+) Could Allow Code Execution (833987) http://www.microsoft[...] 2004-09-14
[7] 웹인용 The Malloc Maleficarum http://packetstormse[...] 2005-10
[8] 웹인용 MALLOC DES-MALEFICARUM http://www.phrack.or[...] 2009
[9] 웹인용 Preventing the exploitation of user mode heap corruption vulnerabilities http://blogs.technet[...] Technet blog, Microsoft Security Research & Defense 2009-08-04



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com