缓冲区溢出 - Windows vs Unix

时间:2009-10-21 23:50:47

标签: windows unix buffer-overflow

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

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

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

共享内存空间不是大多数缓冲区溢出漏洞的原因。自Win 3.0(或在80286上运行的Win 3.1)以来,Windows没有共享内存,所以自从Windows上次发布以来支持共享内存模型已经很长时间了,差不多20年。

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

这可以在Win *平台,* nix平台以及许多其他平台上实现。操作系统和正在被利用的应用程序如何处理这种尝试,是有所作为的。在应用程序方面,仔细检查缓冲区大小是通常需要避免的。诸如ASLR(地址空间布局随机化,防止攻击者猜测她需要调用的函数的地址做损害)和DEP(数据执行防护,防止攻击者将可执行代码注入您的数据区域)等技术提供通过操作系统,帮助巨大。在操作系统方面,不以root / administrator身份运行应用程序可能是最重要的防线。

答案 2 :(得分:1)

也许你应该澄清你对“缓冲区溢出Windows黑客”的意思。缓冲区溢出不一定需要修改其他进程的代码。

示例:从cin读取固定大小的字节数组可用于运行自定义代码。如果程序本身以root身份运行,那么Unix和Windows都无法做任何事情来防止黑客攻击 - 内存隔离根本无济于事。

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