sandboxing

3 posts

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

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

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

의존성이 환경 변수를 읽을 수 있다. JavaScript는 이를 허용한다

Ambient Authority란 Node.js 프로세스 내의 모든 코드가 파일 시스템, 네트워크, 환경에 접근할 수 있는 상태를 말한다. 여기서는 lockdown, compartment, 명시적인 capability 전달을 통해 이를 제거하는 방법을 설명한다.

하나의 손상된 전이 의존성이 당신의 를 외부로 유출하고, 파일 시스템에 쓰며, 외부 연결을 열 수 있다. 이를 위해 당신의 코드에 취약점이 있을 필요는 없다. 단지 같은 프로세스 안에 존재하기만 하면 된다. JavaScript에서는 기본적으로 모든 모듈이 런타임의 전체 권한을…

의존성은 디스크의 어떤 파일이든 읽을 수 있다. cap-std는 접근 권한을 요청하게 만든다.

Rust 표준 라이브러리는 모든 의존성에 주변 파일 시스템 권한을 부여한다. cap-std는 이를 기능 기반 API로 대체하여 코드가 파일을 열기 전에 해당 경로에 접근할 권리가 있음을 증명하도록 강제한다.

의존성 트리의 모든 크레이트는 를 열거나 디렉터리에 쓰거나, 프로젝트의 모든 파일을 열거할 수 있다. Rust 표준 라이브러리는 접근 권한을 묻지 않는다. 을 호출할 수 있는 코드라면 운영체제가 허용하는 어떤 경로든 접근할 수 있다고 가정한다. cap-std는 이러한 가정을 뒤집는다.…