现代处理器低功耗漏洞发现与利用_第1页
现代处理器低功耗漏洞发现与利用_第2页
现代处理器低功耗漏洞发现与利用_第3页
现代处理器低功耗漏洞发现与利用_第4页
现代处理器低功耗漏洞发现与利用_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

中国科学:信息科学2025年第55卷第2期:297–325SCIENTIASINICAInformationis论文论文SCIENCECHINAPRESScrossMark现代处理器低功耗漏洞发现与利用1.可信分布式计算与服务教育部重点实验室(北京邮电大学),北京1008762.哈尔滨工业大学计算机科学与技术系,哈尔滨1500063.清华大学计算机科学与技术系,北京100084*通信作者.E-mail:wds@收稿日期:2024–09–03;修回日期:2024–10–24;接受日期:2024–11–30;网络出版日期:2025–01–22北京市自然科学基金面上项目(批准号:4242026)、国家自然科学基金面上项目(批准号:62072263,62372258)和中央高校基本科研业务费专项资金(批准号:2023RC71)资助摘要低功耗是现代处理器设计的重要目标之一,为了降低功耗,现代处理器广泛应用了动态电压频率调节(dynamicvoltageandfrequencyscaling,DVFS)技术.本文聚焦DVFS技术的安全性开展研究工作,发现主流处理器的DVFS单元在电压和频率管理方面存在安全缺陷,由此造成3个硬件漏洞:通用处理器的低电压故障注入漏洞、图形处理器(graphicsprocessingunit,GPU)的低电压故障注入漏洞和通用处理器的频率隐藏通道漏洞.基于此,提出软件控制的低电压故障注入攻击和频率隐藏通道攻击两种新的攻击方法,整个攻击过程完全使用软件实现但是不利用任何软件漏洞.通过4个攻击实例验证了所提出的方法的有效性,实现了攻破主流可信执行环境ARMTrustZone和Intel软件防护扩展(softwareguardextensions,SGX)、使GPU上的人工智能模型失效以及构建数据秘密传送通道等目标.本文分别从硬件和软件两个角度提出防御措施,可助力处理器设计人员设计新一代安全低功耗技术.关键词处理器安全,漏洞挖掘与利用,动态电压频率调节,故障注入攻击,隐藏通道攻击处理器是计算机系统的根基,如果处理器安全无法得到保障,整个计算机系统将不安全,与之紧密关联的网络空间安全更无从谈起.高性能和低功耗是现代处理器设计的重要目标,处理器设计人员使用了大量的优化技术来实现这些目标,但是在应用这些优化技术时,往往缺少从安全的角度进行审视和验证,从而可能引发大量的安全问题.2018年初爆出的由处理器高性能技术造成的“熔断”[1]和“幽灵”[2]漏洞及其变种可以跨权限泄露私密数据,影响了大量当时已应用的处理器.随后,处理器高性能技术的安全性引起了研究人员的广泛关注,多种新的基于高性能技术的漏洞[3~7]也相继被发现.但是,现代处理器广泛使用的低功耗技术的安全性目前仍缺少比较充分的研究.引用格式:邱朋飞,孙日辉,王春露,等.现代处理器低功耗漏洞发现与利用.中国科学:信息科学,2025,55:297–325,doi:10.1360/SSI-2024-0266QiuPF,SunRH,WangCL,etal.Exploringandexploitingthehardwarevulnerabilitiesinthelow-powerunitsofmodernprocessors.SciSinInform,2025,55:297–325,doi:10.1360/SSI-2024-0266®2025《中国科学》杂志社/doi/10.1360邱朋飞等中国科学:信息科学2025年第55卷第2期298降低处理器的频率和电压可以有效降低处理器的功耗,因此,现代处理器广泛应用了动态电压频率调节(dynamicvoltageandfrequencyscaling,DVFS)[8~11]技术以实现低功耗目标.DVFS在满足用户对性能的需求下根据处理器的负载状态动态改变电压和频率.为了支持DVFS,处理器的硬件频率和电压管理器的输出被设计成是可调的,操作系统的DVFS驱动可以通过调用处理器的频率和电压管理接口动态调节处理器的频率和电压.由于DVFS技术使得处理器的频率和电压均可通过软件调整,如果没有从硬件层面设计安全的频率和电压管理机制,则可能造成安全问题.本文聚焦现代处理器低功耗技术的安全性开展研究工作,发现了3个安全漏洞.漏洞一:通用处理器的低电压故障注入漏洞(CNVD-2024-03408),可使处理器可信区“不可信”.Intel和ARM并没有在公开文档中说明如何修改处理器的电压.对于Intel处理器,本文基于对“处理器的工作状态主要通过模式寄存器(modelspecificregister,MSR)[12]进行配置”的观察,遍历了所有可用的MSR,发现编号为0x150的MSR可以被用于修改处理器的电压.对于ARM处理器,本文对处理器厂商提供的电压管理驱动程序的代码和函数调用过程进行了深入的分析,发现可以通过配置子系统电源管理器(subsystempowermanager,SPM)[13]中的寄存器修改处理器的电压.基于此,本文对Intel和ARM等主流处理器的电压进行了测试,发现主流处理器并没有从硬件层面对电压进行安全管理,攻击者可以通过恶意降低处理器的电压,向处理器中注入硬件故障,实现故障注入攻击,由此形成了低电压故障注入漏洞.该漏洞可以被用于攻击处理器的可信执行环境,使得可信区“不可信”.漏洞二:图形处理器的低电压故障注入漏洞(CNVD-2023-16144),可使人工智能模型“失效”.工业界和学术界广泛使用图形处理器(graphicsprocessingunit,GPU)来加速人工智能(artificialintelligence,AI)模型的训练和推理过程.在这个过程中,GPU通常被认为是可信的,这实际上使得目前运行在其上的大量AI模型暴露在由硬件漏洞引起的潜在攻击风险中.为了减少能耗,目前的GPU也使用DVFS技术来动态调节频率和电压[14].本文通过研究发现,GPU并没有对频率和电压的对应关系(频率–电压对)进行硬件限制,攻击者可以通过使电压不能支持当前频率,向GPU中注入硬件故障,由此形成了GPU的低电压故障注入漏洞.该漏洞可以被用于攻击运行在GPU上的AI模型,使其分类精度下降或输出攻击者预期的分类结果.漏洞三:通用处理器的频率隐藏通道漏洞,可用于“秘密”传送数据.隐藏通道攻击通过共享资源而不是合法的数据传输方式在发送程序和接收程序之间建立数据传输通道[15~18],可以绕过各种访问控制机制.目前有一些频率隐藏通道攻击方法被提出[19~21],但是这些攻击假设发送程序具有管理员权限,并且需要直接修改频率以实现信息的传送.本文对Linux系统的DVFS驱动程序进行了分析,发现该驱动程序会将处理器的频率保存到一个文件中,且没有对该文件的访问权限进行限制,这使得普通的用户程序也能读取到处理器的频率信息,由此导致频率隐藏通道漏洞.这是DVFS驱动程序的一个漏洞,因为处理器的频率没有必要让用户空间的应用程序获取.该漏洞可以被用于构建隐蔽信道,实现不同进程之间的隐蔽信息传输.基于发现的上述3个漏洞,本文提出两种新的攻击方法并在真实处理器上进行验证.软件控制的低电压硬件故障注入攻击.在该攻击中,攻击者使用软件代码创建低电压毛刺,造成处理器出现硬件故障,进而修改被攻击程序的运行时数据,实现硬件故障注入攻击,整个攻击过程完全利用软件实现但不依赖于任何软件漏洞.本文成功使用该方法窃取运行在ARMTrustZone[22,23]和IntelSGX[24,25]等主流可信执行环境中的AES加密密钥,并使运行在可信执行环境中的RSA解密函数输出预期明文.此外,本文使用该方法成功降低运行在GPU上的AI模型的准确率以及使AI模型输出预期的分类结果.由于AI模型具有一定的容错能力,随机注入故障不能实现好的攻击效果.本文设计了一种基于梯度下降分析的敏感目标搜索算法,以找出对AI模型的输出影响比较大的元素,在攻击时,向这些元素中注入硬件故障.为了获得更加有效的攻击参数,本文采用遗传算法对参数进行优化.这是首次对GPU实施的软件控制的低电压故障注入攻击./doi/10.1360邱朋飞等中国科学:信息科学2025年第55卷第2期299频率隐藏通道攻击.在该攻击中,攻击程序基于要发送的信息向处理器提供不同的工作负载.由于DVFS的工作特性,DVFS驱动程序会自动根据处理器的负载情况调整处理器核的频率,从而实现信息的编码.接收程序利用DVFS驱动程序的漏洞获取处理器的频率,经过解码后获得发送程序发送的数据.该攻击可以用于在低权限程序中传输数据,且能实现信息的双向传递.本文成功在Intel等主流处理器上实现了该攻击,并对该攻击的数据传输率及错误率进行了实验探究.本文的主要贡献如下.(1)发现现代处理器低功耗技术的3个安全漏洞.本文对现代处理器(包括通用处理器和GPU)的低功耗技术的安全性进行了研究,发现现代处理器的电压可以通过软件代码进行修改,由此造成了低电压故障注入漏洞,这是处理器的硬件漏洞,广泛存在于已部署的处理器中.此外,本文发现通用处理器的频率信息可以被非特权用户获取,由此造成了频率隐藏通道漏洞.本文针对这些漏洞分别提出了针对性的缓解措施,可以增强处理器的安全能力.(2)提出两种新的攻击方法.基于发现的3个漏洞,本文提出了软件控制的低电压硬件故障注入攻击方法,这是首个针对成熟商业处理器的软件控制的低电压故障注入攻击方法,攻击过程完成使用软件实现但不利用任何软件漏洞.此外,本文提出了频率隐藏通道攻击方法,与现有的频率隐藏通道攻击需要高权限的发送程序直接修改处理器的频率不同,该攻击对信息发送方和接收方的权限没有任何要求且不需要直接修改频率.(3)在真实处理器上实现攻击.本文利用提出的攻击方法成功窃取运行在ARMTrustZone和IntelSGX等主流处理器可信执行环境中的AES的加密密钥,并通过使RSA解密函数输出预期明文,实现将不可信应用程序加载到TrustZone中的效果.此外,本文成功对运行在NvidiaGPU上的AI模型进行了攻击,在没有对抗样本的情况下误导AI模型输出预期的分类结果.本文也在Intel处理器上验证了频率隐藏通道攻击方法的有效性,实现了平均每秒28.41位的数据传输率.漏洞披露.本文已将发现的通用处理器的低电压故障注入漏洞和GPU的低电压故障注入漏洞提交到国家信息安全漏洞共享平台(ChinaNationalVulnerabilityDatabase,CNVD),这两个漏洞目前均已被收录,CNVD号分别为CNVD-2024-03408和CNVD-2023-16144.本文后续章节的安排如下.第2节介绍与本文研究相关的背景知识与相关工作,包括动态电压频率调节、故障注入攻击和低电压故障注入的原理;第3节介绍本文发现的3个安全漏洞及提出的两种攻击方法;第4和5节分别介绍本文针对主流可信执行环境ARMTrustZone和IntelSGX进行故障注入攻击的实验过程及结果;第6节介绍本文针对GPU上的AI模型进行故障注入攻击的实验过程及结果;第7节介绍本文实现频率隐藏通道攻击的过程及实验结果;第8节从硬件和软件两个角度介绍可能的修复本文发现的3个漏洞的方法;最后,第9节对本文的研究内容进行总结并展望未来的研究工作.2背景知识与相关工作本节介绍与本文研究相关的背景知识及工作,包括DVFS、故障注入攻击和低电压故障注入原理.2.1动态电压频率调节处理器的能耗由静态能耗和动态能耗组成,动态能耗ET是动态功耗Pt在时间上的卷积1).Pt由负载电容C、电压Vt和频率Ft共同决定,其关系如式(1)[26~29]所示.可以看出,动态功耗与电压、频率成正比,因此,降低电压和频率可以有效减少处理器的动态功耗,进而减少能耗.不过降低处理器的电压和频率也会降低性能.为了在性能和功耗之间折中,现代处理器广泛应用了DVFS技术[8,26].DVFS允许操作系统以满足用户对性能和功耗的要求为目的,根据处理器的负载状态动态改变电压和 1)从时间0到时间T内的ET可表示为ET=∫Ptdt./doi/10.1360邱朋飞等中国科学:信息科学2025年第55卷第2期300频率.为了实现DVFS,向处理器核提供频率和电压的硬件管理器的输出被设计为基础频率和基础电压的倍数,倍数大小由相应的操作系统内核驱动配置.PtⅨVt2FtC.(1)为了更好地对处理器的电压和频率进行管理,可设定的电压和频率的值被固定在离散元组的集合(operatingperformancepoints,OPP)中2).每个频率值对应一个电压值,该电压值是由处理器厂商确定的,可以安全地驱动处理器在对应的频率下正常工作.2.2故障注入攻击电路只有在合适的温度、电压、频率和电磁等工作环境下才能正常工作,故障注入攻击通过提供异常的工作环境向运行中的电路注入硬件故障,获得故障输出.结合差分故障分析技术[30,31],攻击者可以实现多种特定的攻击目的.差分故障分析技术通过数学方法分析程序的正确输出和错误输出的差异,进而推测程序的私密数据,是一种比较成熟的分析方法.AES[32],RSA[33],DES[34],3G-SNOW[35],ECC[36],SMS4[37]以及Grain[38]等加密算法均受到差分故障分析技术的影响.根据采取的故障注入方式的不同,故障注入攻击可以分为三类.(1)基于硬件的故障注入攻击:使用特殊的硬件设备更改系统的工作参数实现故障注入,包括更改频率[39,40]、电压[33,41]、温度[42]、光强[43]、声音环境[44]和电磁环境[45]等.(2)基于软件的故障注入攻击:使用软件代码改变系统的工作参数实现硬件故障注入.例如,CLKscrew攻击通过对处理器进行超频实现高频率故障注入攻击[13]、RowHammer攻击[46]通过频繁访问某个内存单元更改临近内存单元的数据.(3)基于模拟的故障注入攻击:通过改变电路的内部逻辑值实现故障注入[47,48],主要用在计算机的模拟测试中.基于硬件的故障注入攻击实现简单,成功率比较高,但是该类攻击需要特殊的外部硬件设备辅助,无法实现远程攻击,因而影响范围有限.基于软件的故障注入攻击不需要被攻击设备的物理访问权限,完全使用程序指令触发硬件故障以及控制故障注入的整个过程,可以对计算机系统构成比较严重的威胁.本文提出的故障注入攻击方法属于基于软件的故障注入攻击方法.2.3低电压故障注入的原理时序电路需要满足一定的时间约束才能保证各个电子元件的协调运行.图1展示了一个时序电路的信号传输过程和时序关系.该时序电路由一个时序电子元件(触发器)开始,并由另一个时序电子元件(触发器)结束.中间的逻辑单元对第一个时序电子元件的输出进行处理,并将处理后的结果作为最后一个时序电子元件的输入.为了更好地理解该时序电路需要满足的时间约束,本文做以下定义:•Tclk表示一个时钟周期,是两个时钟上升沿的间隔,也反映了电路的频率;•Tsetup表示最后一个时序电子元件在处理输入数据时,输入数据必须要保持稳定的时间;•Tsrc表示第一个时序电子元件的输入和输出之间的延时;•Ttransfer表示第一个时序电子元件的输出到中间逻辑单元的输出之间的时间间隔.为了保证最后一个时序电子元件的输入在下一个时钟上升沿到来之前保持稳定,从而确保该电路的正确性,该电路需要满足如式(2)所示的时间约束[13,27~29],Tsrc+Ttransfer≤Tclk−Tsetup−Tϵ,(2)其中Tϵ表示一个微小的时间常量.t时刻门电路的延时Gt为 Gt=k(Vt/(Vt−Vr)2),(3) 2)ThesourcecodesofkraitpmicfrequencydriverprovidedbyQualcomm./kernel/msm/+/android-msm-shamu-3.10-lollipop-mr1/drivers/clk/qcom/clock-krait.c,2015./doi/10.1360邱朋飞等中国科学:信息科学2025年第55卷第2期301图1(网络版彩图)低电压故障注入的原理:黑线波形表示电路正常工作时的信号传输过程及时间约束,红线波形表示电压过低时的信号传输过程及时间关系(低电压会破坏电路的时间约束,在该电路中,会导致输出结果出错).Figure1(Coloronline)Principleoflowvoltage-basedfaultinjection:thewaveformoftheblacklinerepresentsthesignaltransferprocessandthetimingconstraintwhenthecircuitisworkingnormally,andthewaveformoftheredlineillustratesthesignaltransferprocessandthechangesofthesignals’timingwhenthevoltageistoolow.Alowvoltagemaydestroythecircuit’stimingconstraint.Inthiscircuit,itwillcauseanerroroutput.其中,k是一个常数,Vt是电路在t时刻的电压,Vr是电路的额定电压.从式(3)可以看出,Gt与Vt成反比,降低电压会使门电路的输入和输出之间的延时变长.在电路的时钟频率不变的情况下,Tclk是固定的,此外,Tsetup由时序电子元件的特性决定,与电路的电压和频率无关.如果提供给上述时序电路的电压降低,Tsrc和Ttransfer会增加,式(2)中的时间约束就有可能被破坏.图1的红线部分展示了电压过低时的信号传输过程,最后一个时序电子元件会在还没有收到中间逻辑单元的稳定输出之前处理数据,此时使用的输入是之前的输入,电路的输出与预期输出不一致,从而出现硬件故障.3处理器低功耗技术安全分析及攻击方法本文对处理器低功耗技术的安全性进行了详细的分析,发现3个安全漏洞.基于此,本文提出两种新的攻击方法.本节介绍本文发现的3个漏洞以及提出的两种攻击方法.3.1处理器电压配置接口研究为了支持DVFS,现代处理器会在硬件上提供电压配置接口以供系统软件调用,实现电压的动态调节,但是这些接口并没有在公开文档中描述,本文通过多种方法获取不同处理器的电压配置接口.Intel处理器电压配置接口研究.Intel处理器的工作参数通过MSR进行配置,但是Intel并没有在其官方文档中描述控制电压的MSR.本文对处理器中所有可用的MSR进行了测试,发现编号为0x150的MSR是处理器的电压配置接口,本文进一步分析了该MSR每一位的功能(如图2所示).第[42:40]位表示被寻址的设备(0x0表示处理器);第[31:21]位表示对应于当前电压的电压偏移;位[19:8]表示要配置的处理器电压的大小.因此,我们有两种方法来更改处理器电压,即更改电压偏移或直接配置/doi/10.1360邱朋飞等中国科学:信息科学2025年第55卷第2期302图2(网络版彩图)Intel处理器的电压配置寄存器各个位的功能.有两种方法可以设置处理器的电压:(1)修改相对于当前电压的电压偏移(通过位[32:21]);(2)直接设置处理器的电压(通过位[19:8]).Figure2(Coloronline)FunctionsofeachbitinthevoltageconfigurationregisterofIntelprocessors.Therearetwomethodstosettheprocessor’svoltage:(1)modifyingthevoltageoffsetcorrespondingtothecurrentvoltage(viabits[32:21]);(2)directlysettingtheprocessor’svoltage(viabits[19:8]).电压.尽管每个核都有其MSR,但是大多数Intel处理器各个核的频率/电压都由同一个频率/电压硬件管理器进行管理,因此,各个核的频率和电压都是相同的.ARM处理器电压配置接口研究.在攻击ARM处理器时,本文使用的实验设备为GoogleNexus6手机(处理器是高通公司的APQ8084AB).本文并没有在官方文档中找到该处理器的电压调节方式,不过高通公司提供了一个名为krait-regulator3)的电压调节驱动程序,本文对该电压调节驱动程序的代存器的值实现对电压的管理.通过进一步的分析,本文发现该寄存器的第[15:8]位代表了要设置的处理器电压的大小.与Intel处理器不同,为了实现更加精细的电源管理,ARM处理器每个核的频率可以设置成不一样,但是每个核的电压都是一样的.NVIDIAGPU电压配置接口研究.NvidiaGPU通常由PCIe端口/连接器供电,GPU上的电压控制器负责将来自PCIe端口/连接器的电压转换成合适的电压给GPU核.电压控制器的输出可以通过通用输入/输出(general-purposeinput/output,GPIO)引脚进行控制(在某些高端GPU设备上,可以通过I2C适配器进行控制).Nvidia提供的驱动程序Nvidia-smi允许管理员修改和查询GPU的电压大小.在频率管理方面,NvidiaGPU上有两个时钟源,PCIe参考时钟(100MHz)和片上晶振(通常为27MHz)[49,50],使用哪个时钟源由选择器确定.GPU的频率可以通过锁相环(phase-lockedloop,PLL)进行提高或通过时钟分频器进行降低,其工作参数可以通过Nvidia-smi驱动程序配置.3.2通用处理器频率测量方法本文对通用处理器的频率信息获取方式进行了研究,共发现4种方法可以获得处理器的频率.(1)测量具有固定迭代次数的空循环所花费的时间或者统计某个时间间隔内空指令的执行次数;(2)读取控制频率的寄存器(在Intel处理器中,控制频率的MSR为IA32PERFCTL,在ARM处(3)读取系统监控模块输出的处理器频率信息,例如,在Linux系统中,内核模块cpuinfo会将处理器的频率写入到文件cpuinfocurfreq中[51];(4)读取DVFS驱动CPUfreq创建的名为scalingcurfreq的文件,该文件记录了DVFS设置的处理器频率.此外,普通用户可以利用CPUfreq提供的命令cpufreq-info来获取频率,该命令也 3)ThesourcecodesofkraitpmicvoltageregulatorprovidedbyQualcomm./kernel/msm/+/android-msm-shamu-3.10-lollipop-mr1/arch/arm/mach-msm/krait-regulator.c,2014./doi/10.1360邱朋飞等中国科学:信息科学2025年第55卷第2期303是通过读取scalingcurfreq的内容得到处理器的频率.方法(1)在频率固定时能很好地判断频率大小,并且也是之前的频率隐藏通道攻击[19~21]使用的方法.但是,由于空循环或空指令会增加处理器的负载,这使得在开启DVFS的情况下,DVFS驱动程序会提高处理器的频率.因此,已有的频率隐藏通道攻击都假设数据发送程序具有管理员权限,以能直接配置处理器的频率并禁止DVFS驱动程序修改处理器的频率.方法(2)和(3)要求接收程序具有管理员权限以能访问频率寄存器或相应文件.方法(4)对接收程序的权限没有任何要求,这是DVFS驱动设计的一个缺陷,因为处理器的频率没有必要让用户空间的应用程序获取.3.3处理器低功耗技术的安全漏洞发现本文通过实验发现Intel处理器中配置频率的MSR被添加了基于硬件的限制机制,因此,无法在这些处理器上实现基于超频的故障注入攻击.但是本文研究发现Intel处理器的电压可以通过软件代码修改且可被降低到不能支持处理器正常工作的电压.对于ARM处理器,虽然Tang等[13]认为对ARM处理器进行低电压故障注入攻击是不可行的,因为处理器会在电压被非法更改后立即重启.但是本文研究发现ARM处理器的电压也可以通过软件代码修改且可以通过对电压管理程序的修改使得处理器在电压过低时不会立即重启.由此,导致了通用处理器的低电压故障注入漏洞(漏洞一).此外,本文研究发现GPU的频率和电压也可以通过软件代码修改且GPU没有对频率–电压的对应关系做硬件限制,由此导致了图形处理器的故障注入漏洞(漏洞二).最后,本文发现用户程序也可以获得处理器的频率信息,由此导致了频率隐藏通道漏洞(漏洞三).3.4攻击假设和威胁模型为了利用上述3个漏洞,本文提出了两种新的攻击方法(软件控制的低电压硬件故障注入攻击和频率隐藏通道攻击),并在真实处理器上进行了验证.在这些攻击方法中,本文做出以下两个假设:(1)本文假设目标处理器具有DVFS技术.DVFS是一种广泛应用在当前处理器中的低功耗技术,因此该假设适用于大多数处理器.(2)在软件控制的低电压故障注入攻击中,本文假设攻击者具有管理员权限,以具有修改处理器电压的能力.该假设在攻击可信执行环境时符合实际攻击场景,具体攻击目标描述在3.5.3小节.在以上两个假设的基础上,特取用户可以使用本文提出的低电压故障注入攻击方法对IntelSGX,ARMTrustZone和GPU等进行低电压故障注入攻击,以攻破处理器的可信执行环境或使AI模型失效.此外,非特取用户可以使用本文提出的频率隐藏通道攻击进行秘密信息传送.需要说明的是,频率隐藏通道攻击不需要假设攻击者具有管理员权限,该假设主要用于软件控制的低电压故障注入攻击中.3.5软件控制的低电压故障注入攻击图3展示了本文提出的软件控制的低电压故障注入攻击方法.攻击程序在攻击核上运行,被攻击程序在被攻击核或GPU上运行,攻击程序在特定时间点创建低电压毛刺,触发被攻击核或GPU的硬件故障,从而改变被攻击程序的运行时数据.结合差分故障分析技术,攻击者就能实现很多攻击目的.3.5.1攻击过程攻击程序通过以下4个步骤实现对被攻击程序的故障注入,这4个步骤都是通过软件实现的.(1)设置攻击环境.攻击程序主要从3个方面准备合适的攻击环境.首先,固定处理器各个核的频率,以减少DVFS产生的频率变化对攻击的不利影响.其次,将处理器的电压设置为一个能保证所有核都能正常工作的安全电压.最后,清除处理器的剩余状态,因为处理器的剩余状态会影响被攻击程序的执行速度,进而影响故障注入的准确性./doi/10.1360邱朋飞等中国科学:信息科学2025年第55卷第2期304图3(网络版彩图)软件控制的低电压故障注入攻击方法概览.攻击程序主要通过4个步骤实现攻击:设置攻击环境、等待故障注入点、更改处理器电压和恢复处理器电压.Figure3(Coloronline)Overviewoftheproposedsoftware-controlledlowvoltage-basedfaultinjectionattack.Theattackerprocedureimplementstheattackmainlythroughfoursteps:settingtheattackenvironment,waitingforthefaultinjectionpoint,reducingtheprocessor’svoltage,andrecoveringtheprocessor’svoltage.(2)等待故障注入点.故障注入点的选择由差分故障分析方法决定,在攻击通用处理器时,一般只需要一个故障注入点,但是在攻击AI系统时,故障注入点一般有多个.由于被攻击程序往往是已公开的加密函数或AI模型,因此,等待故障注入点所需的时间可以事先计算出来.(3)更改处理器电压.在被攻击程序运行到故障注入点时,攻击程序降低处理器的电压以实现硬件故障注入.为了确保硬件故障不会对被攻击程序的其他部分产生较大影响,攻击者需要准确控制低电压持续时间,以减少注入的硬件故障对被攻击程序中其他部分代码的影响.(4)恢复处理器电压.攻击程序需要在注入故障后恢复处理器电压为安全电压,以使被攻击程序可以继续使用故障后的数据执行.由于注入的硬件故障已经导致了被攻击程序执行时的中间数据修改,并且修改会被传播到最终输出,因此攻击者可以通过差分故障分析技术对故障输出进行分析.3.5.2攻击参数为了注入可控的故障,攻击者需要为以下7个参数找到合适的值:Ffault={Fa;Fv;Vc;Vg;Tw;Vl;Td};其中每个参数的意义如表1所示.在攻击GPU上的AI模型时,由于需要注入多个硬件故障,因此等待时间Tw是一个集合,集合的大小等于预期的硬件故障注入点的数量.3.5.3攻击目标程序该攻击假设攻击者已经获得了管理员权限.首先,有许多方法可以被用来实现普通用户的提权[52].其次,IntelSGX,ARMTrustZone以及GPUTEE(例如,HypSec[53],Graviton[54]和HIX[55])等可信执行环境都是在假设管理员是不可信的基础上构建的,因此,攻击可信执行环境并不违反攻击假设.注入的故障是发生在被攻击核或GPU上的硬件故障,在被攻击核或GPU上运行的任何函数都可能成为被攻击函数.但是,相比于破坏被攻击函数的正常执行过程,攻击者可能更希望有目的地实施攻击.差分故障分析技术通过分析程序的正常输出和故障输出的不同,可以有效攻击各种加密算法./doi/10.1360邱朋飞等中国科学:信息科学2025年第55卷第2期305表1低电压故障注入攻击参数描述.Table1Meaningoftheparametersoftheproposedlowvoltage-basedfaultinjectionattack.ParameterParametermeaningFaThefrequencyoftheattackercore,whichcansupporttheattackercoretoworknormallyandisunchangedthroughouttheentireattackprocess.FvThefrequencyofthevictimcoreorGPU,whichissufficienttomakethevictimcoreorGPUworkcorrectlyandremainsunchangedduringthewholeattackprocess.VcThesafevoltageforprocessor,whichistheworkingvoltageofprocessorbeforeandafterthefaultinjectionprocesses.VgThesafevoltageforGPU,whichistheworkingvoltageofGPUbeforeandafterthefaultinjectionprocesses.TwThetimethattheattackerprocedurewaitsforthevictimproceduretoexecutetothefaultinjectionpoint,whichcanbedeterminedbymeasuringtheexecutionprocessofthevictimprocedureinadvance.VlThelowvoltagethatcanintroducehardwarefaultsintothevictimcoreofprocessororGPU,whichisdeterminedthroughexperiments.TdThedurationofVl.Duringthistime,thevictimcoreofprocessororGPUwillexecuteinstructionsincorrectlybutwillnotcrashorreboot.同时,加密技术已在ARMTrustZone和IntelSGX等可信执行环境中被广泛采用,以支持完整性度量、数据封装、页面交换和Enclave认证等[56].因此,在攻击SGX和TrustZone时,加密函数可以成为攻击目标,在攻击GPU时,运行在GPUTEE中的AI模型可以成为攻击目标.此外,在某些云环境中,管理程序被认为是不可信的,在这种场景下,云租户的程序也可以成为攻击目标.3.6频率隐藏通道攻击本文发现DVFS会将处理器的频率信息泄露给用户空间程序.基于此,本文提出一种对发送程序权限无要求且接收程序不需要运行额外负载的频率隐藏通道攻击方法.3.6.1攻击过程图4展示了本文提出的频率隐藏通道攻击方法的概览.发送程序使用一个执行大量计算工作的辅助线程来调整处理器的负载,由于DVFS的工作特点,处理器的频率会随着负载的变化而变化.如果发送程序需要提高处理器的频率,它会激活辅助线程以增加处理器的负载,如果发送程序需要降低频率,它将不会激活辅助线程或杀死正在运行的辅助线程,以使处理器工作在较少的负载下.接收程序判断辅助线程是否被激活的一种方法是通过处理器提供的运行时平均功耗(runningaveragepowerlimit,RAPL)接口获知处理器的功耗.然而,Lipp等[57]最近的研究发现RAPL可以被用来实现功耗侧通道攻击.为了缓解该漏洞,RAPL的访问被限制在了特权级软件中.本文发现的DVFS驱动程序的设计缺陷使得攻击者可以直接使用频率而不是功耗作为隐藏通道的信号.3.6.2编码和解码协议发送程序和接收程序需要确定如何传输一个比特位“1”以及如何传输一个比特位“0”.因此,应该设计合适的编码和解码协议.为了识别处理器频率与辅助线程不同状态之间的关系,本文使发送程序交替激活和不激活辅助线程,并让接收程序每10ms检测一次处理器的频率.图5展示了处理器的频率随着时间的变化情况.可以看出,当辅助线程被激活时,处理器工作在一个高频率状态下,否则处理器工作在一个低频率状态下.在图5的基础上,本文设计编码和解码协议如下.(1)对于编码,如果发送程序需要发送“1”,它会激活辅助线程,如果需要发送“0”,它不会激活或终止正在运行的辅助线程.如果需要发送相同的值,发送程序不改变辅助线程的当前状态./doi/10.1360邱朋飞等中国科学:信息科学2025年第55卷第2期306图4(网络版彩图)频率隐藏通道攻击方法概览.发送程序通过辅助线程改变处理器的负载,接收程序通过读取处理器的频率信息推测发送程序发送的数据.Figure4(Coloronline)Overviewoftheproposedfrequency-basedcovertchannelattack.Thesenderprocedurechangestheprocessor’sworkloadbasedonthedatathroughanauxiliarythread,andthereceiverprocedureinfersthedatasentbythesenderprocedurebyidentifyingtheprocessor’sfrequency.图5(网络版彩图)发送程序每隔10ms激活辅助线程情况下,处理器的频率随着辅助线程不同状态的变化情况.基于此,我们可以设计编码和解码协议.Figure5(Coloronline)Changesofprocessor’sfrequencywiththedifferentstatesoftheauxiliarythreadwhenthesenderprocedureactivatestheauxiliarythreadevery10ms.Basedonthis,wecandesigntheencodinganddecodingprotocolforthecovertchannel.(2)对于解码,如果接收程序读取到高频率,它输出比特位“1”,否则,比特位“0”被解码.由于数据传输时可能会出现一些不可控的噪声,本文将汉明(Hamming)码嵌入到传输的数据中以实现错误的检测和纠正.当然,可以使用其他的纠删码方法以实现一次发现更多的位错误,例如,/doi/10.1360邱朋飞等中国科学:信息科学2025年第55卷第2期307表2频率隐藏通道攻击参数描述.Table2Meaningoftheparametersoftheproposedfrequency-basedcovertchannelattack.ParameterParametermeaningTsThetimeslice,whichreferstothetimerequiredforadatatransmission.Withinatimeslice,thesenderproceduretransfersonebitofdatatothereceiverprocedure.TiThedatasendwindow.Atthebeginningofeachdatasendwindow,thesenderprocedureupdatestheprocessor’sworkloadaccordingtoonebitofthedata.TmThefrequencymonitorwindow,whichisalsothewaitingtimeofthereceiverprocedurebetweentwofrequencydetections.VThetotalvotes,whichisthenumberthatthereceiverprocedureprobestheprocessor’sfrequencywithinTi.SThethresholdfrequency.Iftheprocessor’sfrequencyisgreaterthanS,itmeansthata“1”issent,otherwise,a“0”issent.Bose-Chaudhuri-Hocquenghem(BCH)码[58]和二进制戈莱码(Golay)[59]等,不过这会带来更高的实现和执行复杂性.除了检错和纠错,本文还通过创建时间片并利用投票机制来缓解噪声的影响.在一个时间片内,接收程序多次测量处理器的频率.在每次频率测量中,如果接收程序发现处理器的频率超出了预定义的阈值,则增加表示比特位为“1”的计数器,否则,增加表示比特位为“0”的计数器.该时间片内的解码数据是通过比较两个计数器值的大小来决定的.发送程序需要通知接收程序数据传输事件的开始和结束.共享内存、信号量和套接字等传统的进程同步方式会将数据传输过程暴露给OS.本文使用一个特殊的字节序列来表示数据传送的开始和结束(####表示数据传输的开始,$$$$表示数据传输的结束).3.6.3攻击参数在进行秘密信息传送时,需要为以下5个参数选择合适的值:Fchannel={Ts,Ti,Tm,V,S},其中每个参数的意义如表2所示.4攻击实例1:攻破ARMTrustZoneTang等[13]发现通过ARM处理器的频率接口可以实现高频率故障注入攻击,该攻击命名为CLKscrew.然而,Tang等认为对ARM处理器进行低电压故障注入攻击是不可行的,因为处理器会在电压被非法更改后立即重启.本文在ARM处理器上实现了第3.5小节所提出的软件控制的低电压故障注入攻击方法,成功获取了由TrustZone保护的AES加密程序的密钥,并绕过TrustZone加载应用程序时的安全验证机制.本节介绍实施攻击时面临的挑战以及实验结果.4.1实验设置本实验的设备为GoogleNexus6移动手机,手机的处理器是高通公司的APQ8084AB,系统版本号是LMY48M.差分分析过程是在一个DELLXPS电脑中的Ubuntu16.04虚拟机上实现的.在执行被攻击程序之前,本文首先刷新Cache以清除Cache中的现有数据,然后多次执行被攻击程序,实现使用被攻击程序相关的数据填充Cache的目标,此时,处理器的状态寄存器和分支预测表也与被攻击程序相关.此外,本文还在更改电压过程中屏蔽针对被攻击核的中断,以减少中断对被攻击程序执行时间的影响./doi/10.1360邱朋飞等中国科学:信息科学2025年第55卷第2期3084.2实现攻击时面临的挑战4.2.1克服电压保护机制阈值电压.高通在其提供的电压管理驱动中增加了低压线性稳压器(lowdropoutlinearregulator,LDO)模式,当请求的电压低于一个事先定义的阈值电压时,电压驱动程序会将电压的管理模式设置成LDO模式,此时,处理器的电压会被设置成阈值电压,而不是请求的较低电压,从而避免低电压触发硬件故障.本文通过修改电压管理驱动程序中电压探测步骤的代码更改阈值电压的大小.电压选择.为了确保具有高频率的处理器核在调整电压时不会出现故障,电压管理驱动程序会检查请求的电压是否能支持最高频率处理器核的正常运行,如果请求的电压低于最高频率核所能接受的最低电压,则将处理器的电压设置为该最高频率核所能接受的最低电压.也就是说,除非降低频率,否则直接调节处理器电压是不能成功的.本文通过修改电压管理驱动程序来取消该限制.4.2.2监控被攻击程序由于注入的硬件故障不一定会造成预期的数据更改,需要较多次数的尝试才能分析出结果.如果攻击者能获得故障注入位置或者能检测到注入的硬件故障是否实现了预期的数据更改,则私密数据的搜索空间能被大大降低.本文使用Cache侧通道攻击来推测被攻击程序的执行数据.Lipp等[60]验证了Cache侧通道攻击对TrustZone有效,并成功读取了执行在TrustZone中的AES程序的状态矩阵.本文使用Prime+ProbeCache侧通道攻击方法监视被攻击程序的执行过程.4.2.3精确计时Tw和Td都是时间敏感参数,在实际攻击时,它们一般是若干个时钟周期.因此,操作系统提供的计时函数4)不能满足时间精度的要求.本文使用特定循环次数的空指令(NOP)实现计时功能.一般情况下,一个NOP指令除了花费一个时钟周期外什么也不做,是一个能在时钟周期粒度计时的很好的指令.本文直接将计时指令嵌入到所需计时的位置处,以消除函数调用过程对计时的影响.4.2.4提高故障注入成功率在进行攻击时,触发的硬件故障可能会导致系统重启,此外,某些注入尝试可能会失败.本文使用以下技术避免系统重启并提高攻击的效率和可靠性.让无关处理器核处在忙状态.本文将除了攻击核和被攻击核外的其他核称为无关核,无关核的工作状态对攻击电压持续时间会有影响.本文分别将无关核的状态设置为空闲(关闭)、正常(利用率在30%到50%之间)和繁忙(利用率在90%以上),然后测试为了成功注入故障,攻击电压需要持续的最短时间,实验结果如图6所示.当无关核处于繁忙状态时,所需要的攻击电压持续时间是最少的,这是因为无关核会消耗更多的能量.因此,为了降低攻击电压持续时间,本文让无关核工作在繁忙状态下.降低Vc.从图6可以看出,较低的攻击电压可缩短低电压持续时间.但是,如果Vc过高,从Vc降到一个较低的Vl的电压降幅会很大,容易造成系统的重启.本文发现减少电压降幅会使从Vc到Vl的切换更容易成功.因此,在攻击之前,本文将Vc设置为能保证所有处理器核正常工作所需的最低电压.4.2.5保护攻击程序由于各个核的电压都是一样的,在降低电压时,所有核的电压都会受到影响.幸运的是,ARM处理器各个核的频率可以被单独设置.由于电子特性,一个核的频率越高,其所需要的最低电压也越高. 4)在Linux内核中,udelay,mdelay,ndelay和msleep被广泛用来实现计时功能./doi/10.1360邱朋飞等中国科学:信息科学2025年第55卷第2期309图6(网络版彩图)不同电压和不同无关核状态(空闲、正常、繁忙)下产生硬件故障的最小持续时间(NOP指令执行次数).Figure6(Coloronline)Minimumduration(loopnumberofNOPinstruction)toinduceahardwarefaultatdifferentvoltagesanddifferentstatesofirrelevantcores(idle,normal,andbusy).图7(网络版彩图)被攻击核处于不同状态(繁忙和空闲)时,在不同频率下保证处理器正常工作所需的最低电压.Figure7(Coloronline)Voltageboundaryrequiredtoensurethattheprocessorperformsinstructionscorrectlyatdifferentfrequencieswhenthevictimcoreisindifferentstates(busyandidle).因此,攻击者可以将运行攻击程序的攻击核和其他无关核的频率设置为一个合法但是比较低的值,同时将运行被攻击程序的被攻击核的频率设置为合法但是比较高的值.然后攻击程序在特定时刻从高频率和低频率所需的最低电压之间选择一个合适的电压作为攻击电压并持续一个较短时间.攻击电压对攻击核是安全的,但是对被攻击核是不安全的,因此,硬件故障会被注入到被攻击核中.4.3攻击电压选择本文首先获得被攻击核处于不同频率下的默认电压,然后获得在被攻击核处于空闲状态时保证处理器正常工作的最低电压,最后本文在被攻击核上运行一个无限循环程序以让被攻击核繁忙并获得保证处理器正常工作的最低电压,实验结果如图7所示.对于一个固定频率,黑线和蓝线之间的电压(绿色区域)是安全的,蓝线和棕线之间的电压(黄色区域)可能会注入故障,棕线以下的电压(红色及以下区域)有很大的可能会注入故障.所以我们可以选择棕线以下的电压作为故障电压.4.4等待时间Tw决定着故障注入点,它主要由3个因素决定:(1)被攻击程序的实现代码;(2)被攻击核的频率;(3)攻击核的频率.不失一般性,本文使用的差分故障分析方法建立在AES第八轮的输入出现单字节故障[61]以及RSA程序的公钥模被篡改成易被质因数分解的基础上[13].因此,本文对一个公开的基于S-box的128位AES加密函数和基于Android加密库mincrypt5)的2048位RSA解密函数进行分析,获得了从AES开始执行到第7轮列混合操作开始执行的时间间隔,以及从RSA开始执行到将大端表示的公钥模转换为小端表示的公钥模的代码开始执行的时间间隔,如表3所示.4.5故障电压和持续时间本文首先固定处理器各个核的频率,然后对处理器施加不同的攻击电压,并将攻击电压持续不同的时间.对每一个电压–持续时间对,本文测试了5次.最后,本文获得128位AES的第8轮输入和2048位RSA解密程序的公钥模出现的平均故障字节数,并将实验结果放到图8和9中.5)Mincryptlibrary./platform/system/core.git/+/android-6.0.1r1/libmincrypt,2015./doi/10.1360邱朋飞等中国科学:信息科学2025年第55卷第2期310表3攻击ARMTrustZone时的故障注入等待时间(Tw)(NOP指令执行次数).对于AES,Tw为从AES开始执行到第7轮列混合操作开始执行的时间间隔(NOP指令执行次数),对于RSA,Tw为从RSA开始执行到将大端表示的公钥模转换为小端表示的公钥模的代码开始执行的时间间隔.Table3Waitingtimeforfaultinjection(Tw)(thenumberofexecutionsoftheNOPinstruction)whenattackingARMTrustZone.ForAES,TwisthetimeintervalfromthestartofAES’sexecutiontothestartofthecolumnmixingoperationoftheseventhround.ForRSA,TwisthetimeintervalfromthestartofRSA’sexecutiontothestartofthecodethatconvertsthepublickeymodulusrepresentedinthebigendiantothepublickeymodulusrepresentedinthelittleendian.Frequency(MHz)300422652729883960103611901267149715741728195822652457249625722649TwofAES(×103)62.6245.2931.8227.6123.821.1319.4517.115.6713.5712.5110.759.178.478.027.857.717.68TwofRSA(×105)26.0918.8712.910.969.518.537.766.96.365.514.914.574.083.713.53.353.193.11图8(网络版彩图)不同攻击电压和持续时间下TrustZone中的AES第8轮输入出现的故障字节数.Figure8(Coloronline)NumberoffaultybytesintheinputoftheAES’seighthroundinTrustZoneunderdifferentglitchvoltagesanddurations.图9(网络版彩图)不同攻击电压和持续时间下TrustZone中的RSA整数模出现的故障字节数.Figure9(Coloronline)NumberoffaultybytesinthepublickeymodulusofRSAdecryptionfunctioninTrustZoneatdifferentglitchvoltagesanddurations.4.6攻击TrustZone中的AES程序由于用户不能在TrustZone中执行自定义应用程序,为了实现对运行在TrustZone中的AES程序的攻击,本文利用可信操作系统的接口漏洞将AES放到TrustZone中,然后使用本文提出的软件控制的低电压硬件故障注入攻击方法获取被TrustZone保护的AES密钥.4.6.1将AES插入到TrustZone中高通公司提供了一个安全环境操作系统(qualcommsecureenvironmentoperatingsystem,QSEOS).QSEOS始终会对外部程序提供的参数进行验证,但是,QSEOS的接口存在安全漏洞6),攻击者可以使用该漏洞实现TrustZone权限的获取.本文对该漏洞的利用代码进行了修改,使之能在数字版权管理可信应用程序Widewine中创建一个代码空间并将AES加密程序放到该代码空间中.漏洞利用代码运行时,TrustZone的执行流会被引导到代码空间中执行AES加密程序.4.6.2攻击成功率本文从图8中选择9个平均会产生单字节故障的攻击参数对TrustZone中的AES进行攻击.在 此攻击中,攻击核的频率为0.42GHz,被攻击核的频率为2.65GHz.对于每个参数,本文进行100次 6)Theexploitcodesofcve-2016-2431./laginimaineb/cve-2016-2431,2016./doi/10.1360邱朋飞等中国科学:信息科学2025年第55卷第2期311表4攻击TrustZone中的AES加密程序的成功率.Table4AttacksuccessratewhenbreakingAESencryptionfunctionexecutedinTrustZone.Voltage(V)Duration0.5037000.5539000.6041000.6542000.7042000.7541000.8044000.8545000.904800AverageNumberoffaultybytes48375162285830464244.7Numberofsinglefaultybytes3125321212.2Attacksuccessrate(%)3125321212.2攻击,并使用攻击成功率评估该参数的效果,实验结果如表4所示.可以看出,当攻击参数为{Fa=0.42GHz,Fv=2.65GHz,Vc=1.055V,Tw=7680,Vl=0.65V,Td=4200}时(Tw和Td的单位为一条NOP指令的执行时间,一般是一个时钟周期,下同),攻击成功率大概为5%.4.6.3密钥恢复本文使用以上参数进行200次成功攻击,并获得故障出现的位置.如图10所示,状态矩阵的第10个和15个字节更容易出现故障.当故障位置为10时,差分故障分析程序7)使用926s生成3623个可能的密钥,当故障位置为15时,差分故障分析程序使用1121s生成4248个可能的密钥.这两组可能的密钥只有一个共同元素,即AES的加密密钥.4.7加载不可信应用程序到TrustZone中TrustZone会对加载的应用程序进行4次基于RSA解密的签名验证.本文在TrustZone进行最后一次签名认证时向安全核注入故障,更改RSA解密程序的公钥模,并使用构造的输入密文替换Widevine的最后一级签名.在加载更改后的Widevine程序时,使用同样的攻击参数在TrustZone进行最后一次签名认证时注入硬件故障,进而通过TrustZone的最后一级签名认证,加载更改后的不可信Widevine程序.4.7.1攻击参数签名认证过程中RSA的加载地址是固定的.此外,签名认证过程中最后一轮RSA解密函数的整数模N也被加载到固定的内存地址0x0FC8952C处,这为使用Cache侧通道攻击读取更改后的N提供了可能.本文使用不同的攻击参数对TrustZone中的RSA实施攻击.通过控制攻击电压和攻击电压持续时间,可以得到较多的Nm,每个可质因数分解的Nm都可以使用.由于实验的可重复性,使用相同的攻击参数进行攻击,很容易产生相同的硬件故障.根据是否把公钥模N故障成Nm,可以判断攻击是否成功.4.7.2实现攻击根据本文的实验,当参数为{Fa=0.42GHz,Fv=2.65GHz,Vc=1.055V,Tw=311000,Vl=0.65V,Td=3800}时,200次实验中,73次成功注入故障,其中21次产生了可质因数分解的Nm,在这23个中有15个是一样的(故障后的Nm如图11所示).本文使用该参数加载不可信应用程序时,平均94次尝试中有一次可以成功.4.8攻击成功率分析在对TrustZone中的AES加密程序和RSA解密程序进行攻击时,攻击成功率只有5%和1.1%.这是因为在攻击AES加密程序时,注入的硬件故障只有将第8轮的输入产生单字节错误才算攻击成功,在攻击RSA解密程序时,注入的故障只有将RSA的公钥模改成与采用同一攻击参数得到的结果 7)Differentialfaultanalysisframeworkforaes128./Daeinar/dfa-aes,2013./doi/10.1360邱朋飞等中国科学:信息科学2025年第55卷第2期312图10(网络版彩图)对TrustZone中AES第8轮的输入实现200次单字节故障注入后,每个字节出现的故障次数.Figure10(Coloronline)Occurrencenumberofdifferentfaultinjectionlocationsafter200single-bytefaultinjectionsintotheeighthroundofAESperformedinTrustZone.图11(网络版彩图)Widev

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论