하드웨어 보안의 최신 동향

Arm의 포인터 인증(PAC) 구조로 올바른 것은?

  1. A포인터를 사용할 때마다 시스템 콜로 OS에 문의하여, 그 포인터가 올바른 값인지를 확인받는다
  2. B포인터 값과 문맥 값으로부터 CPU 안의 키로 짧은 인증 코드를 계산하여 포인터의 상위 비트에 넣고, 사용하기 전에 확인한다
  3. C포인터의 모든 비트를 CPU 안의 키로 암호화한 뒤 메모리에 저장하고, 읽어 낼 때마다 CPU 안에서 복호화한 뒤 사용한다
정답과 해설 보기

정답: B. 포인터 값과 문맥 값으로부터 CPU 안의 키로 짧은 인증 코드를 계산하여 포인터의 상위 비트에 넣고, 사용하기 전에 확인한다

64비트 포인터 중 가상 주소에 쓰이지 않는 상위 비트에, 포인터 값과 문맥 값(예를 들어 스택 포인터)으로부터 CPU 안의 키로 계산한 인증 코드를 넣습니다. 함수의 복귀 주소 등을 사용하기 직전에 전용 명령으로 다시 계산하여 비교하고, 맞지 않으면 사용할 수 없는 주소로 바꾸므로, 스택의 복귀 주소를 바꿔 쓰는 공격(ROP 등)이 어려워집니다. 키는 소프트웨어에서 읽을 수 없으므로, 공격자는 바꿔 쓴 포인터에 맞는 인증 코드를 만들 수 없습니다. 다만 인증 코드의 길이는 가상 주소의 폭 등의 설정으로 정해지며, 대부분 십수 비트 이하로 짧기 때문에, 여러 번 추측할 수 있는 상황에서는 우연히 일치할 확률을 고려해야 합니다.

이 분야 연습하기 분야로 돌아가기

하드웨어 보안의 최신 동향의 다른 문제

  1. Intel의 CET(제어 흐름 강제 기술) 등에서 채택된 하드웨어 섀도 스택의 설명으로 올바른 것은?
  2. 제어 흐름 무결성을 하드웨어로 지원하는 기능에 대해, 함수에서의 복귀를 보호하는 것과 함수 포인터 등에 의한 간접 호출이나 점프를 보호하는 것의 조합으로 올바른 것은?
  3. DRAM의 미세화가 진행될수록 로우해머가 일어나기 쉬워진다고 하는 이유로 올바른 것은?
  4. DRAM 내부의 TRR(타깃 로우 리프레시)에 의한 로우해머 대책이 연구에서 회피된 적이 있는 이유로 올바른 것은?
  5. 'ECC가 있는 메모리를 사용하면 로우해머 걱정은 없다'라는 생각의 문제점으로 올바른 것은?