【问题标题】:Can mlock() be used maliciously by unprivileged processes to lock up system?非特权进程可以恶意使用 mlock() 来锁定系统吗?
【发布时间】:2021-04-21 15:39:47
【问题描述】:

我刚刚了解了mlock() 函数。我知道它允许您将程序内存锁定到 RAM 中(允许物理地址更改但不允许内存被驱逐)。我读过较新的 Linux 内核版本有一个 mlock 限制 (ulimit -l),但这仅适用于非特权进程。如果这是每个进程的限制,那么非特权进程是否可以通过fork()-ing 生成大量进程并每次调用mlock(),直到所有内存都被锁定并且操作系统由于大量交换而缓慢爬行或OOM killer 来电?

【问题讨论】:

    标签: linux ubuntu memory-management


    【解决方案1】:

    攻击者可能会在这方面造成问题,但不会比其他方式造成的问题更多。

    我系统上的默认限制约为 2 MB。这意味着一个典型的进程将无法将超过 2 MB 的数据锁定到内存中。请注意,这只是不会被换出的普通内存;它不是一个独立的特殊资源。

    恶意进程可能会产生许多其他进程来使用更多锁定的内存,但由于一个进程通常需要超过 2 MB 的内存才能运行,因此锁定它并没有真正更有效地耗尽内存;事实上,启动一个新进程本身在使用内存方面实际上比锁定它更有效。确实,一个进程可以简单地分叉、锁定内存和休眠,在这种情况下,它的其他页面可能会因为写时复制而被共享,但它也可能只是分配相当大的内存块并导致更多问题,实际上它通常会获得这样做的权限,因为许多进程需要大量的内存。

    所以,是的,攻击者可能会使用这种技术来引发问题,但是因为有许多更简单、更有效的方法可以耗尽内存或导致其他问题,所以这似乎是一种愚蠢的做法。一方面,我并不担心这是一个实际的安全问题。

    【讨论】:

      猜你喜欢
      • 2020-11-10
      • 2023-04-09
      • 1970-01-01
      • 2018-05-13
      • 2018-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-23
      相关资源
      最近更新 更多