๐Ÿ” Security

[ARM] MTE (Memory Tagging Extension)

Rosieblue 2024. 2. 26. 21:31
728x90

MTE

์ผ๋‹จ MTE๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ž์ฒด๋ฅผ 'ํƒœ๊น…'ํ•˜๋Š” ๊ธฐ๋ฒ•์ด๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ํƒœ๊น…์ด๋ผ๋Š”๊ฒŒ ์ •ํ™•ํ•˜๊ฒŒ ๋ญ˜๊นŒ?

 

  • Address Tag (Key) : 4bit๋กœ ๋˜์–ด์žˆ๊ณ , virtual address์˜ ์ƒ์œ„ ๋น„ํŠธ์— ์ €์žฅ๋œ๋‹ค! ์ƒ์œ„ ๋น„ํŠธ์— ์ €์žฅ๋  ์ˆ˜ ์žˆ๋Š” ์ด์œ ๋Š”, AArch64์˜ TBI(Top-Byte-Ignore' ํŠน์ง• ๋•Œ๋ฌธ์ด๋‹ค
  • Memory Tag (Lock) : ๋˜‘๊ฐ™์ด 4bit๋กœ ๊ตฌ์„ฑ๋˜์–ด์žˆ๊ณ , memory storage์— ์ €์žฅ๋œ๋‹ค. ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์—์„œ 16byte๋กœ ์ •๋ ฌ๋œ ๋ชจ๋“  region์— ๋งํฌ๋˜์–ด์žˆ๋‹ค!

 

์ฐธ๊ณ ) TBI๊ฐ€ ํ™œ์„ฑํ™”๋˜๋ฉด virtual address์˜ top byte๋Š” ์ฃผ์†Œ ํ•ด์„์—์„œ ๋ฌด์‹œ๋œ๋‹ค! ๊ทธ๋ž˜์„œ top byte๋ฅผ metadata๋ฅผ ์ €์žฅํ•˜๋Š”๋ฐ ์“ธ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค


์ผ๋‹จ ์ด๋ ‡๊ฒŒ 'ํƒœ๊น…๋œ'๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผ/์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” address tag์™€ memory tag ๋‘˜์„ ๋น„๊ตํ•ด์•ผํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋งŒ์•ฝ ์ด ๋‘ ํƒœ๊ทธ๊ฐ€ ๋งž์ง€ ์•Š๋Š”๋‹ค๋ฉด ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.

 

Address Tag

์ผ๋‹จ ์•„๋ž˜ ๊ทธ๋ฆผ์—์„œ X0์ด ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž!! ์ด์ฒ˜๋Ÿผ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•  ๋•Œ address tag๊ฐ€ ์žˆ๋Š”๋“ฏ (๊ถ๊ธˆํ•œ๊ฑด, ์•ˆ ์ €์žฅํ• ๋•Œ๋„ ๊ทธ๋ƒฅ ๋‹ค address๋กœ ๊ฐ„์ฃผํ•˜๊ณ  address tag๊ฐ€ ์žˆ๋Š”์ง€?)

์˜ˆ๋ฅผ ๋“ค์–ด LDR X1, [X0]์ฒ˜๋Ÿผ X0์ด์žˆ๋Š” ๋ฐ์ดํ„ฐ(์ฆ‰, ์ฃผ์†Œ)๊ฐ€ X1์— ์ €์žฅ๋˜๋“ฏ์ด, X0๊ฐ€ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด์ž

[59:56]๋น„ํŠธ ๋ถ€๋ถ„์— tag๊ฐ€ ์ €์žฅ๋œ๋‹ค

X0์—์„œ, 55๋ฒˆ์งธ ๋น„ํŠธ์™€ [47:0]๋ถ€๋ถ„๋งŒ ์‹ค์ œ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•˜๊ฒŒ ๋˜๊ณ , [59:56]๋ถ€๋ถ„์—๋Š” 4bit์งœ๋ฆฌ ํƒœ๊ทธ๊ฐ€ ์ €์žฅ๋œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ํƒœ๊ทธ์—๋Š” ๋žœ๋คํ•œ ๊ฐ’์ด ๋“ค์–ด๊ฐ€๋Š” ๊ฒƒ ๊ฐ™๋‹ค

 

