Linux에 독점 바이너리 커널 모듈을 샌드박싱하는 개념이 있습니까?

Linux에 독점 바이너리 커널 모듈을 샌드박싱하는 개념이 있습니까?

프로세스 간 보안(동일) 및 권한 저하를 개선하기 위해 UID많은 작업이 수행되었지만 userland독점 Linux 커널 구성 요소를 사용하는 것이 일반적입니다(슬프게도 GPLv2는 비공개 소스 커널 모듈 문제를 실제로 해결하지 못하는 것 같습니다).

내 질문은 폐쇄 소스 커널 모듈(기존 또는 개발 중)의 "샌드박싱" 개념에 관한 것입니다.

제가 보기엔 합법적인 편집증 기간(WikiLeaks, Snowden 이후) 동안 사람들은 항상 독점 커널 모듈의 잠재적인 백도어를 방지할 방법을 찾고 있었던 것 같습니다. 그렇죠?

답변1

예, 독점 드라이버에 대한 샌드박스 개념이 있습니다. 이를 사용자 계층 드라이버라고 합니다.

커널에서 코드를 실행하면 모든 것에 액세스할 수 있으므로 샌드박스 처리가 불가능합니다. (Linux 시스템에서는 불가능합니다. 시스템은 가상 머신에서 실행될 수 있으며 가상 머신은 샌드박스 작업을 수행합니다.)

사용자 공간 드라이버는 특정 유형의 주변 장치에 사용할 수 있습니다. 예를 들어 일부 USB 주변 장치는 사용자 모드를 통해 구동될 수 있습니다.libusb그리고USBFS파일 시스템은 다음과 같은 방법으로 사용자 공간에서 구현될 수 있습니다.퓨즈.

주변 장치에 대한 악성 드라이버는 주변 장치에 대한 액세스 권한을 악용하여 시스템의 나머지 부분에 액세스할 수 있는 경우가 많습니다(예: 주변 장치를 다음과 같이 구성).DMA따라서 임의의 메모리에 액세스) 드라이버를 샌드박싱하는 데 별 의미가 없습니다. 드라이버를 신뢰할 수 없다면 사용하지 마세요.

일부 샌드박싱은 가상 머신 내부에서 드라이버를 실행하고 가상 머신이 특정 주변 장치에만 액세스할 수 있도록 하이퍼바이저를 구성하여 수행할 수 있습니다. 이는 주변 장치 자체가 다음을 통해 수행할 수 있는 메모리의 특정 부분에만 액세스할 수 있는 경우에만 유용합니다.아이오무(물론 IOMMU는 하이퍼바이저의 제어를 받아야 합니다). 모든 시스템이 이러한 샌드박싱을 지원하는 것은 아닙니다. 그렇다면 주변 장치를 신뢰하지 않는다면 왜 이를 컴퓨터에 설치하겠습니까?

답변2

나는 이것이 가능하다고 생각합니다. CPU는 커널 코드의 일부에 대한 액세스를 제한하는 지원을 제공합니다.

그러나 두 가지 어려움이 있습니다. 독점 커널 모듈은 하드웨어 회사에서 작성하므로 커널이 특정 주소에 대한 액세스를 제한할 수 있더라도 하드웨어 측에서는 제한 없는 액세스를 가질 수 있습니다.

두 번째 어려움: 커널 사람들이 그러한 계획을 구현할지 의심스럽습니다. 암시적인 Linux 커널 규칙에는 "비공개 소스 사람들은 좋아하지 않습니다"라고 명시되어 있으며 그러한 계획은 작업을 더 쉽고 더 맛있게 만들 것입니다.

관련 정보