[side-channel] Spectre Attacks: Exploiting Speculative Execution
Loading content...
현대 프로세서는 성능을 극대화하기 위해 분기 예측(branch prediction)과 추측 실행(speculative execution) 기법을 사용한다. 분기문의 방향이 실행될 메모리 값에 의존한다면,CPU는 결과를 추측해 이후 명령어들을 선제적으로 실행한다. 이후 메모리 값이 도착해 추측이 옳았음이 확인되면 CPU는 계산 결과를 commit하고 틀렸을 경우 discard 한다. 추측 실행 로직은 보안 경계를 엄격하게 준수하지 않기에 피해자 메모리나 레지스터를 접근할 수 있고 side effect를 남기는 연산을 할 수 있다.
Spectre 공격은 피해자가 정상적인 프로그램 실행 흐름에서는 수행하지 않았을 연산을 speculative execution중에 수행하도록 유도하고 side channel을 통해 전달한다. Side channel attack, fault attacks, return-oriented programming 기법을 결합하여 피해자 프로세스의 임의 메모리를 읽어낼 수 있는 공격 방법을 제시한다.
추측 실행의 구현 방식이 보안 과정들을 위반하고 있다. 1. 운영체제의 프로세스 격리, 2. 컨테이너화, 3. just-in-time 컴파일, 4. 캐시 타이밍 및 부채널 공격 방어책 근본적인 해결을 위해서는 프로세스 설계의 수정이 필요하며, 하드웨어 설계자와 소프트웨어 개발자가 CPU 구현 시 어떤 계산 상태가 유출되어도 되는지에 대해 공통된 이해를 가질 수 있도록 ISA의 업데이트가 요구된다.
| makeshift | 임시방편의 |
| nominal | 이름만의, 명목상의 |
| implication | 영향, 함의, 함축 |
| empirically | 경험적으로, 실증적으로 |
| exfiltration | 유출 |
| instantiate | 구체적으로 예시를 들다 |
| exploit | 이용하다, 악용하다, 착취하다 |
| alias | 하나의 프로그램에서 동일한 기억장소를 참조하는 변수에 둘 이상의 이름이 붙은 것 |
| granularity | 과립 상태, 까슬까슬한 상태 |
| encompass | 포위하다, 둘러싸다 |
| contention | 논쟁, 말싸움 |
| induce | 설득하다 |
| congestion | 밀집, 충만, 혼잡, 과로 |
| dissuade | 충고하여 단념시키다 |
| ample | 넉넉한, 충분한 |
| exfiltrate | 적진을 몰래 탈출하다 |
| spurios | 가짜의 |
| contention | 투쟁, 다툼 |