[컴] Spectre



Microarchitectural Side-Channel Attacks

이 구성요소들은 미래의 프로그램의 행동 예측을 통해 프로세서의 성능을 향상시킨다.
행동예측을 위해서 그 구성요소들은 과거 프로그램 동작과 관련된 state 를 유지한다. 그리고 미래 행동이 과거의 행동이랑 연관이 있거나 비슷할 것이라고 가정한다.

여러개의 프로그램들이 같은 하드웨어에서 동작할 때 (동시에 또는 time sharing 을 통해 ) 어느 한 프로그램에 의해 이뤄진 microarchitectural state 의 변화는 다른 프로그램에 영향을 준다. 결과적으로 이것이 한 프로그램에서 다른 프로그램으로의 의도치 않은 정보의 유출을 일으킬 수 있다.

과거의 작업들은 BTB, branch history, caches 을 통한 정보유출을 보여줬다. 여기서 우리는 Flush+Reload 와 그것의 변형인 Evict+Reload 를 사용해서 민감한 정보를 유출할 것이다.

이 기술들을 이용해서 공격자는 cache 에서 희생자(victim)가 공유한 cache line 을 추출할 수 있다.

희생자가 잠시 프로그램을 수행한 후에 공격자는 추출된 cache line(evicted cache line) 에 해당하는 주소에서 메모리를 읽는데 얼마나 시간이 걸리는지 측정하게 된다.

만약 victim 이, 모니터되고 있는 cache line 에 접근하면, 그 데이터는 cache 에 있게 되고, 접근은 빨라진다. 그렇지 않고, 만약 victim 이 그 line 에 접근하지 않았다면, read는 느리게 된다. 그렇기 때문에 access time 을 측정하는 것으로, 공격자는 victim 이 추출(eviction step)과 조사(probing step) 과정사이에서 monitored cache line 에 접근했는지 여부를 알 수 있다.

2개의 기술사이의 중요한 차이점은 cache 에서 monitored cache line 을 추출(evicting ) 할 때 사용되는 방법(mechanism) 이다.

Flush+Reload 기술에서는 공격자는 line 을 추출하기 위해 x86의 clflush 같은 기계어처럼 원래 그런 목적으로 만들어진 instruction을 사용한다.(dedicated machine instruction)

Evict+Reload 에서는 추출(eviction) 이 cache line 을 저장하고 있는 cache set 에서의 경합(contetion)을 만들어서 추출하게 된다. 즉, 다른 memory location 들을 접근해서 이 정보가 cache 로 들어오고 이전에 추출한 line 을 버리도록 만든다.



작성중...


References


  1. Meltdown and Spectre

댓글 없음:

댓글 쓰기