真的不可能知道CPU在做什么吗?[关闭]


24

计算机程序员经常背诵“ x86指令完全不透明”的口号:Intel告诉我们他们在做某事,但是没有希望任何人都可以验证正在发生的事情,因此,如果NSA告诉他们对RNG进行后门操作,那么我们就无法真正做到这一点。做任何事情。

好吧,我相信计算机程序员不能对这个问题做任何事情。但是电气工程师将如何攻击它?电气工程师可以使用哪些技术来验证电路实际上执行了其规格中描述的操作,而没有其他操作?


5
您必须做一些类似的工作,例如对X光片进行X光检查并分析所有内容以查看其实际功能。基本上对芯片进行反向工程并考虑到每个电路的功能。完全不切实际。
DKNguyen

7
由于有噪声,而且有一天可能出现“足够大”的故障的可能性很小,因此没有电路能够达到精确的规格。
安迪(aka)

5
有趣的信息:这与拉普拉斯的恶魔有模糊的关系。
哈里·斯文森

6
从英特尔内容数据库中窃取内部文档要比对单个现代,复杂的英特尔CPU进行逆向工程要容易得多。
森林

14
@Harper您的态度是没有建设性的,并且断言不能在硬件中隐藏后门的说法是不正确的。
pjc50

Answers:


14

关于该主题,我读过的最好的论文是2014年出版的“隐形掺杂剂级硬件木马”(Becker等人)。

由于修改后的电路在所有布线层(包括所有金属和多晶硅)上都是合法的,因此我们的木马家族可以抵抗大多数检测技术,包括细粒度光学检查和“金芯片”检查。我们证明了这种方法的有效性。通过将特洛伊木马程序插入两种设计中-一种数字后处理程序(源自Ivy Bridge处理器中使用的英特尔加密安全RNG设计的数字后处理)和一种抗侧通道的SBox实现-并探索它们的可检测性及其对安全性的影响。

该白皮书描述了如何进行更改,如何通过检查硅片来检测到它极其困难,如何将其从生产测试中隐藏起来的技术,以及如何进行更改以降低硬件加密RNG的安全性或泄露密钥信息。通过AES实现的电源侧边通道。

旁通道是新兴的关注领域。英特尔一直困扰着与推测执行从内存中泄漏信息有关的问题,这些信息甚至没有被程序使用。难道那是故意的设计缺陷?这几乎是不可能的。


旁道是否需要某种发送器来将信息发送到NSA?否则,我肯定会注意到有人在笔记本计算机上测量笔记本计算机上的电源轨电流。
德米特里·格里戈里耶夫

24

电气工程师可以使用哪些技术来验证电路实际上执行了其规格中描述的操作,而没有其他操作?

从理论上讲,是的,我认为这是可能的。但是,对于复杂的CPU,将花费大量时间和金钱。另外,如果您不完全了解和理解设计,则将无法判断任何活动是否为“合法”。

CPU“只是”由许多逻辑单元组成的复杂数字电路。

可以通过观察金属连接来对芯片进行反向工程和重构设计。这些连接层可以有很多,例如最多8层或更多。

您将需要该领域的专家来识别逻辑单元,然后也许某些软件可以弄清楚它们是如何连接的,以便您可以重构网表。

一旦有了网表,就可以“知道”设计。这并不意味着您现在也知道它是如何工作的!

可能是某个功能激活了设计的2个部分,而您认为一个部分就足够了,因此您怀疑正在进行一些可疑活动。但是,该设计会执行一些您不知道的聪明技巧,以加快操作速度。

如果不了解和理解设计,您得出的任何结论可能仍然是错误的。只有设计CPU的工程师才拥有所有设计信息,并有最大的机会找出或猜测CPU中实际发生的情况或应该继续发生的情况。


77
只有设计CPU的工程师才知道发生的一切 -我刚好是从事该行业的工程师,因此我认为这一说法是非常乐观的:)
Eugene Sh。

18
不,CPU设计人员不会知道发生的所有事情-该级别的设计取决于综合工具,并且那些工具可能会注入HDL设计之外的行为。举一个简单的例子,许多FPGA工具将使您可以在逻辑分析仪中进行编译。
克里斯·斯特拉顿

