나는 최근에 일부 코드를 해당 환경에 "업로드"하고 운영 체제에 대한 모든 종류의 출력(코드 실행에서)을 방지할 수 있는 보호/보안 실행 환경을 구현하는 가장 좋은 방법을 연구하고 있습니다. code 시스템에 해를 끼치는 버그가 있으면 "깨진" 것은 없습니다. 지금까지 내가 찾은 가장 일반적인 솔루션은 다음과 같습니다.
- 모래 상자
- 가상 기기
- 파일 버전 제어 시스템(예: 파티션)
그러나 위의 모든 방법에는 각각 다음과 같은 단점이 있습니다.
- 제한된 기능
- 복사 또는 제출은 지원되지 않습니다.
- 서로 다른 프로세스에서 변경된 사항을 확인하는 메커니즘이 없습니다.
그래서 일부 기사를 읽은 후 이를 달성하는 가장 좋은 방법은 VFS(가상 파일 시스템)와 FUSE를 사용하는 것임을 알았습니다. 내 말이 맞나요, 아니면 더 나은 해결책이 있나요?
VFS 및 FUSE 관련: 최상의(지원되는) Python 구현은 무엇입니까? 퓨즈?
답변1
"보호된 실행 환경"을 만드는 가장 쉬운 방법은 권한 없는 사용자로 실행하는 것입니다. 그런 다음 프로세스는 사용자에게 변경 권한이 있는 항목만 변경할 수 있으며, 보안 테스트를 위해 특별히 사용자를 생성하는 경우에는 기본적으로 아무것도 아닙니다. 사용자를 추가하고 제거하는 것은 명령입니다.
이 방법이 불가능한 유일한 이유는 프로세스에 슈퍼유저 권한이 필요하기 때문입니다. 이 경우 특별한 샌드박스나 가상 머신을 사용해야 합니다. 일반적으로 "샌드박스"가 반드시 슈퍼유저 권한이 가능하다는 것을 의미하지는 않지만 그럴 수도 있습니다(qv man chroot
).
일부 기사를 읽은 후 이를 달성하는 가장 좋은 방법은 VFS(가상 파일 시스템)와 FUSE를 사용하는 것임을 알았습니다.
왜 그렇게 생각하는지 모르겠습니다. 가상 파일 시스템은 여전히 파일 시스템일 뿐이므로 그 안에 있는 실행 파일에 어떤 유형의 보안도 제공하지 않습니다. 이는 USB 스틱(파일 시스템 포함)을 마운트한 다음 여기에 저장된 실행 파일을 실행하는 것만큼 "안전"합니다. 실행 파일(또는 Python의 경우 스크립트/바이트 코드)이 이동식 장치(또는 VFS)에 저장되어 있기 때문입니다.그것은 어떤 해로움으로부터도 당신을 보호하지 못할 것입니다.
또한 똑같은 이유로 "파일 버전 관리 시스템(예: 파티션)"이 호스트 시스템에 어떤 종류의 보안을 제공할 수 있는지 알 수 없습니다. 그건 그렇고, 그것은 그들의 목적이 아닙니다.
WRT는 귀하가 나열한 단점을 극복할 수 있는 방법을 찾고 있습니다.
"복사 또는 제출은 지원되지 않습니다.""지원되지 않음"이 불가능하다는 의미라면 당연히 가능합니다. 일반적으로 사용하는 방법을 사용할 수 있습니다. "지원되지 않음"이 가상 머신에 마음을 읽는 소프트웨어가 포함되어 있지 않다는 의미라면 맞습니다. 마음을 읽으려면 추가 하드웨어가 필요합니다. ;)
"다른 프로세스에서 변경된 사항을 확인하는 메커니즘이 없습니다."마지막 요점도 마찬가지다. 프로세스가 수행하는 작업을 관찰해야 하는 경우
strace
프로파일링 등 일반적인 방법으로 수행할 수 있습니다. 이를 수행하는 특수 샌드박스가 있을 수 있지만 특정 라인에 따라 특수화될 것이라고 생각합니다.
이와 관련하여 저는 Python 사용자는 아니지만 빠른 Google 검색 결과샌드박스 Python. 이를 추적할 수 있는 도구가 있는지는 모르겠지만 테스트하려는 코드가 Python에 있는 경우 시작하기 좋은 곳인 것 같습니다.