[iOS] d: warning: -no_pie ignored for arm64
โ๐ป ๋ฌธ์ ์ํฉ
aslr๋ฅผ ํด์ ํ๊ธฐ ์ํ ์ฌ๋ฌ๊ฐ์ง ๋ฐฉ๋ฒ์ ์ฐพ๋ ์ค์ 32bit ios ์์์ฒ๋ผ fno-pie
๋ฅผ ์ ์ฉํ๋ฉด ์ด๋ป๊ฒ ์๋ฌ๊ฐ ๋์ฌ๊น ํ๋ ์๊ฐ์ผ๋ก ์์๋์๋ค.
ld: warning: -no_pie ignored for arm64
์์ ๊ฐ์ ์๋ฌ๊ฐ ์ถ๋ ฅ๋์๋ค.
์์ ์๋ฌ๋ ๋น์ฐํ๊ฒ๋ 64bit ์์๋ aslr์ด ๋ค์ด๊ฐ๊ธฐ ๋๋ฌธ์ pie๋ฅผ ํด์ ํ ์ ์๋ค๋ ์ปดํ์ผ๋ฌ(clang) ์์ฒด์ ์ค๋ฅ์๋ค.
๊ฒฐ๋ก
๊ทธ๋ ๋ค๋ฉด ์ด๋ป๊ฒ ios 64bit ์์ aslr๋ฅผ ํด์ ํ ์ ์์๊น ?
32bit์ ๊ฒฝ์ฐ์๋ kernel์ ๋ํ read, write๊ฐ ๊ฐ๋ฅํ๋ค.
๊ทธ๋ ๊ธฐ์ aslr์ ์ ์ฉํ๋ ๊ณผ์ ์ ๋ํ ๋ฐ์ด๋๋ฆฌ๋ฅผ ๋ณ๊ฒฝํจ์ผ๋ก์จ aslr ํด์ ๊ฐ ๊ฐ๋ฅํ๋ค.
(bic r0,r1,0x80000000
-> movs r0,0x0
movs r0,0x0
)
ํ์ง๋ง 64bit๋ก ๋์ด์ค๊ฒ ๋๋ฉด์ ios๋ ํ์ฅ์ ๋ง๊ธฐ ์ํด
KPP, KTRR ์ด๋ผ๋ ์ปค๋ ๋ณดํธ ๋ฉ์ปค๋์ฆ์ ์๋ก ๋์
ํ๋ค.
(KPP์ KTRR์ ๋ํ ์ด์ผ๊ธฐ๋ ๋ค์์ ํ๋๋ก ํ๊ฒ ๋ค.)
๊ทธ๋ ๊ธฐ์ ์ปค๋์ ํจ์นํ๋ ๋ฐฉ๋ฒ์ผ๋ก๋ aslr๋ฅผ ํด์ ํ ์ ์๋ค.
๋์ ์ ๋์จ ๋ฐฉ๋ฒ์ด p_flag๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ์ด๋ค.
xnu์ kern_exec.c์๋ ๋ค์๊ณผ ๊ฐ์ด ์ ์ธ๋์ด ์๋ค.
/*
* Disable ASLR during image activation. This occurs either if the
* _POSIX_SPAWN_DISABLE_ASLR attribute was found above or if
* P_DISABLE_ASLR was inherited from the parent process.
*/
if (p->p_flag & P_DISABLE_ASLR) {
imgp->ip_flags |= IMGPF_DISABLE_ASLR;
}
์ฆ, ๋ถ๋ชจ ํ๋ก์ธ์ค์ p_flag์ ๊ฐ ์ค P_DISABLE_ASLR ์ ๊ฐ์ ๋ณ๊ฒฝํ๋ฉด ์์ ํ๋ก์ธ์ค๋ aslr๋ฅผ ํด์ ํ ์ ์๊ฒ ๋๋ค.
์ฐ๋ฆฌ๊ฐ ์คํํ๊ณ ์ ํ๋ ๋ฐ์ด๋๋ฆฌ๋ ๋ชจ๋ launchd๋ผ๋ ํ๋ก์ธ์ค์ ์์ ํ๋ก์ธ์ค๋ค.
์ด๋ฅผ ์ด์ฉํด์ launchd์ p_flag์ ์ ๊ทผํด์ P_DISABLE_ASLR ๊ฐ์ ๋ณ๊ฒฝํด๋ณด๊ณ ์ ํ๋ค.
๋ฉฐ์น ๋์ ์ฝ๋๋ฅผ ์ง๊ณ ์คํ์ํค๊ณ ๋ฅผ ๋ฐ๋ณตํ๊ณ ์์ง๋ง,
์ ํ์ ์ปค๋ ๋ณด์ ์ ์ฑ
์ ์ํด
์ฑ๊ณตํ ์ง ๋ชจ๋ฅด๊ฒ ๋ค.
Leave a comment