Linux에서 유해 할 수있는 프로그램 실행


33

학생들이 작성한 프로그램을 테스트하는 프로그램을 작성 중입니다. 나는 그들을 믿을 수 없어서 그것을 실행하는 컴퓨터에 나쁜 결과를 초래하지 않도록해야합니다.

시스템 리소스에 대한 제한된 액세스 권한으로 일부 충돌 테스트 사용자를 만들고 해당 사용자로 프로그램을 실행하려고 생각했지만 지금까지 인터넷에서 찾은 것에서 가상 시스템을 만드는 것이 가장 안전한 옵션입니다 ...

누군가가 올바른 접근법을 선택하도록 도와 줄 수 있습니까? 보안은 저에게 큰 관심사입니다. 반면에, 나는 실제로 필요하지 않은 것을 배우려고 노력하는 데 많은 시간과 노력을 낭비하는 솔루션을 원하지 않습니다.


7
브라우저에서 Linux의 프로그램을 실행하십시오 ( bellard.org/jslinux ). 아주 좋은 샌드 박스입니다. :)
Fixee

와, 정말 재미 있어요! 그러나 그것을 사용하려면 일종의 인터페이스를 작성해야합니다 (전체 프로세스가 자동으로 진행되므로) ... 체크 아웃해야합니다. 이 Javascript Linux가 가제트 이상인 것으로 판명되면 사용할 수도 있습니다.
Korda

나는 내 의견을 농담으로 의도했지만 실제로 그것을 사용할 수 있다면 놀랍습니다. 솔직히, LiveCD 답변 (RAM 디스크 포함)은 훌륭한 솔루션입니다.
Fixee

글쎄, 내가 그것을 사용할 수 있다면 나는 또한 결과에 액세스 할 수있는 웹 페이지에서 그것을 사용할 것입니다-그것은 정말 좋고 편안합니다. 또한 괴짜 요인 수;) 라이브 디스크도 옵션이 아닙니다. 프로그램을 일부 서버에서 실행하도록하므로 재부팅은 감당할 수있는 것이 아닙니다 ... 어쨌든 가상 머신을 고수 할 것입니다. ..
korda

답변:


28
  • 가상 시스템 은 재부팅하지 않고도 최고의 보안을 제공하지만 성능은 가장 낮습니다.

  • 가상 머신보다 훨씬 높은 보안을위한 또 다른 옵션 : 하드 드라이브에 액세스하지 않고 "실시간"CD / DVD / 펜 드라이브를 부팅하십시오 (BIOS에서 HDD를 일시적으로 비활성화하십시오. 그렇지 않으면 최소한 드라이브를 마운트하지 마십시오 / 자동으로 마운트 된 경우 마운트를 해제하십시오. 그러나 보안 수준이 훨씬 낮습니다.)

  • 고정 표시기의 컨테이너는 전체 가상 머신에 조금 덜 안전한 대안입니다. 아마도이 두 가지의 중요한 차이점 (보안 측면에서)은 docker에서 실행되는 시스템이 실제로 호스트 시스템의 커널을 사용한다는 것입니다.

  • 격리 와 같은 특수한 보안 환경을 만드는 프로그램 이 있습니다. 일반적으로 샌드 박스 라고합니다. 일반적으로 chroot 기반이며 추가 감독이 필요합니다. 자신에게 맞는 것을 찾으십시오.

  • 간단한 chroot 는 보안 속도가 가장 낮지 만 ( 프로그램 실행과 관련하여) 조금 더 빠를 수 있지만 ... 완전히 별도의 루트 트리를 빌드 / 복사하고 바인드 마운트 /dev등을 사용해야합니다 (참고 사항 참조). 아래 1 )! 따라서 일반적으로 더 안전하고 설정하기 쉬운 sandbox환경 을 사용할 수있는 경우에는이 방법을 권장하지 않습니다 .

0 참고 : "특별한 사용자"의 측면까지, 같은nobody계정 :이 제공하지 않습니다 거의 모든 훨씬 덜 심지어 간단한보다 보안을chroot. nobody사용자는 여전히 액세스 파일과 프로그램 한 수 읽기 실행 권한 설정 다른 . 로 테스트 할 수 있습니다su -s /bin/sh -c 'some command' nobody. 그리고 누군가가 실수로 또는 사소한 보안 허점으로 액세스 할 수있는 구성 / 이력 / 캐시 파일이있는 경우,nobody'권한'으로실행되는 프로그램이 액세스하여 기밀 데이터 (예 : "pass ="등) 및 많은 방법으로 인터넷을 통해 또는 다른 방법으로 전송합니다.

참고 1 : Gilles가 아래의 의견 에서 지적했듯이간단한 chroot 환경은 권한 상승을 목표로하는 악용에 대해 거의 보안을 제공하지 않습니다. 유일한 chroot는보안이 확인 된 프로그램으로 구성된 환경이 최소 인 경우에만 보안 측면에서 의미가 있습니다 (그러나 잠재적 인 커널 수준 취약점을 악용 할 위험이 여전히 남아 있음). 그리고 chroot에서 실행중인 모든 신뢰할 수없는 프로그램이 실행되고 있습니다 chroot 외부에서 프로세스를 실행하지 않는 사용자로. chroot가 방지하는 것 (여기에서 언급 한 제한 사항 포함)은 권한 상승없이 직접 시스템을 침투하는 것입니다. 그러나 Gilles가 다른 의견 에서 언급 한 것처럼심지어 보안 수준이 우회되어 프로그램이 chroot에서 벗어날 수 있습니다.


답변 해주셔서 감사합니다. 나는 그런 것들에 관해서는 정말로 새로운 것입니다. 시스템에서 파일을 읽지 못하게하는 이유는 무엇입니까? (예 : chroot)? (프로그램이 수정할 수없는 경우).
korda

