미역줄기의 이모저모
[ Dreamhack ] Hook Overwrite 본문
728x90
후킹(hooking) 운영체제가 어떤 코드를 실행하려 할 때, 이를 낚아채어 다른 코드가 실행되게 하는 것이다. 이때 실행되는 코드를 훅(Hook)이라고 부른다.
후킹의 용도
- 함수에 훅을 심어서 함수의 호출을 모니터링한다.
- 함수에 기능을 추가한다.
- 아예 다른 코드를 심어서 실행 흐름을 변조시킨다.
훅 오버라이트
- malloc()과 free() 를 호출할 때 함께 호출되는 훅이 함수 포인터 형태로 존재한다. 이 함수 포인터를 임의의 함수 주소로 오버라이트하여 악의 적인 코드를 실행하는 기법이다.
- Full RELRO를 우회하는 기법이다.
원가젯
- 단일 가젯만으로도 셸을 실행할 수 있는 매우 강력한 가젯이다.
malloc, free, realloc, hook
- c언어에서 메모리의 동적 할당과 해제를 담당하는 함수
- libc.so에 구현되어 있다.
- 각각에 대응되는 훅 변수가 존재한다.
- libc의 bss 섹션에 위치하여 실행 중에 덮어쓰는 것이 가능하다.
- 훅을 실행할 때 기존 함수에 전달한 인자를 같이 전달해준다.
- __malloc_hook을 system 함수의 주소로 덮고 malloc("/bin/sh")을 호출하여 셸을 획득하는 공격 가능
'Hacking > DreamHack 시스템 해킹 강의' 카테고리의 다른 글
[ Dreamhack ] 포맷 스트링 버그(FSB) (0) | 2024.02.24 |
---|---|
[ Dreamhack ] Out of Bounds (0) | 2024.02.20 |
[ Dreamhack ] link (0) | 2024.02.09 |
[ Dreamhack ] NX & ASLR (0) | 2024.02.08 |
[ Dreamhack ] Stack Canary (1) | 2024.02.08 |