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 ์ง€์›ํ•˜๊ธฐ

๊ธฐ๋ณธ ์ •๋ณด

**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์˜ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๋น„ํŠธ๋“ค์— ์ €์žฅ๋˜์–ด ํฌ์ธํ„ฐ๋ฅผ ํ•ด๋‹น ๋ฉ”๋ชจ๋ฆฌ ๋ธ”๋ก๊ณผ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

https://www.youtube.com/watch?v=UwMt0e_dC_Q

ํ”„๋กœ๊ทธ๋žจ์ด pointer๋ฅผ ํ†ตํ•ด ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•˜๋ฉด MTE ํ•˜๋“œ์›จ์–ด๋Š” pointer์˜ tag๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ๋ธ”๋ก์˜ tag์™€ ์ผ์น˜ํ•˜๋Š”์ง€ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค. tag๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š์œผ๋ฉด, ์ด๋Š” ๋ถˆ๋ฒ•์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

MTE Pointer Tags

pointer ๋‚ด๋ถ€์˜ tag๋Š” ์ตœ์ƒ์œ„ ๋ฐ”์ดํŠธ์˜ 4๋น„ํŠธ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค:

https://www.youtube.com/watch?v=UwMt0e_dC_Q

๋”ฐ๋ผ์„œ ์ตœ๋Œ€ 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

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 ์ง€์›ํ•˜๊ธฐ