将可信执行环境用于代码和数据的安全性的制作方法

文档序号:11450673阅读:343来源:国知局
将可信执行环境用于代码和数据的安全性的制造方法与工艺



背景技术:

计算机系统对需要保护免于篡改和窃取的越来越多重要、敏感且有价值的信息进行处理。存在必须将秘密保存在平台上的许多软件应用。一些示例应用是财务/银行应用和医疗记录应用。每个秘密文件夹可能对其他秘密文件夹相互不信任,并且每个秘密可以独立于其他秘密而被保护。

为了应对这种篡改和窃取,可以使用可信软件执行环境(txe)。txe阻止不可信软件访问可信软件和数据。软件防护扩展(sgx)是txe的示例并且包括添加到架构中的一组指令和存储器访问变化。这些扩展允许应用将保护容器(有时被称为飞地)实例化。飞地是应用的地址空间中提供保密性和完整性的保护区域(甚至在存在特权软件的情况下)。阻止来自不驻留在飞地中的软件对飞地存储器区域的试图访问,甚至是来自如虚拟机监视器、bios或操作系统等特权软件的访问。

附图说明

根据所附权利要求书、以下对一个或多个示例实施例的详细描述和相应附图,本发明的实施例的特征和优点将变得显而易见。在认为适当的情况下,在附图当中重复参考标记以表示相应或相似的元件。

图1包括本发明的实施例中的多个txe。

图2包括本发明的实施例中的多个txe。

图3包括本发明的实施例中的进程。

图4包括本发明的实施例中的进程。

图5包括本发明的实施例中的进程。

图6包括与本发明的实施例一起使用的系统。

具体实施方式

在以下描述中,虽然阐述了许多特定细节,但是可以在没有这些特定细节的情况下实践本发明的实施例。未详细示出公知的电路、结构和技术,以避免模糊对本说明书的理解。“实施例”、“各种实施例”等指示如此描述的(多个)实施例可以包括特定特征、结构或特性,但并不是每个实施例必定包括所述特定特征、结构或特性。一些实施例可具有针对其他实施例而描述的特征中的一些特征、全部特征或不具有所述特征。“第一”、“第二”、“第三”等描述了共同对象并指示正提及相似对象的不同实例。这种形容词并不暗示如此描述的对象在或者时间上、空间上、排名上、或以其他方式必须采取给定的顺序。

如以上所提出的,软件应用经常遭受来自恶意软件的篡改。如果恶意软件未被检查到,则恶意软件攻击代码流和数据,从而减小数据完整性。许多应用开发者并未意识到恶意软件风险和/或并不知道怎么保护他们的应用免于恶意软件威胁。这种开发者可以依赖于操作系统(os)或防病毒(av)软件来保护应用免受恶意软件的影响。然而,这种方法受限于os不被感染的能力以及av软件具有准确的恶意软件签名的能力。

然而,实施例以新颖的方式使用txe(例如,sgx)来有效地应对恶意软件。此外,实施例以容易实施的方式来这样做。例如,许多开发者并未意识到txe和/或并不知道如何使用txe来防护他们的应用。然而,实施例通过例如提供编程者可以用于容易地将他的或她的应用链接至txe的一个或多个库来解决这些问题。实施例(1)对代码执行添加保护并确保数据完整性,(2)服务于一系列软件应用,(3)对开发者应用的应用具有很小的影响,并且(4)是高度可配置的。

具体地,实施例使用链接至应用(例如,每应用进程1个可信代理)并且耦合至“可信管理器”(例如,每设备1个可信管理器)的一个或多个“可信代理”。可信管理器负责控制所述一个或多个可信代理的整体行为并且负责管理所有可信代理的数据。可信管理器和任何可信代理经由一个或多个安全通信通道(在包括可信和管理代理的设备的存储器内,或者经由具有不包括在设备中的实体的web)彼此通信并且与其他实体通信。可信代理在应用进程空间中运行并且收集与应用(例如,一个或多个应用的关键代码和/或数据)相对应的信息(例如,测量)。

可以使用sgx来实施可信管理器和/或可信代理。可以将(多个)测量(由可信代理收集的)传递至可信管理器(经由安全通道)并且由可信管理器对其进行处理/验证。在另一个实施例中,可以将(多个)测量安全地发送给“后端服务”(比如,远离但耦合至包括(多个)可信代理和可信管理器的计算节点的计算节点),在所述后端服务处执行对测量的验证。可以将对“不良”测量(例如,已经被篡改/修改的代码和/或数据)的任何检测报告给用户和/或应用提供商和/或“后端服务”以供进一步处理。因此,可信管理器可以监测设备上的(多个)可信代理的测量,并且/或者后端服务可以监测可信管理器的测量。

实施例可以进一步通过实施“保活(keepalive)”机构来应对恶意软件。“保活(keepalive)”信号(或者有时被称为“保活(keepalive)”信号)是由一个设备发送给另一个设备以便检查这两个设备之间的通信链路正在运行或者以便阻止此链路被破坏的信号(例如,消息)。例如,可以以预定义间隔发送保活信号。在发送信号之后,如果没有收到任何应答,则假设链路或可信代理停止运行或被损坏(可能由恶意软件损坏)。保活消息往往很短并且不占用很多带宽。然而,它们的精确格式和使用条件取决于通信协议。

实施例拥有许多优点。例如,实施例可以包括可以在安全容器中运行关键代码并且可以对所述关键代码(或其部分)进行测量的txe。实施例可以执行对篡改的自组织发现,不论恶意软件的性质(或者恶意软件的签名)如何。实施例几乎不依赖于os的完整性和/或av更新。实施例对不同代码/数据部分进行配置(在不同时间)以便进行测量。用于测量的“目标”部分是可配置的并且可由所有者、应用作者等控制。进一步地,通过将应用链接至(静态地或动态地)txe环境,解决方案是“通用的”并且可以容易地与各种应用一起工作。因此,使能所述服务需要应用开发者的很少努力。最终,各种实施例使用安全的保活机构来阻止拒绝服务(dos)攻击。

