模拟完整的机器似乎是执行本机代码的一种非常慢的方式。对于单个本机指令,有大量的加载,查找,执行,存储等操作。
我会尝试本地执行至少一些代码块。想想以下代码。
int sum = 0; for (int i = 0; i < 10; i++) { sum += i; }
此代码在您的虚拟机中执行本机是完全安全的。只需确保为虚拟机代码注入一个返回调用。
但我会尝试更进一步,除了库/ os调用之外,本地执行所有代码。在加载沙盒应用程序之前,扫描文件并通过调用虚拟机中的处理程序替换所有“危险”调用。 代码
printf("Hello World\n");
将替换为对您的图书馆的调用
myVM_printf("Hello World\n");
然后,您可以以原生速度执行整个程序,并且仍然能够处理虚拟机中的所有危险代码。
这听起来像这可以用现有的沙箱如SELinux或 App-V的 由微软。
此外,访问外围设备可能会有问题。如果外围设备是房间里的摄像头或麦克风怎么办?如果黑客想通过在彩虹文本中打印出一个永无止境的故事来浪费你的钱,该怎么办?
只需调整流程权限,即可实现A LOT。至少在WinNT下,它具有相当细粒度的过程权限。我还认为,Chrome中使用的google沙盒已经开源了。