TONTOU: AMD와 인텔을 겨냥한 새로운 Spectre v2 공격

키 포인트:
  • TONTOU는 예측 버퍼를 정리한 시점과 사용 시점 사이의 시간 간격을 활용합니다.
  • 공격자는 "인터럽트 주입"을 사용하여 커널 흐름을 리디렉션하고 예측 메커니즘을 오염시킵니다.
  •  이는 AMD의 Zen 1~4 아키텍처와 여러 세대의 인텔 프로세서에 영향을 미칩니다.
  • 해당 취약점 완화 패치는 최근 리눅스 커널 업데이트(8월 5일)에 이미 포함되었습니다.

톤토우 공격

혹시 프로세서 속도가 보안을 위협하는 원인일까요? 프로세서가 어떻게 빠른 속도를 내는지 이해 하려면 , 프로세서가 "미래를 예측"하는 방식으로 작동한다는 점을 고려해야 합니다... 물론, 프로세서에 마법이 있거나 작은 수정 구슬이 있는 건 아닙니다...

프로세서의 작동 방식은 프로그램이 어떤 경로를 택할지 기다리는 대신 , 칩이 예상 경로를 예측하고 미리 실행하는 것입니다. 예측이 틀리면 해당 작업은 폐기되지만, 실행 흔적은 메모리에 남습니다. 최근 발견된 가장 심각한 취약점 중 하나인 스펙터(Spectre)가 바로 이 부분에서 시작됩니다 . 스펙터가 발견된 이후 공격자들은 이러한 흔적을 읽는 방법을 터득하여 점점 더 정교한 변종들을 만들어냈고, TONTOU는 이러한 새로운 취약점 중 하나입니다.

MIT 연구진은 스펙터 v2 취약점을 악용하는 정교한 새로운 기술인 TONTOU(Time-of-Neutralization to Time-of-Use)를 발견했는데 , 이 기술 을 통해 커널 메모리를 사용자 공간에서 읽을 수 있습니다.

제조업체와 개발자들이 수년간 예측 공격에 대비한 다양한 보호 메커니즘을 설계해 왔지만, 공격자들은 새로운 경로를 찾아내는 데 성공했으며, 이번 CSAIL 연구는 이러한 보호 조치를 우회하는 방법을 보여줍니다.

연구원들은 버퍼가 비워지는 순간과 예측값이 사용되는 순간 사이에 불가피한 시간 간격이 존재하며 , 바로 이 짧은 간격 동안 시스템 인터럽트를 통해 코드(때로는 단 몇 개의 명령어)가 주입되어 하드웨어를 다시 오염시키고 중요한 데이터를 추출할 수 있다는 사실을 발견했습니다.

이번 공격 관련 사항: Safe-RET 시스템의 장애 및 침해

AMD는 SRSO (투기적 반환 스택 오버플로) 취약점 에 대한 방어책으로 Saferet이라는 기술을 보유하고 있는데, 이 기술은 예측 메커니즘을 사용 직전에 즉시 정리합니다. 하지만 이로 인해 수십 나노초라는 아주 짧은 순간 동안 취약점이 발생하여 악용될 수 있습니다. 연구원들은 이러한 짧은 순간을 공격하기 위해 인터럽트 주입이라는 기법을 개발했습니다.

프로세서는 인터럽트를 처리하기 위해 작업을 지속적으로 일시 중지하며, 일반적인 프로그램은 이러한 타이머를 설정할 수 있습니다 . 연구원들은 이러한 점을 이용하여 타이머를 정밀하게 조정하고 , CPU 속도를 늦추는 기법을 사용하여 프로세서가 정확히 잘못된 시점에 인터럽트를 발생시키도록 했습니다 . 이 인터럽트 동안 공격자는 대량의 함수 호출을 강제로 실행하여 주소 스택 오버플로우를 발생시킬 수 있습니다. 잘못된 실행이 끝나면 프로세서는 해당 프로세스를 종료하지만, 접근된 데이터는 공유 캐시에 남아 있게 되며 , 접근 시간을 분석하여 데이터를 추출할 수 있습니다.

실제 시스템에서의 비밀번호 추출 및 테스트

TONTOU의 심각성을 입증하기 위해 연구팀은 최신 리눅스 커널이 설치된 AMD 시스템에서 작동하는 익스플로잇을 구축했습니다. 첫 번째 난관은 운영 체제의 메모리 위치를 무작위로 지정하는 방어 체계를 우회하는 것이었는데, 연구팀은 10번의 시도 끝에 이를 성공시켰으며, 각 시도당 약 9분이 소요되었습니다.

이후, 그들은 권한이 없는 사용자로 로컬 공격을 시도하여 루트 암호 해시를 알아내는 데 성공했으며, 초당 5.47바이트의 속도 로 91.97%의 정확도로 데이터를 추출했습니다. 테스트의 50%(평균 18분 소요)에서 암호 파일의 내용을 성공적으로 탐지하고 추출했습니다. 속도는 느리지만, 서버를 심각하게 손상시키기에는 충분합니다.

인텔, AMD 및 완화 패치에 미치는 영향

연구팀은 인텔과 AMD 프로세서 4세대를 대상으로 테스트를 진행했으며, 두 아키텍처 모두에서 예측 실패를 확인했습니다. 이 기술은 AMD의 Zen 1~4 제품군 에서는 유효한 것으로 입증되었지만 , 인텔 칩에서는 두 가지 서로 다른 보안 조치를 우회하는 데 성공했습니다 . 다만, 인텔 프로세서 세대별로 일관되지 않은 동작이 관찰되어 명목상의 보안 조치가 하드웨어에서 서로 다르게 구현되어 있음을 시사합니다.

해결책으로 연구진은 인터럽트가 완료된 후 예측 메커니즘을 한 번 더 초기화하는 것을 제안합니다. 이 조치는 AMD에게는 실행 가능해 보이지만, 인텔에게는 오히려 역효과를 초래할 수 있습니다. 공격이 인터럽트가 일관된 상태를 유지하는 데 의존하기 때문에, 이 방법은 공격의 신뢰성을 높일 수 있기 때문입니다.

연구진은 2월 초 AMD와 인텔에, 3월에는 리눅스 커널 관리자들에게 이 사실을 알렸습니다. 그 결과, 해당 취약점을 완화하기 위한 코드 차단 기능이 8월 5일 리눅스 커널에 통합되었습니다.

마지막으로, 더 자세한 내용을 알고 싶으시다면 다음 링크에서 확인하실 수 있습니다.


Google에서 선호하는 검색 엔진으로 추가