충돌 테스트 사용자 계정은 확실히 당신에게 몇 가지 기본적인 보안을 제공합니다. 여전히 당신이 예방하고 싶거나 필요로하는 것들이 많이 있습니다. 사람들은의 형태 일 수있다 악용 아마 훨씬 더 많은 프로그램이나 일부 사회 해킹, 미래 원격 공격의 목적을 위해 정보 수집에 포함 된 일반적인 취약점의 ... 그리고.
rozcietrzewiacz

왜 그런가 : 사용자가 인터넷 연결을 사용하지 못하게하는 방법이 있습니까?
korda

1
nobody인터넷에 연결되어 있는지 궁금합니다 .
korda

1
@rozcietrzewiacz chroot가 보호를 제공하기위한 중요한 요구 사항은 chroot 외부에서 프로그램을 실행하는 사용자로 chroot 된 프로그램을 실행하지 않는 것입니다. 그렇지 않으면 chroot 된 프로세스는 chroot되지 않은 프로세스를 ptrace하고 그와 같은 방법으로 아무것도 할 수 있습니다.
Gilles 'SO- 악 그만해라

10

가상 머신을 사용하십시오. 덜 안전한 것은 많은 보안을 제공하지 않습니다.

몇 년 전에 나는 chroot 된 전용 사용자 또는 그와 같은 것을 제안했을 것입니다. 그러나 하드웨어는 더욱 강력 해졌으며 가상 머신 소프트웨어는 사용하기 쉬워졌습니다. 또한 기성 공격이 더욱 정교 해졌습니다. 더 이상 여기까지 가지 않는 이유는 없습니다.

VirtualBox를 실행하는 것이 좋습니다. 몇 분 안에 가상 머신을 설정 한 다음 그 안에 Linux 배포판을 설치할 수 있습니다. 기본 설정이 아닌 유일한 설정은 네트워킹 설정입니다. "NAT"인터페이스 (세계와 통신하기 위해)와 "호스트 전용"인터페이스 (모두 호스트와 파일을 쉽게 복사하고 ssh VM). 학생들의 프로그램을 실행하는 동안 NAT 인터페이스를 비활성화하십시오 ¹; 소프트웨어 패키지를 설치하거나 업그레이드 할 때만 활성화하십시오.

가상 머신 내에서 학생당 하나의 사용자를 작성하십시오.

¹ NAT 인터페이스를 사용자의 허용 목록으로 제한 할 수 있지만, 간단한 지점 간 설정에서 필요한 것보다 더 발전했습니다.


2

다음은 Chroot를 사용하는 것이 여전히 유용한 옵션 인 이유와 특정 시나리오에서 전체 운영 체제 또는 전체 하드웨어 가상화가 특히 과잉 인 이유에 대한 철저한 설명 입니다.

Chroot가 보안 기능이 아니라는 것은 신화에 지나지 않습니다. chroot 파일 시스템을 자동으로 구축 할 수있는 도구가 있으며 Chroot는 많은 보안 응용 프로그램으로 많은 주류 응용 프로그램에 내장되어 있습니다.

일반적인 믿음과는 달리 모든 상황에서 운영 체제의 전체 가상화 또는 하드웨어의 전체 시뮬레이션이 필요한 것은 아닙니다. 이것은 실제로 시도하고 덮을 공격 표면 이 많다는 것을 의미 할 수 있습니다 . 그 결과 덜 안전한 시스템을 의미 합니다 . (잘 모르는 시스템 관리자를 위해)

규칙은 매우 간단합니다. chroot 안에 필요없는 것을 넣지 마십시오. 데몬을 루트로 실행하지 마십시오. chroot 외부에서 데몬을 실행하는 사용자로 데몬을 실행하지 마십시오.

안전하지 않은 응용 프로그램, setuid 이진 파일, 소유자없는 심볼릭 링크 / 하드 링크를 제거합니다. nosuid, noexec 및 nodev를 사용하여 불필요한 폴더를 다시 마운트하십시오. 소스에서 실행중인 데몬의 최신 안정 버전을 빌드하십시오. 그리고 무엇보다도 기본 시스템을 보호하십시오!


2

나는 질문이 공식적으로 대답 된 후에 이것을 추가 할 것입니다 : MAGIC : 회로 / 코어의 악의적 노화 , 불행히도 ACM의 페이 월 뒤에 숨어 있습니다. 논문의 결론은 오늘날 사용중인 회로에서 매우 작은 폭의 흔적이 사용 중에 노화되고 결국 분해된다는 것입니다. 공격자는 올바른 지침을 찾아 반복해서 반복함으로써 IC가 노화 될 정도로 빠르게 노화 될 수 있습니다.

VM, 샌드 박스, 컨테이너 또는 chroot jail 중 어느 것도 이러한 종류의 악의적 인 하드웨어 파괴를 방지하지 못합니다. 이 논문의 저자들은 그러한 명령어 시퀀스와 실험적으로 노화 된 하드웨어를 발견했지만 지침을주지 않았기 때문에 한동안은 실제 위협이 아닐 수 있습니다.


1

BSD 파생 유닉스 (Mac OS X 포함)에는이라는 기능이 sandbox있습니다. 맨 페이지 말한다

설명 샌드 박스 기능은 응용 프로그램을 자발적으로 운영 시스템 자원에 대한 액세스를 제한 할 수 있습니다. 이 안전 메커니즘은 취약점이 악용 될 경우 잠재적 손상을 제한하기위한 것입니다. 다른 운영 체제 액세스 제어를 대체하지 않습니다.

chroot시설과 는 별도로 제공됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.