[CS] 스펙터 버그

alirz-pixel·2024년 8월 16일
0

CS

목록 보기
2/2

등장 배경

분기 예측 (branch prediction)은 CPU의 성능을 높이기 위해 등장한 것으로 조건문의 결과를 예측하는 식으로 진행된다.

이해를 돕기위해 아래와 같은 코드가 있다고 해보자

if (condition) {
	A() // condition의 결과가 True일 경우, A() 실행
} else {
	B() // condition의 결과가 False일 경우, B() 실행
}

이러한 코드에 대해 분기 예측이 적용된 CPU는 condition의 결과를 예측하여 A() 또는 B()를 실행시킨다. 만약 예측이 맞으면 성능은 크게 향상될 것이다.

그러나 예측이 틀린 경우엔 해당 결과를 되돌리고 (undo), 올바른 경로를 다시 실행하게 된다.

스펙터 버그

스펙터 버그는 이러한 분기 예측의 취약점을 이용한 공격이다. 등장 배경에서 예측이 틀린 경우엔 결과를 되돌린다고 했었지만, 실제 코드가 실행된 데이터는 캐시에 남게 된다.

이에 대해 공격자는 아래와 같은 방식으로 취약점 공격을 할 수 있다. (스펙터 버그)

스펙터 취약점 공격 방법
1. 조건문의 결과를 참으로 예측하도록 유도한다. (조건이 참인 상황을 여러 번 반복한다.)
2. 공격자가 알아내고자 하는 값에 접근한다.
3. 분기 예측으로 해당 코드가 실행이 되고, 조건이 false라면 명령이 취소된다.
4. 명령이 취소가 되었을지라도 그 데이터는 캐시에 남게 된다.
5. 공격자는 여러 데이터에 접근하면서 접근 시간을 확인한다. 그 중 접근 시간이 짧은 데이터는 캐시에 저장되어 있다는 뜻이므로 공격자가 알아내고자 한 데이터임을 알 수 있다.

reference

0개의 댓글