Ubuntu与Debian软件包加固技术的演进与展望

本文回顾了Ubuntu和Debian系统中软件包加固技术的发展历程,从2006年的栈保护器到2016年的PIE默认启用,探讨了编译器安全特性的采用趋势,并展望了未来可能的新特性如栈冲突保护和控制流完整性。

软件包加固渐近线

很久以前,我建立了工具来生成图表,展示Ubuntu软件包中各种加固特性的采用情况。在2006年栈保护器(stack protector)逐渐进入软件包存档时,这些图表非常有趣。类似地,在2008年和2009年,FORTIFY_SOURCE和只读重定位也在存档中逐步推广。虽然花费了一些时间才真正站稳脚跟,但最终从2016年到2018年,默认启用PIE(位置无关可执行文件)开始兴起:

大约在2012年,当Debian开始认真为其存档启用加固特性时,我意识到这将是一条漫长的道路。我为Ubuntu添加了上述“20年视图”,然后开始类似地绘制Debian软件包中的加固特性图表(这里的PIE波动是工具故障,如果我没记错的话):

今天,我意识到我的Ubuntu工具在一月份就坏了,但没有人注意到,包括我自己。实际上,为什么有人应该注意到呢?“近期”(每周、每月)的图表多年来基本上一直是平的:

从长期视图来看,测量结果具有明显的渐近线特征,这些图表现在可能只对它们的历史曲线有价值。但然后我想,接下来是什么?可以测量哪些新的编译器特性采用情况?我认为仍然有一些不错的候选…

如何启用-fstack-clash-protection(仅在GCC中,Clang尚未实现它)?

或者认真对待并使用前向边缘控制流完整性(Control Flow Integrity)?(Clang有-fsanitize=cfi用于基于通用函数原型执行,而GCC有更有限的-fvtable-verify用于C++对象。)

后向边缘CFI在哪里?(每个人都在等待CET吗?)

有人看到需要采用跟踪的有意义的东西吗?

© 2019, Kees Cook。本作品根据知识共享署名-相同方式共享4.0国际许可协议授权。

评论 (1)

1条评论

非常酷的图表!仅仅知道可以启用某些编译器标志特性来提高质量和性能,就可能有助于推动这些特性的更多采用。

评论者:Chris Morgan — 2019年7月4日 @ 下午3:39

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计