产品资料搜索:

最新产品展示

  • LDM8035接触式模块
    接触式IC卡读写模块 支持SLE4442/4428 小型化 低功耗 方便使用
  • LDM522-MINI射频模块
    体积小(1.9cm*1.4cm) ISO14443-A以及Mifare, Ultrlight&EV1等的低功耗模块
  • LDM-A3射频读卡器
    支持ISO14443A/B 二代证ID 低功耗 免驱
  • LDM523射频读卡模块
    支持iso14443A/B 韦根接口 二代证ID
  • 微控制器(MCU)破解秘笈之四.2

    2009-4-6

    4.5 噪声攻击(Glitch attacks)
        噪声攻击是快速改变输入到微控制器的信号,以影响它的正常运行。通常噪声是叠加在电源上或时钟信号上,但噪声也可以是外加的短暂电场或电磁脉冲。在离芯片表面数百微米处放置两根金属针,然后加上少于1微秒的数百伏电压的窄脉冲,晶圆衬底会感应出一个电场,使得邻近晶体管的阈值电压发生变化。最近出现一种改进的方法:使用几百圈金属线绕在微探针的针尖构成一个小型电感。当电流进入线圈会产生磁场,针尖将集中磁力线。
        每个晶体管和与它相连的线路构成有时延特性的RC电路。处理器的最大可用时钟频率取决于该电路的最大延迟。同样的,每个触发器在接收输入电压和由此引致的输出电压之间有个特征时间窗口。这个窗口由给定的电压和温度来确定。如果用时钟噪声(比正常的时钟脉冲要短得多)或电源噪声(电源电压的快速波动)将会影响芯片里的某些晶体管,导致一个或多个触发器进入错误状态。通过改变参数,处理器会被导致执行许多完全不同的错误指令,有时甚至是不被微码支持的。经管我们不会预先知道何种噪声会导致何种芯片的何种错误,
    但它能相当简单地进行系统的搜索。

    4.5.1 时钟噪声攻击(Clock glitches)
        时钟信号的噪声攻击在目前是最简单的,且相当实用。实际应用中的噪声通常用来取代跳转条件并试验先前的测试指令。可以在安全密码问询处理时创建一个攻击窗口,简单预防执行这些指令。指令噪声也能用来扩大循环的时间。如,串口子程序在输出缓冲后再读更多的内容;或在密钥操作时减少循环次数来传一个弱的密码。
        为获得噪声,时钟需要临时增加一个或大于半个周期,有些触发器在到达新状态之前就获得输入。时钟噪声通常针对处理器的指令流。对硬件执行安全保护的微控制器没有什么效果。实际中,仅使用时钟噪声来攻击微控制器或智能卡的软件程序接口。
    LDA          #01h
    AND         $0100                          ;the contents of the first byte of EEPROM is checked
    loop:          BEQ      loop                ;endless loop if bit 0 is zero
    BRCLR    4,      $0003,  cont         ;test mode of operation
    JMP          $0000                           ;direct jump to the preset address
    cont:         LDA       #C0h
    STA         $000D                            ;initialize the serial asynchronous port
    CLR         $000E
    BSET       2,       $000F
    LDX        #50h
    wait:        BRCLR 5, $0010, wait    ;upload user code
    LDA       $0011
    STA        x
    INCX
    DEC        $0050
    BNE        wait
    JMP        $0051                                ;jump to the user code
        上例是MC68HC05B6微控制器负责安全的启动模块代码
        MC68HC05B6微控制器中,有掩模的启动代码以防止安全位置位后代码被上传出来。它会检查EEPROM中的第一个字节的内容,如果是0,看作是个安全熔丝已被编程,处理器就跳到循环的末端。
        这类保护的破解是相对容易的。如处理器在循环里只执行一个指令,攻击时可用不同的时钟噪声导致处理器误操作。不需要小心地与时钟信号同步,只需要随机制造噪声就可在数次攻击内成功。插入噪声是相对容易的,无需使用外部发生器,瞬间短路晶振即可。当谐振器在不同的泛音上产生震荡会发出很多噪声。大部分情况下需要在确定的时钟周期内获得所需结果,在这种情况下用信号发生器更好。
        使用时钟噪声来攻击某些微控制器也许是很困难的。例如德仪的MPS430微控制器在内部RC震荡器工作的启动模块。很难与内部时钟同步,攻击时很难估计精确的时间。一些智能卡在处理器指令流里会随机插入延迟,使得攻击更为困难。使用功耗分析会有帮助,但要求非常昂贵的设备来实时获得参考信号。

    4.5.2 电源噪声攻击(Power glitches)
        电源供应电压的波动会导致晶体管阈值电平的漂移。结果就是一些触发器在不同的时间里采样它们的输入,或读出错误的安全熔丝的状态。 通常用瞬间增加电源电压或电压跌落来制造噪声,一般在10个时钟周期内。电源噪声通常用在微控制器的程序接口上,能影响处理器运行或硬件安全电路。一般地,弱点比时钟噪声更难找到并利用,因为对于时域参数,振幅,上升/下降时间都是变量。
        一个例子是上例提到的攻击MC68C05B6.如果在执行AND $0100指令时电源电压减少50-70%,处理器从EPROM中取出的值是FFh而不是实际的值。这会对应熔丝未加密状态。窍门是小心计算执行时间来减少电源电压,否则处理器会停止运行或进入复位状态。这种任务并不难复位后目标指令在第一个一百周期内被执行。破解者可以使用矢量发生器或构建一个自己的噪声源。
        另一个是微芯的老旧的PIC16F84。芯片的擦除操作会解除安全保护。但同时会擦除芯片上程序和数据存储器中的内容。安全保护电路在硬件设计上是在安全熔丝复位之前擦掉存储器。但我们发现在芯片擦除操作时电源电压几微秒内增加到大约10V,会中断存储器擦除操作,但安全熔丝正常完成复位,这使得有可能读出存储器里的内容。如此高压需要谨慎使用,如果时间过长会损伤芯片。新版本的PIC16F84A增加了防欠压和过压攻击的能力。如果电源电压低于3V或6V,通过编程接口的任意修改存储器的操作会被立即中断。
        不是一直需要电源噪声超过电源电压范围的规格。例如,PIC18F84A微控制器,保护机制可以阻止在芯片擦除操作开始后使用大于50mV的噪声。那会导致中止程序存储器的擦除操作但不会擦掉熔丝。
        上述例子表明噪声攻击时无需特殊工具就有很好的效果。智能卡里有时钟监控电路但极少微控制器有。

    4.6 数据保持能力分析(Data remanence)
        处理器一般会把密钥保存在静态RAM里,如果元器件被篡改就会掉电,RAM内容丢失,从而保护密钥不被窃取。众所周知的是在低于零下20度时,SRAM里的内容会“冰冻”。很多元器件把温度低于这个阈值视为发生篡改事件。我们做了一些实验来确定现代SRAM数据保持能力与温度的关系。我们的实验表明传统的思维不再有效。即使在高温下,数据保持能力也是个问题。数据保持能力不仅仅对SRAM有影响,对DRAM, UV EPROM, EEPROM和闪存也有影响。结果是,仍然可以从已擦除的存储器中获得一些信息。这会给安全设备带来很多问题。


    4.6.1 低温下SRAM的数据保持能力
        安全工程师都很关注断电后SRAM器件能保持数据的时间。原因如下:很多产品使用密钥或类似的方法进行加密和别的安全相关的计算,需要不能被读出或改变。最普遍的解决方法是把安全密钥放在带篡改传感器的易失存储器中。一旦检测到发生篡改,易失传感器会掉电或短路到地。但如果数据保留时间大于破解者打开元器件并对存储器上电的时间,那保护机制就被摧毁了。
        在二十世纪八十年代,发现低温能将SRAM的数据保存时间增加到几秒甚至几分钟。对于那个时候的元器件,发现零下20度就可以增加数据保存时间,并且会随着温度的降低而增加保持的时间。有些就增加了温度传感器,温度低于零下20度就触发篡改事件,立即清零存储器。本次试验是重复这个工作,察看2000年后的产品是否也有此特性。

        另一个需要关注的是即使部分内容已被破坏,安全信息也能被复原。假设破解者获得了n=128位密钥中的m=115位,也就是90%的信息。他可以通过搜索n!/(m!(n-m)!=128!/(115!13!)=2.12*1017~258个可能的密钥。通过1万台电脑,每台每秒进行10亿次搜索密钥的操作,破解者只需6个小时就能搜遍所有密钥。如果只有80%的信息,也就是知道128位密钥中的103位,那就有2.51*1026 ~288种可能。几乎增大了一百倍,破解者要花百万年来搜索密钥,故认为均匀的128位密钥不能被恢复。
        我们做了一块特殊的测试板来测试SRAM芯片。所有信号通过4MHz的PIC16F877来控制,微控制器通过RS232接口与计算机相连,进行信息的传输。SRAM芯片的电源供应由CMOS开关芯片MAX314来控制。同时有液晶显示器和两个按钮来手动控制设备。为方便芯片的插拔,板上有个锁紧座。SRAM芯片放在冷藏室内,通过扁平电缆来控制。

        我们使用LM135H来监控温度,它的输出电压与温度成正比,系数为10mV/K。使用普通的数字万用表就能读出温度值。
        每个SRAM芯片都在两种条件下测试:一种是断电后电源脚短路到地,另一种是引脚悬空。每个芯片都要在存储器内容全1和全0状态下测试。
        八个不同的SRAM芯片在不同的温度下进行测试。芯片都是购买自半导体分销商。包括Dallas DS2064-200, GoldStar GM76C88AL-15, Hyundai HY6264AP-10LL and HY62256BLP-70, NEC D4364C-15 and D4364C-15L, Samsung K6T0808C1D-DB70, Toshiba TC5564APL-15。
        我们也测量了电源的电流,待机模式都是在室温测得的。因为电流很小,不能直接用数字万用表测量。使用了一个放大100倍的运放,测出的数据如表格。我们定义数据保持时间为至少有80%的存储器内容还存在的时间。

     可以看到一个重要的现象:芯片的功耗越小,它的数据保持时间就越长。电源脚连到地的数据保存时间都比悬空的要短。一旦SRAM芯片开始丢失信息,就会很快完全丢失。
        通过比较两种芯片NEC4364C-15和NEC4364C-15L,后一种是低电压版,可以看出低电压版在任何温度下都有更长的保持时间。相反的情形出现于HY6264A-10LL和HY62256BL-70。前面那个是超低电压版。尽管第二个是低电压版,但它却有更长的数据保持时间,这是因为它使用了更小的晶体管,功耗更小。

        我们测试并记录了现代SRAM芯片样品的数据保持时间特性,这是个温度的函数。与常识相反,有好几种芯片在低于零下20度时的数据保持时间极为危险。对于保持80%数据一分钟的温度,不同器件的差异很大。有些需要冷却到零下50度,有些在室温下就可以了。另一个意想不到的结果是存储器保持时间不仅因不同类型的器件而不一样,即使是同一工厂制造的同一类型但系列不一样的器件的保持时间也不一样。大概是芯片制造厂的品质控制没有包括数据保持时间。同样工艺的芯片,低功耗的有更长的数据保持时间。因此,安全处理器需要
    在篡改时可靠擦除存储器,这在芯片使用前变得越发重要。因为这与时间相关,对于单个的元器件并不实用。但是,测量每个批次的功耗可以给出一个实用的参考。
    4.6.2 非易失存储器的数据保持能力
        与SRAM只有两种稳定的逻辑状态不一样,EPROM,EEPROM和闪存单元实际是存储模拟量到晶体管的浮栅电荷。浮栅电荷会改变单元晶体管的阈值电压,读单元的时候由敏感的放大器来检测。对于标准的5V EEPROM,编程后的阈值电压有3.5V的变化。某些现代的闪存有多电平检测能力。
        我们评估了一些带不同存储器的微控制器,研究了残留数据的可能影响。设计了一个通过计算机并口来控制的特殊测试板。板上有两组可编程电源来产生VDD和VPP,一个带双向电平转换的编程接口,和一个微控制器芯片的插座。加到芯片上的电压精确度为100微伏,信号的分辨率为1微秒。

        第一个试验用的是PIC12C509微控制器。芯片被全写0,然后再不同时间的紫外线下曝光。放在测试板上用不同的电源电压来读出数据,估计存储器阵列中的每个单元的阈值电平。假定参考电压是接在电源线上的,那晶体管的阈值电平就是VTH=k VDD,通常的K接近于0.5。事实是无需测量精确的晶体管阈值电压,因为我们关注的是存储器和安全熔丝的相对擦除时间。结果如下:

        从图上可以看出,存储器在在安全熔丝之前获得完全的擦除。但有些安全缺陷一直还在。尽管熔丝擦除后,直接读不出任何有用的东西。但电源噪声攻击还是有用的。例如,紫外线下曝光7分钟后,2.2V的VDD下可以无损地读出存储器的内容。但安全熔丝直到4.8V仍然有效。当破解者得出数据从存储器锁存到输出移位寄存器的精确时间,并且那时检查过安全熔丝的状态。它可能会通过降低电源电压至2V来锁存数据并增加电压到5V使安全熔丝无效来获得存储器的内容。
        另一种窍门是恢复存储器的内容,即使在擦除安全熔丝和非破坏存储器内容之间没有交迭。例如,我们发现同样芯片的新样品在安全熔丝擦除前就开始扰乱存储器内容了。这样电源噪声不能用来恢复存储器中的信息。只能通过小心调节单元里的晶体管的阈值电压。小心控制存储器的编程时间可以注入特定数量的电荷到浮栅中。一般地,EPROM存储器的编程是通过外部信号来控制的,且所有的时序由编程单元来控制。这就使得破解者有机会通过注入电荷到浮栅中来改变阈值电平,在安全熔丝有效时可以读出存储器的内容。这种办法对于现代的EEPROM和闪存,事实上是不可用的:其一,片上硬件电路完全控制编程。其二,对EEPR
    OM和闪存的编程一般使用的是F-N沟道效应。结果就是很难控制注入单元的精确电荷量。同
    样,温度和电源电压也很难影响控制电路。
        下一个试验使用带闪存和EEPROM的PIC16F84A。使用了类似的测试次序,不同点是电擦除。可以看到存储器特性有很大不同。在收到芯片擦除命令后的65微秒存储器开始擦除,到75微秒擦除完毕。但是这个时间会随着温度或电源电压的变化而改变。例如,芯片加热到35度时,存储器在60微秒处开始擦除,70微秒的时候结束。安全熔丝需要至少125微秒来进行至少5次可靠的存储器擦除。减少电源电压会增加存储器和熔丝的擦除时间。所以比例实际上是一样的。需要注意到除非用硬件复位来中止,芯片擦除操作至少持续1毫秒。再加上快速的擦除时间,给人的印象是EEPROM和闪存在数据保持方面几乎没有问题,并能提供更好的安全保护。我们决定研究这点是否属实。
        在较早的PIC微控制器的安全保护试验中,指出在擦除操作完成后,PIC46F84芯片的举止异常。因为该芯片已经由PIC16F84A代替,就用新的芯片来测试。
        我们试验确定正常擦除操作后多少信息可以读出。从图4-12中可以看出,在标准的10毫秒擦除周期后,存储器被完全擦除,读出的都是1。擦除后,单元里晶体管的阈值很低。不能用类似于UV EPROM的方法来测量,因为电源电压低于1.5V时芯片就不运行了。使用电源噪声技术,可以短暂的降低电源电压到1V---对于从存储器中读出信息并锁存倒内部缓冲器上已经足够了。但这仍然不足以改变敏感放大器的参考电压到足够低,来检测被擦除单元的阈值电压。为获得结果,我们在电源噪声上使用了另外一些窍门。存储器阵列内的所有浮栅晶体管的阈值电压被临时改变,使得有可能测量已擦除单元的接近于0V的阈值电压。通过精确控制存储器的擦除操作,使得衬底和控制栅极被预充电并在隧道效应发生之前中止操作。结果,过剩的电子被留在浮栅下的衬底,并改变晶体管的阈值电压。捕获的多余电子再结合过程需约1秒,对于读取整个存储器已经够了。为评估存储器阵列中的每个晶体管的阈值电压,可以用带电源噪声的不同电压组合来重复这个过程。
        将上述测试方法用在不同的已编程和已擦除芯片,得到存储器的阈值电压与不同因素的关系图,如擦除次数和存储器地址。也能看出,即使擦除一百次,电子也没有完全从浮栅中离开,这使得有可能获取存储器中的内容。通过测量样品的100次编程/擦除周期后,除去会发生阈值电压漂移的原始单元。同时,存储器内信息的分析和获取是复杂的,因为存储器单元之间的阈值电压差比它自己的要大得多。实际上避免这种问题的方法是用同样的单元作参考,在芯片进行额外擦除操作之后,比较测量到的阈值电平。在PIC16F84A的EEPROM里也获
    得了类似的结果。唯一的区别是十次擦除操作之后的阈值电压非常接近于全擦除的单元,如果擦除操作超过十次,会使得几乎不可能从中恢复出信息。

        在下一个测试中,在擦除操作之前把芯片都写0,结果是不能区别已编程和未编程的单元。这意味着在擦除操作前对存储单元进行预编程是个很好的增强片上存储器的方法。
        不幸的是,从已擦除存储器中获取信息的技术只能在极少数带EEPROM/闪存的芯片上使用。第一,有些存储器,如德仪的MSP430有片上的内部稳压电路。电源电压从1.8V到3.6V不会影响到从部分擦除单元的读操作。很多微控制器在芯片复位或重新进入编程模式会完全复位并释放存储器控制电路。但是,如果存储器的内容没有完全消失,那会导致一个严重的问题。安全系统都是假设基于在一个存储器擦除周期后信息是不可恢复的。如果非侵入式攻击不能凑效,侵入式攻击是有效的。如:存储器的控制电路可以用FIB来修改,可以直接修改
    参考电压,电流源或控制栅极电压。
        最后,有些芯片在对存储器编程之前会进行擦除操作。这使得几乎不可能从已擦除的存储器中获得任何有用信息。一些微控制器的安全保护熔丝设计不正确,熔丝比存储器更早擦除。如果芯片擦除操作被过早的中止,片上存储器内的信息就可以正常的被读出。爱泰梅尔的AT89C51微控制器就是一个例子。当这个缺陷在九十年代后期众所周知后,爱泰梅尔重新设计了芯片的版图并增强了防攻击的能力。
      (译者注:IBM已发现将铌酸锂晶体放在需要检测的特征点上,铌酸锂的折射率随着所加电场的变化而变化,可以知晓金属线的逻辑状态。当采用紫外线激光照射晶体时,可以确定下方金属的电势。这种方法可以读取5V@25MHz的信号。
        由sandia实验室研究的方法:使用对硅材料透明的红外激光,通过照射所需的晶体管,诱导出受逻辑状态影响的光电流,从而确定晶体管的状态。)

    © 2014 龙达科技有限公司版权所有,所有内容未经许可严禁复制