GN⁺: Reptar
(lock.cmpxchg8b.com)CPU 미스터리 발견
- 현대 CPU 내부에서 발생할 수 있는 오류에 대한 관심이 있다면 계속 읽어보기를 권장함.
- x86 어셈블리를 작성한 경험이 있다면, 메모리를 이동시키는 데 사용되는
rep movsb
명령어에 익숙할 것임. - 소스, 목적지, 방향, 카운트를 설정한 후 프로세서가 모든 세부 사항을 처리하도록 함.
명령어 접두사 해석
- x86의 특징 중 하나는 명령어 디코딩이 일반적으로 매우 유연함.
- 의미가 없거나 다른 접두사와 충돌하는 접두사를 사용해도 대부분 무시됨.
- 컴파일러는 원하는 정렬 경계에 맞추기 위해 불필요한 접두사를 사용할 수 있음.
REX 접두사
- i386에는 8개의 범용 레지스터가 있어 3비트로 레지스터를 지정할 수 있었음.
- x86-64는 8개의 추가 범용 레지스터를 도입하여 더 많은 비트가 필요해짐.
- rex 접두사는 다음 명령어가 추가 비트를 빌릴 수 있도록 하여 16개의 범용 레지스터 인코딩을 가능하게 함.
인코딩 규칙
- rex 접두사는 피연산자를 인코딩하기 위한 사용 가능한 공간을 증가시킴.
- 불필요하거나 중복된 접두사는 x86에서 대부분 무시됨.
-
rex.rxb rep movsb
명령어는 피연산자가 없기 때문에 rex 비트가 의미가 없으며, 프로세서는 rex 접두사를 무시함.
빠른 짧은 반복 이동(Fast Short Repeat Move, FSRM)
- FSRM은 Ice Lake에서 도입된 새로운 기능으로, ERMS의 단점을 해결함.
- ERMS는 버퍼를 정렬하여 가능한 가장 넓은 저장소를 사용하는 것이 효율적인 문자열 이동의 어려운 부분임.
- FSRM은 128바이트 이하의 짧은 문자열을 더 빠르게 이동하는 것을 목표로 함.
발견
- 프로세서 검증 기법인 Oracle Serialization을 사용하여 무작위로 생성된 프로그램의 두 가지 형태가 동일한 최종 상태를 가지는지 확인함.
- 8월에 검증 파이프라인이 FSRM 최적화된
rep movs
작업에 중복된 rex.r 접두사를 추가하면 예측할 수 없는 결과를 초래하는 사례를 발견함. - 멀티 코어가 동일한 버그를 트리거할 때 프로세서가 머신 체크 예외를 보고하고 중단됨을 확인함.
재현
- 연구 결과를 보안 연구 저장소에 공개함.
- 취약점을 재현하려면
icebreak
도구를 사용할 수 있음. - 영향을 받지 않는 시스템에서는 아무런 출력이 없어야 하지만, 영향을 받는 시스템에서는 성공적인 재현 시마다
.
이 출력됨.
분석
- 현대 시스템에서 마이크로코드가 어떻게 작동하는지는 비밀에 부쳐져 있어, 관찰에 기반한 이론만 가능함.
- 버그가 프론트엔드가
movsb
명령어의 크기를 잘못 계산하게 하여 ROB(재정렬 버퍼)의 후속 항목이 잘못된 주소와 연결되는 것으로 추정됨.
질문
- 이 예기치 않은 "글리치" 상태에서 무엇이 가능한지에 대한 질문이 있을 수 있음.
- 시스템 상태를 충분히 손상시켜 머신 체크 오류를 유발할 수 있으며, 스레드가 SMT 형제 프로세스의 실행에 영향을 줄 수 있음을 알고 있음.
- μop 실행을 디버깅할 방법이 없어 권한 상승을 달성할 수 있는지 여부는 알 수 없음.
솔루션
- Intel은 영향을 받는 모든 프로세서에 대해 업데이트된 마이크로코드를 발표함.
- 운영 체제 또는 BIOS 공급업체에서 이미 업데이트를 제공할 수도 있음.
대안
- 업데이트가 불가능한 경우, IA32_MISC_ENABLE 모델 특정 레지스터를 통해 빠른 문자열을 비활성화할 수 있음.
- 이는 상당한 성능 저하를 초래하므로 반드시 필요한 경우에만 사용해야 함.
GN⁺의 의견
이 기사에서 가장 중요한 점은 현대 CPU에서 발생할 수 있는 예기치 않은 "글리치" 상태를 발견하고 이를 통해 보안 취약점이 발생할 수 있음을 보여준다는 것입니다. 이 글은 소프트웨어 엔지니어들에게 흥미로울 수 있으며, CPU의 복잡성과 시스템의 취약성에 대한 인식을 높이는 데 기여합니다. 또한, 이러한 발견이 어떻게 실제 보안 위협으로 이어질 수 있는지에 대한 이해를 돕고, 업데이트된 마이크로코드의 중요성을 강조합니다.
Hacker News 의견
-
Konrad Magnusson 팀이 mimalloc과 관련된 문제를 발견함.
- Paradox Interactive의 Konrad Magnusson이 mimalloc과 관련된 이슈를 찾았으며, 이는 Google 연구진이 발견한 새로운 CPU 취약점과 관련이 있을 수 있음.
-
Google 내 여러 연구팀이 독립적으로 버그를 발견함.
- Google 내 silifuzz 팀과 Google Information Security Engineering 팀을 포함한 여러 연구팀이 동일한 버그를 독립적으로 발견함.
-
프로세서가 기계 검사 예외를 보고하고 중단됨.
- 프로세서에서 기계 검사 예외를 보고하고 작동이 중단되는 현상에 대해 언급함.
-
하드웨어에 대한 이해 부족을 깨닫게 됨.
- 하드웨어에 대한 지식이 부족하다는 것을 인지하며, 명령어의 동작을 변경하기 위해 "접두사"가 필요한 이유에 대해 질문함.
-
qemu가 repz ret 문제에 직면했을 때의 진단을 상기시킴.
- qemu가 repz ret 문제를 진단했던 상황을 회상함.
-
인텔 자체 직원과 Google 직원이 문제를 보고함.
- 인텔은 자사 직원들과 Google 직원들에게 이 문제를 내부적으로 발견하고 보고한 것에 대해 감사를 표함.
-
Google의 기사보다 훨씬 더 재미있음.
- Google의 기사보다 해당 논의가 더 흥미로움을 표현함.
-
순서대로 실행되지 않고 추측적으로 실행되는 CPU를 설계하는 것이 가능한지, 보안 문제 없이 가능한지에 대한 의문.
- 순서대로 실행되지 않고 추측적으로 실행되는 CPU를 설계할 때 발생할 수 있는 보안 문제에 대해 의문을 제기하며, 미래에는 각각의 A55 코어가 독립적으로 하나의 애플리케이션을 실행하는 방향으로 나아갈지에 대한 질문을 함.
-
인텔의 보안 공지에 대한 설명.
- 인텔의 보안 공지에는 특정 인텔 프로세서에서 예상치 못한 동작을 일으키는 명령어 시퀀스가 있으며, 이를 통해 인증된 사용자가 권한 상승, 정보 노출, 서비스 거부를 유발할 수 있음을 설명함.