저는 학생들이 작성한 프로그램을 테스트하기 위한 프로그램을 작성하고 있습니다. 그들을 믿을 수 없을까 걱정되고 그것이 실행되는 컴퓨터에 나쁜 결과를 초래하지 않는지 확인해야 합니다.
시스템 리소스에 대한 액세스가 제한되어 있고 해당 사용자로 프로그램을 실행하는 충돌 테스트 사용자를 두는 것을 고려하고 있지만 지금까지 온라인에서 찾은 바에 따르면 가상 시스템을 만드는 것이 가장 안전한 옵션이 될 것입니다... ...
올바른 방법을 선택하도록 도와줄 수 있는 사람이 있나요? 안전이 나의 가장 큰 관심사입니다. 반면에 나는 과도한 솔루션을 원하지 않으며 실제로 필요하지 않은 것을 배우려고 많은 시간을 낭비하지 않습니다.
답변1
가상 기기재부팅하지 않고도 최고의 보안을 제공하지만 성능은 가장 낮습니다.
가상 머신보다 더 안전한 또 다른 옵션:"라이브" CD/DVD/푸시 드라이브 실행하드 드라이브에 액세스할 수 없습니다(BIOS에서 일시적으로 HDD를 비활성화합니다. 그렇게 할 수 없는 경우 최소한 드라이브를 마운트하거나 자동으로 마운트하는 경우 마운트 해제하지 마세요. 하지만 그다지 안전하지는 않습니다).
ㅏ도커컨테이너는 전체 가상 머신에 대한 안전한 대안입니다. 아마도 (보안 측면에서) 둘 사이의 주요 차이점은 docker에서 실행되는 시스템이 실제로 호스트 시스템의 커널을 사용한다는 것입니다.
등의 프로그램이 있습니다.격리이는 특별하고 안전한 환경을 조성합니다. 이를 종종 다음과 같이 지칭합니다.모래 상자- 이는 일반적으로 chroot 기반이며 추가 감독이 필요합니다. 귀하에게 적합한 것을 찾으십시오.
간단한chroot아마도 조금 더 빠르긴 하지만(특히 프로그램 실행 측면에서) 가장 덜 안전할 것입니다.하지만...전체 별도의 루트 트리를 빌드/복사하고 바인드 마운트
/dev
등을 사용해야 합니다(참조참고 1다음과 같은! ). 따라서 일반적으로 이 접근 방식은 권장되지 않습니다. 특히 더 안전하고 일반적으로 설정하기 쉬운sandbox
환경을 사용할 수 있는 경우에는 더욱 그렇습니다.
참고 0:계정과 같은 "특수 사용자" 측면의 경우 nobody
: 이는 다음을 제공합니다.거의 없음보안은 단순한 것보다 훨씬 좋습니다 chroot
. 사용자는 nobody
다음 권한으로 파일과 프로그램에 계속 액세스할 수 있습니다.읽다그리고구현하다권한은 다음과 같이 설정됩니다.다른. 를 사용하여 테스트할 수 있습니다 su -s /bin/sh -c 'some command' nobody
. 버그 또는 사소한 보안 허점으로 인해 누구나 액세스할 수 있는 config/history/cache 파일이 있는 경우 권한을 사용하여 실행 중인 프로그램이 nobody
해당 파일에 액세스할 수 있으며, 기밀 데이터(예: "pass=" 등)를 grep하고 네트워크나 다른 수단을 통해 전송하는 방법에는 여러 가지가 있습니다.
참고 1:Giles가 지적했듯이아래에 댓글이 있습니다, 간단한 chroot 환경은 권한 상승을 목표로 하는 공격에 대해 보안을 거의 제공하지 않습니다. 별도의 chroot는 보안 관점에서 의미가 있습니다.~하지 않는 한환경이 작고 안전하게 검증된 프로그램으로 구성되어 있습니다.오직(그러나 여전히 잠재적인 커널 수준 취약점을 악용할 위험이 있습니다.) chroot에서 실행되는 모든 신뢰할 수 없는 프로그램은 chroot 외부에서 어떤 프로세스도 실행하지 않는 사용자로 실행됩니다. chroot가 (여기에 언급된 제한을 통해) 방지하는 것은 권한 상승이 필요 없는 직접적인 시스템 침투입니다. 그러나 Gilles가 말했듯이또 다른 댓글, 이 보안 수준도 우회하여 프로그램이 chroot에서 벗어날 수 있습니다.
답변2
가상 머신을 사용하세요. 그보다 적은 것은 많은 보안을 제공하지 않습니다.
몇 년 전에 나는 chroot 전용 사용자 또는 이와 유사한 것을 사용하도록 제안했을 수도 있습니다. 그러나 하드웨어는 더욱 강력해졌고 가상 머신 소프트웨어는 사용하기 쉬워졌습니다. 또한 기성 공격도 더욱 정교해지고 있습니다. 더 이상 끝까지 가지 않을 변명의 여지가 없습니다.
VirtualBox를 실행하는 것이 좋습니다. 몇 분 안에 가상 머신을 설정한 다음 여기에 Linux 배포판을 설치할 수 있습니다. 내가 권장하는 기본이 아닌 유일한 설정은 네트워크 설정입니다. "NAT" 인터페이스(세계와 통신하기 위한)와 "호스트 전용" 인터페이스(호스트 간에 쉽게 파일을 복사할 수 있도록)를 만들고 다음을 입력합니다. SSH를 통한 가상 머신). 학생 프로그램을 실행할 때 NAT 인터페이스를 비활성화하십시오. 패키지를 설치하거나 업그레이드할 때만 활성화하십시오.
가상 머신 내에서 각 학생에 대한 사용자를 만듭니다.
1NAT 인터페이스를 화이트리스트 사용자로 제한할 수 있지만 이는 간단하고 간단한 설정에서 필요한 것보다 더 고급 기능입니다.
답변3
질문에 정식으로 답변한 후 다음을 추가하겠습니다.MAGIC: 회로/코어의 악의적인 노화, 안타깝게도 ACM의 페이월 뒤에 잠겨 있습니다. 이 논문에서는 오늘날 사용되는 회로의 매우 작은 폭의 흔적이 사용함에 따라 노화되고 결국 손상된다는 결론을 내렸습니다. 공격자는 올바른 지침을 찾고 이를 계속해서 반복함으로써 IC를 빠르게 장애로 만들 수 있습니다.
가상 머신, 샌드박스, 컨테이너 또는 chroot 감옥도 이러한 악의적인 하드웨어 파괴를 막을 수 없습니다. 논문의 저자는 이러한 일련의 명령을 발견하고 실험적으로 하드웨어를 실패할 정도로 오래 사용했지만 명령을 유출하지 않았으므로 아직은 실제 위협이 되지 않을 것입니다.
답변4
아주 자세한 설명이네요Chroot를 사용하는 것이 여전히 매우 실행 가능한 옵션인 이유와 전체 운영 체제 또는 전체 하드웨어 가상화가 특정 시나리오에서 특히 과도한 이유입니다.
그것은 단지신화Chroot는 보안 기능이 아닙니다. chroot 파일 시스템을 자동으로 구축할 수 있는 도구가 있으며 Chroot는 목적 보안 기능으로 많은 주요 애플리케이션에 내장되어 있습니다.
일반적인 믿음과는 달리 모든 상황에서 운영 체제의 전체 가상화나 하드웨어의 전체 에뮬레이션이 필요한 것은 아닙니다. 이는 실제로 다음이 있음을 의미합니다.더공격면을 덮으려고 합니다. 차례로 이것은 다음을 의미합니다.그다지 안전하지 않은 시스템. (아마도 지식이 부족한 시스템 관리자를 대상으로 함)
규칙은 매우 간단합니다. chroot에 불필요한 것을 넣지 마십시오. 데몬을 루트로 실행하지 마십시오. chroot 외부의 사용자로 데몬을 실행하지 마십시오.
안전하지 않은 응용 프로그램, setuid 바이너리, 소유되지 않은 기호 링크/하드 링크를 제거하십시오. 불필요한 폴더를 다시 마운트하려면 nosuid, noexec 및 nodev를 사용하십시오. 소스에서 실행 중인 데몬의 최신 안정 버전을 빌드합니다. 가장 중요한 것은,기본 시스템을 안전하게 유지하세요!