一句话:提出 MineSweeper:将已释放内存隔离并线性扫描悬垂指针,在安全时回收,实现低开销即插即用 use-after-free 防护。
低级语言依赖手动内存管理,use-after-free(UAF)漏洞常被利用:对象被错误释放后,悬垂指针仍可访问,攻击者可重占并覆写其内存。MineSweeper 通过将已释放分配保留在隔离区,并高效线性扫描程序内存,识别不再存在指向隔离对象的悬垂指针的项,从而仅在安全时允许重新分配;这比先前的传递标记方法更高效。该系统接入 JeMalloc,在 SPEC CPU2006 上平均增加 11.1% 内存占用、5.4% 执行时间(几何平均)和 9.6% 额外多线程 CPU 使用,显著优于非概率式即插即用时序安全方案,适合实际生产部署。
Low-level languages, which require manual memory management from the programmer, remain in wide use for performance-critical applications. Memory-safety bugs are common, and now a major source of exploits. In particular, a use-after-free bug occurs when an object is erroneously deallocated, whilst pointers to it remain active in memory, and those (dangling) pointers are later used to access the object. An attacker can reallocate the memory area backing an erroneously freed object, then overwrite its contents, injecting carefully chosen data into the host program, thus altering its execution and achieving privilege escalation. We present MineSweeper, a system to mitigate use-after-free vulnerabilities by retaining freed allocations in a quarantine, until no pointers to them remain in program memory, thus preventing their reallocation until it is safe. MineSweeper performs efficient linear sweeps of memory to identify quarantined items that have no dangling pointers to them, and thus can be safely reallocated. This allows MineSweeper to be significantly more efficient than previous transitive marking procedure techniques. MineSweeper, attached to JeMalloc, improves security at an acceptable overhead in memory footprint (11.1% on average) and an execution-time cost of only 5.4% (geometric mean for SPEC CPU2006), with 9.6% additional threaded CPU usage. These figures considerably improve on the state-of-the-art for non-probabilistic drop-in temporal-safety systems, and make MineSweeper the only such scheme suitable for deployment in real-world production environments.