在ARM Cortex A9核心上,必须执行特权指令,以便非特权代码可以使用性能计数器。例如,使用这个GCC内联代码,它必须在内核中运行:
/* Allow access to perf counter */
__asm__ __volatile__ ("\tMCR p15, 0, %0, C9, C14, 0\n" :: "r" (1));
/* Turn off counter overflow interrupts */
__asm__ __volatile__ ("\tMCR p15, 0, %0, C9, C14, 2\n" :: "r" (0x8000000f));
如果未启用访问,则尝试访问循环计数器的用户程序将收到“非法指令”异常,当然用户程序无法运行启用序列。
我的问题是,是否有保护柜台的安全理由?
我所能想到的是,在可信的计算类型环境中,非特权代码可以获得关于调用某些安全敏感代码的非常精确的定时信息。
在将这样的代码添加到内核的启动代码之前,我希望获得尽可能多的信息,客户可以将这些代码集成到具有严格安全性要求的最终产品中。
发布于 2013-04-16 01:49:11
在执行侧信道攻击时,非常精确的定时信息非常有用。一些著名的例子(在实验室条件下)包括窃取由其他进程使用的加密密钥,在我们看不到的数据上(既不是明文也不是密文)。这可以用于检测L1缓存错误,或者检测CPU中的跳转(Mis)预测。禁止进入循环计数器将使这种攻击更加困难(不是不可能,而是更困难)。
如果在同一个CPU上运行的并发进程没有潜在的敌意(这种情况包括两台共享相同硬件的不同虚拟机),那么几乎没有理由禁用循环计数器。
https://security.stackexchange.com/questions/34404
复制相似问题