Memory Tag

์ผ๋‹จ ์œ„์—์„œ ๋งํ–ˆ๋“ฏ, 16byte ๋ฉ”๋ชจ๋ฆฌ๋งˆ๋‹ค 4bit์˜ ํƒœ๊ทธ๊ฐ€ ๋‹ค ์žˆ๋‹ค.

๋ฉ”๋ชจ๋ฆฌ ํƒœ๊ทธ ์Šคํ† ๋ฆฌ์ง€๋Š” ์ „์šฉ ์ฃผ์†Œ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค! associated data๋ฅผ ํ†ตํ•ด์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋‹ค

์ฐธ๊ณ ๋กœ ์ด ํƒœ๊ทธ๋“ค์€ CPU ์บ์‹œ ๋“ฑ์— ์ €์žฅ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค!

 

 

๊ทธ๋Ÿฌ๋ฉด ์ด memory tag์™€ address tag๋Š” ์ •ํ™•ํžˆ ์–ด๋–ป๊ฒŒ ์—ฐ๊ด€์ด ๋˜๋Š”๊ฑธ๊นŒ??

์•„๋ž˜ ๊ทธ๋ฆผ์€ MTE์˜ STG X0, [X0] ๋ผ๋Š” ๋ช…๋ น์–ด์˜ ๋™์ž‘์„ ๋ณด์—ฌ์ฃผ๋Š” ๊ทธ๋ฆผ์ด๋‹ค.

์ผ๋‹จ ์œ„์—์„œ ๋ดค๋“ฏ, X0์—๋Š” ํƒœ๊ทธ์™€ ์ฃผ์†Œ๊ฐ€ ์ €์žฅ๋˜์–ด์žˆ๋‹ค.

์ด๋•Œ ๊ทธ๋ฆผ์—์„œ๋Š” X0์— ์ €์žฅ๋˜์–ด์žˆ๋Š” ์ฃผ์†Œ(physical address)๋กœ ์ ‘๊ทผํ•œ ํ›„, ํ•ด๋‹น ์ฃผ์†Œ์˜ memory ํƒœ๊ทธ์— X0์— ์ €์žฅ๋˜์–ด์žˆ๋˜ address tag๋ฅผ ์ €์žฅํ•˜๊ณ  ์žˆ๋‹ค.

 

 

Tag Check

์ผ๋‹จ ํƒœ๊ทธ๋ฅผ ์ฒดํฌํ•  ๋•Œ, ๋จผ์ € address register(์œ„ ๊ทธ๋ฆผ์˜ ๊ฒฝ์šฐ X0)์— ์ €์žฅ๋˜์–ด์žˆ๋Š” ํƒœ๊ทธ์™€, X0์˜ ์ฃผ์†Œ๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•ด์„œ ์ฃผ์†Œ ํƒœ๊ทธ์™€ ๋น„๊ตํ•˜๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋งŒ์•ฝ ์ด ๋‘˜์ด ๋‹ค๋ฅด๋ฉด execption์ด ์ผ์–ด๋‚˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

 

์ฐธ๊ณ ๋กœ ์•„๋ž˜ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ memory tag๊ฐ€ ์ €์žฅ๋˜์–ด์žˆ๋Š”๋“ฏํ•˜๋‹ค

 

Operation Mode

MTE์—์„œ exception์„ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์—๋Š” ๋‘๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด์žˆ๋‹ค. ์ด๊ฑฐ๋Š” 2๊ฐ€์ง€ operation mode๋กœ ๊ตฌ๋ถ„๋˜๊ฒŒ ๋œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  Execption์ด ๋ฐœ์ƒํ•˜๋ฉด SIGSEGV ์‹œ๊ทธ๋„์„ ๋ฐœ์ƒ์‹œํ‚ค๊ฒŒ ๋œ๋‹ค.

 

1. Precise (Synchronous) Mode

  • exception์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ, instantํ•˜๊ฒŒ ๋ฐ”๋กœ synchronousํ•œ exception์„ ๋ฐœ์ƒ์‹œํ‚ด
  • performance overhead ์กด์žฌ
  • SEGV_MTESERR

