Kernel Security Story:STACKLEAK Security Feature

作者:zrz

原文地址:https://secvul.com/topics/1312.html


STACKLEAK是Linux Kernel的feature,最初的版本是由Grsecurity/PaX开发。Alexander Popov努力将其引入Linux kernel mainline。
它缓解3种类型的Linux kernel漏洞:

Feature 1: 减少信息泄露,这些可以是内核栈上的数据泄露到用户空间;
Feature 2: 阻止一些未初始化栈变量的攻击;
Feature 3: 栈溢出实时检测,防护类似Stack Clash;

STACKLEAK Feature 1

1.擦除syscall结束时的内核栈
2.减少内核栈信息泄露

在每次系统调用结束时用STACKLEAK_POISON(-0xBEEF)覆盖内核栈上已使用的的部分。

《Kernel Security Story:STACKLEAK Security Feature》

STACKLEAK Feature 2

Feature 2与Feature 1实现一致。在每次每次系统调用后将STACKLEAK_POISON写入到栈上,这样未初始化的变量就不会是之前写入的数据,而是已知的(STACKLEAK_POISON)。
以防护CVE-2010-2963 exploit[1]为例,如图:

《Kernel Security Story:STACKLEAK Security Feature》

STACKLEAK Feature 3

栈溢出实时检测,防护类似Stack Clash。它还依赖于其他的kernel feature,具体不做太多介绍,笔者将在下篇文章详细介绍,从Stack Clash 原理到该feature的原理及实现,若有充足的时间笔者将做个demo。

性能开销

《Kernel Security Story:STACKLEAK Security Feature》

End

STACKLEAK的实现同时依赖于gcc plugin,用于深度检查。由于一些实现上被linus所不喜,目前还未merge到mainline的版本,其中的故事见[4]。十分感谢Alexander Popov从Grsecurity/PaX中将此feature分离出合并到upstream kernel,让笔者有机会去研究学习(Grsecurity/PaX的代码实在过于晦涩难懂)。本文内容来自于 Alexander Popov在2018 Linux Security Summit的演讲[2]。

Reference

https://outflux.net/blog/archives/2010/10/19/cve-2010-2963-v4l-compat-exploit/
https://www.youtube.com/watch?v=5wIniiWSgUc
https://events.linuxfoundation.org/wp-content/uploads/2017/11/STACKLEAK-A-Long-Way-to-the-Linux-Kernel-Mainline-Alexander-Popov-Positive-Technologies.pdf
https://lore.kernel.org/lkml/20180813214328.GA15137@beast/#t

点赞

发表评论