应用程序的沙箱虚拟机(概念)

2024-02-19

我想编写一个沙箱虚拟机来执行已编译的程序。我的目标是将该程序与操作系统的其余部分隔离并控制其执行,以便它不会对主机做出任何有害的事情。

我假设:

  • 执行的程序被编译为可移植可执行格式,并且是机器代码,而不是任何类型的字节代码或 CLR,
  • 执行的程序不允许与打印机、扫描仪等外围设备通信,并且不使用任何GUI,
  • 执行的程序的主要任务是处理本地文件中存储的一些数据(例如计算),并将其结果放入另一个本地文件中,
  • 执行的程序不应该能够直接与操作系统通信,每个请求都应该由虚拟机处理,任何可能对操作系统造成损害的请求都应该被阻止。

我对沙箱虚拟机的架构和运行的概念:

  • 应用程序由多个模拟对象组成:处理器、内存、文件的 I/O 操作、
  • 有一个模块读取编译文件并将可执行代码加载到虚拟内存中,
  • 然后虚拟处理器从第一个字节开始处理,读取操作码、参数,如果需要的话从内存加载它们,执行命令并将结果放在适当的位置,如果需要设置虚拟标志,然后读取下一个命令,直到程序执行完毕到最后。

您觉得怎么样:这是一个好概念吗?你会改变什么来改进它?


模拟完整的机器似乎是执行本机代码的一种非常慢的方法。仅针对单个本机指令进行大量加载、查找、执行、存储等操作。

我会尝试本地执行至少一些代码块。想想下面的代码。

int sum = 0;
for (int i = 0; i < 10; i++)
{
    sum += i;
}

该代码可以完全安全地在虚拟机中本地执行。只需确保向虚拟机代码注入返回调用即可。

但我会尝试更进一步,本地执行除库/操作系统调用之外的所有代码。在加载沙盒应用程序之前,扫描文件并将所有“危险”调用替换为对虚拟机中处理程序的调用。
代码

printf("Hello World\n");

将被替换为对您的图书馆的调用

myVM_printf("Hello World\n");

然后,您可以以本机速度执行整个程序,并且仍然能够处理虚拟机中的所有危险代码。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

