
BubbleWrap 권한이없는 샌드 박스 프로필
SystemD-Nspawn, Dockeretc.와 같은 많은 컨테이너 실행 시간 도구는 컨테이너를 실행하기 위해 시스템 관리자 및 오케스트레이션 도구 (예 : Kubernettes)를위한 인프라를 제공하는 데 중점을 둡니다.
이러한 도구는 권한이없는 사용자에게 제공하는 데 적합하지 않습니다. 호스트의 완전한 권한이있는 루트 쉘로 이러한 액세스를 변환하는 것이 중요하기 때문입니다.
Linux 커널 레벨에는 "사용자 네임 스페이스"사용자 이름 공간이라는 분리 시스템이있어 권한이없는 사용자가 컨테이너의 기능을 사용할 수 있도록 할 수 있습니다. 상당한 진전이 이루어졌지만, 이와 관련하여 여전히 우려가 있으며 Centos / Red Hat Enterprise Linux 7, Debian Jessie 등과 같은 여러 생산 분포에서 특권이없는 사용자에게는 이용할 수 없습니다.
예를 들어, CVE-2016-3135를 참조하십시오. 이는 사용자가 도입 한 로컬 루트 취약점입니다. 2016 년 3 월 출판물은 더 많은 토론을했습니다.
BubbleWrap은 사용자 이름 공간의 하위 집합의 전체 구현으로 볼 수 있습니다. 서브 세트에 대한 강조 - 이전 CVE와 관련하여 BubbleWrap은 iptables를 제어 할 수 없습니다.
원래 BubbleWrap 코드는 사용자 이름 공간 전에 존재했습니다. Linux-USER-Chroot에 의해 방해되는 XDG-App 도우미 코드를 상속합니다.
이 도구의 관리자는 해당 분포에 설치된 일반적인 소프트웨어와 함께 사용 되더라도 권한 에스컬레이션을 허용하지 않는다고 생각합니다. 그러나 서비스 거부 공격을 수행하기 위해 로그인 한 사용자의 용량을 증가시킬 수 있습니다.
특히, BubbleWrap은 pr_set_no_new_privs를 사용하여 setuid 바이너리를 비활성화하는데, 이는 Chroots와 같은 것들에서 벗어날 수있는 전통적인 방법입니다.
이 프로그램은 다음과 같은 작업을 근절하지 않는 모든 컨테이너 도구에서 공유 할 수 있습니다.
bwrap-oci 권한이없는 flatpak rpm-ostree 우리는 이것을 Kubernetes / Onshift 클러스터에서 사용할 수 있기를 바랍니다. 권한이없는 사용자가 컨테이너의 기능을 사용하는 능력을 사용하면 대화식 및 유사한 정제 시나리오의 실현을 크게 촉진 할 수 있습니다.
BubbleWrap은 새롭고 완전히 빈 어셈블리 이름 공간을 만들어 작동합니다. 여기서 루트는 호스트가 보이지 않는 TMPFS에 있으며 마지막 프로세스가 끝날 때 자동으로 청소됩니다. 다음으로 명령 줄 옵션을 사용하여 루트 파일 시스템과 프로세스 환경 및 이름 공간에서 실행할 명령을 구축 할 수 있습니다.
소스 코드에는 더 큰 데모 명령 시퀀스가 있지만 여기에는 파일 /USR을 재사용하는 새 쉘을 실행하는 작은 버전이 있습니다.
bwrap-ro-bind /usr /usr-symlink usr /lib64 /lib64 -proc /proc-dev /dev-share-pid bash 이것은 불완전한 예이지만 예시적인 목적에 유용합니다. 더 자주, 호스트 파일 시스템 트리를 사용하여 컨테이너를 만드는 대신 chroot에 가입하려고합니다. 거기서, lib64-> usr/lib64 기호 링크를 만드는 대신, TMPFS는 이미 대상 루프에서 그것을 만들었을 수 있습니다.
BubbleWrap의 목적은 샌드 박스에서 애플리케이션을 실행하는 것입니다. 여기서 운영 체제의 일부 또는 시작 디렉토리와 같은 사용자 데이터에 대한 액세스가 제한되어 있습니다.
BubbleWrap은 항상 새로운 어셈블리 이름 공간을 만듭니다. 사용자는 샌드 박스에서 볼 수있는 파일 시스템의 부분을 정확하게 지정할 수 있습니다. 지정된이 디렉토리 중 하나는 사전 결정된 양식으로 장착되며 읽기 만 수행 할 수 있습니다.
또한 이러한 커널 기능을 사용할 수 있습니다.
사용자 이름 공간 (clone_newuser) : 현재 UID 및 샌드 박스를 제외한 모든 것을 숨 깁니다. 또한 샌드 박스에 UID / GID 값이 무엇인지 변경할 수 있습니다.
IPC 이름 공간 (clone_newipc) : 샌드 박스는 SYSV 공유 메모리 및 신호등과 같은 모든 다른 형태의 CPI 사본을 얻습니다.
PID 이름 공간 (clone_newpid) : 샌드 박스에는 샌드 박스 외부에 프로세스가 표시되지 않습니다. 또한 BubbleWrap은 컨테이너 내에서 PID1 사소한 것을 실행하여 모래 상자에서 어린이를 수확하는 요구 사항을 처리합니다. 이것은 현재 Docker Pid 1 문제로 알려진 것을 피합니다.
공간 dehttp : //linux.die.net/man/2/clone 네트워크 이름 (clone_newnet) : 샌드 박스는 네트워크를 볼 수 없습니다. 대신, 반전 루프 장치 만 갖춘 자신의 네트워크 이름 공간이 있습니다.
UTS 이름 공간 (clone_newuts) : 샌드 박스에는 자체 호스트 이름이 있습니다.
SECCOMP 필터 : 테스트 영역에서 수행 할 수있는 시스템으로 호출을 제한하는 SECCOMP 필터는 통과 할 수 있습니다. 자세한 내용은 Seccomp를 참조하십시오.
Firejail은 BubbleWrap이 세트 우드 도구와 많은 특정 데스크톱 샌드 박스 기능을 결합한다는 의미로 나누기 전에 Flatpak과 유사합니다. 예를 들어, Firejail은 Pulseaudio를 알고 있으며 BubbleWrap No.
BubbleWrap 저자는 작은 세트 우드 프로그램을 감사하고 Pulseaudio 필터링과 같은 특성을 특권이없는 프로세스로 유지하는 것이 훨씬 쉽다고 생각합니다.
또한 @CGWalters는 화이트 목록에 파일 경로를 포함시키려는 것이 사용자가 경로를 조작 해야하는 수많은 방법과 시스템 관리자가 시스템을 구성 할 수있는 수많은 방법을 고려할 때 나쁜 생각이라고 생각합니다. BubbleWrap 접근 방식은 CAP_SYS_ADMIN과 같은 특정 LINUX 기능 만 유지하지만 항상 호출 UID와 같은 파일 시스템에 액세스하는 것입니다. 이것은 Tocttou 공격과 다른 공격을 완전히 닫습니다.
Sandstorm.io는 샌드 박스를 구성 할 권한이없는 사용자 이름에 대한 공간이 필요하지만 세트 모드에서 쉽게 작동 할 수 있습니다. @CGWalters는 코드가 상당히 좋다고 생각하지만 여전히 BubbleWrap에서 통일하는 것이 합리적 일 수 있습니다. 그러나 @kentonv (Sandstorm의)는 원칙적으로 의미가 있지만 변화 비용은 현재 실질적인 이점을 초과한다고 생각합니다. 이 결정은 미래에 재평가 될 수 있지만 오늘날에는 적극적으로 적용되지 않습니다.
RUNC는 현재 RUNC 설치 중에 다른 권한을 제외하고는 컨테이너의 생성 및 관리 및 관리 중에 다른 권한을 제조 할 필요없이 근관없이 컨테이너 지원을 진행하고 있습니다. 그러나 runc를 사용하는 표준 모드는 루트에 의해 호출되도록 설계된 SystemD Nspawn과 유사합니다.
BubbleWrap 저자는 Runc와 SystemD-Nspawn이 세트가되도록 설계되지 않았으며 그러한 방식을 인정하지 않는다고 생각합니다. 그러나 루트가없는 컨테이너를 사용하면 RUNC는 BubbleWrap에 의해 인정 된 특정 사용 사례를 준수 할 수 있습니다 (완전하고 표준화 된 OCI 실행 시간이라는 추가 이점이 있음).
Binctr는 Runc의 봉투 일 뿐이므로 모든 디자인 보상을 물려받습니다.