dos或分布式拒绝服务(ddos)攻击是试图使机器或网络资源不可用于其预期用户。尽管用于执行dos攻击的方式变化,但是这种攻击通常由临时或无限期地中断或暂停连接至互联网的主机的服务的努力组成。dos攻击可以涉及使用外部通信请求来使目标机器饱和,到如此程度以至于目标机器无法对合法流量做出响应或者很慢地响应以至于被致使基本上不可用。这种攻击通常导致服务器过载。概括地说,可以通过以下方式来实施dos攻击:或者强迫(多个)目标计算机复位;或者消耗其资源,从而使得其不再可以提供其预期服务;或者妨碍预期用户与受害程序之间的通信介质,从而使得它们不再可以充分地通信。dos攻击还可以包括拒绝设备(比如,图1的系统100)内的服务(例如,拒绝对硬件机构的软件访问)。例如,这种dos攻击可以包括拒绝对可信代理或可信管理器的适当操作;和/或拒绝对可信代理与可信管理器之间和/或可信管理器与后端服务之间的通信通道的操作。

图1包括本发明的实施例中的多个txe。计算节点100可以包括可信管理器txe105,所述可信管理器txe可以经由安全通信通道130、131、132而耦合至可信代理txe101、102、103。可信代理txe101、102、103可以对应于软件应用110、111、112。其他软件应用113、114、115、116可以不发起或对应于txe。txe101、102、103和/或105中的任何txe可以经由安全通信通道133、134耦合至基于云的后端服务远程计算节点120。

在实施例中,txe101、102、103、105是在设备100上运行的环3服务。在实施例中,应用110、111、112、113、114、115、116中的每个应用还可以在设备100上运行或执行(或至少存储在驻留于设备100内的存储器中)。设备100可以是依赖于对软件的可信执行的各种计算节点中的任何计算节点,如例如,以下各项中的一些或全部:智能电话、平板计算机、笔记本计算机、膝上型计算机、服务器节点、汽车、航空无人机、穿戴在手腕/身体上以便监测生物数据的健身带、提供互联网接入的眼镜、如混合平板计算机和智能电话等其组合等等。

环3服务指等级保护域(通常被称为保护环),所述等级保护域是用于保护数据和功能免于错误(例如,通过改善容错)和恶意行为的机制。计算机os提供不同资源访问级别。保护环是计算机系统的架构内的一个或多个特权层次级别或层之一。这通常由在硬件或微代码级别上提供不同cpu模式的一些cpu架构进行硬件实施。环从最高特权(最高可信,通常编号为零)到最低特权(最低可信,通常具有最高环编号)按层次安排。在大多数操作系统上,环0是具有最多特权的级别并且最直接地与如cpu和存储器等物理硬件交互。在实施例中,环0用于内核代码和设备驱动程序;环2用于特权代码(例如,具有i/o访问许可的用户程序);并且环3用于非特权代码(例如,用户程序)。

返回到图1,可以使用sgx等来实施可信管理器txe105以及可信代理txe101、102、103。txe101、102、103、105各自可以包括在安全容器(txe)之内运行的软件。txe101、102、103、105可以提供关键服务/功能以便保守秘密(例如,加密密钥、云服务120白名单、测量验证值等)。

可信管理器txe105可以使用限定了后端服务(例如,服务120)的白名单,txe101、102、103、105中的任何txe应当连接至所述后端服务。例如,白名单是被批准提供(或被提供)特定特权、服务、移动性、访问和/或认可的实体的清单或登记册。在所述清单上的实体将被接受、批准或认可。列入白名单与列入黑名单相对应,列入黑名单是标识被拒绝、不被认可或被排斥的实体的做法。

在实施例中,txe105创建共享存储器空间(例如,命名的存储器空间)以便稍后由可信代理101、102、103中的任何或所有可信代理用作用于与可信管理器105通信的基础设施。使用如sgx等txe的基本性质,可信管理器txe105可以与后端服务120连接(通道134)并且证明txe105的有效性和安全性性质,从而使得服务120可以实现对txe105的信任程度。这种连接134可以用于稍后由可信管理器105提供的所有服务(例如,对来自txe101、102、103的测量的供应)以及来自后端服务120的所有通信/控制。

图2包括本发明的实施例中的多个txe。可信代理txe201与(例如,服务)代理线程241和应用线程242相对应,并且更具体地,与应用线程242的部分(比如,代码243和/或数据244的将被测量以便评估代码和/或数据的完整性的特定部分)相对应。代理线程241和(多个)应用线程242全都在如环3层等应用进程空间240内进行操作。

代理线程241经由共享存储器250耦合至可信管理器txe205。然而,在实施例中,可以经由如传输层安全(tls)或安全套接字层(ssl)路径(其是被设计成用于通过互联网提供通信安全性的密码协议)等安全连接来实现所述耦合。

可信管理器txe205与(或服务)可信管理器线程206相对应,所述可信管理器线程可以提供如保活服务207、测量服务208和/或与连接服务209的耦合等服务。可信管理器txe205可以在环3层/级别处进行操作。

如应用110、111、112等应用可以与可信代理txe101、102、103静态链接(或对其进行动态加载)并且可以将这些txe作为进程中的新线程(例如,代理线程241)而运行。将应用110用作示例,应用110将初始化(例如,init())并启动(例如,run())txe101。当对可信代理txe101(图2中的201)进行加载时,可以调用一次init()函数。在此阶段中,可信代理线程241将为可执行代码243的安全执行流程和/或数据244(例如,密钥、测量)的安全性创建txe(txe201)。run()函数可由应用110周期性地调用并且可以启动txe201以便然后对代码243和/或数据244进行测量。

当可信代理txe201正在运行时(无论是来自初始的初始化init()还是来自init()之后发生1次、2次、3次或更多次启动(run())的周期启动),txe201可以执行若干动作。