应用程序的沙箱虚拟机(概念) 的相关文章

  • 用户如何登录定义了读者角色的 couchapp?

    我通过 Couchapp 部署了我的应用程序 这意味着整个应用程序是从数据库中提供服务的 我不希望 Couchdb 数据库中的数据公开可用 因此我指定了用户在向他提供数据之前必须具有的读者角色 然而 当我去申请时 我所能得到的是 error
  • 未捕获的安全错误:阻止了具有原点的框架...访问具有原点的框架

    我已经为 SAP 解决方案 无论什么 制作了一个组件 该组件通过 iframe 嵌入到报告中 在 SAP 平台 BO 上部署报告后 我收到此错误 在 Chrome 上 但在 IE 或 FF 上也不起作用 Uncaught SecurityE
  • 如何在 C# 中创建 PKCS12 .p12 文件?

    这可能是一个n00b问题 但我在这方面确实没有任何经验 我需要创建一个包含 X509 证书和私钥的 p12 捆绑包 我当前有两个对象 X509Certificate2 和包含关键信息的 RSAParameters 对象 如何将它们合并到 p
  • 检测注册表虚拟化

    我有一组 C v2 应用程序 并且在 Win7 以及较小程度上的 Vista 中的注册表虚拟化方面遇到了困难 我有一个共享注册表配置区域 我的应用程序需要在 HKLM Software Company 中访问该区域 在 Vista 之前 所
  • Cloud Firestore 安全规则使用的语言名称是什么?

    我想知道用于 Cloud Firestore 安全规则的语法名称 如下所述https firebase google com docs firestore security get started authuser 0 https fire
  • File.Exists("") 和 FileInfo 存在有什么区别

    我在 Program Files x86 MyApp 文件夹中有一个 exe 文件 在 x86 应用程序中 我检查文件是否存在 64 位系统 简单的 bool fileExists File Exists ProgramFiles x86
  • ActiveMQ发送ObjectMessage

    我正在使用 ActiveMQ 在我当前的项目中实现消息系统 我需要发送和接收 Java 对象 而不是简单的文本或二进制消息 Java 对象 我的消息对象 根据需要实现了 Serialized 接口 ActiveMQ 的最新版本添加了一些安全
  • Symfony 5.4 Security Bundle,注册后无法登录

    我在 5 4 版本上构建空的新项目 我使用这些命令来构建项目 composer create project symfony skeleton 5 4 testapp54 cd testapp54 composer require weba
  • 为什么将 MySQL 凭据放在 www 目录之外? [复制]

    这个问题在这里已经有答案了 可能的重复 将核心类放在 Web 根目录之上 好还是坏主意 https stackoverflow com questions 3648739 putting core classes above the web
  • 将 CCtray 与 Jenkins 结合使用,同时启用安全性(使用 HTTPS)

    我将 Jenkins 服务器配置为仅使用 HTTPS 并启用安全性 我也不喜欢任何未登录的人查看仪表板 即使它是空的 在这里 我禁用了 匿名 的 读取 访问权限 到目前为止 所有这些都完全符合我的喜好 但想要通过例如向远程客户端添加一些构建
  • 清理 html 字符串中的所有脚本

    HTML5 剪贴板很棒 但我正在寻找一种使其安全的方法 用户正在将文本 html 粘贴到我的网页中 这允许他们粘贴图像 表格等 我正在寻找一种方法 在将粘贴的内容添加到页面之前删除所有脚本 我需要删除
  • 是否可以使用流上下文在 PHP 下使用 FTPS?

    我了解到使用ftpsPHP for Windows 下的 ftp ssl connect 很困难 您被要求进入构建自己的二进制文件以包括 Open SSL 的漫长旅程 我找到了以下建议phpseclib http phpseclib sou
  • 是否可以在VM内使用VMX CPU指令?

    VM guest 内部的进程是否有可能使用 VMX AMD V VT x CPU 指令 然后由外部 VMM 处理而不是直接在 CPU 上处理 Edit 假设外部VM使用VMX本身来管理其虚拟客户机 即它在Ring 1中运行 如果可能的话 是
  • 如何通过 PDO 使用密码哈希来使我的代码更安全? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我的代码实际上可以工作 但它一点也不安全 我不想使用 MD5 因为它不是那么安全 我一直在查找密码哈希 但我不确定如何将其合并到我的代
  • 在 JavaScript 中生成 RSA 密钥对

    我最近发现了这个 RSA JavaScript 库 http www ohdave com rsa http www ohdave com rsa 但是 它要求预先生成密钥 这是我的问题 问题 我想在 JavaScript 中生成 RSA
  • 访问被拒绝(“java.io.FilePermission”“执行”)

    我是初学者 这是我写的第一个小程序 我想用小程序运行 exe 应用程序 java代码 package appletexample import java io import java awt import java applet Apple
  • 为沙盒 Cocoa 应用程序创建临时文件

    我的应用程序是沙箱化的 根据最新的应用程序商店指南 我想创建一些临时文件 我可以这样做吗 如果 是 我可以在哪里这样做 有没有预先指定的路径 还有访问该路径的命令 您应该使用NSTemporaryDirectory 函数 它将查找并返回适合
  • 这个巨大的正则表达式是如何工作的?

    我最近在我的一个目录中的一个名为的文件中找到了下面的代码doc php 文件功能或链接到文件管理器 做得非常好 基本上 它列出了当前目录中的所有文件 并且允许您更改目录 它可以访问我的所有文件 添加 重命名 信息 删除 我不记得安装过它 我
  • 任何第三方都可以从我的项目加载嵌入式资源吗?

    请参考我的一篇之前的问题 https stackoverflow com questions 14681364 issues passing data from dll to application 我问的是如何从 DLL 加载已编译的资源
  • 让用户渲染自己的 SVG 文件的安全隐患

    我计划让网站用户上传他们自己的 SVG 文档并使用inkscape or svg2pdf 用户要么未经身份验证 要么经历一个简单的注册过程 所以我预计会有一些黑客尝试 我可以采取哪些过滤措施来最大程度地减少安全威胁 Inkscape 似乎并

