2009-10-21 59 views
1

我想弄清楚Windows与Unix中缓冲区溢出之间的安全问题。缓冲区溢出 - Windows vs Unix

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

+0

Windows和Unix都在单独的内存空间中运行进程。你指的是哪种缓冲区溢出攻击? – 2009-10-21 23:55:00

回答

2

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

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

这可能在Win *平台,* nix平台以及其他许多平台上。操作系统和正在被利用的应用程序是如何处理这种尝试的,是什么改变了这一点。在应用程序方面,仔细检查缓冲区大小是通常需要避免的。像ASLR(地址空间布局随机化,防止攻击者猜测她需要打电话给害了一个函数的地址)和DEP(数据执行保护,防止攻击者注入的可执行代码到您的数据区)技术,提供由操作系统,帮助巨大。在操作系统方面,不以root /管理员身份运行应用程序也许是最重要的防线。

2

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

+0

啊,我没有意识到这一点。谢谢! – 2009-10-22 03:52:50

1

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

示例:从cin读取到一个固定大小的字节阵列可被用于运行的自定义代码。如果程序本身以root身份运行,那么Unix和Windows都不能做任何事情来防止黑客行为 - 内存隔离不会有任何帮助。正如托德指出的那样,Windows和Unix都能够进行内存隔离(这与DEPASLR相比是非常基本的东西)。

+0

公平地说,除非底层机器支持它,否则操作系统根本无法执行进程隔离和DEP。 IBM-PCs无法做到这一点,直到最近DEP才成为可能。完整的ASLR在性能方面付出了代价,这就是为什么许多操作系统懒洋洋地执行它的原因。直到Snow Leopard之前,IIRC Mac在ASLR上远远落后。 – jbcreix 2010-02-14 06:39:57