我想编写一个沙盒虚拟机来执行已编译的程序。我的目标是将该程序与其余操作系统隔离开来,并控制其执行,以便它不会对主机造成任何损害。
我认为:
我对沙箱虚拟机的架构和操作的概念:
您如何看待:这是一个好主意吗?你会改变什么改进它?
答案 0 :(得分:1)
模拟完整的计算机似乎是执行本机代码的一种非常慢的方式。对于单个本机指令,有大量的加载,查找,执行,存储等操作。
我会尝试本地执行至少一些代码块。想想以下代码。
int sum = 0;
for (int i = 0; i < 10; i++)
{
sum += i;
}
此代码在您的虚拟机中执行本机是完全安全的。只需确保为虚拟机代码注入一个返回调用。
但我会尝试更进一步,除了库/ os调用之外,本地执行所有代码。在加载沙盒应用程序之前,扫描文件并通过调用虚拟机中的处理程序替换所有“危险”调用。
代码
printf("Hello World\n");
将替换为对您的库的调用
myVM_printf("Hello World\n");
然后,您可以以原生速度执行整个程序,并且仍然能够处理虚拟机中的所有危险代码。
答案 1 :(得分:1)
只需调整流程权限,即可实现A LOT。至少在WinNT下,它具有相当细粒度的过程权限。我也相信Chrome中使用的google沙盒已经开源了。
答案 2 :(得分:0)
听起来这可以通过现有的沙箱来实现,例如SELinux或微软的App-V。
同样访问外围设备可能会有问题。如果外围设备是房间里的摄像头或麦克风怎么办?如果黑客想通过在彩虹文本中打印出一个永无止境的故事来浪费你的钱,该怎么办?