随机推荐

  • 我可以在我的 Azure 管道中使用 2 个代理池吗?

    我有一个自托管代理 它用作一种部署代理 我们软件的所有发行版本均由该代理构建 然后复制到网络位置 问题 有没有办法可以在管道中同时利用 azure pipelines Microsoft 托管池和我自己的自托管池中的代理 EDIT 不幸的是
  • 从脚本并行 nmap 数千个子网的最佳方法是什么?

    为了清点 A 类网络部分中的端口 我使用 nmap 将其扫描为数千个 C 类网络 我使用并行方式同时运行 32 个子网扫描作业 脚本的最小化版本 while read subnet do echo nmap Pn p tcpport sub
  • Azure 媒体服务将作业回调编码为 URL

    仅使用 REST API 我就可以将文件从本地计算机上传到 Azure 媒体服务并启动编码作业 然后我需要轮询作业的状态以查看它何时完成 但是 我真正想要的是 Azure 媒体服务在完成后向我的回调 URL 发送请求 有办法做到这一点吗 查
  • 在 laravel 4 中测试过滤器

    我是 Laravel 的新手 我正在尝试测试身份验证是否适用于我的网站 并且我想在测试用例中测试身份验证过程 我创建一个内存中的 sqlite 数据库 创建一个新用户并使用 gt save eloquent 的方法将其存储在数据库中 我设置
  • ALSA 记录 - 了解内存映射

    我尝试使用 ALSA 从 USB 音频设备获取输入并将其作为一系列内容写入磁盘signed short价值观 我最终得到的是看似有效的数据块 其中散布着大块的零 我猜测我的缓冲区设置不正确并且没有正确使用内存映射 我正在尝试什么 采样率 8
  • Autofac 注册程序集类型

    在 Castle 中 我曾经执行以下操作来注册来自不同程序集的类型 Classes FromAssemblyNamed MyServer DAL Where type gt type Name EndsWith Repository Wit
  • 重叠绝对定位的内容

    我遇到了一些困难这一页 http louiswalch com beta t urs 它几乎可以正常工作 红色框应位于窗口的中心 h v 作品 黄色框应贴在窗口底部 作品 当窗口小于 400 像素高时 应出现滚动条 并且黄色框应出现在滚动区
  • 按第二列中的时间戳合并多个日志文件

    我有同一天的多个日志文件 我想要做的是根据日志中的时间戳将它们合并为一个Perl script 日志 1 log 2014 06 02 21 54 38 805 INFO com HomeManeger Executor Thread 19
  • 我们怎么知道这是数组中的最后一个元素?

    我有以下代码 int array 5 1 0 1 0 0 int i for i 0 i lt 5 i if array i 1 printf found one n 我们怎么知道第二个1 in the array是最后一个1我们发现 我的
  • 查找每个点坐标属于哪个国家/地区[重复]

    这个问题在这里已经有答案了 我有一个带有纬度 经度坐标的数据框 head COORD LAT LON 1 69 34 16 17 2 69 20 17 92 3 69 59 17 87 4 69 17 18 52 5 69 42 18 95
  • 多选 PHP

  • 用 Spirit Qi 解析成 std​​::vector,出现段错误或断言失败

    我使用 Spirit Qi 作为解析器 将数学表达式解析为表达式树 我跟踪诸如解析时遇到的符号类型之类的事情 并且必须在我正在解析的文本中声明这些符号 也就是说 我正在解析贝尔蒂尼输入文件 http bertini nd edu Berti
  • 有 libclang 的教程吗? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我一直在寻找一些易于理解的 libclang 指南 我在这里或其他论坛上看到了一些帖子 但唯一推荐的信
  • 如何使用 ef core 1 在 UWP 中运行迁移

    我不知道如何使用 EntityFramework Commands 也是 v7 0 0 rc1 final 在 EntityFramework Core v7 0 0 rc1 final 中运行迁移 当我添加迁移 Add Migration
  • Actionscript 3 内省——函数名称

    我试图迭代对象的每个成员 对于每个成员 我检查它是否是一个函数 如果它是一个函数 我想获取它的名称并根据函数的名称执行一些逻辑 我不知道这是否可能 是吗 有小费吗 example var mems Object getMemberNames
  • 如何在 C# 和 DataAnnotation 中创建通用 UniqueValidationAttribute?

    我正在尝试创建一个UniqueAttribute使用System ComponentModel DataAnnotations ValidationAttribute 我希望这是通用的 因为我可以传递 Linq DataContext 表名
  • 在浏览器窗口中更改 PDF 标题

    我有一个 pdf 文件 正在为客户放在网站上 它位于这里 http www optiphysicaltherapy com dev wp content uploads 2014 02 OPTI NewPatientForms pdf ht
  • 如何更改消息框标题? [复制]

    这个问题在这里已经有答案了 如何在asp net中更改此消息框的标题 该标题出现在 IE 中 帮忙 你不能 没有 API 可以执行此操作 默认标题是反网络钓鱼安全功能 如果您希望对警报消息的外观有足够的控制 那么您必须在 DOM 中构建自己
  • CGContextDrawImage 崩溃

    代码如下 void drawLayer CALayer layer inContext CGContextRef ctx CGContextRef context ctx CGContextRetain context CGContextS
  • 应用程序的沙箱虚拟机(概念)

    我想编写一个沙箱虚拟机来执行已编译的程序 我的目标是将该程序与操作系统的其余部分隔离并控制其执行 以便它不会对主机做出任何有害的事情 我假设 执行的程序被编译为可移植可执行格式 并且是机器代码 而不是任何类型的字节代码或 CLR 执行的程序