【问题标题】:Buffer overflow - Windows vs Unix缓冲区溢出 - Windows 与 Unix
【发布时间】:2009-10-21 23:50:47
【问题描述】:

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

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

【问题讨论】:

  • Windows 和 Unix 都在不同的内存空间中运行进程。您指的是哪种缓冲区溢出攻击?

标签: windows unix buffer-overflow


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 啊,我没有意识到这一点。谢谢!
    【解决方案3】:

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

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

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

    【讨论】:

    • 公平地说,除非底层机器支持,否则操作系统根本无法进行进程隔离和 DEP。 IBM-PC 也无法做到,而 DEP 直到最近才成为可能。完整的 ASLR 会在性能方面造成损失,这就是许多操作系统懒惰地这样做的原因。 IIRC Mac 在 ASLR 中远远落后于 Snow Leopard。
    猜你喜欢
    • 2015-12-16
    • 1970-01-01
    • 2010-11-11
    • 1970-01-01
    • 1970-01-01
    • 2013-11-06
    • 2013-04-11
    • 2015-07-07
    • 2012-02-05
    相关资源
    最近更新 更多