Memory Tagging Extension (MTE)
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์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.
๊ธฐ๋ณธ ์ ๋ณด
**Memory Tagging Extension (MTE)**๋ buffer overflows ๋ฐ use-after-free ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ จ ์ค๋ฅ๋ฅผ ๊ฐ์งํ๊ณ ๋ฐฉ์งํ์ฌ ์ํํธ์จ์ด ์ ๋ขฐ์ฑ๊ณผ ๋ณด์์ ํฅ์์ํค๋๋ก ์ค๊ณ๋์์ต๋๋ค. MTE๋ ARM ์ํคํ ์ฒ์ ์ผ๋ถ๋ก, ๊ฐ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ์์ tag๋ฅผ ๋ถ์ด๊ณ ํด๋น ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฐธ์กฐํ๋ ๊ฐ pointer์๋ ์ผ์นํ๋ tag๋ฅผ ๋ถ์ฌํ๋ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํฉ๋๋ค. ์ด ๋ฐฉ์์ ๋ฐํ์์ ๋ถ๋ฒ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ์ ํ์งํ ์ ์๊ฒ ํ์ฌ, ๊ทธ๋ฐ ์ทจ์ฝ์ ์ ์ ์ฉํด ์์์ ์ฝ๋๋ฅผ ์คํํ ์ํ์ ํฌ๊ฒ ์ค์ ๋๋ค.
How Memory Tagging Extension Works
MTE๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๊ณ ๊ณ ์ ๋ ํฌ๊ธฐ์ ๋ธ๋ก์ผ๋ก ๋๋๊ณ , ๊ฐ ๋ธ๋ก์ tag๋ฅผ ํ ๋นํ๋ ๋ฐฉ์์ผ๋ก ๋์ํ๋ฉฐ, ์ด tag๋ ๋ณดํต ๋ช ๋นํธ ํฌ๊ธฐ์ ๋๋ค.
pointer๊ฐ ํด๋น ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐ๋ฆฌํค๋๋ก ์์ฑ๋๋ฉด ๋์ผํ tag๋ฅผ ๊ฐ์ต๋๋ค. ์ด tag๋ ๋ฉ๋ชจ๋ฆฌ pointer์ ์ฌ์ฉ๋์ง ์๋ ๋นํธ๋ค์ ์ ์ฅ๋์ด ํฌ์ธํฐ๋ฅผ ํด๋น ๋ฉ๋ชจ๋ฆฌ ๋ธ๋ก๊ณผ ์ฐ๊ฒฐํฉ๋๋ค.
.png)
ํ๋ก๊ทธ๋จ์ด pointer๋ฅผ ํตํด ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผํ๋ฉด MTE ํ๋์จ์ด๋ pointer์ tag๊ฐ ๋ฉ๋ชจ๋ฆฌ ๋ธ๋ก์ tag์ ์ผ์นํ๋์ง ๊ฒ์ฌํฉ๋๋ค. tag๊ฐ ์ผ์นํ์ง ์์ผ๋ฉด, ์ด๋ ๋ถ๋ฒ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ์ ์๋ฏธํฉ๋๋ค.
MTE Pointer Tags
pointer ๋ด๋ถ์ tag๋ ์ต์์ ๋ฐ์ดํธ์ 4๋นํธ์ ์ ์ฅ๋ฉ๋๋ค:
.png)
๋ฐ๋ผ์ ์ต๋ 16๊ฐ์ ์๋ก ๋ค๋ฅธ tag ๊ฐ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
MTE Memory Tags
๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ์ 16B๋ง๋ค ๋์ํ๋ memory tag๊ฐ ์กด์ฌํฉ๋๋ค.
๋ฉ๋ชจ๋ฆฌ ํ๊ทธ๋ ์ ์ฉ RAM ์์ญ์ ์ ์ฅ๋๋ฉฐ(์ผ๋ฐ ์ฉ๋๋ก ์ ๊ทผ ๋ถ๊ฐ), 16B๋ง๋ค 4๋นํธ ํ๊ทธ๋ฅผ ๊ฐ์ง๋ฏ๋ก ์ ์ฒด RAM์ ์ต๋ ์ฝ 3%๋ฅผ ์ฐจ์งํฉ๋๋ค.
ARM์ ์ ์ฉ RAM์ ์๋ ์ด๋ฌํ ํ๊ทธ๋ฅผ ์กฐ์ํ๊ธฐ ์ํด ๋ค์๊ณผ ๊ฐ์ ๋ช ๋ น์ด๋ค์ ๋์ ํฉ๋๋ค:
STG [<Xn/SP>], #<simm> Store Allocation (memory) Tag
LDG <Xt>, [<Xn/SP>] Load Allocatoin (memory) Tag
IRG <Xd/SP>, <Xn/SP> Insert Random [pointer] Tag
...
Checking Modes
Sync
CPU๋ ๋ช
๋ น์ด๊ฐ ์คํ๋๋ ๋์ ํ๊ทธ๋ฅผ ๊ฒ์ฌํ๋ฉฐ, ๋ถ์ผ์น๊ฐ ๋ฐ์ํ๋ฉด ์์ธ(SIGSEGV with SEGV_MTESERR)๋ฅผ ๋ฐ์์์ผ ์ ํํ ๋ช
๋ น์ด์ ์ฃผ์๋ฅผ ์ฆ์ ํ์
ํ ์ ์์ต๋๋ค.
์ด ๋ฐฉ์์ offending load/store๊ฐ ์ฐจ๋จ๋๋ฏ๋ก ๊ฐ์ฅ ๋๋ฆฌ์ง๋ง ๊ฐ์ฅ ์์ ํฉ๋๋ค.
Async
CPU๋ ๋น๋๊ธฐ์ ์ผ๋ก ํ๊ทธ๋ฅผ ๊ฒ์ฌํ๋ฉฐ, ๋ถ์ผ์น๊ฐ ๋ฐ๊ฒฌ๋๋ฉด ์์คํ
๋ ์ง์คํฐ ์ค ํ๋์ ์์ธ ๋นํธ๋ฅผ ์ค์ ํฉ๋๋ค. ์ด์ ๋ฐฉ์๋ณด๋ค ๋น ๋ฅด์ง๋ง, ๋ถ์ผ์น๋ฅผ ๋ฐ์์ํจ ์ ํํ ๋ช
๋ น์ด๋ฅผ ์ง๋ชฉํ ์ ์๊ณ ์์ธ๋ฅผ ์ฆ์ ๋ฐ์์ํค์ง ์์ต๋๋ค(SIGSEGV with SEGV_MTEAERR), ๊ณต๊ฒฉ์๊ฐ ๊ณต๊ฒฉ์ ์๋ฃํ ์๊ฐ์ ์ ๊ณตํฉ๋๋ค.
Mixed
์ฝ์ด๋ณ ์ ํธ๋(์: /sys/devices/system/cpu/cpu*/mte_tcf_preferred์ sync, async ๋๋ asymm์ ์ฐ๋ ๊ฒ)๋ ์ปค๋์ด ํ๋ก์ธ์ค๋ณ ์์ฒญ์ ์กฐ์ฉํ ์
๊ทธ๋ ์ด๋ํ๊ฑฐ๋ ๋ค์ด๊ทธ๋ ์ด๋ํ๊ฒ ํ๋ฏ๋ก, production ๋น๋๋ ๋ณดํต ASYNC๋ฅผ ์์ฒญํ๋ ๋ฐ๋ฉด ํน๊ถ ์ฝ์ด๋ ์์
๋์ด ํ์ฉํ ๋ SYNC๋ฅผ ๊ฐ์ ํฉ๋๋ค.
Implementation & Detection Examples
Called Hardware Tag-Based KASAN, MTE-based KASAN or in-kernel MTE.
์ปค๋ ํ ๋น์(์: kmalloc)๋ ์ด ๋ชจ๋์ ํธ์ถํ์ฌ ์ฌ์ฉํ ํ๊ทธ๋ฅผ ์ค๋นํ๊ณ (๋ฌด์์), ์ปค๋ ๊ณต๊ฐ์ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ์ ๋ฐํ๋ ํฌ์ธํฐ์ ํ๊ทธ๋ฅผ ๋ถ์
๋๋ค.
์์ฒญ๋ ํฌ๊ธฐ์ ๋ํด **์ถฉ๋ถํ ๋ฉ๋ชจ๋ฆฌ ๋จ์(๊ฐ 16B)**๋ง ํ์๋๋ค๋ ์ ์ ์ ์ํ์ธ์. ๋ฐ๋ผ์ ์์ฒญ ํฌ๊ธฐ๊ฐ 35์ด๊ณ 60B ์ฌ๋ฉ์ด ์ ๊ณต๋๋ฉด, ์ฒซ ๋ฒ์งธ 16*3 = 48B๋ง ์ด ํ๊ทธ๋ก ํ์๋๊ณ ๋๋จธ์ง๋ **invalid tag (0xE)**๋ก ํ์๋ฉ๋๋ค.
ํ๊ทธ 0xF๋ match all pointer์ ๋๋ค. ์ด ํฌ์ธํฐ๋ฅผ ๊ฐ์ง ๋ฉ๋ชจ๋ฆฌ๋ ์ ๊ทผ์ ์๋ฌด ํ๊ทธ๋ ์ฌ์ฉ ๊ฐ๋ฅํ๋ฏ๋ก(ํ๊ทธ ๋ถ์ผ์น ์์) ๊ณต๊ฒฉ์๊ฐ ํด๋น ํ๊ทธ๋ฅผ ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณต๊ฒฉํ๋ฉด MTE๊ฐ ๊ณต๊ฒฉ์ ํ์งํ์ง ๋ชปํ ์ ์์ต๋๋ค.
๋ฐ๋ผ์ 0xE์ 0xF๊ฐ ์์ฝ๋์ด ์์ผ๋ฏ๋ก ํ๊ทธ๋ฅผ ์์ฑํ ์ ์๋ ๊ฐ์ 14๊ฐ๋ฟ์ด๋ฉฐ, ํ๊ทธ ์ฌ์ฌ์ฉ ํ๋ฅ ์ 1/17 -> ์ฝ **7%**์ ๋๋ค.
์ปค๋์ด invalid tag granule์ ์ ๊ทผํ๋ฉด mismatch๊ฐ ํ์ง๋ฉ๋๋ค. ๋ค๋ฅธ ๋ฉ๋ชจ๋ฆฌ ์์น์ ์ ๊ทผํ๋๋ฐ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ค๋ฅธ ํ๊ทธ(๋๋ invalid tag)๋ฅผ ๊ฐ์ง๊ณ ์๋ค๋ฉด ๋ถ์ผ์น๊ฐ ์ญ์ ํ์ง๋ฉ๋๋ค. ๊ณต๊ฒฉ์๊ฐ ์ด์ด ์ข๊ฒ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋์ผํ ํ๊ทธ๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค๋ฉด ํ์ง๋์ง ์์ต๋๋ค. ํ๋ฅ ์ ์ฝ 7%์ ๋๋ค.
๋ ๋ค๋ฅธ ๋ฒ๊ทธ๋ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ์ ๋ง์ง๋ง granule์์ ๋ฐ์ํฉ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ด 35B๋ฅผ ์์ฒญํ๋ฉด 32์์ 48๊น์ง์ granule์ ๋ฐ์ต๋๋ค. ๋ฐ๋ผ์ 36์์ 47 ๋ฐ์ดํธ๋ ๋์ผํ ํ๊ทธ๋ฅผ ์ฌ์ฉํ์ง๋ง ์์ฒญ๋ ๋ฐ์ดํธ๋ ์๋๋๋ค. ๊ณต๊ฒฉ์๊ฐ ์ด ์ถ๊ฐ ๋ฐ์ดํธ๋ค์ ์ ๊ทผํ๋ฉด ํ์ง๋์ง ์์ต๋๋ค.
kfree()๊ฐ ์คํ๋๋ฉด ๋ฉ๋ชจ๋ฆฌ๋ invalid memory tag๋ก ์ฌํ๊น
๋๋ฏ๋ก, use-after-free์์ ๋ฉ๋ชจ๋ฆฌ์ ๋ค์ ์ ๊ทผํ๋ฉด ๋ถ์ผ์น๊ฐ ํ์ง๋ฉ๋๋ค.
๊ทธ๋ฌ๋ use-after-free ์ํฉ์์ ๋์ผํ ์ฒญํฌ๊ฐ ์ด์ ๊ณผ ๋์ผํ ํ๊ทธ๋ก ์ฌํ ๋น๋๋ฉด ๊ณต๊ฒฉ์๋ ์ด ์ ๊ทผ์ ์ด์ฉํ ์ ์์ผ๋ฉฐ(์ฝ 7% ํ๋ฅ ) ํ์ง๋์ง ์์ต๋๋ค.
๋ํ ํ์ฌ๋ **slab๊ณผ page_alloc**๋ง ํ๊ทธ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ง๋ง, ํฅํ์๋ vmalloc, stack ๋ฐ globals์์๋ ์ฌ์ฉ๋ ์์ ์
๋๋ค(์ด ๋ฌธ์ ์์ฑ ์์ ์์๋ ์ฌ์ ํ ๋จ์ฉ ๊ฐ๋ฅ).
๋ถ์ผ์น๊ฐ ํ์ง๋๋ฉด ์ปค๋์ ์ถ๊ฐ์ ์ธ ์ ์ฉ๊ณผ ์ฌ์๋๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด panicํฉ๋๋ค(MTE๋ false positives๊ฐ ์์ต๋๋ค).
Speculative Tag Leakage (TikTag)
TikTag (2024)๋ ๋ ๊ฐ์ speculative execution gadget(TIKTAG-v1/v2)์ ํตํด ์ด๋ค ์ฃผ์์ 4-bit allocation tag๋ฅผ <4์ด ์ด๋ด, >95% ์ฑ๊ณต๋ฅ ๋ก leakํ ์ ์์์ ๋ณด์์ต๋๋ค. ๊ณต๊ฒฉ์๋ ๊ณต๊ฒฉ์๊ฐ ์ ํํ ์บ์ ๋ผ์ธ์ speculativeํ๊ฒ ํฐ์นํ๊ณ prefetch-induced timing์ ๊ด์ฐฐํ์ฌ Chrome ํ๋ก์ธ์ค, Android system services, ๋๋ Linux kernel์ ํ ๋น๋ ํ๊ทธ๋ฅผ ์ญ๋์ํํ ๋ค, ๋์ถ๋ ๊ฐ์ ๋ด์ ํฌ์ธํฐ๋ฅผ ์ ์ํ ์ ์์ต๋๋ค. ํ๊ทธ ๊ณต๊ฐ์ด brute-forced๋๋ฉด probabilistic granule reuse ๊ฐ์ (โ7% false-negative rate)์ ๋ฌด๋์ง๊ณ , ๊ณ ์ ์ ํ ์ต์คํ๋ก์(UAF, OOB)์ MTE๊ฐ ํ์ฑํ๋์ด ์๋๋ผ๋ ๊ฑฐ์ 100% ์ ๋ขฐ๋๋ก ๋ณต๊ตฌ๋ฉ๋๋ค. ๋
ผ๋ฌธ์ ๋ํ ๋์ถ๋ ํ๊ทธ์์ fake slab์ retagํ๋ PoC ์ต์คํ๋ก์์ ์ ๊ณตํ์ฌ, speculative side channel์ด ํ๋์จ์ด ํ๊น
๋ฐฉ์์ ์ฐํํ๋ ์ ํจํ ๊ฒฝ๋ก์์ ๋ณด์ฌ์ค๋๋ค.
References
- https://www.youtube.com/watch?v=UwMt0e_dC_Q
- TikTag: Breaking ARMโs Memory Tagging Extension with Speculative Execution
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์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.


