【问题标题】:Private memory address vs OpenProcess私有内存地址与 OpenProcess
【发布时间】:2021-02-14 19:24:47
【问题描述】:

我了解 Windows 中的每个进程都有自己的私有内存地址,该地址是受保护的区域,可防止写入其他内存。 Windows 保证 ASLR 和私有内存将保持安全。

但根据 Windows 内部原理第 1 章

the debugger simply opens the process with OpenProcess, this allows you change memory in the target process.

那么私有内存的意义何在?有没有沙盒?还是 windows 只是否认他们自己的文档?

【问题讨论】:

  • 您不能只打开任意进程并更改它们。您需要 权限 才能做到这一点。 Windows 有一个安全系统来帮助防止未经授权的进程更改。例如,您通常需要管理员权限才能写入其他进程。但是,如果您有足够的权限首先附加调试器,调试器通常有权更改它正在调试的进程。
  • @RemyLebeau 它只是PROCESS_ALL_ACCESS 标志和一个可以轻松绕过的管理员帐户
  • 非管理员通常不能使用PROCESS_ALL_ACCESS,操作将失败并出现“拒绝访问”错误。
  • 本地管理员帐户可以获得允许它读取进程内存的权限。保护是普通用户不能以管理员身份登录。
  • airtight hatchways ,虽然“情况”不同,但原则适用。

标签: windows winapi memory


【解决方案1】:

关键是每个进程都有自己的地址空间,可以防止其他进程的意外干扰。它并不旨在成为防止检查或修改的绝对证据。这只是实用性与安全性的权衡之一。

另请注意,用户通常无权打开属于其他 Windows 会话的进程。 (他们只有在拥有调试权限的情况下才能这样做。权限是另一个有用性与安全性的权衡,它们允许通常禁止的操作而不参考安全描述符)。

【讨论】:

  • 进程地址空间隔离不是那些“有用性与安全性权衡”之一。根本不涉及权衡。地址空间隔离是一种虚拟化方法,可防止独立进程相互干扰。这不是安全功能。安全性是通过保护代表进程的内核对象来实现的。
  • 不,我正在考虑的权衡是 OpenProcess 允许违反这种隔离。它不是严格要求的(为了拥有一个工作系统),但它使许多事情变得更容易。
  • OpenProcess 根据内核对象上的 DACL 进行安全检查,而不是根据您要对进程句柄执行的操作。没有取舍。如果您称其为权衡取舍,那么您并没有做到 Windows 的权限管理系统公正。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-02
  • 2012-04-10
  • 1970-01-01
  • 2021-10-19
  • 1970-01-01
  • 2017-06-14
相关资源
最近更新 更多