反转智能卡时,已知侧通道攻击在硬件上非常有效。但是,它是什么,它可以用于软件逆向工程中吗?如何使用?

#1 楼

“旁道攻击”定义了将考虑意外和/或间接信息渠道以达到其目标的任何技术。它首先在智能卡加密中定义,以描述攻击,这些攻击使用了来自卡上嵌入式芯片的意外信息泄漏,可用于检索密钥和数据。例如,可以通过监视使用它:


执行时间(定时攻击):区分执行了哪些操作并猜测(例如)选择了代码的哪个分支(以及测试的值)。


功耗(功耗监视攻击):精确区分已执行了哪些指令序列,并能够重新组合变量。请注意,存在几种使用相同输入但分析方式略有不同的分析技术。例如,我们可以列出:单功率分析(SPA),差分功率分析(DPA),高阶差分功率分析(HO-DPA),模板攻击,...


电磁辐射(电磁攻击):与功耗密切相关,但也可以提供功耗中没有的信息,尤其是在RFID或NFC芯片上。


如果您对学习如何利用这些信息感兴趣,那么我建议您先阅读Power Analysis Attacks。这本书是关于智能卡的,不要被“吓到”。大多数信息还适用于“普通”(SoC)嵌入式设备上的一对一。 -channel),我似乎无法从家里找到合适的链接。
应用到软件逆向工程
现在谈到侧信道攻击在软件逆向工程中的应用时,或多或少地依赖于意外或间接信息泄漏的任何攻击。最近最好的例子是乔纳森·萨尔万(Jonathan Salwan)的这篇文章,他通过计数使用Pin在各种输入上执行的指令数来描述他是如何猜出破解密码的。 -工程而无需命名,否则可能会改善许多分析。基本思想是首先考虑到,如果某个软件过于晦涩而无法快速理解,我们可以将其视为黑匣子,并考虑使用旁通道技术通过指导性的反复试验来猜测所包含的数据
软件逆向工程中可用的旁通道列表比我们在硬件中可用的旁通道要长得多。因为它包含了以前的列表并添加了一些新通道,例如(非穷举列表):


指令计数:允许根据输入来识别不同的行为。 />
读取/写入计数:与上面相同,由于它还包括指令读取,因此具有更多识别模式的可能性。


提高中断计数:取决于哪种中断在何时何地被引发时,您可能会识别不同的行为,并能够确定实现目标的良好路径。



访问的内存地址:允许重建在内存(例如堆)中存储或访问的数据模式或复杂数据结构。


该列表远非详尽无遗,但是基本上可以使用诸如Valgrind VM或其他工具之类的工具来执行此类分析,并快速推断出有关行为的信息。给定程序,从而加快了逆向工程。
混淆和可能的对策
尝试构建可抵御此类攻击的软件也将从智能卡行业借鉴很多。但是,不仅如此。我可以想到一些技巧(但远远不能完全理解我们所能找到的一切)。 this:
if (value)
   ret = foo();
else 
   ret = bar();

foo()bar()具有不同的指令数。
可以通过执行foo()bar()(无论value是什么)然后确定ret的值是什么来克服。
tmp_foo = foo();
tmp_bar = bar();
if (value)
  ret = tmp_foo;
else
  ret = tmp_bar;

此技术使您的程序更难以从旁道攻击中猜测出来,但效率也大大降低。必须权衡利弊。
反击定时攻击
定时攻击非常容易执行并且很难解决,因为sleep()不能作为一种选择(太容易在代码中检测到,反正您无法假定处理器的特定速度)。程序员必须确定其程序的每个分支的执行时间,并使每个分支与其他无用的操作(与其他分支具有相同的计算能力)平衡。关键在于仅根据执行时间使每个分支与其他分支无法区分。
线程疯狂
另一种稀释旁通道的方法是对程序进行大规模的多线程处理。想象一下,程序的每个分支都在一个单独的线程中执行,并且一个变量告诉您​​当前程序的实际位置是哪个线程(如果可能的话,可能会很隐秘)。这样,旁通道分析将变得更加困难。
结论与进一步研究
对于软件逆向工程,人们普遍低估了旁通道攻击,它可以大大加快许多程序的逆向速度。但是,与此同时,存在混淆技术,必须专门针对软件逆向工程开发混淆技术。因此,如果您看到与该领域相关的越来越多的新颖性,请不要感到惊讶。

评论


不幸的是,维基百科的文章是错误和令人困惑的。首先,我们不应混淆故障注入和侧信道攻击,然后甚至都没有提到DPA(差分功率分析),但它似乎是当今使用最多的攻击。最后,在阅读了这篇维基百科文章之后,我仍然看不到用来揭示新数据的数学原理。引用一些教程也可能有所帮助。

–恐怖
13年4月22日在21:11



我承认没有阅读整个Wiki文章,因为我认为一开始就提到了您要求的信息。我仍然强烈推荐我提到的DPA书籍。它也描述了数学。之后,您可以尝试查找像CHES这样的会议上发表的文章,以进行更高级的攻击。如果要免费介绍一些辅助通道分析识别器,可以阅读本文的第3.7章主成分分析和SCA

– ixje
13年4月23日在6:43



实际上,我根本没有批评您的贡献(这本书似乎非常有趣),但是Wikipedia文章更多地是没有详细定义的逐项列出(此外,他们将故障注入归类为侧通道攻击,错误)。

–恐怖
13年4月23日在7:08

对于寻找正好提到的主成分分析和SCA论文的任何想法(现在链接已断开),请尝试这里:ru.nl/publish/pages/769526/…

–mikeazo
18年1月12日在14:42