
2018년 1월 2일 (CVE-2017-5753 및 CVE-2017-5715) “스펙터” Spectre 취약점 익스플로잇
2018년 1월 2일 (CVE-2017-5753 및 CVE-2017-5715) "유령" Spectre 취약점 이용 예시
우리는 "The Magic Words are Squeamish Ossifrage." 라는 텍스트를 메모리에 저장하고, 취약점을 이용해 이를 읽으려고 시도합니다. 시스템이 취약하다면, 표준 출력에서 동일한 텍스트를 볼 수 있습니다.
이 코드에서, victim_function() 내의 컴파일 명령이 엄격한 프로그램 순서로 실행된다면, 해당 함수는 array1 크기 = 16이므로 array1[0..15]에서만 읽습니다. 그러나 실행 시간이 읽기 시간을 초과하는 것이 가능합니다. read memory byte() 함수는 victim_function()을 여러 번 훈련 호출하여 분기 예측기가 x의 유효한 값을 예측하도록 한 다음, 범위를 벗어난 x를 호출합니다. 조건부 분기는 예측할 수 없으며, 이후의 추측 실행은 범위를 벗어난 x를 사용하여 비밀 바이트를 읽습니다. 그런 다음 예측 코드는 array2[array1[x] * 512]에서 읽어 array1[x]의 값을 캐시로 유출합니다. 공격을 완료하기 위해 간단한 flush+reload를 사용하여 array2가 어느 캐시 라인에 있는지 식별하여 메모리 내용을 드러냅니다. 공격은 여러 번 반복되므로, 대상 바이트가 처음에 캐시되지 않았더라도 첫 번째 반복에서 캐시로 가져옵니다. i7 Surface Pro 3에서 최적화된 코드는 약 10KB/초의 속도로 읽습니다.