hardware-assisted-safety

5 posts

C 코드를 전면 rewrite 없이 capability 하드웨어에서 실행할 수 있다

CHERI의 하이브리드 ABI를 사용하면 기존 C 코드를 capability 하드웨어로 점진적으로 이식할 수 있다. 컴파일 방법, 어떤 문제가 발생하는지, 그리고 전체 codebase를 rewrite하지 않고 해결하는 방법을 알아본다。

Rust로 rewrite하기에는 너무 크고, 버퍼 오버플로우에 노출된 채로 두기에는 너무 중요한 C codebase가 있다고 하자. CHERI capability 하드웨어는 CPU 수준에서 메모리 안전성 위반을 잡아낼 수 있지만, 인터넷에서는 CHERI 포인터가 128비트이고 기존…

캐퍼빌리티 하드웨어는 실패하지 않았다. 40년 일찍 도착했을 뿐이다.

1970년대부터 하드웨어 수준에서 메모리 안전성은 가능했다. 캐퍼빌리티 아키텍처가 평면 메모리 모델에 계속 패배한 이유와 CHERI가 마침내 판도를 바꾸는 이유를 설명한다.

CVE의 70%는 메모리 안전성 버그다. buffer overflow, use-after-free, double free. 공격자가 변형된 JPEG에서 루트 접근권까지 확대할 수 있는 취약점이다. 1975년부터 하드웨어에서 이것들의 대부분을 막는 방법을 알고 있었다. 케임브리지 CAP…

C 의존성 라이브러리가 전체 프로세스를 중단시킬 수 있다. WebAssembly가 이를 막는다.

단일 C 라이브러리를 격리하기 위해 컨테이너를 사용하는 것은 과도하다. WebAssembly로 컴파일하여 WASI 샌드박스 내에서 실행하면 메모리 안전성, 캐퍼빌리티 기반 파일시스템 접근, 크래시 격리를 Docker 없이도 할 수 있다.

C 라이브러리 내부의 단 하나의 널 포인터 역참조가 전체 애플리케이션을 중단시킬 수 있다. 해당 라이브러리가 사용자 입력을 파싱하거나, 이미지를 압축 해제하거나, 트워크 프로토콜을 처리한다면, 잘못된 하나의 패킷이 크래시를 일으킬 수 있다. 컨테이너는 이 문제를 해결하지만, 하나의…

당신의 스마트폰은 이미 memory corruption을 감지하는 하드웨어를 탑재하고 있다

ARM Memory Tagging Extension과 GWP-ASan을 통해 최신 모바일 기기에서 프로덕션 메모리 안전성 탐지가 가능해졌다. 이들의 작동 방식과 트레이드오프를 살펴본다.

당신의 스마트폰은 프로덕션 환경에서 memory corruption을 감지할 수 있다. CI에서 실행하는 전체 인스트루먼테이션으로도, 모든 할당에 대해서도 아니다. 하지만 당신의 주머니 속 하드웨어는 이미 수 년 전부터 필요한 프리미티브를 탑재해 출시되고 있으며, 점점 더 많은…

buffer overflow이 계속 발생하는 이유는 우리가 소프트웨어로 해결하기 때문이다

CHERI는 모든 포인터를 경계가 있는 capability로 변환하는 하드웨어 확장이다. CPU 수준에서 buffer overflow을 차단하는 원리, 비용, 그리고 실제 하드웨어에서 시험하는 방법을 설명한다.

buffer overflow은 스무 해 동안 CWE Top 25에 올라 있었다. 스택 카나리아, ASLR, DEP, 제어 흐름 무결성, 메모리 안전 언어 등이 있음에도 불구하고 중요한 코드에서 끊임없이 발생하고 있다. 이유는 단순하다. 이 모든 완화책은 소프트웨어에서 실행되며,…