2. Imprecise (Asynchronous) Mode

  • exception์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ, asynchronousํ•œ exception์„ ๋ฐœ์ƒ์‹œํ‚ด
  • instantํ•˜๊ฒŒ ๋ฐœ์ƒ์‹œํ‚ค์ง€๋Š” ์•Š๊ณ  illegal memory access๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ์ข€ ํ›„์— exception๋ฐœ์ƒ์‹œํ‚ค๋Š” ๋“ฏ
    • ์ •ํ™•ํžˆ๋Š” kernel mode์— ๋“ค์–ด๊ฐ”์„ ๋•Œ exception ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๊ฒƒ ๊ฐ™๋‹คใ…‡ใ…‡
  • SEGV_MTEAERR

 

๋น„๋™๊ธฐ/๋™๊ธฐ์— ๊ด€๋ จํ•ด์„œ ์˜ˆ์ „์— ์ •๋ฆฌํ•œ ๊ธ€ -> [OS] ๋™๊ธฐ์‹ ์ž…์ถœ๋ ฅ vs ๋น„๋™๊ธฐ์‹ ์ž…์ถœ๋ ฅ

 

[OS] ๋™๊ธฐ์‹ ์ž…์ถœ๋ ฅ vs ๋น„๋™๊ธฐ์‹ ์ž…์ถœ๋ ฅ

๐Ÿ’ก๊ฐœ๋… ์ดํ•ดํ•˜๊ธฐ ์˜ค๋Š˜์€ ๋™๊ธฐ์‹ ์ž…์ถœ๋ ฅ๊ณผ ๋น„๋™๊ธฐ์‹ ์ž…์ถœ๋ ฅ์— ๋Œ€ํ•˜์—ฌ ์•Œ์•„๋ณผ ๊ฒƒ์ด๋‹ค. ๋จผ์ € ๋™๊ธฐ์‹, ๋น„๋™๊ธฐ์‹ ์–ด์›๋ถ€ํ„ฐ ์‚ดํŽด๋ณด์ž. ๋™๊ธฐ์‹์€ ์˜์–ด๋กœ Synchronized์ธ๋ฐ, ๋”ฑ๋”ฑ ์‹œ๊ฐ„์— ๋งž์ถฐ์ง„๋‹ค๋Š” ์˜๋ฏธ

hannahsecurity.tistory.com

 

UAF Prevention

๊ทธ๋ ‡๋‹ค๋ฉด ์ด MTE ๊ธฐ๋ฒ•์ด ์–ด๋–ป๊ฒŒ UAF๋ฅผ preventํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ผ๊นŒ?
์ผ๋‹จ ์—ฌ๊ธฐ์„œ pointer๋Š” key, ํ• ๋‹นํ•œ ๋ฉ”๋ชจ๋ฆฌ๋Š” lock์— ๋Œ€์‘๋  ๊ฒƒ์ด๋‹ค. 

์ด๋•Œ memory๊ฐ€ free๋˜๋ฉด memory tag๋Š” ๋ฐ”๋กœ invalidate๋œ๋‹ค. ๋”ฐ๋ผ์„œ pointer์˜ key (address tag)๋Š” outdated๋˜๊ฒŒ ๋˜๊ณ , ํ•ด๋‹น ์ฃผ์†Œ์— ์ดํ›„์— ๋˜ ์ ‘๊ทผํ•˜๊ฒŒ ๋˜๋ฉด mismatch๊ฐ€ ์ผ์–ด๋‚˜์„œ UAF๋ฅผ ๋ฐฉ์ง€ํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค

 

Reference

https://developer.arm.com/-/media/Arm%20Developer%20Community/PDF/Arm_Memory_Tagging_Extension_Whitepaper.pdf

Where is the MTE Tag stored and checked? (arm.com)

MTE (Memory Tagging Extension): ๋ฉ”๋ชจ๋ฆฌํƒœ๊น… (velog.io)

Arm MTE architecture: Enhancing memory safety - Architectures and Processors blog - Arm Community blogs - Arm Community

Arm Memory Tagging Extension(MTE) - Security Update List (skill.or.kr)