图3包括实施例中的进程。首先,当应用110对可信代理txe201进行初始化时(要素301),可信代理txe201将连接至由可信管理器206创建的共享存储器250(要素302)。然后,可信代理txe201与可信管理器txe205交换密钥(例如,经由迪菲-赫尔曼(diffie-hellman)型交换)以便使用共享存储器250来创建安全通道230(例如,tls)(要素304)。为了保护此流程,可信管理器250和可信代理201可以使用txe证明来进行彼此认证(要素303)。这种认证在例如以太·阿纳蒂(ittaianati)等人的“innovativetechnologyforcpubasedattestationandsealing(用于基于cpu的证明和密封的创新技术)”(可在https://soft.ware_intel_com/en-us/articles/innovative-technology-for-cpu-based-attestation-and-sealing处获得)中加以描述。

可信代理txe201可以收集关于应用的一般信息,比如,代码243和/或数据244的测量(要素305)。然后,txe201可以对信息进行加密并通过将加密信息放入共享存储器250中来将所述信息发送给管理器txe205以供txe205访问(要素306)。

在实施例中,txe201可以从可信管理器txe205接收关于要对什么代码/数据进行测量的更新信息。例如,后端服务220可以通知txe205,应当对除了代码243以外的代码进行测量,以便提供恶意软件可能遇到困难的时间预测的“移动目标”。服务220和/或txe205可以将应用标识用作init()调用和/或run()调用的参数,所述标识具有已知格式和唯一值。这将对需要用于把待测量的代码和/或数据作为目标的标识进程进行优化。

图4包括实施例中的进程。在对txe201的初始化之后,对txe201的每次随后调用可能导致txe采取若干动作。例如,txe201可以对代码243和/或数据244和/或txe205和/或服务220所针对的其他代码进行测量(要素401)。txe201可以进一步创建其传达给txe205的保活印记(要素402)。进一步地,txe201可以对数据(例如,代码243和/或数据244的测量)进行加密并将其发送给可信管理器txe205(要素403)。

在实施例中,测量流程/进程将选择从进程存储器中读取的固定或随机存储器部分(例如,代码243和/或数据244)并且对其进行测量以便创建散列。然后,经由若干选项中的一个或多个选项对多个结果进行分析。例如,对测量的分析(例如,一个测量与白名单值的比较)可由可信代理txe201进行。为了支持这种选项,检查算法和值需要在代理txe201中可用。代理txe201可以从可信管理器txe205获得预期值。然而,分析还可由可信管理器txe205进行。在这种情况下,检查算法和值需要在txe管理器205中可用。管理器txe205可以从云服务220获得预期值。在仍另一个选项中,对测量的分析可由后端服务220进行。

在实施例中,保活机构由所有部件(例如,在txe201与txe205之间,以及在txe205与服务220之间,并且可能在txe201与服务220之间)用于防范dos攻击。对dos攻击的检测可由可信代理txe201(例如,如果txe201未被准时调用以便执行测量)、可信管理器txe205(例如,如果代理txe201未准时将测量数据发送给txe205)以及后端服务220(例如,如果管理器txe205未准时将测量数据发送给服务器220)进行。

实施例防范恶意软件可能试图刚好在应用线程241调用可信代理txe201之前强取以上所描述的监管流程的情况。恶意软件可以在发生测量之前修改进程存储器空间。稍后,恶意软件可以在来自可信代理201的询问结束之后恢复存储器的状态/内容。为了应对这种可能性,一旦txe201被调用,可信代理txe201就可以永不返回控制。例如,在被初始化之后,txe201可以连续运行并通过使用“pause”(例如,指令集中的pause)以及其他类指令来收集测量,同时在可信代理txe201之内循环。

txe201可以经由进程间通信(ipc)与txe205通信,所述进程间通信包括使用通信协议来在多个且通常专用的进程之间共享数据的活动。

因此,以上所描述的实施例提供了以下各项的唯一组合:使用txe来进行的安全执行;在txe之间经由共享存储器或tls型通道使用加密数据传输来进行的安全ipc;可信保活机构;存储器测量和验证;以及使用后端服务来进行控制、管理和报告。

图5包括本发明的实施例中的进程。

在实施例中,一种装置包括至少一个存储器和用于执行操作的耦合至所述至少一个存储器的至少一个处理器。图5中描绘了那些操作。

框505包括在至少一个存储器的受保护非特权用户地址空间(例如,环3空间)中创建第一txe,所述txe对第一数据和第一可执行代码(例如,代码243、数据244)中的至少一者进行第一测量,并且当第一测量处于第一txe内时使用持久性第一基于硬件的密钥来对第一测量进行加密。使用基于硬件的密钥帮助强化进程以便使其对于恶意软件更具弹性(如与使用基于软件的密钥相反的)。框505可以包括经由包括创建第一txe的指令的库将第一txe链接至代码和/或数据。框505可以进一步包括软件应用(例如,应用110)对第一txe进行初始化。第一txe可以响应于来自第三txe的使第一txe进行第一测量的调用而进行第一测量。

框510包括在非特权用户地址空间(例如,空间240)中创建第二txe,所述txe对第二数据和第二可执行代码(例如,类似于代码242、数据243但是针对应用111而不是与代码242、数据242相对应的应用的代码和数据)中的至少一者进行第二测量。

框515包括在非特权用户地址空间中创建第三txe。

框517包括向第三txe认证第一txe。框517还可以包括向远程计算节点(例如,服务220)认证第三txe。

框520包括在第一txe与第三txe之间创建第一安全通信通道(例如,通道130)并且在第二txe与第三txe之间创建第二安全通信通道(例如,通道131)。

框525包括在第一txe与第三txe之间经由第一安全通信通道传达第一测量。这可以包括将第一测量存储在至少一个存储器中。可以在第一txe与第三txe之间共享所述至少一个存储器。

框530包括当第一测量存储在所述至少一个存储器中时,第三txe访问第一测量。这还可以包括将第二测量存储在所述至少一个存储器中。

框535包括将第一测量与另一个测量值进行比较。框535还可以包括基于持久性第一基于硬件的密钥和持久性第二基于硬件的密钥中的至少一者来向远程计算节点(例如,服务220)认证第三txe。因此,txe201、205可以依赖于一个或多个基于硬件的密钥来提供如在例如以太·阿纳蒂(ittaianati)等人的“innovativetechnologyforcpubasedattestationandsealing(用于基于cpu的证明和密封的创新技术)”(可在https://soft.ware_intel_com/en-us/articles/innovative-technology-for-cpu-based-attestation-and-sealing处获得)中更完整地描述的认证和密封。框535可以进一步包括在远程计算节点与第三txe之间建立保活服务。

框540包括在第一txe与第三txe之间建立保活服务。框545包括第一txe休眠/睡眠以便仅在框550中被周期性地启动/唤醒。因此,软件应用(例如,应用110)可以在对第一txe进行初始化并且然后让第一txe休眠之后周期性地启动第一txe。框550还包括在第一txe进行第一测量之后,从远程计算节点接收目标代码标识符并且然后对与目标代码标识符相对应的目标代码进行附加测量(框555)。

如以上多次提及的,实施例使用示例包括安全飞地的txe。txe阻止在飞地之外执行的软件对飞地之内的软件和数据进行访问。txe包括虚拟存储器区域,所述虚拟存储器区域限定了所述txe,所述虚拟存储器区域阻止在飞地之外执行的软件对飞地之内的软件和数据进行访问。

在例如以下文件中描述了txe/安全飞地的各种实施例:于2009年11月13日提交的题为“methodandapparatustoprovidesecureapplicationexecution(用于提供安全应用执行的方法和装置)”的美国专利申请(序列号12/590,767);于2009年12月22日提交的题为“methodandapparatustoprovidesecureapplicationexecution(用于提供安全应用执行的方法和装置)”的pct专利申请(专利号pct/us2009/069212);于2010年12月22日提交的题为“systemandmethodforimplementingatrusteddynamiclaunchandtrustedplatformmodule(tpm)usingsecureenclaves(用于使用安全飞地来实施可信动态启动和可信平台模块(tpm)的系统和方法)”的美国专利申请(美国专利8,832,452);于2013年6月4日提交的题为“technologiesforhardeningthesecurityofdigitalinformationonclientplatforms(用于强化客户端平台上的数字信息的安全性的技术)”的pct专利申请(申请号pct/us2013/44158);“usinginnovativeinstructionstocreatetrustworthysolutions(使用创新指令来创建可信解决方案)”(马修胡克斯特拉(matthewhoekstra)等人);“innovativeinstructionsandsoftwaremodelforisolatedexecution(用于隔离执行的创新指令和软件模型)”(弗兰克麦基(frankmckeen)等人);http://software***intel***com/sites/default/files/329298-001.pdf;以及2013年6月24日在以色列特拉维夫市联合isca40举行的thesecondworkshoponhardwareandarchitecturalsupportforsecurityandprivacy(关于安全和隐私的硬件和架构支持的第二届研讨会)上呈现的其他论文。因此,本文中未完全地提出关于对安全飞地的操作的细节。这些申请和论文在本文中统称为“安全飞地材料”。

如在安全飞地材料中所描述的,在其包含进程的虚拟地址空间之外开拓了安全飞地。就虚拟地址而言执行对飞地的存储器管理。在实施例中,飞地存储器管理被划分成两部分:地址空间分配和存储器承诺。地址空间分配是对飞地可以使用的最大地址范围的规定。没有对此区域承诺任何实际资源。存储器承诺是对所分配的地址空间内的实际存储器资源(作为页面)的分派。这种两阶段技术允许飞地灵活地控制其存储器使用情况,并且在飞地需要很低时允许在不过度使用存储器资源的情况下增长。承诺将虚拟页面添加到飞地中。

这种差别在两种指令ecreate和eadd中反映。ecreate分配供飞地使用的地址范围。eadd将所述范围内的虚拟存储器页面承诺给飞地。操作系统可以支持分离的分配和承诺操作。例如,windowsapivirtualalloc采取标志自变量mem_reserve(分配)或mem_commit(承诺)。不要求os支持这种分离,但其存在可以使飞地内的存储器管理更加灵活和高效。

在一个实施例中,使用ecreate指令来创建安全飞地,限定了在其中建立飞地的虚拟地址空间范围的基和大小。存储器在密封之前被添加到安全飞地中。例如通过使用windowsapi最佳地展示了飞地创建和承诺进程,并且所述进程进行如下:(1)在所述进程中使用virtualalloc来保留地址空间区域,从而进入mem_reserve标志(所述标志在不实际承诺任何物理存储器或页面文件存储的情况下保留存储器区域);(2)通过再次调用virtualalloc来承诺飞地的第一页,这次使用mem_commit标志;(3)使用ecreate指令来建立初始环境,从而限定与上述地址范围相同的地址范围(即,ecreate分配应用内的虚拟存储器的区域用于托管安全代码和数据);以及(4)对于待添加到飞地中的每个附加页面:对飞地页面进行virtualalloc,使用eadd来将新页面添加到飞地中,使用eextend来添加对128字节页面的测量(eextend更新飞地的测量以便包括eadd中添加的代码或数据),并调用这条指令,直到整个飞地被测量为止(例如,测量可以包括飞地中的代码和数据在其被初始化时的密码散列)。如果要一次添加连续的飞地页面集,则可以对以上步骤进行重排序和优化以便使系统调用的次数最小化。在不支持分离保留和承诺操作的操作系统上,可以例如用简单的malloc代替以上virtualalloc,并且消除对virtualalloc的剩余调用。

因为ecreate和eadd指令使所添加的页面的加密和完整性成为可能,所以非飞地软件不可能在存储器已经被添加到飞地中之后对此存储器进行初始化。运行时系统必须在对其所负责的任何存储器进行eadd之前完全将其初始化。这通常要求运行时系统在适当的地方建立飞地图像,甚至在调用ecreate之前(即,因为在ecreate之后软件不能对secs进行修改)。一旦已经对存储器进行初始化,已经对飞地进行ecreate并且已经对其存储器进行eadd,就可以如本文中所描述的那样对其进行密封和测量。

在一个实施例中,在飞地之内存在两种数据结构,安全飞地控制存储(secs)和线程控制结构(tcs)。secs和tcs包含架构信息以及由运行时软件所使用的非架构方便性字段。一旦secs、一个或多个tcs以及代码和数据已经被eadd,就由einit指令完成飞地创建。这条指令阻止进一步测量信息被写入测量寄存器(mr)(在共同未决申请中有时被称为“ir0”)中。换言之,einit将飞地的内容锁定,并确保只有飞地内的代码可以访问同一飞地中的数据区域。在einit之后,不可以将任何进一步页面添加到飞地中。

不可信代码使用eenter指令来调用飞地,并且飞地经由eexit返回到不可信调用者。在飞地表项上,控制被传递至将堆栈指针切换至飞地之内的指针的代码。当返回时,软件再次交换堆栈指针,然后执行eexit指令。

因此,一旦已经创建了飞地并使用einit来对其进行了初始化,就阻止来自未授权软件(甚至如虚拟机器监视器等软件、bios、或以比飞地本身更高特权级别运行的操作系统功能)对飞地的存储器的试图访问。从物理观点看,虽然飞地数据驻留在寄存器、缓存、或处理器包之内的其他逻辑块中,但是cpu逻辑阻止经由软件进行未授权访问。不管飞地数据何时离开待写入平台存储器中的封装上缓存,数据被自动地加密并且其完整性得到保护。这阻止恶意个人使用存储器探头或其他技术来浏览、修改、或重放包含在飞地内的数据或代码。

紧接前面的描述讨论了用于将安全飞地实例化的各种机构。通过禁用在接下来的引导期间建立安全飞地所需要的存储器配置,禁用安全飞地可以以类似的方式发生。

将基于硬件的解决方案用于提供txe在例如以太·阿纳蒂(ittaianati)等人的“innovativetechnologyforcpubasedattestationandsealing(用于基于cpu的证明和密封的创新技术)”(可在https://software_intel_com/en-us/articles/innovative-technology-for-cpu-based-attestation-and-sealing处获得)中得以提出并且以下进一步得以提出。

如在本文中所提供的,txe(也被称为“飞地”)可以彼此协作以便执行某项更高级功能。为了做到这一点,它们需要彼此认证。为此目的,对如sgx架构等txe加以讨论以便解释所述概念。sgx架构提供了ereport指令。

当被飞地调用时,ereport创建被称为report的签名结构(其可以基于持久性基于硬件的密钥)。report结构包含飞地的这两个身份、与飞地相关联的属性(在ecreate期间建立的属性身份模式和其他性质)、硬件tcb的可信度、以及飞地开发者希望传递给目标飞地的附加信息、以及消息认证码(mac)标签。

目标飞地是将验证report上的mac的飞地,从而允许其确定创建report的飞地已经在相同平台上运行。使用被称为“报告密钥(reportkey)”的密钥来产生mac。报告密钥仅对目标飞地和ereport指令是已知的。验证(目标)飞地可以使用egetkey指令来检索其自己的报告密钥。egetkey为飞地提供密钥,所述密钥当中的报告密钥可用于进行对称加密和认证。目标飞地使用报告密钥来重新计算report数据结构上的mac并且验证report由证明(报告)飞地产生。

每个report结构还包括用于用户数据的256位字段。此字段将处于飞地之内的数据绑定至飞地的身份(如由report表示的)。此字段可以用于使用辅助数据通过使用辅助数据的散列摘要来填充所述字段从而延长report,然后在report旁边提供所述散列摘要。对用户数据字段的使用使得飞地能够建立更高层协议以便在其本身与另一个实体之间形成安全通道。例如,通过交换对公开迪菲-赫尔曼密钥进行认证的reports(所述密钥是在飞地内使用相互同意的参数来随机生成的),飞地可以生成经认证的共享秘密并将其用于进一步保护它们自身之间的通信。架构支持通过可供飞地软件使用的rdrand指令来生成真实的随机值。

认证进程如下。首先,在已经建立飞地a(例如,txe201)与飞地b(例如,txe205)之间的通信路径之后,飞地a获得飞地b的mrenclave值。注意,在此步骤中的通信路径不必是安全的。其次,飞地a调用ereport指令连同飞地b的mrenclave来创建去往飞地b的签名report。飞地a经由不可信通信路径将其report传输给飞地b。再次,在从飞地a接收report之后,飞地b调用egetkey来检索其报告密钥,重新计算report结构上的mac,并将结果与伴随report的mac进行比较。mac值的匹配证实a确实是正在与飞地b相同的平台上运行的飞地,并且如此,a正在服从sgx的安全模型的环境中运行。一旦已经验证了tcb的固件部件和硬件部件,飞地b然后就可以检查飞地a的report以便验证tcb的软件部件:mrenclave反映在飞地之内运行的软件图像的内容,并且mrsigner反映密封者的身份。然后,飞地b可以通过为飞地a创建(通过使用来自其刚刚接收的report中的mrenclave值)report来进行回应。飞地b将其report传输给飞地a。然后,飞地a可以以与飞地b类似的方式来验证报告,从而确认飞地b存在于与飞地a相同的平台上。

本文中所描述的实施例(比如,设备100)可以利用如以下所讨论的图6的系统等系统。事实上,各种实施例可以用于多个不同类型的系统中。例如,在一个实施例中,通信设备可以被安排成用于执行本文中所描述的各种方法和技术。当然,本发明的范围不限于通信设备,并且相反,其他实施例可以针对用于处理指令的其他类型的装置。

程序指令可以用于使利用指令来编程的通用或专用处理系统执行本文中所描述的操作。可替代地,操作可以由含有用于执行所述操作的硬接线逻辑的特定硬件部件执行,或者由编程计算机部件和自定义硬件部件的任意组合执行。本文中所描述的方法可以被提供为(a)计算机程序产品,所述计算机程序产品可以包括一个或多个机器可读介质,所述一个或多个机器可读介质具有存储于其上的指令,所述指令可以用于对处理系统或其他电子设备进行编程以便执行所述方法,或者(b)至少一种存储介质来,所述至少一种存储介质具有存储于其上的用于使系统执行所述方法的指令。本文中所使用的术语“机器可读介质”或“存储介质”应当包括能够存储或编码指令序列的任何介质(瞬态介质,包括信号;或非瞬态介质),所述指令序列供由机器执行并且使机器执行本文中所描述的方法中的任何一种方法。术语“机器可读介质”或“存储介质”将相应地包括但不限于存储器,比如,固态存储器、光盘和磁盘、只读存储器(rom)、可编程rom(prom)、可擦出prom(eprom)、电eprom(eeprom)、磁盘驱动器、软盘、致密盘rom(cd-rom)、数字多功能盘(dvd)、闪存存储器、磁光盘、以及如机器可访问的生物状态保留或信号保留存储设备等更多外来介质。介质可以包括用于以机器可读的形式存储、传输、或接收信息的任何机制,并且所述介质可以包括程序代码可穿过的介质,比如,天线、光纤、通信接口等。程序代码可以以数据包、序列号、并行数据等的形式传输,并且可以以压缩或加密的格式被使用。此外,在本领域中常常将呈一种或另一种形式的软件(例如,程序、规程、进程、应用、模块、逻辑等)说成采取动作或造成结果。这种表述仅是陈述由处理系统对软件的执行使处理器执行动作或产生结果的简写方式。

现在参考图6,示出了根据本发明的实施例的系统实施例1000的框图。系统1000可以包括在例如移动计算节点中,比如,蜂窝电话、智能电话、平板计算机、笔记本计算机、膝上型计算机、个人数字助理以及基于移动处理器的平台。

示出了多处理器系统1000,所述多处理器系统包括第一处理元件1070和第二处理元件1080。虽然示出了两个处理元件1070和1080,但是应当理解的是,系统1000的实施例还可以包括仅一个这种处理元件。系统1000被展示为点对点互连系统,其中,第一处理元件1070和第二处理元件1080经由点对点互连1050耦合。应当理解的是,所展示的任何或所有互连可以被实施为多分支总线而不是点对点互连。如所示出的,处理元件1070和1080中的每一个处理元件可以是多核处理器,包括第一处理器核和第二处理器核(即,处理器核1074a和1074b以及处理器核1084a和1084b)。这种核1074、1074b、1084a、1084b可以被配置成用于以与本文中所讨论的方法类似的方式执行指令代码。

每个处理元件1070、1080可以包括至少一个共享缓存。共享缓存可以存储分别由处理器的一个或多个部件(比如核1074a、1074b以及1084a、1084b)利用的数据(例如,指令)。例如,共享缓存可以本地缓存存储在存储器1032、1034中的数据,以便由处理器的部件更快地访问。在一个或多个实施例中,共享缓存可以包括一个或多个中间级缓存(比如级2(l2)、级3(l3)、级4(l4)、或其他级缓存)、最后一级缓存(llc)和/或其组合

虽然仅以两个处理元件1070、1080来示出,但是应当理解的是,本发明的范围不限于此。在其他实施例中,给定处理器中可以存在一个或多个附加处理元件。可替代地,处理元件1070、1080中的一个或多个处理元件可以是处理器之外的元件,比如加速度计或现场可编程门阵列。例如,(多个)附加处理元件可以包括与第一处理器1070相同的(多个)附加处理器、与第一处理器1070异构或不对称的(多个)附加处理器、加速器(如例如,图形加速器或数字信号处理(dsp)单元)、现场可编程门阵列或任何其他处理元件。就一系列品质度量(包括架构、微架构、热、功耗特性等)而言,处理元件1070、1080之间可以存在多种差异。这些差异可以有效地将其本身表现为处理元件1070、1080之间的不对称性和异构性。对于至少一个实施例,各种处理元件1070、1080可以驻留于相同裸片封装体中。

第一处理元件1070可以进一步包括存储器控制器逻辑(mc)1072以及点对点(p-p)接口1076和1078。类似地,第二处理元件1080可以包括mc1082以及p-p接口1086和1088。mc1072和1082将处理器耦合至对应存储器(即存储器1032和存储器1034),所述存储器可以是主存储器的本地附接至对应处理器的部分。虽然mc逻辑1072和1082被展示为集成到处理元件1070、1080中,但是对于替代性实施例,mc逻辑可以是处于处理元件1070、1080之外而不是集成在其中的离散逻辑。

第一处理元件1070和第二处理元件1080可以分别经由p-p互连1062、10104经由p-p接口1076、1086而耦合至i/o子系统1090。如所示出的,i/o子系统1090包括p-p接口1094和1098。此外,i/o子系统1090包括接口1092以便将i/o子系统1090耦合至高性能图形引擎1038。在一个实施例中,总线可以用于将图形引擎1038耦合至i/o子系统1090。可替代地,点对点互连1039可以耦合这些部件。

进而,i/o子系统1090可以经由接口1096耦合至第一总线10110。在一个实施例中,第一总线10110可以是外围组件互连(pci)总线,或如高速pci总线或另一种第三代i/o互连总线等总线,尽管本发明的范围不限于此。

如所示出的,各种i/o设备1014、1024可以连同总线桥1018耦合至第一总线10110,所述总线桥可以将第一总线10110耦合至第二总线1020。在一个实施例中,第二总线1020可以是低引脚数(lpc)总线。在一个实施例中,各种设备可以耦合至第二总线1020,包括例如键盘/鼠标1022、(多个)通信设备1026(所述通信设备进而可以与计算机网络通信)、以及数据存储单元1028(比如磁盘驱动器或其他大容量存储设备),所述数据存储单元可以包括代码1030。代码1030可以包括用于执行以上所描述的方法中的一种或多种方法的实施例的指令。进一步地,音频i/o1024可以耦合至第二总线1020。

注意,设想了其他实施例。例如,替代所示出的点对点架构,系统可以实施多分支总线或另一种这种通信拓扑结构。而且,图6的元件可以可替代地使用比图6中所示出更多或更少的集成芯片来进行分区。

示例1a包括一种装置,所述装置包括至少一个存储器和耦合至所述至少一个存储器以便执行操作的至少一个处理器,所述操作包括:在所述至少一个存储器的受保护非特权用户地址空间中创建第一可信执行环境(txe),所述第一txe对第一数据和第一可执行代码中的至少一者进行第一测量并且当所述第一测量处于所述第一txe内时使用持久性第一基于硬件的密钥来对所述第一测量进行加密;在所述非特权用户地址空间中创建第二txe,所述第二txe对第二数据和第二可执行代码中的至少一者进行第二测量;在所述非特权用户地址空间中创建第三txe;在所述第一txe与所述第三txe之间创建第一安全通信通道并且在所述第二txe与所述第三txe之间创建第二安全通信通道;以及在所述第一txe与所述第三txe之间经由所述第一安全通信通道传达所述第一测量。

“第一txe”可以不必是在设备上创建的这种第一txe。对用户飞地(例如,可信代理101)可以要求其他架构类型飞地在形成用户飞地时已经存在。

在示例2a中,如示例1a所述的主题可以可选地包括:其中,所述至少一个处理器用于执行操作,所述操作包括:经由包括指令的库将所述第一txe链接至所述第一可执行代码和所述第一数据中的所述至少一者,所述指令响应于被执行而使所述至少一个处理器创建所述第一txe。

在示例3a中,如示例1a至2a所述的主题可以可选地包括:其中,所述至少一个处理器用于执行操作,所述操作包括:在所述第一txe与所述第三txe之间建立保活服务。

在示例4a中,如示例1a至3a所述的主题可以可选地包括:其中,所述至少一个处理器用于执行操作,所述操作包括:所述第一txe在所述非特权用户地址空间中对附加数据和附加可执行代码中的至少一者进行附加测量。

在示例5a中,如示例1a至4a所述的主题可以可选地包括:其中,所述第一可执行代码和所述附加可执行代码两者都与第一软件应用的至少一部分相对应。

在示例6a中,如示例1a至5a所述的主题可以可选地包括:其中,所述至少一个处理器用于执行操作,所述操作包括:所述第一软件应用对所述第一txe进行初始化。

在示例7a中,如示例1a至6a所述的主题可以可选地包括:其中,所述至少一个处理器用于执行操作,所述操作包括:所述第一软件应用在对所述第一txe进行初始化之后周期性地启动所述第一txe。

在示例8a中,如示例1a至7a所述的主题可以可选地包括:其中,所述至少一个处理器用于执行操作,所述操作包括:对所述第一数据和所述第一可执行代码中的至少一者进行测量,并且在所述第一txe与所述第三txe之间经由所述第一安全通信通道传达所述测量,当所述测量仍处于所述第一txe内时,基于所述第一基于硬件的密钥对所述测量进行加密。

在示例9a中,如示例1a至8a所述的主题可以可选地包括:其中,所述至少一个处理器用于执行操作,所述操作包括:将所述第一测量存储在所述至少一个存储器中,其中,所述第一txe包括虚拟存储器区域,所述虚拟存储器区域限定了所述第一txe并且阻止在所述第一txe之外执行的软件对所述第一txe之内的软件和数据进行访问。

在一个实施例中,对虚拟存储器(即,相同用户进程内的飞地地址)和物理存储器(即,系统ram中的飞地页面)进行保护。

在示例10a中,如示例1a至9a所述的主题可以可选地包括:其中,所述至少一个处理器用于执行操作,所述操作包括:当所述第一测量被存储在所述至少一个存储器中时,所述第三txe访问所述第一测量。

在示例11a中,如示例1a至10a所述的主题可以可选地包括:其中,所述至少一个存储器在所述第一txe与所述第三txe之间共享。

在示例12a中,如示例1a至11a所述的主题可以可选地包括:其中,所述至少一个处理器用于执行操作,所述操作包括:将所述第二测量存储在所述至少一个存储器中。

在示例13a中,如示例1a至12a所述的主题可以可选地包括:其中,所述至少一个处理器用于执行操作,所述操作包括:将所述第一测量与另一个测量值进行比较。

在示例14a中,如示例1a至13a所述的主题可以可选地包括:其中,所述至少一个处理器用于执行操作,所述操作包括:向远程计算节点认证所述第三txe。

可以在实施例中而不是在其他实施例中的txe内形成如节点120等第三远程计算节点。

在示例15a中,如示例1a至14a所述的主题可以可选地包括:其中,在所述第一txe进行所述第一测量之后,所述至少一个处理器用于执行操作,所述操作包括:从所述远程计算节点接收目标代码标识符并且然后对与所述目标代码标识符相对应的目标代码进行附加测量。

在示例16a中,如示例1a至15a所述的主题可以可选地包括:其中,所述至少一个处理器用于执行操作,所述操作包括:在所述远程计算节点与所述第三txe之间建立保活服务。

在示例17a中,如示例1a至16a所述的主题可以可选地包括:其中,所述至少一个处理器用于执行操作,所述操作包括:所述第二txe基于所述持久性第一基于硬件的密钥来对所述第二测量进行加密,并且在所述第二txe与所述第三txe之间经由所述第二安全通信通道传达所述第二测量。

在实施例中,第一txe和第二txe各自“基于”第一基于硬件的密钥来对材料进行加密,但是可能事实上依赖于涉及飞地特定的数据的密钥推导。因此,在实施例中,用于对第一测量和第二测量进行加密的实际密钥在基于相同密钥(例如,源自或者构建自相同密钥)的同时可以是不同的。

在示例18a中,如示例1a至17a所述的主题可以可选地包括:其中,所述至少一个处理器用于执行操作,所述操作包括:在所述第一txe与所述第三txe之间经由所述第一安全通信通道传达所述第一测量之前,向所述第三txe认证所述第一txe。

在示例19a中,如示例1a至18a所述的主题可以可选地包括:其中,所述至少一个处理器用于执行操作,所述操作包括:所述第一txe响应于来自所述第三txe的使所述第一txe进行所述第一测量的调用而进行所述第一测量。

在示例20a中,如示例1a至19a所述的主题可以可选地包括:其中,所述至少一个处理器用于执行操作,所述操作包括:基于所述持久性第一基于硬件的密钥和持久性第二基于硬件的密钥中的至少一者来向远程计算节点认证所述第三txe。

在示例21a中,如示例1a至20a所述的主题可以可选地包括:其中,所述至少一个存储器的所述受保护非特权用户地址空间与环3特权级别相对应而不与环0特权级别相对应,并且进一步地,其中,当所述第一测量处于所述第一txe内时,所述第一测量对不在所述第一txe内执行的指令不可访问。

示例22a包括一种装置,所述装置包括:耦合至至少一个存储器以便执行操作的至少一个处理器,所述操作包括:在所述至少一个存储器的非特权用户地址空间中创建第一可信执行环境(txe)和第二txe;所述第一txe对可执行代码进行测量,并且当所述测量处于所述第一txe内时,对所述测量进行加密;以及所述第一txe在所述第一txe与所述第二txe之间经由安全通信通道传达所述测量;其中,所述第一txe包括虚拟存储器区域,所述虚拟存储器区域限定了所述第一txe并且阻止在所述第一txe之外执行的软件对所述第一txe之内的软件和数据进行访问。

在示例23a中,如示例22a所述的主题可以可选地包括:其中,所述至少一个处理器用于执行操作,所述操作包括:在其上进行所述测量的软件应用对所述第一txe进行初始化,并且在对所述第一txe进行初始化之后,周期性地启动所述第一txe。

在示例24a中,如示例22a至23a所述的主题可以可选地包括:其中,所述至少一个处理器用于执行操作,所述操作包括:基于所述基于硬件的密钥和另一个基于硬件的密钥中的至少一者来向远程计算节点认证所述第二txe。

示例25a包括至少一种存储介质,所述存储介质具有存储于其上的指令,所述指令用于使系统:在至少一个存储器的非特权用户地址空间中创建第一可信执行环境(txe)和第二txe;对可执行代码进行测量,并且当所述测量处于所述第一txe内时,使用基于硬件的密钥来对所述测量进行加密;以及在所述第一txe与所述第二txe之间经由安全通信通道传达所述测量。

在示例26a中,如示例25a所述的主题可以可选地包括指令,从而使得在其上进行所述测量的软件应用对所述第一txe进行初始化,并且在对所述第一txe进行初始化之后,周期性地启动所述第一txe。

示例1b包括一种由至少一个处理器执行的方法,所述方法包括:在至少一个存储器的受保护非特权用户地址空间中创建第一可信执行环境(txe),所述第一txe对第一数据和第一可执行代码中的至少一者进行第一测量并且当所述第一测量处于所述第一txe内时使用持久性第一基于硬件的密钥来对所述第一测量进行加密;在所述非特权用户地址空间中创建第二txe,所述第二txe对第二数据和第二可执行代码中的至少一者进行第二测量;在所述非特权用户地址空间中创建第三txe;在所述第一txe与所述第三txe之间创建第一安全通信通道并且在所述第二txe与所述第三txe之间创建第二安全通信通道;以及在所述第一txe与所述第三txe之间经由所述第一安全通信通道传达所述第一测量。

在示例2b,如示例1a所述的主题可以可选地包括:经由包括指令的库将所述第一txe链接至所述第一可执行代码和所述第一数据中的所述至少一者,所述指令响应于被执行而使所述至少一个处理器创建所述第一txe。

在示例3b中,如示例1a至2a所述的主题可以可选地包括:在所述第一txe与所述第三txe之间建立保活服务。

在示例4b中,如示例1a至3a所述的主题可以可选地包括:所述第一txe在所述非特权用户地址空间中对附加数据和附加可执行代码中的至少一者进行附加测量。

在示例5b中,如示例1a至4a所述的主题可以可选地包括:其中,所述第一可执行代码和所述附加可执行代码两者都与第一软件应用的至少一部分相对应。

在示例6b中,如示例1a至5a所述的主题可以可选地包括:所述第一软件应用对所述第一txe进行初始化。

在示例7b中,如示例1a至6a所述的主题可以可选地包括:所述第一软件应用在对所述第一txe进行初始化之后周期性地启动所述第一txe。

在示例8b中,如示例1a至7a所述的主题可以可选地包括:对所述第一数据和所述第一可执行代码中的至少一者进行测量,并且在所述第一txe与所述第三txe之间经由所述第一安全通信通道传达所述测量,当所述测量仍处于所述第一txe内时,基于所述第一基于硬件的密钥对所述测量进行加密。

在示例9b中,如示例1a至8a所述的主题可以可选地包括:将所述第一测量存储在所述至少一个存储器中,其中,所述第一txe包括虚拟存储器区域,所述虚拟存储器区域限定了所述第一txe并且阻止在所述第一txe之外执行的软件对所述第一txe之内的软件和数据进行访问。

在示例10b中,如示例1a至9a所述的主题可以可选地包括:当所述第一测量被存储在所述至少一个存储器中时,所述第三txe访问所述第一测量。

在示例11b中,如示例1a至10a所述的主题可以可选地包括:其中,所述至少一个存储器在所述第一txe与所述第三txe之间共享。

在示例12b中,如示例1a至11a所述的主题可以可选地包括:将所述第二测量存储在所述至少一个存储器中。

在示例13b中,如示例1a至12a所述的主题可以可选地包括:将所述第一测量与另一个测量值进行比较。

在示例14b中,如示例1a至13a所述的主题可以可选地包括:向远程计算节点认证所述第三txe。

在示例15b中,如示例1a至14a所述的主题可以可选地包括:从所述远程计算节点接收目标代码标识符并且然后对与所述目标代码标识符相对应的目标代码进行附加测量。

在示例16b中,如示例1a至15a所述的主题可以可选地包括:在所述远程计算节点与所述第三txe之间建立保活服务。

在示例17b中,如示例1a至16a所述的主题可以可选地包括:所述第二txe基于所述持久性第一基于硬件的密钥来对所述第二测量进行加密,并且在所述第二txe与所述第三txe之间经由所述第二安全通信通道传达所述第二测量。

在示例18b中,如示例1a至17a所述的主题可以可选地包括:在所述第一txe与所述第三txe之间经由所述第一安全通信通道传达所述第一测量之前,向所述第三txe认证所述第一txe。

在示例19b中,如示例1a至18a所述的主题可以可选地包括:所述第一txe响应于来自所述第三txe的使所述第一txe进行所述第一测量的调用而进行所述第一测量。

在示例20b中,如示例1a至19a所述的主题可以可选地包括:基于所述持久性第一基于硬件的密钥和持久性第二基于硬件的密钥中的至少一者来向远程计算节点认证所述第三txe。

在示例21b中,如示例1a至20a所述的主题可以可选地包括:其中,所述至少一个存储器的所述受保护非特权用户地址空间与环3特权级别相对应而不与环0特权级别相对应,并且进一步地,其中,当所述第一测量处于所述第一txe内时,所述第一测量对不在所述第一txe内执行的指令不可访问。

示例22b包括一种由至少一个处理器执行的方法,所述方法包括:在所述至少一个存储器的非特权用户地址空间中创建第一可信执行环境(txe)和第二txe;所述第一txe对可执行代码进行测量,并且当所述测量处于所述第一txe内时,对所述测量进行加密;以及所述第一txe在所述第一txe与所述第二txe之间经由安全通信通道传达所述测量;其中,所述第一txe包括虚拟存储器区域,所述虚拟存储器区域限定了所述第一txe并且阻止在所述第一txe之外执行的软件对所述第一txe之内的软件和数据进行访问。

在示例23b中,如示例22b所述的主题可以可选地包括:(a)在其上进行所述测量的软件应用对所述第一txe进行初始化,并且在对所述第一txe进行初始化之后,周期性地启动所述第一txe;以及(b)基于所述基于硬件的密钥和另一个基于硬件的密钥中的至少一者来向远程计算节点认证所述第二txe。

在示例24b中,如示例1b至23b所述的主题可以可选地包括:至少一种机器可读介质,包括多条指令,所述多条指令响应于在计算设备上被执行而使所述计算设备执行根据示例1b至23b中任一项所述的方法。

在示例25b中,如示例1b至23b所述的主题可以可选地包括:一种通信设备,所述通信设备被安排成用于执行根据示例1b至23b中任一项所述的方法。

在示例25b中,如示例1b至23b所述的主题可以可选地包括:一种设备,所述设备包括用于执行示例1b至23b中任一项的装置。

虽然已经关于有限数量的实施例对本发明进行了描述,但是本领域的技术人员将理解来自其中的许多修改和变体。旨在使得所附权利要求书覆盖如落在本发明的真实精神和范围内的所有这种修改和变体。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1