Abstract
- ์ง๊ธ๊น์ง์ cache side channel attack์ ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผ์ ์ ๋ฌด๋ฅผ ํตํด ์ ๋ณด๋ฅผ ์ ์ถ์์ผฐ๋ค.
- ๊ทธ๋ ๊ธฐ์ cache hit๊ฐ์ด ๋๋ Cache miss๊ฐ์ด ๋น์ด์์ ์ผ๋ก ์ฌ๋ผ๊ฐ๊ฒ ๋๋ค.
- ์ด๋ HPC(Hardware Performance Counter)๋ฅผ ํตํด ํ์ง๊ฐ ๊ฐ๋ฅํ๋ฉฐ ์ด๋ฅผ ํตํด Flush+Reload,RowHammer,Prime+Probe๋ฑ์ ๊ณต๊ฒฉ์ detection์ด ๊ฐ๋ฅํ๋ค.
- ๊ทธ๋ฌ๋ Flush+Flush๋ memory access๊ฐ ์ด๋ฃจ์์ง์ง ์๊ณ clflush execution time์ ํตํด data๊ฐ cached๋์๋์ง ์๋์๋์ง๋ฅผ ํ๋จํ๊ธฐ ๋๋ฌธ์ HPC์ ํ์ง๊ฐ ๋ถ๊ฐ๋ฅํ๋ค. (Stealthy์ ์ด์ )
- ๋ํ Flush+Flush๋ ๋ค๋ฅธ cache side channel attack๊ณผ ๋น๊ตํ์ฌ ๋น ๋ฅธ ์คํ์ฑ์ ๊ฐ๊ณ ์๋๋ฐ, ๊ทธ ์ด์ ๋ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ์ด ์๊ณ clflush ๋ช ๋ น์ด๋ง ์ฌ์ฉํด ๊ณต๊ฒฉ์ ์งํํ๊ธฐ ๋๋ฌธ์ด๋ค. (Fast์ ์ด์ )
Introduction
- Cache attacks include covert and crytographic side channels, but caches have also been exploited in other types of attacks such as bypassing kernel ASLR, detecting cryptographic libraries, or key stroke
- HPC->OS-level-detection based on cached hit and misses
- three scenarios
- a covert channel
- a side-channel attack on user input
- a side-channel attack on AES with T-tables
- Implement a detection machanism that monitors cache references and cache missess of LLC
- The Flush+Flush attack does not trigger prefetches and thus allows to monitor multiple addresses within a 4KB memory range in contrast to Flush+Reload that fails in these scenarios.
Background
CPU Caches
- CPU caches hide the memory access latency to the slow physical memory by buffering frequently used data in a small and fast memory
- CPU achitectures: n-way-set-associative-caches(->cache sets->cache lines)
- A line is loaded in a set depending on its address, and each line can occupy any of the n ways.
- L1,L2,L3( inclusive ) ( L1, L2์ ์๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ค์ L3์ ์์ )( ๊ทธ๋ ๊ธฐ์ ๋ค๋ฅธ ํ๋ก์ธ์ค์ L1 cache์ ์๋ ์ค์ํ data๋ฅผ ๋ค๋ฅธ ํ๋ก์ธ์ค์์ ๋ณผ ์ ์์ )( ์ถ์ถ๋๊ฒ ๋๋ฉด, ์ด๋ฅผ cache attack์ด๋ผ ๋ถ๋ฆ )
- LLC๋ ring bus์ ํํ๋ก ์ฝ์ด๋ค์ ์ํด์ ๋ง์ด ๋๋์ด์ ธ์์
- Sandy Bridge์์๋ ๊ฐ๊ฐ์ ๋ฌผ๋ฆฌ์ ์ฃผ์๊ฐ๋ค์ ring-bus์ ํํ๋ก ๋๋์ด์ง LLC์ โComplex-address functionโ์ ํตํด mapping์ ์งํํ๋ค.
- Cache replacement policy
- variants of LRU
- bimoal insertion policy(CPU can switch between the two strategies)
Shared memory
- OS & hypervisors instrument shared memory to reduce the ovevall physical memory utilization and the TLB utilization
- OS๋ file์ mappingํ๋ ๊ฒ, ํ๋ก์ธ์ค๋ forkํ๋ ๊ฒ, ๊ทธ๋ฆฌ๊ณ process๋ฅผ ๋๋ฒ ์คํํ๋ ๊ฒ ๋ชจ๋ ๋น์ทํ๊ฒ ์ฒ๋ฆฌ๋๋ค. (์๋ํ๋ฉด ๋ฉ๋ชจ๋ฆฌ ์ง์ญ์ ๋ํ ์ค๋ณต ์ ๊ฑฐ ๊ฒฐ๊ณผ์ด๊ธฐ ๋๋ฌธ์)
- Content-based page deduplication ( OS & hypervisor๋ ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ์ byte๋จ์๋ก ๋์ผํ ํ์ด์ง๋ฅผ ์ค์ผํ๊ณ ๋์ผํ ํ์ด์ง๋ค์ด ๊ฐ์ ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ์ mapping๋์ด์๋ค๋ฉด ๋์ผํ ์ค์ ํ์ด์ง์ ๋ค์ ๋งคํ๋๊ณ ๋ค๋ฅธ ํ์ด์ง๋ ์ฌ์ฉ ๊ฐ๋ฅํ ํ์ด์ง๋ก ํ์๋๋ค ์ด ๊ธฐ์ ์ TLB์ ๋ฌผ๋ฆฌ๋ฉ๋ชจ๋ฆฌ์ ์ฌ์ฉ ์ฑ๋ฅ์ ์ ํ์ํจ๋ค
- ๊ด๋ จ์๋ ์ ๋ณด๋ค์ ๊ณต์ ์ sandboxed process๋ค ์ฌ์ด, ๊ทธ๋ฆฌ๊ณ ๋ค๋ฅธ ๊ฐ์๋จธ์ ์์์ ์งํ์ค์ธ ํ๋ก์ธ์ค๋ค ์ฌ์ด์์์ ๋ฉ๋ชจ๋ฆฌ ๊ณต์ ๋ ๋ณด์์ ๊ฑฑ์ ์ ๋ถ๋ฌ์ผ์ผํจ๋ค.
Cache Attacks and Rowhammer
- Cache Attack์ CPU cache์ ๋ฌผ๋ฆฌ๋ฉ๋ชจ๋ฆฌ ์์ ๋ค๋ฅธ ์ง์ฐ์๊ฐ์ ์ฐจ์ด๋ก ๋ฐ์ํ๋ ์๊ฐ์ฐจ์ด์ ๋ํ ๊ณต๊ฒฉ์ด๊ณ ์ ํ์ ์ผ๋ก ๋๊ฐ์ง๋ก ๋๋ ์ง๋ค.
- Prime+Probe (๋ฉ๋ชจ๋ฆฌ ๊ณต์ ๊ฐ ๋์ด์์ง ์๋ ๊ฒ)
- Flush+Reload (๋ฉ๋ชจ๋ฆฌ ๊ณต์ ๊ฐ ๋์ด์๋ ๊ฒ)
- Prime+Probe
- ๊ณต๊ฒฉ์๊ฐ cache set์ ์ ๋ นํ๋ค.
- ํผํด์๊ฐ cache set ๋ line์ ๊ต์ฒด ํ๋ ๊ฒ์ ์ธก์ ํ๋ค
- ํ๋ ํ๋ก์ธ์๋ค์ด complex addressing๊ณผ undocumneted replacement ์ ์ฑ ์ ์ฌ์ฉํ ๋ฌผ๋ฆฌ์ ์ผ๋ก ์์ธ๋ llc๋ฅผ ์ด์ฉํ๊ธฐ ๋๋ฌธ์ Cross-VM side-channel attack๊ณผ covert-channel๋ค์ด ๋ํ๋๊ฒ ๋์๋ค.
- Flush+Reload
- ๊ณต๊ฒฉ์๊ฐ clflush๋ก ์ผ์ single cache๋ฅผ flush ์ํจ๋ค.
- ๊ณต๊ฒฉ์๋ ๊ณ์ ์ ๊ทผํ๋ค.
- ๋ง์ฝ ํผํด์๊ฐ single cache์ ์ ๊ทผ์ ํ์ผ๋ฉด ๊ณต๊ฒฉ์๊ฐ ์ ๊ทผํ ์๊ฐ์ด ์งง๊ณ (cache hit) ํผํด์๊ฐ single cache์ ์ ๊ทผ์ ํ์ง ์์์ผ๋ฉด (cache miss) ๊ณต๊ฒฉ์๊ฐ ์ ๊ทผํ ์๊ฐ์ด ๊ธธ๋ค.
- Rowhammer
- ์ ํ์ ์ธ cache attack์ ์๋๋ค.
- ํน์ DRAM row์ ๊ณ์ ๋ฐ๋ณต์ ์ผ๋ก ์ ๊ทผํ๊ฒ ๋๋ฉด ์ธ์ ํ ๋ฉ๋ชจ๋ฆฌ์์ random bit flip์ด ์ผ์ด๋๋ ์ทจ์ฝ์ฑ์ ์ฌ์ฉํ๋ค.
- Rowhammer_attack
- ์ด๋ฌํ ์ ๊ทผ๋ค์ DRAM์ ๋๋ฌํ๊ธฐ ์ํด์ ๋ชจ๋ cache๋ค์ level์ ํต๊ณผํด์ผ๋งํ๊ณ bitflip์ ์ ๋ฐ์ํจ๋ค.
- ์ทจ์ฝ์ ์ด ์ถ์ถ๋ ๊ณต๊ฒฉ๋ค์ ์ด๋ฏธ root๊ถํ์ ์ป๋ ๊ฒ์ ์ฆ๋ช ํ๊ณ , sandbox๋ฅผ ํ๊ดดํ๋ ๊ฒ์ ์ฆ๋ช ํ๋ค.
- Rowhammer์ ์ถฉ๋ถํ ์์ cache hit์ cache missess๋ฅผ ์ฆ๋ช ํ๊ณ , ์ด๋ Cache Side attack๊ณผ ๋ฎ์๋ค.
The Flush+Flush Attack
- cache miss๋ฅผ ๋ง๋ค์ง ์๊ณ , ๋งค์ฐ ์ ์ ์์ cache hits๋ค์ ๋ง๋ ๋ค.
- Flush+Reload์ SW,HW์ ๊ฐ์ ์คํ์์ ๋ฐ์์ด ์งํ๋ ์์๋ค.
- Attack์ ๋ฌดํ์ ๋ฃจํ์์ ์คํ๋๋ฉด์ ์คํ๋๊ณ , ๊ณ์์ ์ผ๋ก ํ๊ฒ๋ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ๋ผ์ธ์๊ฒ clflush ๋ช ๋ น์ด๋ฅผ ์คํํ๋ค.
- ๊ณต๊ฒฉ์๋ clflush ๋ช ๋ น์ด์ ์คํ์๊ฐ์ ์ธก์ ํ๋ค.
- ์คํ์๊ฐ์ ํตํด ์ด ๋ฉ๋ชจ๋ฆฌ ๋ผ์ธ์ด cached ๋์๋์ง ์๋์ง๋ฅผ ํ์ ํ๋ค.
- attacker๊ฐ ์บ์๋ก๋ถํฐ ๋ฉ๋ชจ๋ฆฌ๋ผ์ธ์ ๋ก๋ํ์ง ๋ชปํ๋ค๋ฉด ๋ค๋ฅธ ํ๋ก์ธ์๊ฐ ์ด๊ฒ์ ๋ก๋ํ๋์ง ์ํ๋์ง๋ฅผ ๋๋ฌ๋ธ๋ค.
- ๋์์ clflush๋ ์บ์์์ ๋ค์ ๊ณต๊ฒฉ ๋ฃจํ๋ผ์ด๋๋ฅผ ์ํด์ ๋ฉ๋ชจ๋ฆฌ ๋ผ์ธ์ ์ถ์ถํ๋ค.
- ์ธก์ ์ rdtsc ๋ช
๋ น์ด๋ก cycle์ ์ธก์ ํ๋ค.
- ๋ค์ํ์ ๊ฐ์ด cached๊ฐ ๋์ด์์๋์ ์๋๋ ์ฝ 12cycle์ ๋ ์ฐจ์ด๊ฐ ๋จ์ ํ์ธํ ์ ์๋ค.
- Flush+Reload๋ณด๋ค cycle์๊ฐ ์ฐจ์ด๋๋ ๊ฒ์ด ์ ์์ผ๋ก ๋ณธ์ง์ ์ผ๋ก(inherently) Flush+Flush ๊ณต๊ฒฉ์ ์ ํ๋๊ฐ ์ ์์ ํ์ธํ ์ ์๋ค.
- ๊ทธ๋ฌ๋ ๋ถ์ฑ๋ ๊ณต๊ฒฉ์ ํตํด ๊ฐ์ ์์ ์ ๋ณด๋ฅผ ์ถ์ถํ๋ค๊ณ ํ์ ๋ ๊ทธ ์๋๋ ํ์ฐํ๊ฒ ๋น ๋ฅธ ๊ฒ์ ํ์ธํ ์ ์๋ค.
Detecting Cache Attacks with Hardware Performance Counters
- Cache hit๊ณผ Cache miss๊ฐ ๊ธ๊ฒฉํ๊ฒ ๋ง์์ง๋ ๊ฒ์ HPC(OS level)์์ ํ์ง๋ ์ ์๋ค.
- ํ์ง๋ง ๊ณต๊ฒฉ์ ๋ง๊ธฐ ์ํด์๋ ๊ณต๊ฒฉ์ค์ธ ํ๋ก์ธ์ค๋ฅผ ํ์ธํ๋ ์์ ์ด ํ์์ ์ด๋ค.
- ๊ทธ๋์ Flush+Flush ๊ณต๊ฒฉ์ ์ด ํ์ธ๋์ด์ง๋ ๊ณผ์ ์ ํ ์ ์๊ฒ stealthyํ๋ค.
- HPC๋ ํน๋ณํ ๋ชฉ์ (ํน๋ณํ H/W์ ์ํ๋ฅผ ๊ด์ธกํ ์ ์๋)์ register์ด๋ค.
- HPC๋ LLC์์์ cache references์ cache miss๋ฅผ ๊ด์ธกํ ์ ์๋ค.
- Performance tunning์ ์ํด ๋ง๋ค์ด์ก์ง๋ง, ํ์ฌ Flush+Reload์ Rowhammer๋ฅผ ํ์งํ๋๋ฐ ์ ํฉํ register๊ฐ ๋์๋ค.
- ํ์ง๋ง Flush+Flush ๊ณต๊ฒฉ์ Performance counter๋ค๋ก๋ ํ์ง๊ฐ ์คํ๋ถ๊ฐ๋ฅํ๋ค.
- Linux์ perf_event_open systemcall interface๋ก ์ด์ฉ๋๋ ๊ฒ์ ๋ถ์ํ ์ ์๋ค. (์ด ์์คํ ์ฝ์ ์ฌ์ฉ๊ฐ๋ฅํ perfourmance counters๋ค์ subset(์ผ๋ถ๋ถ)์ userspace์์ ์ ๊ทผ ๊ฐ๋ฅํ๊ฒ ์ ๊ณตํด์ฃผ๊ณ , kernel๋จ์์ ์ํ๋๋ค.)(๊ทธ๋ฆฌ๊ณ ์ด ๋ ์ง์คํฐ๋ค์ ํ์ฌ ๊ณต๊ฒฉ์ค์ธ ๊ฒ์ ํ์งํ๋๋ฐ ์ฐ์ธ๋ค)
- 23๊ฐ์ h/w์ cache performance events๋ฅผ ๋ถ์ํ์๊ณ , ์ถ๊ฐ์ ์ผ๋ก C-box๋ผ๊ณ ๋ถ๋ฆฌ๋ uncore performance monitoring unit์ ๋ถ์ํ์๋ค. (c-box๋ clflush ๋ช
๋ น์ด์ ์ง์ ์ ์ผ๋ก ์ฐ๊ด๋์ด, cache hits์ miss์ ๋ํ ๊ฒ์ ํ์ํด์ค๋ค.)
- UNC_CBO_CACHE_LOOKUP event๋ LLC์ cache slice๋ฅผ ๋ณด๋ ๊ฒ์ ํ๋ฝํ๋ register์ด๋ฉฐC-Box monitoring unit์ ํฌ๊ด์ ์ธ interface๋ก๋ ์ฌ์ฉํ ์ ์์ ๋ฟ๋ง์๋๋ผ ํน๋ณํ ๋ ์ง์คํฐ๋ก์จ๋ ์ฌ์ฉํ ์ ์๋ค.
- ITLB performance counters๋ฅผ ์ฌ์ฉํ๋ค. ์๋ํ๋ฉด Flush+Reload์ Rowhammer ๊ณต๊ฒฉ๋ค์ ๋ชจ๋ ๋ง์ ์์ LLC CACHE MISS๋ฅผ ์ผ์ผํค๊ณ ์์ ๋ถ๋ถ์ ์ฝ๋์์๋ง ์คํ๋๊ธฐ ๋๋ฌธ์ด๋ค. ์์ ์ฝ๋๋ฅผ ์คํํ๋ ๊ฒ์ ITLB์ ์ ์ ์๋ฐ์ ์ผ๊ธฐํ๊ธฐ ๋๋ฌธ์ด๋ค.
- 24๊ฐ ์ค์์ 4๊ฐ์ ๋๋ง ์คํ ์์ด ๊ณต๊ฒฉ๋ค์ ์ฐพ์๋ผ ์ ์์๋ค.
- CACHE_MISSES
- CACHE_REFERENCES
- L1D_RM
- LL_RA
- CACHE_MISSES์ CACHE_REFENCE๋ก๋ง์ผ๋ก๋ ์ถฉ๋ถํ๋ฉฐ performace counter์ ๊ด๋ จ๋ C๊ฐ์ด km๋๋ kr๋ณด๋ค ๋ ํฌ๋ค๋ฉด ๊ณต๊ฒฉ์ด ๋์๋ค๊ณ ์ ์ํ์๋ค.
- km , kr์ threshold๋ malware์ maximum distance์ minimum value๋ฅผ ํตํด ๋ง๋ค์๊ณ , ๊ธฐ๋ณธ application์ maximum distance๊ฐ์ ํ์ธํด์ ๊ตฌํ์๋ค.
- km(cache miss, cache reference)
- Flush+Reload, Prime+Probe, Rowhammer์ ์ ์์ ์ผ๋ก ํ์ง๊ฐ ๋์์ง๋ง, Flush+Flush๋ cache miss์ cache reference๋ฅผ ์ผ์ผํค์ง ์์์ผ๋ก ํ์ง๋์ง ์๋๋ค.