문제

힙 오버플로 공격은 어떻게 이루어 집니까?

StackoverFlow 공격의 경우 공격자는 기능 리턴 주소를 주소로 대체합니다.

힙 오버플로 공격에서 어떻게 이루어 집니까? 또한 힙에서 코드를 실행할 수 있습니까?

도움이 되었습니까?

해결책

이것은 플랫폼마다 다르며 내 예제는 지나치게 단순화됩니다. 기본적으로 오버런 할 수있는 링크 된 목록이있는 힙 관리자에게 제공되며 링크 된 목록 포인터를 사용하여 프로세스 메모리의 무작위 부분을 덮어 쓸 수 있습니다.

제어 블록이 다음과 같은 순진한 힙 구현이 있다고 상상해보십시오.

struct HeapBlockHeader
{
    HeapBlockHeader* next;
    HeapBlockHeader* prev;
    int size;

    // Actual heap buffer follows this structure.
};

힙이 풀리면이 제어 블록은 다음/이전 포인터를 수정하여 자유 블록 목록으로 돌아갑니다. 힙 버퍼를 오버런하면 다음 컨트롤 블록에서 포인터를 제어 할 수있는 데이터로 덮어 쓸 수 있습니다. 이 링크를 무시하여 코드에 대한 포인터 (아마도 버퍼에있는 버퍼에서)와 스택의 함수의 반환 주소를 가리 킵니다. 힙 관리자가 블록을 다시 자유로운 목록에 연결하려고하면 실제로 스택의 리턴 주소를 코드 제어에 대한 포인터로 덮어 씁니다.

이 기사는 힙 오버플로 공격에 대한 훌륭한 개요가 있습니다.http://www.h-online.com/security/features/a-heap-of-reisk-747161.html

이 기사는 이러한 종류의 공격을 방지하기 위해 Vista의 힙 관리자에 들어간 강화에 대해 설명합니다.http://www.blackhat.com/presentations/bh-usa-06/bh-us-06-marinescu.pdf

편집 : 힙에서 코드를 실행할 가능성이 있습니다. 가능합니다. 많은 플랫폼이 이제 기본적으로 힙 메모리를 실행 불가능하게 만들어 임의 코드를 실행하는 데 대한 장벽을 높입니다. 그러나 여전히 "Libc 로의 점프"스타일 공격을 수행 할 수 있습니다. 리턴 주소를 실행 가능한 알려진 기능으로 덮어 씁니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top