我将在VS 2022中启动一个新项目,我正在查看选项以设置我的项目。我看了CET Shadow Stack,很感兴趣。它看起来像是英特尔的硬件安全功能,但我很难找到我的程序是否兼容的任何信息。阴影堆栈只会影响性能吗?作为一名程序员,这对我有什么额外的要求吗?什么时候会使用阴影堆栈?我只是为了好玩而使用c++制作游戏项目,而不是设计驱动程序或任何严重后果的东西。
我阅读了英特尔关于影子堆栈的文章,收集了它,复制了堆栈并进行了一些验证。就这样吗?如果是,它是如何做到的?我希望你能解释或链接到更多关于这个话题的消息来源。
如何知道我的程序是否与CET Shadow Stack(/CCETCOMPAT(兼容?
在具有CET的系统上运行它,或者在带有-cet
标志的英特尔SDE内部运行它,并确保它不会崩溃。
影子堆栈只会影响性能吗?
由于它是在硬件中实现的,它甚至不应该影响性能。如果你的程序正确地支持它,它永远不会被注意到,除非它成功地阻止了利用。
作为一名程序员,这对我有任何额外的要求吗?
除非您手工编写程序集,并且在其中做一些奇怪的事情,比如call
与pop
配对,或者push
与ret
配对。(对于这样一个奇怪的程序集的例子,请参阅。是否可以为单个ret指令暂时抑制Intel CET,或者以其他方式使用retpolines?(
何时使用阴影堆栈?
任何时候你的编译器和平台支持它,你都应该使用它。这增加了安全性,基本上没有缺点。
它复制堆栈并进行一些验证。就这样吗?如果是,它是如何做到的?
它保留堆栈的第二个副本,该副本仅受call
、ret
以及新的专用卷影堆栈指令(如incsspq
和wrssq
(的影响。当执行ret
时,如果实际堆栈上的地址与影子堆栈上的不匹配,那么您的程序就会被杀死,假设它被黑客入侵了。