본문 바로가기
  • True knowledge exists in knowing that you know nothing. -Socrates-
ETC/정보보안 세미나

Heap overflow

by intadd 2016. 8. 18.





안녕하세여 

인코그니토에서 heap overflow 라는 주제의 발표를 들었습니다.

발표자는 조성환님이 였습니다. 


아래는 발표 중에 ONENOTE에 적었던 것들입니다.

 

Heap : Malloc 통해 메모리에 할당  

Stack 높은 주소 : 큰메모리에서 작은메모리의 조소로 쌓인다.

Heap 낮은 주소 : 작은 메모리에서 메모리로 쌓인다.

 

Who controls Heap? --> memory Allocatorfk라고 불리는 프로그램이 메모리를 관리한다.

dImalloc-General Purpose allocaor

 

생각보다 malloc 처리해야할 것들이 많다. 그렇기 때문에 memory Allocatorfk 들이 많다.

 

Malloc 에서 사용되는 자료구조

Heap 메모리 덩어리들 지칭

Chunk 가각 malloc 조각들을 지칭

 

Malloc_chunk

메모리를 요청한 크기보다 조금 크게 할당된다.

실제로 메모리 주소를 응용 프로그램에 때는 user data쪽을돌려준다.

 

Bins

Free 것을 재사용하기 위해서 모아두는 비슷한 크기끼리 모아

번호를 붙여서 관리한다.

 (메모리 단편화를 막기 위해서 사용 )

 

User data 해제 되면 사용하지 않는 공간에 fd bk라는 내부 정보를 저장해 둔다.

나중에 다시 쓰기 위해서 링크드 디스크 형석으로 저장한다.

 


  1. free 목록에 비슷한 크기가 있으면 그것을 응용 프로그램에게
  1. 재사용 것이 있으면 top chunk 저장

오늘 소개할 heap 공격 방식

 fastbin_dup

House of force

Poison Null Byte

 

  1. Fastbin_dup

중복 free 이용할 경우

같은 free(a) 중복해서 이용할 경우 변수를 하나 만들어서

A 한번 돌고 다시 A 돌아 free(c) 하여 *c=원하는 주솟값

코드를 넣으면 프로그램이 원하는 메모리를

 

요구 조건 a,a, == x a,b,a==0

(12345678번지에 있는 size 영역을 맞춰줘야함 )

(크기가 작은 청크들 에만 적용이 가능하다.)

 

  1. House of force

Top chunk size 통해 조작을 통해서 원하는 위치에 malloc 있음

힙에서 bof 취약점이 선행 되어야한다.

write- what - where 가능 (무엇을 어디에다가 있다)

 

Top chunk size -->

Chunk size(30) buffer over flow( 400000) 

 chunk size(100)

 

이렇게 만들어진 청크는 기존의 보다 400000만큼 떨어진 곳에 위치

40000000 조작하는 것으로 원하는 위치에 malloc 가능하다.

Top chunk size 조작 (최대한 크게)

다음에 할당 받고 싶은 주소- 현재 top chunk주소 만큼 새로 malloc 할당

다음 malloc 통해서 할당된 메모리에 원하는  값을 복사.

 

요구사항

현재 top chunk 주소를 알아내야함.

Bof 버그로 top chunk 값을 수정 있어야한다.

 

 

  1. Posion Null Byte

 This chunk size N, M, P

PREV_INUSE(P)

바로 이전 청크가 할당 경우

IS_MMAPPED(M)

현재 청크가 mmap 통해 할당 경우

NON_MAIN_ARENA(N)

 

바로 직전의 청크의 사이즈를 저장 (P=0, 이전 청크가 해제 되었을 떄에만 유용 하다)

 

조건 : 바이트 하나 overwrite , malloc,free 원하는 대로 있어야 한다.

 

다른 취약점에 비해서는 요구 조건이 적고 박생할 있을 가능성이 높음

 

A,B,C 만들고 , B 해제

A overflow 해서 해제된 B 사이즐를 줄여버림

B 쪼개서 D E 만듬

 

 

 

개발자 입장에서의 heap 취약점을 막을려면?

Double-Free 같은 취약점을 발생시키지 않는것.

Heap상에서 BOF 나지 않도록 관리하는 .

바이트 하나도 허용 해서는 안된다.

 

공격자 입장에서 HEap Exploit하려면

위에 언급한 취약점을 찾을 있어야한다.

Heap근처에 위치한 자료구조를 이해하고 있어야한다.


heap overflow에 대해서 쉽게 이해할 수 있어서 정말 유익한 시간이었습니다.     



'ETC > 정보보안 세미나' 카테고리의 다른 글

화이트 햇 콘테스트  (0) 2017.01.04
ksia 발표  (0) 2017.01.04
빵빵빵 세미나  (0) 2017.01.04
kusic 학술 세미나  (0) 2016.09.10
인코그니트 참가 및 일상  (0) 2016.08.18

댓글