하드웨어 보안의 최신 동향
간접 분기의 예측을 악용하는 Spectre의 변종(분기 타깃 인젝션)에 대한 대책인 retpoline과 IBRS의 설명 조합으로 올바른 것은?
- Aretpoline은 CPU 회로를 다시 만들어 예측기를 없애는 대책이며, IBRS는 컴파일러가 간접 분기 명령을 다른 명령열로 바꿔 쓰는 대책이다
- Bretpoline은 간접 분기를 예측기에 의존하지 않는 명령열로 바꾸는 소프트웨어 대책이며, IBRS는 간접 분기 예측을 제한하는 CPU의 기능이다
- Cretpoline도 IBRS도 CPU의 투기적 실행 기능 자체를 멈추는 대책으로, 어느 쪽을 사용해도 투기적 실행에 의한 성능 향상은 없어진다
정답과 해설 보기
정답: B. retpoline은 간접 분기를 예측기에 의존하지 않는 명령열로 바꾸는 소프트웨어 대책이며, IBRS는 간접 분기 예측을 제한하는 CPU의 기능이다
retpoline은 컴파일러가 간접 분기 명령을 call과 ret를 조합한 명령열로 바꾸어, 악용될 수 있는 간접 분기용 예측기가 아니라 복귀 주소 예측을 사용하게 하고, 투기적인 실행을 무해한 루프 안에서 헛돌게 합니다. IBRS는 마이크로코드 업데이트 등으로 추가된 CPU의 제어 기능으로, 예를 들어 커널 안의 간접 분기의 예측이 사용자 프로그램이 학습시킨 내용을 따르지 않도록 제한합니다. 오래된 CPU에서는 IBRS를 전환할 때마다 큰 시간이 걸렸기 때문에 retpoline이 널리 쓰였고, 새로운 CPU에서는 항상 유효하게 둘 수 있는 개량판(eIBRS)이 마련되었습니다. 다만 CPU에 따라서는 복귀 주소 예측도 다른 예측기에 의존하는 경우가 있어, 2022년에 공표된 Retbleed 등에서 retpoline만으로는 불충분한 경우가 제시되었습니다.