1

我试图找出 Windows 与 Unix 中缓冲区溢出之间的安全问题。

据我了解,缓冲区溢出 Windows hack 无法在 Unix 中实现,因为每个进程都有自己的内存空间。这是否意味着 Windows 中的进程共享内存空间?

4

3 回答 3

2

Windows 和 Unix 进程都有内存隔离。两种环境都可能发生缓冲区溢出攻击。

于 2009-10-21T23:57:06.800 回答
2

共享内存空间并不是大多数缓冲区溢出攻击的原因。自 Win 3.0(或运行在 80286 上的 Win 3.1)以来,Windows 就没有共享内存,因此距离上次发布支持共享内存模型的 Windows 已经过去了很长时间,将近 20 年。

缓冲区溢出允许攻击者更改正在被利用的进程中的内存。通过这样做,攻击者旨在使用目标进程的特权级别执行系统操作(例如启动进程,或加载动态库,或更改某个用户的权限等)。

这在 Win* 平台、*nix 平台和许多其他平台上都是可能的。操作系统和被利用的应用程序是如何处理这种尝试的,这就是区别所在。在应用程序方面,通常需要仔细检查缓冲区大小来避免这种情况。ASLR(地址空间布局随机化,防止攻击者猜测她需要调用的函数的地址来造成伤害)和 DEP(数据执行预防,防止攻击者将可执行代码注入您的数据区域)等技术,提供由操作系统,帮助极大。在操作系统方面,不以 root/管理员身份运行应用程序可能是最重要的防线。

于 2009-10-22T00:06:04.443 回答
1

也许您应该澄清“缓冲区溢出 Windows hack”的含义。缓冲区溢出不一定需要修改其他进程的代码。

示例:读取cin到固定大小的字节数组可用于运行自定义代码。如果程序本身以 root 身份运行,则 Unix 和 Windows 都无法阻止黑客攻击——内存隔离根本无济于事。

正如 Todd 所指出的,Windows 和 Unix 都能够进行内存隔离(与DEPASLR相比,这是非常基本的东西)。

于 2009-10-22T00:06:54.957 回答