
추측적 로드 위험이 Rowhammer 및 캐시 공격을 강화함 - CVE-2019-0162 -
https://www.usenix.org/system/files/sec19-islam.pdf
@inproceedings {236252,
author = {Saad Islam and Ahmad Moghimi and Ida Bruhns and Moritz Krebbel and Berk Gulmezoglu and Thomas Eisenbarth and Berk Sunar},
title = {{SPOILER}: Speculative Load Hazards Boost Rowhammer and Cache Attacks},
booktitle = {28th {USENIX} Security Symposium ({USENIX} Security 19)},
year = {2019},
isbn = {978-1-939133-06-9},
address = {Santa Clara, CA},
pages = {621--637},
url = {https://www.usenix.org/conference/usenixsecurity19/presentation/islam},
publisher = {{USENIX} Association},
month = aug,
}
Saad Islam 및 Ahmad Moghimi, Worcester Polytechnic Institute; Ida Bruhns 및 Moritz Krebbel, University of Luebeck; Berk Gulmezoglu, Worcester Polytechnic Institute; Thomas Eisenbarth, Worcester Polytechnic Institute 및 University of Luebeck; Berk Sunar, Worcester Polytechnic Institute
최신 마이크로아키텍처는 메모리 병목 현상을 개선하기 위해 추측적 로드(speculative load) 및 스토어 포워딩(store forwarding)과 같은 최적화 기술을 통합합니다. 프로세서는 스토어보다 먼저 로드를 추측적으로 실행하고, 잠재적 의존성이 있으면 앞선 스토어의 데이터를 로드로 전달합니다. 이는 로드가 앞선 스토어가 완료될 때까지 기다릴 필요가 없으므로 성능을 향상시킵니다. 그러나 의존성 예측은 부분 주소 정보에 의존하므로 가짜 의존성과 스톨 위험이 발생할 수 있습니다.
이 연구에서 우리는 추측적 로드를 제공하는 의존성 해결 로직이 물리적 페이지 매핑 정보를 얻기 위해 악용될 수 있음을 최초로 보여줍니다. Rowhammer와 같은 마이크로아키텍처 부채널 공격과 Prime+Probe와 같은 캐시 공격은 가상-물리 주소 매핑의 리버스 엔지니어링에 의존합니다. 우리는 이러한 누출을 악용하여 리버스 엔지니어링을 256배 가속화하는 SPOILER 공격을 제안합니다. 그런 다음 이것이 JavaScript와 같은 샌드박스 환경에서도 축출 집합 검색을 4096배 가속화하여 Prime+Probe 공격을 어떻게 개선할 수 있는지 보여줍니다. 마지막으로, SPOILER가 최대 100% 확률로 DRAM 행 충돌을 결정적으로 수행하는 데 어떻게 도움이 되는지 보여주고, 일반 사용자 권한으로 양면 Rowhammer 공격을 시연함으로써 Rowhammer 공격을 개선합니다. 후자는 SPOILER 누출을 사용하여 연속 메모리 페이지를 감지할 수 있기 때문에 가능합니다.
$ make
$ ./spoiler
gnuplot이 아직 설치되어 있지 않으면 설치하거나 다른 소프트웨어에서 t2.txt를 플로팅하세요. plot_t2.m MATLAB 스크립트가 제공됩니다.
$ gnuplot
gnuplot> plot 't2.txt' with lines
peaks_linux.png와 유사한 피크가 보이면 CPU가 SPOILER에 취약한 것입니다. 그렇지 않다면 "PAGE_COUNT, WINDOW 및 THRESH_OUTLIER" 매개변수를 조정해 볼 수 있습니다. 예를 들어 11세대 CPU의 경우 WINDOW 크기를 256으로 변경하면 작동했습니다. 그 이유는 세대가 높을수록 스토어 버퍼 크기가 커지기 때문일 수 있습니다. 자세한 내용은 논문을 참조하십시오.
"spoiler.exe"를 더블 클릭하거나 명령 프롬프트에서 실행하십시오. 매개변수를 변경해야 하는 경우 코드를 다시 컴파일하십시오. "t2.txt"를 임의의 소프트웨어 또는 plot_t2.m MATLAB 스크립트로 플로팅하십시오.