9
对具有“数十亿个晶体管”的芯片进行逆向工程将带来挑战。spectrum.ieee.org/semiconductors/processors/...
电压尖峰

4
@Wilson因为复杂的电路(包括CPU)将包含许多专有的(甚至是秘密的,拥有商标/专利的)专利设计,由于拥有这些设计的公司希望从中获利(赚钱),因此无法向公众公开。6502是一个古老的设计,它不再具有任何有价值的设计信息,是的,它是完全开放的,可供所有人使用。
Bimpelrekkie

3
@Bimpelrekkie:如果它们获得了专利,那么就定义而言,它们并不是秘密。这就是专利的重点。您将秘密用于临时垄断。
MSalters

9

好吧,我相信计算机程序员不能对这个问题做任何事情。但是电气工程师将如何攻击它?

没有找到后门的好方法,找到硬件后门的一种方法是测试组合或未记录的说明。这是一个真正做到这一点并在x86硬件上进行审核的人的好话。这可以在不使芯片破裂的情况下完成。英特尔(我不确定其他芯片)的一个问题是它实际上有运行Linux的处理器,因此某些处理器上也有软件运行,并且您无法访问该处理器。

电气工程师可以使用哪些技术来验证电路实际上执行了其规格中描述的操作,而没有其他操作?

有多种测试方法可以使用硬件本身来测试功能。由于x86的指令集有未记录的部分,因此在普通指令中引入后门是不寻常的,因为它会引入可能的错误(例如,如果在add或mult指令中有后门),那么首先要看一下将在未记录的说明中。

如果确实需要测试常规指令的功能,则可以观察执行指令所花费的时间,观察执行指令所花费的力量,以查看与预期之间是否存在差异。


3
我不同意,并非不是有人会这样做,但不太可能。假设您将常规指令后门,例如添加指令,如果执行了一条附加指令,则说它打开了后门。然后,客户开发出一个完全具有这种组合的程序,他们对其进行调查,找到后门,然后每个人都会生气,您就会被起诉。在未记录的指令(或内置于CPU的linux计算机)中放置后门要安全
电压峰值

4
IME运行Minix,它不是Linux,并且更小,更简单。Linux的灵感来自Minix的存在,最初使用它的文件系统,并在新闻组中宣布了Linux,但那时它们已经完全不同了,现在已经非常不同了。
克里斯·斯特拉顿

5
@ user14717- 令人讨厌的可能性是被监禁的本机可执行文件(如本机客户端)中的触发序列。但是没有理由它必须是代码而不是数据
克里斯·斯特拉顿

5
@ laptop2d虫虫其中CPU不该做什么的指令集说的理论文档发生所有的时间 ; 通常没有人被起诉:例如,阅读intel第七代Core i7系列文档更新中的勘误表部分。使用无记录的说明将立即响起任何恶意软件研究人员的警报。有节奏的ADD与正确的寄存器间MOV结合使用的可能性较小,因此不会触发任何警报。
MarcusMüller

6
@ laptop2d我对“ CPU内嵌的linux”语句感到震惊。因此,我做了一些研究,我想您是在谈论英特尔ME引擎。嗯,它不是在CPU本身上运行,而是在北桥芯片组上运行。这似乎出现了很多关于误传,见itsfoss.com/fact-intel-minix-case
昏暗的

6

唯一的方法是逐层剥离芯片,并用电子显微镜记录每个晶体管,然后将其输入某种模拟程序中,然后观察其运行情况。

从本质上讲,这是黑匣子问题,您可以在其中尝试通过测量输入和输出来重建内部。一旦内部结构的复杂性或I / O的数量变得微不足道,便会发生组合爆炸,其中可能的内部状态数量变成天文数字。像Googol这样的数字到处乱扔


2
...并且更容易使用社交工程来窃取设计:)
Eugene Sh。

8
不会。这里的明显错误是模拟是不够的。即使为您提供准确的仿真模型,您仍将无法仔细查找隐藏的行为,因为您不知道如何触发它。
克里斯·斯特拉顿

