일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
- freenet
- Covert Channels vs Side Channels
- Harriso Ruzo
- 버퍼오퍼블로우
- iphone
- Mac
- checkra1n
- 버전낮추기
- Permission modifiy
- 접근제어
- AFT
- *-propoerty
- NX-bit 우회
- 더티카우공격
- Bell-lapadula
- Biba model
- integrety
- Chinese Wall
- 클라크윌슨 모델
- 아이폰탈옥
- HRU
- ss-property
- ios
- BLP
- 포렌식
- Information flow security model
- rooting
- P2P
- 탈옥
- Clark-wilson model
- Today
- Total
4n6x4t
Heap Overflow Attacks 원리와 대응방안 3가지 본문

Heap?: stack과 마찬가지로 동적으로 영역의 크기가 변하는 메모리 공간


위의 그림처럼 malloc(5)이 실행되면 5의 크기를 만족하는 free chunk를 찾는다.
각 청크에는 주소와 크기가 적혀있는데 이것을 확인해서 크기 5를 만족하는 청크에 할당하는 원리이다.
뒤에 자세히 후술하겠지만, 이 청크를 free()로 unlinking 하는 과정에서 힙오버플로우가 발생하게 된다.

사용된 청크를 할당해제(dealloc)하고 freelist에 추가하게되면, 인접한 free chunk와 list가 합쳐진다.
여기서 중요한게 힙의 각 청크에는 메타데이터가 존재한다는 것입니다.
힙의 관리를 위해 모든 청크는 메타데이터를 header에 갖는다.

위와 같이 chunk 앞에 header가 있어서 overflow 발생 시 다음 chunk의 header를 overwrite 가능하다.
즉 metadata와 data가 붙어있는 in-band 구조가 문제이다.
SoF는 Return address를 덮어써서 RA를 공격자가 원하는 코드 주소로 보내는 취약점이었다면
HoF는 이를 포함해서 프로그램 필요 정보조작을 통한 공격이 가능하기 때문에 SoF에 비해서 공격의 범위가 넓다.

힙 청크의 레이아웃이다. 각각 할당된 것과 비할당된 청크의 구조를 볼 수 있다. 특히 비할당 청크에는 Forward pointer to next(fd)와 Back pointer to previous(bk)가 존재하게 된다.

전체적인 힙오버플로우의 과정은 다음과 같다. char *b가 있는 b 청크를 free()해주고, a 청크에서 strcpy()로 b청크를 덮어쓴다. 이 후 a청크를 free()해주게 되면 미할당영역에 메타데이터를 넣을 수 있게된다. (double free bug라고도 함)
이 과정을 통해서 fd, bk를 free chunk 속에 넣을 수 있는데 이것이 실행되며 exploit되게 된다.
overwrite the 'fd' = 'where - 12', 'bk' = 'what'
위와 같은 공식이 성립되게 되는데, 예를 들면 puts_got - 12 를 puts_got을 overwrite할 값으로 넣으면 된다.
대응방안 3가지
- Sanity check : free 시 magic number를 사용하여 변조여부를 확인하는 방법으로 스택가드와 유사하다
- DEP(Data Execution Prevention): 스택에 더해 힙, 그리고 다른 영역(코드 영역 제외)에서 실행권한을 막음으로서 힙에 악성코드가 주입되더라도 실행이 안되게 만든다. NX-bit와 유사하다.
- ASLR(Address Space Layout Randomization): 함수의 메모리 주소를 랜덤화하는 것으로 공격 난이도를 올리지만 완벽히 공격을 차단하지 못한다는 한계가 있다.
이상으로 힙오버플로우에 대한 설명을 마치겠습니다. 감사합니다.
'Study > System Security' 카테고리의 다른 글
Dirty COW 공격 원리와 절차 그리고 실습! (2) | 2023.05.08 |
---|---|
RTL(Return to LibC) 공격의 3단계 수행 절차 및 대응 방안 3가지 (0) | 2023.04.27 |
Stack Buffer Overflow 취약점과 대응 방안 4가지 (0) | 2023.04.26 |
Set-UID Privileged Programs의 취약점을 이용한 공격 방법 2가지 (0) | 2023.04.25 |