하드웨어 보안의 최신 동향

CHERI라고 불리는 명령어 집합 확장에서 쓰이는 케이퍼빌리티(capability)의 설명으로 올바른 것은?

  1. A포인터 값을 CPU 안의 키로 암호화한 뒤 메모리에 두고 사용할 때마다 복호화함으로써, 다른 프로그램이나 OS가 포인터 값을 읽을 수 없게 한다
  2. B프로그램의 실행 파일에 붙인 전자 서명을 명령을 하나 실행할 때마다 CPU가 확인하여, 서명이 없는 명령을 실행하지 않게 한다
  3. C포인터에 접근해도 되는 범위와 권한을 갖게 하고, 메모리상에서는 소프트웨어가 바꿔 쓸 수 없는 1비트 태그로 올바르게 만들어진 것인지를 구별한다
정답과 해설 보기

정답: C. 포인터에 접근해도 되는 범위와 권한을 갖게 하고, 메모리상에서는 소프트웨어가 바꿔 쓸 수 없는 1비트 태그로 올바르게 만들어진 것인지를 구별한다

CHERI에서는 주소만 있는 포인터 대신 주소, 가리킬 수 있는 범위의 상한과 하한, 읽기·쓰기나 실행 권한을 하나로 묶은 케이퍼빌리티를 사용합니다(64비트 주소의 경우 압축하여 128비트에 담고, 별도로 1비트 태그를 가집니다). CPU는 접근할 때마다 범위와 권한을 확인하므로, 배열의 범위 밖 읽기·쓰기 같은 메모리 안전성 오류를 하드웨어로 막을 수 있습니다. 태그는 올바른 명령으로 케이퍼빌리티를 만들었을 때만 붙고 일반 데이터로 바꿔 쓰면 사라지므로, 포인터를 위조할 수 없습니다. 케임브리지 대학 등이 연구를 진행했으며, Arm은 이를 바탕으로 한 Morello라는 시제품 프로세서와 평가용 보드를 2020년대 전반에 연구자에게 제공했습니다.

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

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

  1. Arm의 MTE(메모리 태깅 확장)에서는 메모리의 16바이트마다 4비트 태그를 붙이고, 포인터의 상위 비트에도 4비트 태그를 넣어, 접근할 때마다 둘이 일치하는지를 CPU가 확인한다. 해제한 영역을 가리키는 오래된 포인터로 그 영역에 접근하는 오류를 생각한다. 영역을 다시 할당할 때의 새 태그가 16가지 중에서 균일하게 무작위로 선택된다고 하면, 태그가 우연히 일치하여 오류를 놓칠 확률은?
  2. Arm의 포인터 인증(PAC) 구조로 올바른 것은?
  3. Intel의 CET(제어 흐름 강제 기술) 등에서 채택된 하드웨어 섀도 스택의 설명으로 올바른 것은?
  4. 제어 흐름 무결성을 하드웨어로 지원하는 기능에 대해, 함수에서의 복귀를 보호하는 것과 함수 포인터 등에 의한 간접 호출이나 점프를 보호하는 것의 조합으로 올바른 것은?
  5. DRAM의 미세화가 진행될수록 로우해머가 일어나기 쉬워진다고 하는 이유로 올바른 것은?