4
@ChrisStratton我不会把那个错误称为明显的。有一个合理的假设,即该设计是基于物理上通常的简化进行的,例如,您不要将两条金属化走线放得如此紧密,以至于它们不会产生足够的电感耦合以改变MOSFET栅极的状态。如果a)您的简化方式与设计人员使用的物理模型不匹配,或者b)设计人员通过以非显而易见的方式有意破坏这些简化方式的要求来故意隐藏某些东西,那只会是一个错误。
MarcusMüller

7
@ChrisStratton啊,对不起,确定,我想我明白了。您说过,即使CPU的数字/行为时钟模型也足够复杂,以至于隐藏了程序员的理解/假设根本不适用的情况。确实如此。一个人可能已经详细记录了导致SPECTER的效果,而大多数人从来没有想过要缓存到与数据或程序流相关的副作用。确实!
MarcusMüller

3
谢谢:)您的论点使整个主题重新回到了ISA正确性的形式验证(“此ISA确实保证兼容的CPU不会向非特权代码授予RING 0特权吗?”)和HDL /形式验证的整个主题。针对此类ISA规范的RTL(我特别喜欢此RISC-V CPU内核验证项目。)
MarcusMüller

5

证明CPU并没有做任何偷偷摸摸的事情是非常困难的。典型的例子是投票机。如果其中只有一点点需要您进行表决,然后再将其偷偷带给某个独裁者,那么在某些地方对您来说可能是生是死。要证明数十亿美元中没有哪一个是很难的。

您可能会考虑物理隔离芯片,因此可以看到没有不正确的导线连接。并在其网络连接中放置另一芯片或多个(来自不同来源)的多个芯片串联,以确保仅将其连接到正确的位置。在投票成功后,请重新启动电源。并希望那里没有非易失性位。或偷偷摸摸的无线连接。但是您会相信自己的生活吗?


5

将任何数据传输到NSA都需要网络访问权限,因此通过运行禁用了网络服务的OS并检查网络接口的通信量,很容易发现此类后门。对于开源OS,甚至可以通过其目标IP来获得完全的网络支持和流氓连接,这将与OS合法访问的任何地址都不匹配。

没有数据传输的基于RNG的后门的用途非常有限。除非CPU RNG是唯一的熵源,否则这种后门将为攻击者提供任何优势而同时又不明显的机会几乎为零。除非您没有充分的理由就坚持说罗素的茶壶在那里,否则您应该能够对硬件RNG后门应用相同的论点。


5
因此,您假定对手具有创建和隐藏硬件特洛伊木马的时间,金钱和技能,但是他们要做的第一件事是telnet www.nsa.gov?这似乎是非常幼稚的观点。
Elliot Alderson

1
如果NSA隐藏了一个漏洞,那么他们肯定希望人们使用rdrandrdseed按照Intel的建议:作为PRNG种子的唯一熵源。Linux(内核)选择不这样做/dev/random,但是glibc / libstdc ++的当前版本std::random_device 确实会使用,rdrand只要它在运行时可用(而不是open)即可/dev/random借助godbolt进入标准图书馆电话会议
Peter Cordes

@ElliotAlderson那么您的观点是什么?某人如何在不将其传输到任何地方的情况下窃取有价值的数据?
德米特里·格里戈里耶夫

@PeterCordes std::random_device不是加密功能强大的RNG。C ++标准允许您使用PRNG来实现它,每次都有效地返回相同的序列,因此很明显,没有人应该使用它进行加密。
德米特里·格里戈里耶夫

哦,对了,我忘记了xD不能保证一切都很好。这在许多实现好,但MinGW的是其中的佼佼者例外设计意图,它给你的好质量的随机数作为平台能够击败库的主要目的。(正如您所说的不是加密,而是为其他目的播种PRNG)。(为什么我每次使用mingw gcc4.8.1的std :: random_device都会得到相同的序列?)。在没有任何熵的平台(最小的嵌入式设备)上,这是可以接受的,但是在x86 Windows上,这是可以接受的!
Peter Cordes
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.