하드웨어 보안의 최신 동향
CHERI라고 불리는 명령어 집합 확장에서 쓰이는 케이퍼빌리티(capability)의 설명으로 올바른 것은?
- A포인터 값을 CPU 안의 키로 암호화한 뒤 메모리에 두고 사용할 때마다 복호화함으로써, 다른 프로그램이나 OS가 포인터 값을 읽을 수 없게 한다
- B프로그램의 실행 파일에 붙인 전자 서명을 명령을 하나 실행할 때마다 CPU가 확인하여, 서명이 없는 명령을 실행하지 않게 한다
- C포인터에 접근해도 되는 범위와 권한을 갖게 하고, 메모리상에서는 소프트웨어가 바꿔 쓸 수 없는 1비트 태그로 올바르게 만들어진 것인지를 구별한다
정답과 해설 보기
정답: C. 포인터에 접근해도 되는 범위와 권한을 갖게 하고, 메모리상에서는 소프트웨어가 바꿔 쓸 수 없는 1비트 태그로 올바르게 만들어진 것인지를 구별한다
CHERI에서는 주소만 있는 포인터 대신 주소, 가리킬 수 있는 범위의 상한과 하한, 읽기·쓰기나 실행 권한을 하나로 묶은 케이퍼빌리티를 사용합니다(64비트 주소의 경우 압축하여 128비트에 담고, 별도로 1비트 태그를 가집니다). CPU는 접근할 때마다 범위와 권한을 확인하므로, 배열의 범위 밖 읽기·쓰기 같은 메모리 안전성 오류를 하드웨어로 막을 수 있습니다. 태그는 올바른 명령으로 케이퍼빌리티를 만들었을 때만 붙고 일반 데이터로 바꿔 쓰면 사라지므로, 포인터를 위조할 수 없습니다. 케임브리지 대학 등이 연구를 진행했으며, Arm은 이를 바탕으로 한 Morello라는 시제품 프로세서와 평가용 보드를 2020년대 전반에 연구자에게 제공했습니다.