用于在安全区域和不太安全区域之间转换的装置和方法与流程

文档序号:13809668阅读:372来源:国知局
用于在安全区域和不太安全区域之间转换的装置和方法与流程

本主题一般而言涉及用于在安全区域和不太安全区域之间转换的装置和方法。更具体而言,所述装置和方法涉及用于在安全区域和不太安全区域之间转换的调用网关(callgateway)。



背景技术:

大多数系统和架构旨在保护设备免受未授权用户的恶意攻击。存在几种已知的防止攻击的方法,诸如提供具有不同安全级别的区域,但是,所有已知的方法都具有与它们相关联的缺点。



技术实现要素:

根据第一方面,提供了一种数据处理装置。所述数据处理装置包括:处理电路系统,被配置为响应于程序指令而执行处理函数(function),所述处理电路系统包括第一安全区域、第二安全区域和监视器,其中所述监视器被配置为对于从所述第一安全区域向所述第二安全区域转换的所述处理电路系统应用安全凭证,以使得所述处理电路系统能够在所述第二安全区域中执行函数,以及用于存储包括转换指令和访问参数的至少一个调用网关的受信存储设备,所述监视器还被配置为:响应于转换指令而确定调用网关何时被存储在受信存储设备中,并且在确定调用网关存储在受信存储设备中之后,向所述处理电路系统应用所述安全凭证,使得所述处理电路系统能够在所述第二安全区域中执行目标函数,所述访问参数包括所述目标函数。

根据第二方面,提供了一种数据处理装置。所述数据处理装置包括:处理电路系统,被配置为响应于程序指令而执行处理函数,所述处理电路系统包括第一安全区域、第二安全区域和监视器,其中所述监视器被配置为对于从所述第一安全区域向所述第二安全区域转换的所述处理电路系统应用安全凭证,以使得所述处理电路系统能够在所述第二安全区域中执行函数,以及用于存储包括转换指令和访问参数的至少一个调用网关的受信存储设备,所述监视器还被配置为:响应于转换指令而确定调用网关何时被存储在受信存储设备中,并且在确定调用网关存储在受信存储设备中之后,向所述处理电路系统应用所述安全凭证,使得所述处理电路系统能够访问所述第二安全区域中的存储器位置,所述访问参数定义所述存储器位置。

根据第三方面,提供了一种计算机实现的方法,用于确定何时向处理电路系统应用安全凭证以将所述处理电路系统从第一安全区域转换到第二安全区域。所述方法包括:检测程序指令中的转换指令;识别与调用网关指令相关联的访问参数;确定转换指令和相关联的访问参数是否存储在受信存储设备中;当所述转换指令和所述相关联的访问参数存储在所述受信存储器中时,向所述处理电路系统应用所述安全凭证;以及当所述转换指令和所述相关联的访问参数未存储在所述受信存储器中时,生成安全违规指示。

根据第四方面,提供了一种计算机实现的方法,所述方法验证在用于数据处理装置的程序指令中提供的调用网关。所述方法包括:检测在所述程序指令中提供的既定数;检测调用网关,所述调用网关包括转换指令和访问参数,所述转换指令在与所述既定数相关的预定位置处提供;确定所述调用网关是否存储在数据处理装置处的受信存储设备中,并且当所述调用网关未存储在受信存储设备中时拒绝验证所述调用网关。

根据第五方面,提供了一种计算机实现的方法,所述方法验证在用于包括至少一个模块的数据处理装置的程序指令中提供的调用网关。所述方法包括:检测在所述程序指令中提供的既定数;检测调用网关,所述调用网关包括转换指令和访问参数,所述转换指令在与所述既定数相关的预定位置处提供;解释每个调用网关的所述访问参数;以及当所述调用网关允许访问另一个模块或允许从另一个模块访问时,拒绝将所述模块安装在所述数据处理装置中。

根据第六方面,提供了一种计算机实现的方法,所述方法验证在用于包括至少两个模块的数据处理装置的程序指令中提供的调用网关。所述方法包括:创建所述数据处理装置的映射文件;检测在所述程序指令中提供的既定数;检测调用网关,所述调用网关包括转换指令和访问参数,所述转换指令在与所述既定数相关的预定位置处提供;解释每个调用网关的所述访问参数;基于所述映射文件确定每个调用网关的提供者和/或模块;以及当所述调用网关允许访问另一个模块或允许从另一个模块访问时,拒绝安装包括所述调用网关的模块。

根据第七方面,提供了一种数据处理装置。所述数据处理装置包括:处理电路系统,被配置为响应于程序指令而执行处理函数,所述处理电路系统包括由监视器耦合的第一安全区域和第二安全区域,其中所述监视器对于从所述第一安全区域向所述第二安全区域转换的所述处理电路系统应用安全凭证,以使得所述处理电路系统能够在所述第二安全区域中执行函数;以及用于存储包括要在所述第二安全区域中执行的至少一个函数的查找表的受信存储设备;所述监视器被配置为:确定函数何时被存储在所述受信存储设备中的所述查找表中,并且响应于确定所述函数被存储在所述查找表中而向所述处理电路系统应用所述安全凭证,使得所述处理电路系统可以在所述第二安全区域中执行所述函数,并且在完成所述函数之后从所述处理电路系统分离所述安全凭证,以及响应于确定所述函数未被存储在所述查找表中而生成安全违规指示。

根据第八方面,提供了一种数据处理装置。所述数据处理装置包括:处理电路系统,被配置为响应于程序指令而执行处理函数,所述处理电路系统包括由监视器耦合的第一安全区域和第二安全区域,其中所述监视器对于从所述第一安全区域向所述第二安全区域转换的所述处理电路系统应用安全凭证,以使得所述处理电路系统能够在所述第二安全区域中执行函数,以及用于存储包括要在所述第二安全区域中执行的至少一个函数的散列表的受信存储设备;所述监视器被配置为:确定函数何时被存储在所述受信存储设备中的所述散列表中,并且响应于确定所述函数存储在所述受信存储设备中的所述散列表中而向所述处理电路系统应用所述安全凭证,使得所述处理电路系统可以在所述第二安全区域中执行所述函数,以及在完成函数之后从所述处理电路系统分离所述安全凭证,以及响应于确定所述函数未存储在散列表中而生成安全违规指示。

根据第九方面,提供了一种用于允许调用网关将处理电路系统从第一安全区域转换到第二安全区域的计算机实现的方法。所述方法包括:在程序指令中检测包括转换指令和访问参数的调用网关,所述调用网关用于提供对所述第二安全区域的访问;识别为所述第二安全区域定义访问许可的代理调用网关;确定所述调用网关是否符合在所述代理调用网关中定义的所述访问许可;当所述调用网关符合在所述代理调用网关中定义的所述访问许可时,允许所述调用网关提供对所述第二安全区域的访问;以及,当所述调用网关不符合在所述代理调用网关中定义的所述访问许可时,不允许所述调用网关提供对所述第二安全区域的访问。

附加的优点和新颖特征将部分地在下面的描述中阐述,并且部分地将在查阅以下描述和附图时对本领域技术人员而言变得清楚,或者可以通过示例的产生或操作来了解。本教导的优点可以通过实践或使用在下面讨论的详细示例中阐述的方法、手段和组合的各个方面来实现和获得。

附图说明

为了更好地理解实施例以及可以如何实施这些实施例,现在将仅作为示例参考附图,在附图中:

图1示意性地图示了在物联网设备处提供的元素;

图2示意性地图示了在物联网设备处提供的元素;

图3示意性地图示了数据处理装置的两个安全区域;

图4示意性地图示了查找表;

图5示意性地图示了数据处理装置的两个安全区域;

图6是示意性地图示用于确定是否允许访问安全区域的处理的流程图;

图7a示意性地图示了用于调用网关的访问参数;

图7b示意性地图示了用于调用网关的访问参数;

图7c示意性地图示了用于调用网关的访问参数;

图8是示意性地图示用于验证调用网关的处理的流程图;

图9是示意性地图示用于验证调用网关的处理的流程图;

图10a图示了当访问参考图1-9描述的实施例的调用网关时的代码布置;以及

图10b图示了推测性调用网关实施例的代码布置。

在附图中,相同的标号涉及相同或相似的元素。

具体实施方式

现在将详细参考实施例,所述实施例的示例在附图中示出。在下面的详细描述中,通过示例阐述了许多具体细节,以便提供对相关教导的透彻理解。但是,对于本领域普通技术人员来说清楚的是,本教导可以在没有这些具体细节的情况下实践。

在其它情况下,为了避免不必要地掩盖本教导的各方面,众所周知的方法、过程、部件和/或电路系统在相对高的级别上进行描述而没有细节。

图1示意性地图示了在iot(物联网)设备100处提供的元素。大多数系统和架构旨在保护设备免受未授权的用户和未授权的处理。设备100包括许多模块101至112,并且每个模块101-112具有其自己的安全性,所述安全性旨在保护每个模块并且因此保护设备整体上免受恶意攻击。例如,加密密钥107的代码可以由安全专业人员编写并且可以具有强大的安全凭证,但是,wifi栈105代码不太可能由安全专业人员编写并且因此不太可能具有相同的安全级别。这种布置允许攻击者通过打破“最弱”模块(安全性最低的模块)的安全性来打破设备安全性,使得设备的整体安全性只与最弱的模块一样好。一旦模块之一遭到破坏,就有可能经由受破坏的模块获得对设备的其余模块的访问权。常见的攻击入口点是ssl库103、wifi栈105或ble栈102。例如,在图1中,攻击者120已经获得对ssl库103的访问,并且已经使用这个访问权来进一步获得对密码密钥108和固件更新111的访问权。在大多数情况下,一旦固件更新函数被攻击者破坏,就不可能从对固件更新111的攻击中恢复,因为驻留的恶意软件可以从ram安全地运行并且作为“拒绝服务”攻击的一部分,可以决定阻止用于重置设备或者擦除flash的命令。

图2示意性地图示了在iot设备200处提供的元素。在设备200中,模块201至212已经被分成两个不同的域,用于非关键代码的不太安全的域250以及用于关键代码的安全域260。模块201-206在不太安全的域250中提供,而模块207-212在安全域260中提供。安全域需要比不太安全的域更高的安全性,并且这两个域被安全边界270分开。存储在安全域中的数据不能在存储在不太安全的域中的代码执行时被其访问。只有存储在安全域中的关键代码需要具有全面的安全审计。对安全域的访问无法经由不太安全的域来获得,使得不太安全的域中的漏洞不能破坏安全域。密钥208从不离开安全域并且不能被恶意代码提取。

此外,由于固件更新受到安全域的保护,因此安全域可以可靠地将不太安全的域重新擦写(re-flash)成干净的状态,使得可以经由固件更新来从恶意攻击中恢复。

设备的安全侧上的模块207至212需要以强大的安全性来实现,并且必须很少被改变。

图3示意性地图示了数据处理装置的两个简化的安全区域301、302,例如不太安全的区域(第一安全区域301)和安全区域(第二安全区域302)。安全区域301具有安全域310和安全存储器312,并且安全区域302具有安全域314和安全存储器316。两个安全区域301、302经由监视器320连接。安全区域302具有比安全区域301更高的安全级别。本实施例不限于两个安全区域,并且可以提供多于两个安全区域,例如,不太安全的区域、安全区域和更安全的区域。在另一个实施例中,提供一个或多个安全区域,每个安全区域具有等同的安全级别,例如,更不太安全的区域或更安全区域。在另一个实施例中,可以将不太安全的区域与至少一个其它安全区域一起提供,(一个或多个)其它安全区域具有不同的或相同的(一个或多个)安全级别。在一些实施例中,监视器代码可以仅在监视器模式下被执行,仅在有限的一组情况下可访问,诸如经由异常(例如,中断、中止或显式调用),通过这么做,处理可以从不太安全的区域转换到安全区域,诸如由技术实现的。

为了使来自安全域310的函数访问存储在安全存储器316中的数据,它必须经由监视器320获得访问权,所述监视器320确定代码是否被允许访问安全域314。当代码被允许访问安全域316时,监视器320向其提供所需的安全凭证。安全凭证可以采取允许所述代码访问安全区域的任何形式的代码或数据,诸如证据、断言或与代码相关联的属性之类。由监视器将安全凭证应用于代码,使得启用对安全区域的授权访问。

代码必须经由监视器320传递,以便被提供安全区域302的安全凭证。如果代码试图直接从安全域310跳到安全域314而不经由监视器320,例如在恶意攻击期间,那么该代码将不具有所需的安全凭证,并且因此将不在安全域314中被处理。相反,代码被视为仍处于安全区域301中,因为它仍具有区域301的安全凭证。获得进入安全区域302的正确安全凭证的唯一方式是经由监视器320。

可以预先知道哪些函数被允许访问安全区域302。因此,可以提供列出允许访问安全区域302的每个函数的查找表。图4示意性地图示了允许访问安全区域302的有效函数(函数1、函数2、函数3、函数4...函数n)的查找表。当监视器320接收到访问安全区域302的请求时,它在表400中查找该请求是否来自允许的有效函数。当函数在查找表400中被提供并因此被允许时,请求被准予,并且向该函数提供安全区域302所需的安全凭证。当在查找表400中没有提供该函数并且因此不被允许时,生成或者错误消息或者故障。

攻击者不可能向函数查找表添加函数,因为所述函数查找表存储在受信存储器中。

虽然函数表克服了对安全区域的未授权访问的问题,但是当函数表长时,由于每条指令都需要顺序地搜索函数表直到确定该函数是否出现在表中,因此任务执行速度减慢。这导致不可预测的处理时间,即,如果函数存储在表的顶部,那么处理时间可能短,但是如果函数存储在表的末尾附近,那么处理时间可能长,等等。

如果存在具有相同或不同的安全级别/特权级别的多于一个的安全域,那么可以具有与包括被允许访问相关联域的所有函数的列表的每个域相关联的函数表。

为了减少处理时间,可以使用散列表代替查找表来存储授权的函数。散列表将多个函数条目(entry)存储在桶(bucket)的数组中。然后使用键来指示哪个桶中可以找到该条目(如果有的话)。与具有相同数量的函数的查找表相比,使用散列表减少了识别函数是否被授权访问安全区域所需的处理时间。但是,处理时间仍然是不可预测的并且可能高。此外,散列表被存储在受信存储器中,并且因此不能被更改(即,添加函数),从而防止恶意攻击。

在另一个实施例中,可以使用调用网关代替函数表来确定函数是否可以访问不同的安全级别/域。

图5示意性地图示了数据处理装置的两个简化的安全区域501、502。在一个实施例中,数据处理装置是微处理器。虽然仅示出了两个安全区域,但是数据处理装置可以具有多于两个安全区域,每个安全区域具有其自己的安全级别,所述其自己的安全级别由调用网关强制执行。如上所述,安全区域可以具有相同或不同的安全级别。数据处理装置包括在至少两个不同的安全区域内提供的多个部件模块。在一个示例中,数据处理装置可以包括应用协议模块、ble栈、ssl库、诊断模块、wifi栈、设备管理模块、安全存储模块、安全id模块、密码api模块、固件更新模块和prng模块。但是,数据处理装置不限于这些特征,并且可以如本领域技术人员所理解的那样利用其它部件。

如图5所示,第一安全区域501(不太安全的区域)具有安全域510和安全存储器512,而第二安全区域502(更安全的区域)具有安全域514和安全存储器516。两个安全区域501、502经由监视器520连接。安全区域502具有比安全区域501更高的安全级别。安全域510、514不能被直接访问,而是为了被提供与第二安全域514相关联的安全凭证,必须经由监视器520准予访问权。在完成安全区域502中的函数之后,在将程序代码返回到区域501之前,监视器分离与安全区域502相关联的安全凭证。与安全区域502相关联的安全凭证的分离防止代码在完成该函数之后继续使用安全区域502的安全凭证运行。

为了让来自安全域510的函数访问存储在安全存储器516中的数据,所述函数必须经由监视器520被传递,监视器520确定该代码是否被允许访问安全域514。当代码被允许访问安全域516时,监视器520为其提供所需的安全凭证。代码必须经由监视器520传递,以便被提供安全区域502的安全凭证。如果代码试图直接从安全域510跳到安全域514而不经由监视器520,例如在恶意攻击期间,那么该代码将不具有安全区域501所需的安全凭证,并且将不会在安全域514中被处理。获得进入安全区域502的正确凭证的唯一方式是经由监视器520。此外,在安全区域502中执行函数之后,监视器520将代码的安全凭证改回到第一安全区域501的安全凭证,否则程序代码会继续以第二安全区域502的安全凭证运行。

调用网关被用来请求从第一安全区域501进入第二安全区域502。监视器520检查调用网关是否存储在受信存储器中,并且当调用网关存储在受信存储器中时,提供访问区域502所需的安全凭证。每个调用网关包括转换指令(有时被称为调用网关指令或呼叫)和访问参数。

可以有多于一个调用网关524、526、528、...、52n存储在受信存储器522中,每个调用网关524、526、528、...、52n具有用于每个调用网关的不同的相关联的访问参数。此外,可以存在多于一个的存储调用网关的受信存储器。

每个调用网关具有必须满足以便让监视器520提供用于访问安全区域502的安全凭证的访问参数。事先知道允许对安全区域502的什么访问,因此定义允许的访问的调用网关被存储在受信存储器中。在一个实施例中,访问参数定义要在安全区域502中执行的函数。在另一个实施例中,取决于所定义的访问,访问参数指向可以写入、读取或者加掩码(masked)的存储器位置。

在另一个实施例中,调用网关包括跟随有微代码指令的转换指令,所述微代码指令可以按预定义的目标特权执行。在一个实施例中,微代码指令可以是读取指令、写入指令或位掩码指令或组合。微代码可以在需要多次执行动作时使用,每次执行动作时通常需要经过调用网关。例如,当需要检查寄存器以确定数据是否已存储在寄存器中的特定存储器位置时(在对那个位置的写入指令之后),在每次执行检查时都需要包括转换指令和函数(该函数是检查存储器)的调用网关以访问存储器。这将导致程序在不同的安全区域之间来回转换。通过包括用于存储器读取指令的微代码,可以重复执行检查,直到数据已经存储在存储器位置中为止,而不需要保持访问调用网关。

微代码可以在服务器或安装期间进行验证。微代码只被允许执行预定义的任务并访问预定义的位。在一个实施例中,微代码是本机cpu代码。在另一个实施例中,微代码是cpu代码的子集。

访问参数还可以定义安全区域502内的哪个模块(例如,安全域514或安全存储器516内的目标模块)可以使用目标id而被访问。在一个示例中,目标id是目标模块的唯一id。目标id的使用使调用网关能够限制可以经由调用网关访问哪个模块。

访问参数还可以使用源id定义访问请求可以来自哪里。在一个示例中,源id是进行调用的模块的唯一id。源id的使用使得调用网关能够被限制为仅来自预定义的源模块(如源id所述)的代码。在一个实施例中,如果在访问参数中没有定义源id,那么在假设在调用网关中定义的其它参数被满足的情况下,没有源id的调用网关可供所有源模块使用。可替代地,预定义的源id可以被用来指示所有源id都是被允许的。例如,用于8位源id的源id0xff可以指示所有源id都是被允许的。

每个调用网关524、526、528、...、52n定义不同的访问参数。由于调用网关存储在受信存储器中,因此它不能被篡改。因此,即使调用网关被复制,它也只能被复制到非受信的存储器中,并且因此不会被系统识别。受信存储器之外的所有调用网关都被监视器忽略。因而,每个调用网关都不能被恶意攻击者用来允许访问安全区域,以执行不同函数或在安全区域内的不同位置的函数。

当调用网关不具有与存储在受信存储器中的任何调用网关相同的访问参数时,监视器520不提供用于访问安全区域502的安全凭证。例如,调用网关可以具有访问参数,该参数定义来自存储在安全区域501中的设备管理模块的指令被允许访问存储在安全区域502中的固件更新模块以执行函数x。调用网关存储在受信存储器522中。由于调用网关存储在受信存储器522中,因此监视器520向设备管理模块提供用于访问安全区域502的安全凭证。但是,由于来自ssl库模块的指令通常不被允许访问固件更新模块,因此具有定义来自存储在安全区域501中的ssl库模块的指令被允许访问固件更新模块以执行函数x的访问参数的调用网关不会被存储在受信存储器中。由于这种调用网关不存储在受信存储器522中,因此监视器520不向ssl库模块提供用于访问安全区域502的安全凭证。

监视器520参考请求中引用的调用网关来确定是否允许访问。调用网关存储在受信存储器522中。监视器520检查调用网关是否存储在受信存储器522中。当调用网关未存储在受信存储器中时,监视器522将不允许访问安全区域502。在一个实施例中,当调用网关未存储在受信存储器中时,生成安全违规指示。这防止恶意攻击者创建他们自己的调用网关来访问安全区域。由恶意攻击者创建的调用网关只会存储在不受信的存储器中。由于系统忽略存储在非受信的存储器中的调用网关,因此对安全区域的访问不被准予,并且安全违规指示将指示已经尝试了恶意攻击。

一旦监视器522确定调用网关存储在受信存储器中,监视器522就不必验证在调用网关中定义的访问参数。由于调用网关存储在受信存储器中,因此监视器将调用网关访问参数视为已经通过验证。

图6是示意性地图示用于确定是否允许访问安全区域的处理的流程图。在步骤s601,在程序代码中到达转换指令。在步骤s602,监视器520确定具有调用网关访问参数的调用网关是否存储在受信存储器522中。当识别出的调用网关未存储在受信存储器522中时(“否”),方法移动到步骤s603,并生成错误消息。当识别出的调用网关被存储在受信存储器522中时(“是”),处理移动到步骤s604,并且监视器520准予对安全区域的访问,并对处理电路系统应用适当的安全凭证(在目标区域处需要的安全凭证)。在步骤s605,解释调用网关访问参数,并且目标函数在安全区域中完成。在安全区域中完成目标函数之后,在步骤s606,监视器从处理电路系统中移除目标安全凭证,处理电路系统返回到调用者(源区域)安全凭证,并且处理电路系统返回到不太安全的区域。

当在步骤s603生成错误消息时,对安全区域502的访问被拒绝。

由于调用网关存储在受信存储器522中,监视器520可以信任在调用网关中提供的访问参数。恶意攻击者可以创建他们自己的调用网关,但是,将这个调用网关存储在受信存储器中是不可能的,因此,即使允许“假”调用网关定义访问,因为“假”调用网关未被存储在受信存储器中,监视器520也将不准予访问。当调用网关未被存储在受信存储器中时,将返回错误消息,诸如“无效的调用网关”之类。

在一个实施例中,在制造设备或数据处理装置时,调用网关被写入受信存储器。此外,例如在更新期间,调用网关可以被写入受信存储器,但是在这个示例中需要增强的安全凭证(诸如有效签名之类)。然后在调用网关被添加到受信存储器之前执行验证。一旦调用网关已经存储在受信存储器中,就不需要再次执行增强的验证。不可以在没有有效签名的情况下在受信存储器中存储调用网关,从而防止恶意攻击者创建他们自己的调用网关。

受信存储器是不允许恶意攻击者在存储设备中存储数据(诸如“假”调用网关)的受信存储设备。在一个实施例中,受信存储设备是提供受信存储区域和不受信存储区域两者的存储设备的受信区段。可以使用任何形式的受信存储器。在一个实施例中,受信存储器是不能通过运行代码而被写入的任何存储器/存储设备。当只有可信代码能够对其进行独占的写入访问时,任何存储器都可以被视为受信存储器。在一个示例中,受信存储器可以是只能在运行时被写入的只读存储器(rom)(诸如flash存储器之类)。在另一个实施例中,可以使用防止恶意攻击者将数据(诸如“假”调用网关之类)存储在存储器中的存储器保护方案来将存储器标记为不可改变。在另一个示例中,受信存储器可以是受保护的sram。

在一个实施例中,调用网关包括跟随有访问参数的转换指令。在一个实施例中,转换指令是svc指令调用。在另一个实施例中,转换指令可以是用来在取决于所使用的系统的安全域状态之间转换的任何其它平台中断调用或系统调用。

在一个实施例中,访问参数是目标函数。在一个实施例中,访问参数在元数据中定义。在另一个实施例中,访问参数是目标函数元数据。目标函数元数据指向目标函数,并且直接在转换调用之后或者在与转换调用相关的固定位置提供目标函数元数据。在程序代码中的转换指令调用之后,监视器检索目标函数元数据,检查具有被定义为访问参数的目标函数的调用网关是否被存储在受信存储器中,并且当调用网关存储在受信存储器中时允许访问安全区域以执行目标函数。

在一个实施例中,调用网关全部存储在受信调用网关存储器中。在这个实施例中,转换指令之后是指向受信调用网关存储器中的调用网关的指针。

在另一个实施例中,调用网关包括转换指令,所述转换指令跟随有指向寄存器(目标寄存器)的一个或多个特定位的指针。例如,寄存器的仅一位(目标位)可以是可访问的,而寄存器中的其它位不可访问。在一个实施例中,调用网关可以包括跟随有指向目标寄存器的指针以及可选的访问掩码的转换指令。调用网关的访问参数中定义了可访问位的位掩码和指向对应寄存器的指针,并且调用网关存储在受信存储器中。因此,寄存器的其它位不能经由该调用网关访问。例如:地址=0x8badf00d;访问读取掩码=0xffffffff;访问写入掩码=0x00000002允许调用网关的请求者(源)读取地址为0x8badf00d处的所有位,但作为0x2掩码的结果,只能写入位号1(从0开始计数)。

在一个实施例中,调用网关的位置是从栈上的返回地址推断的。调用网关通过修改栈上的或链路返回寄存器内的返回地址在访问参数之后返回。在另一个实施例中,其中程序二进制尝试调用网关但在不支持调用网关的系统上,调用网关还包括在转换指令和访问参数之间提供的跳转指令。跳转指令(例如,如图10a所绘出的)防止系统在从转换指令返回时以不可预测的方式运行,并以元数据而不是有效代码结束。如果监视器在访问参数元数据之前而不是在元数据之后从转换指令返回到程序代码,那么跳转指令指示处理单元跳过访问参数元数据。这使得程序能够在调用网关中断之后继续运行。跳转指令也可以被用来在微代码指令或元数据之后跳转,并且因此有效地跳过它。

在另一个实施例中,调用网关还包括既定数。既定数被认为是访问参数。既定数是经过仔细选择的,使得它是在代码中不产生有效结果的32位数。既定数不表示任何含义,并且被选择成使得它不是在代码中自然出现的。在一个实施例中,可以使用任何随机数作为既定数。但是,当既定数被选择为使得它不直接(作为整个字(word),例如32位值)或者失准(作为耦合到其它指令的半个字)出现在可执行代码中时,对调用网关的服务器侧验证更强大并且可能更容易。既定数的一个示例是当用十六进制编写时的32位数deadbeef。在一个实施例中,每个指令集设置一个既定数。既定数对于所有平台可以相同或不同。

既定数可以有可能偶然出现在系统中,或者如果既定数是数据,那么可以使用工具链来选择另一个既定数并避免冲突。

既定数总是与转换指令相关地被放在预定位置。因此,可以借助于识别(一个或多个)既定数并然后确定与每个识别出的既定数相关的每个调用网关的位置来扫描程序代码并识别所有调用网关。一旦调用网关被识别出来,它们就可以在服务器上被验证。

在另一个实施例中,调用网关还包括目标id。目标id是安全域内要被访问的模块的地址。当存在在安全域中存储了多于一个模块时,使用目标id。

在另一个实施例中,调用网关还包括多于一个目标id。当调用网关提供对多于一个预定义目标模块的访问时,提供目标id的列表。在一个实施例中,在元数据中提供目标id的列表。

在另一个实施例中,调用网关还包括源id。源id是被允许访问安全域的模块的地址。在一个实施例中,源id是进行调用的模块的唯一id。在另一个实施例中,当源id等于0时,调用网关对所有模块可用。在一个实施例中,系统丢弃使用其它模块调用网关的所有尝试。例如,如果wifi栈尝试使用为设备管理模块提供的调用网关,那么调用网关的源id将定义设备管理模块唯一id并且因此不能由wifi栈使用,wifi栈具有不同的唯一id。

在另一个实施例中,调用网关还包括多于一个源id。当调用网关提供从多于一个预定义的源模块的访问时,提供源id的列表。在一个实施例中,在元数据中提供源id的列表。

在一个实施例中,调用网关还包括可以包含关于调用网关和访问参数的信息的标志字段。在一个实施例中,标志被设置为指示存在访问参数。在另一个实施例中,标志可以被用来表示访问参数。例如:

-用于在目标函数中使用相对/绝对函数指针的标志

-用于安全特征(诸如对源模块的限制)的标志。

在另一个实施例中,访问参数包括目标实例,其对于c++调用是可选的。目标实例指向特定于类的数据并且允许函数的特定类存储器实例绑定到源模块。

在一个实施例中,可以使用svc号来区分多个调用网关。在svc调用(调用网关转换指令)旁边提供svc号。例如,可以使用svc号“n”来指示包括目标函数和目标id的调用网关。此外,可以使用不同的svc号(例如svc号“m”)来指示包括目标函数、目标id和源id的调用网关。

每个调用网关包括跟随有访问参数或访问参数的组合的转换指令。访问参数可以按任何次序提供,但是如上所述,如果使用既定数,那么该既定数将被放在参考转换指令的一致位置处。

图7a示意性地图示了基本的调用网关场景。调用网关700指示所有源模块都被允许在模块1720处执行函数a710。用于这个场景的示例性调用网关包括转换指令(指示调用网关中断)和访问参数,所述访问参数包括定义函数a(目标函数)的元数据;既定数;目标id=1(指示仅可以在模块1处执行函数a)。在另一个实施例中,调用网关还可以包括指示所有源模块都可以在模块1处执行函数a的项(term)源id=0(源:0)。在这个场景中,模块1720在需要目标安全凭证的安全区域中提供。

图7b示意性地图示了另一个基本的调用网关场景。调用网关740指示只有源模块3730被允许在模块1750处执行函数b760。用于这个场景的示例性调用网关包括转换指令(指示调用网关中断)和访问参数,所述访问参数包括定义函数b(目标函数)的元数据;既定数;目标id=1(指示仅可以在模块1处执行函数b);源id=3(指示仅源模块3可以在模块1处执行函数b)。在这个场景中,模块1750在需要目标安全凭证的安全区域中提供。

图7c示意性地图示了多调用网关场景。第一调用网关705允许所有源模块在目标模块1725处执行函数a715。用于这个场景的示例性调用网关包括转换指令(指示调用网关中断)和访问参数,所述访问参数包括定义函数a(目标函数)的元数据;既定数;目标id=1(指示仅可以在目标模块1处执行函数a);源id=0(指示所有源模块都可以在目标模块1处执行函数a)。第二调用网关735允许源模块2745在目标模块1725处执行函数b755。用于这个场景的示例性调用网关包括转换指令(指示调用网关中断)和访问参数,所述访问参数包括定义函数b(目标函数)的元数据;既定数;目标id=1(指示仅可以在目标模块1处执行函数b);源id=2(指示源模块2可以在模块1处执行函数b)。第三调用网关765允许源模块3775在目标模块1725处执行函数b755。用于这个场景的示例性调用网关包括转换指令(指示调用网关中断)和访问参数,所述访问参数包括定义函数b(目标函数)的元数据;既定数;目标id=1(指示仅可以在目标模块1处执行函数b);源id=3(指示源模块3可以在模块1处执行函数b)。最后,第四调用网关785允许源模块3775在目标模块1725处执行函数c795。用于这个场景的示例性调用网关包括转换指令(指示调用网关中断)和访问参数,所述访问参数包括定义函数c(目标函数)的元数据;既定数;目标id=1(指示仅可以在目标模块1处执行函数c);源id=3(指示源模块3可以在目标模块1处执行函数c)。在图7c的场景中,目标模块1725在需要目标安全凭证的安全区域中提供。

如上所述,调用网关存储在受信存储器中。但是,调用网关可以存储在源模块、目标模块处提供的受信存储器中或单独的受信存储器中。参考图7c,第一调用网关705可以存储在目标模块1725处提供的受信存储器中;第二调用网关735可以存储在源模块2745或目标模块1725处提供的受信存储器中;并且第三调用网关765和第四调用网关785可以存储在源模块3775或目标模块1725处提供的受信存储器中。

以下是以代码提供的调用网关的示例。在该示例中,既定数被称为“魔术”数。

示例使用

/*使用secure_print_box所有的cgw来调用__secure_print*/secure_gateway(secure_print_box,_secure_print,0,0,0,0);

示例调用验证:

在一个实施例中,在服务器处遵从的设备可以包括来自多个不同提供者的多个固件模块以创建整个设备。每个模块具有其自己的安全要求。在一个实施例中,设备的编译器已经定义了安装规则,诸如:每个模块只被允许为其自己的模块内的函数提供调用网关。在安装每个固件模块时,确认固件模块提供者的签名的验证。执行每个模块处理代码的扫描,并识别代码中提供的所有既定数。然后,可以借助于每个既定数的位置与每个调用网关之间已知的固定偏移量来识别模块内的每个调用网关。一旦检测到调用网关,就识别每个调用网关的参数。当调用网关指向提供调用网关的模块之外的模块时,拒绝将固件模块安装到iot设备。在另一个实施例中,当调用网关允许从提供调用网关的模块之外的模块进行访问时,拒绝将固件模块安装到iot设备。

在另一个实施例中,iot设备可以执行每个模块处理代码的扫描,以便确定是否有任何调用网关指向其自己的模块之外的模块或允许从其自己的模块之外的模块进行访问。然后,iot设备可以拒绝安装任何包含不符合(一个或多个)安装规则的调用网关的模块。

图8是示意性地图示用于验证调用网关的处理的流程图。在步骤s801,定义安装规则。在这个示例中,安装规则是:每个模块只被允许为自己的模块内的函数提供调用网关。在步骤s802,建议要安装的模块。在步骤s803,确定模块提供者的签名是否被确认。如果模块提供者的签名未被确认,那么在步骤s804拒绝模块的安装。如果模块提供者的签名被确认,那么处理移动到步骤s805。在步骤s805,执行对每个模块处理代码的扫描,并且识别代码中提供的所有既定数。在步骤s806,借助于每个既定数的位置与每个调用网关之间已知的固定偏移量来识别调用网关。在步骤s807,解释每个调用网关的访问参数。在步骤s808,确定是否所有调用网关都符合安装规则。如果有任何调用网关不符合安装规则,那么在步骤s809拒绝模块的安装。如果所有调用网关都符合安装规则,那么在步骤s810允许模块的安装并且在那个模块内定义的调用网关被信任。

在另一个实施例中,可以在步骤s808之后但在步骤s810的安装之前执行确认提供者的签名的步骤s803。

图8的处理可以在服务器处或在设备处执行。此外,图8中所示的处理还可以在安装代码更新时被使用。

在另一个实施例中,在服务器处遵从的iot设备可以包括来自多个不同提供者的多个模块,所述多个模块被链接以创建整个设备。每个模块具有其自己的安全要求。在一个实施例中,不是如上所述地分别安装每个模块,而是使用该设备的多个模块的单片固件镜像(image)。服务器使用由受信源创建的映射文件来映射系统的模块以及固件镜像中产生所述模块的位置。于是,服务器可以记住哪个模块来自哪个提供者。然后在服务器处执行对产生的整个设备的单片固件镜像的处理代码的扫描,并且识别代码中提供的所有既定数。然后,可以借助于每个既定数的位置与每个调用网关之间已知的固定偏移量来识别整个设备的代码内的每个调用网关。一旦检测到调用网关,就识别每个调用网关的参数。然后,使用映射文件来确定每个调用网关的提供者和/或模块。在一个实施例中,设备的编译器已经定义了安装规则,诸如:每个模块只被允许为其自己的模块内的函数或者为由相同提供者提供的模块内的函数提供调用网关。如果有任何调用网关指向提供调用网关的模块之外的模块,或者如果任何调用网关允许从提供调用网关的模块之外的模块进行访问,那么拒绝将模块安装到设备。另外,如果有任何调用网关指向不是由与提供调用网关的模块相同的提供者提供的模块或允许访问由与提供调用网关的模块相同的提供者提供的模块,那么拒绝将模块安装到设备。服务器拒绝签署固件镜像,并且固件不被允许安装在设备上。在一个实施例中,调用网关的验证在服务器上安装后执行,在服务器处的这种验证之后,调用网关被信任。

在另一个实施例中,由于iot设备的编译器定义了安装规则,因此可以接受指向在提供调用网关的模块之外的模块或允许从这种模块进行访问的调用网关,如果该模块来自如安装规则中所定义的受信提供者(不是调用网关模块的提供者)的话。

在另一个实施例中,iot设备可以使用映射文件并扫描所产生的整个设备的单片固件镜像的处理代码,以确定是否有任何模块包含不符合(一个或多个)安装规则的调用网关,并拒绝这些模块的安装。

在另一个实施例中,将特权指派给提供者,从而使得他们能够被准予对不同提供者的固件进行访问。在一个实施例中,在访问被准予之前,需要进一步的验证,诸如安全签名之类。然后可允许来自提供者模块的调用网关指向不同提供者的模块,或允许从不同提供者的模块进行访问。

当发起固件更新时,验证固件更新的签名。在验证签名之后,执行对整个设备的单片固件镜像的处理代码的扫描,并识别在代码中提供的所有既定数。然后可以借助于每个既定数的位置与每个调用网关之间已知的固定偏移量来识别整个设备的代码内的每个调用网关。一旦检测到调用网关,就识别每个调用网关的参数。然后使用映射文件来确定每个调用网关的提供者和/或模块。在一个实施例中,iot设备的编译器已经定义了安装规则,诸如:每个模块只被允许为其自己的模块内的函数或者为由相同提供者提供的模块内的函数提供调用网关。如果有任何一个调用网关指向提供调用网关的更新模块之外的模块,或者如果有任何调用网关允许从提供调用网关的更新模块之外的模块进行访问,那么拒绝固件更新模块到iot设备的安装。此外,如果有任何调用网关指向与提供调用网关的更新模块的不同提供者提供的模块或允许访问,那么固件更新模块到iot设备的安装被拒绝。

这个验证可以在服务器处每次更新固件时执行。在服务器处通过验证之后,调用网关被信任。

每次更新执行一次验证,一旦获得验证,固件就被更新并且调用网关被信任。

图9是示意性地图示用于验证调用网关的处理的流程图。在步骤s901,来自多个不同供应者的多个模块被链接以创建整个设备。在步骤s902,确定每个模块提供者的签名是否被确认。如果模块提供者的签名未被确认,那么在步骤s903该模块被拒绝。如果确认了模块提供者的签名,那么处理移动到步骤s904。在步骤s904,创建整个设备的映射文件。在步骤s905,定义安装规则。在这个示例中,安装规则是:每个模块只被允许为其自己的模块内的函数或为由相同提供者提供的模块内的函数提供调用网关。在步骤s906,执行对整个设备的处理代码的扫描,并且识别代码中提供的所有既定数。在步骤s907,借助于每个既定数的位置与每个调用网关之间已知的固定偏移量来识别调用网关。在步骤s908,解释每个调用网关的访问参数。在步骤s909,映射文件被用来确定每个调用网关的提供者和/或模块。在步骤s910,确定是否所有调用网关都符合安装规则。如果有任何调用网关不符合安装规则,那么在步骤s911,拒绝包括那个调用网关的模块的安装。如果调用网关符合安装规则,那么在步骤s912允许安装,并且调用网关被信任。

在另一个实施例中,确认提供者的签名的步骤s902可以在步骤s912的安装之前的任何阶段执行。在另一个实施例中,定义安装规则的步骤s903可以在步骤s910之前的任何阶段执行。

图9的处理可以在服务器处或在设备处执行。此外,图9所示的处理还可以在安装代码更新时使用。

图8和9的处理使得安全验证能够从运行时移动到安装时或在构建时之后。

如前所述,也如图10a所绘出的,跳转指令通过跨过(branchover)既定数和元数据来防止系统在从转换指令返回时不可预测地运行。

图10a和10b提供调用网关的两个变型的并排比较。

图10a示出了前面参考图1-9所述的调用网关,该调用网关由到调用网关的svc转换指令(异常)1001发起。既定数(也被称为“魔术数”)1005和元数据条目1003a、1003b、1003c与转换指令1001相关地存在于预定位置以供调用网关使用。

图10b示出了其中省略了转换指令的前述实施例的变型。这个变型在下文中被称为推测性调用网关。在这个实施例中,首先到达跳转操作1010(例如,分支指令),其直接分支到作为可执行调用网关函数并且可以由用于执行的多个指令构成的代码1013。

在一些平台上,存储器保护可以由存储器保护单元(mpu)实现,以将存储器划分成区域,并为每个存储器区域启用单独的保护属性(例如,访问参数等)。在一些情况下,推测性地尝试访问特定存储器区域中的位置可能是优选的并且仅在子区域或个别存储器位置上具有附加保护的一些情况下失败,由此改进了设备的总体性能。一个这样的示例是可以是经存储器映射的并驻留在mpu的一个或多个区域中的设备中的系统寄存器。这种系统寄存器可以具有附加属性,这意味着它们只能从安全状态访问。由于一些mpu内的有限资源,只有既定数量的区域可以是可指定的,并且这意味着将各个寄存器专门隔离到具有对应属性的专用存储区域中可能是不切实际的。

如果mpu发出异常(例如,中止),那么,因为不允许访问结合调用网关代码的这种存储器区域,执行分支到异常处理机或监视器。由于保留了从其取得异常的地址,因此异常处理机/监视器知道(或可确定)既定数1012和元数据条目1011a-1011c的位置,并且然后操作可以按照前面参考图1至图10a所述的实施例进行。

在一些实施例中,由于例如设备的流水线操作或执行特性,取得异常的点可能是不精确的。为了防止在对调用网关代码1013进行推测性访问之后进一步操作的任何非期望的执行,存储器可以被一个或多个不执行操作或者不造成设备中的数据和状态的改变的“不操作”(nops)指令填充。

在另一个实施例中,设备可以包括并非全部同时(例如在制造该设备时)安装的多个模块。由于可以在不同的时间安装附加的模块,因此在制造该设备时不可能为这些附加模块提供调用网关。因此,可以在每个模块中提供代理调用网关,每个代理调用网关为那个模块定义特定的访问许可。每个代理调用网关包括对被允许的访问许可的一般描述,但其本身不是调用网关。例如,被允许的访问许可的一般描述可以定义哪些类型的模块被允许和不被允许访问目标模块,以及源模块可以和不可以在目标模块处执行哪些函数。

在一个实施例中,在设备处提供的目标模块中提供代理调用网关,代理调用网关包括被允许的访问许可的一般描述。代理调用网关可以存储在受信存储器中,受信存储器存储在目标模块处或设备处的受信存储器中。当新的模块要被安装在设备中,所述新的模块需要访问已经提供在设备处的目标模块时,为新模块提供调用网关,该调用网关允许该新模块在目标模块处执行函数。为新模块提供的调用网关必须符合在目标模块处提供的代理调用网关中定义的被允许的访问许可的一般描述。在安装新模块期间,监视器验证在新模块处提供的调用网关是否符合在代理调用网关中定义的访问许可。当调用网关不符合在代理调用网关中定义的访问许可时,新模块被丢弃,不会被安装。监视器将允许在新模块处提供的调用网关限制在代理调用网关中定义的访问许可,但是将不允许在新模块处提供的调用网关扩展在代理调用网关中定义的访问许可。此外,监视器将只允许在新模块处提供的调用网关将源模块限制到新模块,即,不允许提供用于其它模块的访问的调用网关。

在一个实施例中,在新模块处提供的调用网关包括指向代理调用网关的目标指针。在另一个实施例中,在新模块处提供的调用网关被标记(例如。在标志字段中)为新的调用网关。验证独立于所使用的编程语言。

本领域技术人员将认识到的是,虽然前面已经描述了被认为是执行实施例的最佳模式以及在适当的情况下的其它模式,但是本教导不应当限于在优选实施例的本描述中所公开的具体配置和方法。本领域技术人员将认识到的是,这些教导具有广泛的应用范围,并且在不背离所附权利要求定义的发明构思的情况下,实施例可以进行大范围的修改。

在实施例中,所述存储器位置包括目标寄存器。

在实施例中,所述存储器位置还包括用于所述目标寄存器的访问掩码。

在实施例中,监视器还被配置为:在完成访问之后,从所述处理电路系统分离所述安全凭证。

在其它实施例中,监视器还被配置为:在确定调用网关未存储在受信存储设备中之后,生成安全违规指示。

在其它实施例中,所述目标函数包括元数据。

在其它实施例中,其中所述访问参数还包括所述第二安全区域内所述目标函数将被执行的目标地址。

在其它实施例中,其中所述访问参数还包括所述第一安全区域内的源地址,调用网关是从所述源地址接收到的。

在其它实施例中,所述访问参数还包括在转换指令与所述目标函数之间提供的跳转指令。

在其它实施例中,如果监视器将处理电路系统从所述转换指令返回到所述目标函数之前,那么所述跳转指令指示所述处理电路系统跳过所述目标函数。

在其它实施例中,所述访问参数还包括在转换指令和所述存储器位置之间提供的跳转指令。

在其它实施例中,如果监视器将处理电路系统从转换指令返回到所述存储器位置之前,那么所述跳转指令指示处理电路系统跳过目标函数。

在其它实施例中,所述访问参数还包括既定数。

在其它实施例中,所述既定数是32位数。

在其它实施例中,所述既定数在与所述转换指令相关的预定位置处被提供。

在其它实施例中,所述访问参数还包括标志字段。

在其它实施例中,所述转换指令是svc指令。

在其它实施例中,所述转换指令是中断指令。

在其它实施例中,所述受信存储设备是存储设备的受信区段。

在其它实施例中,所述受信存储设备包括只读存储器。

在其它实施例中,所述受信存储设备包括flash存储器。

在其它实施例中,所述受信存储设备包括存储器保护方案。

在其它实施例中,所述数据处理装置包括至少由第一开发者提供的第一函数模块和由第二开发者提供的第二函数模块,并且所述方法还包括:确定所述访问参数是否使得所述处理电路系统能够从由所述第一开发者提供的所述第一函数模块转换到由所述第二开发者提供的所述第二函数模块;以及,当所述访问参数使得所述处理电路系统能够从由所述第一开发者提供的所述第一函数模块转换到由所述第二开发者提供的所述第二函数模块时,拒绝验证所述调用网关。

在其它实施例中,计算机实现的方法还包括:验证所述模块提供者的签名。

在其它实施例中,计算机实现的方法还包括:当所述调用网关允许访问由不同提供者提供的模块或允许从由不同提供者提供的模块进行访问时,拒绝安装包括所述调用网关的模块。

在其它实施例中,计算机实现的方法还包括:验证所述模块提供者的签名。

在其它实施例中,提供了一种包括用于执行上述方法的程序代码的计算机程序产品。

在其它实施例中,代理调用网关存储在所述受信存储设备中,所述代理调用网关定义用于所述第二安全区域的访问许可,并且其中所述调用网关符合在所述代理调用网关中定义的所述访问许可。

在其它实施例中,所述访问许可定义所述第一安全区域是否被允许访问所述第二安全区域。

在其它实施例中,所述访问许可定义被允许在所述第二安全区域中执行的至少一个目标函数。

在其它实施例中,所述监视器确定所述调用网关是否符合在所述代理调用网关中定义的所述访问许可。

在其它实施例中,所述调用网关限制在所述代理调用网关中定义的所述访问许可。

在其它实施例中,所述调用网关包括识别所述代理调用网关的目标指针。

在其它实施例中,所述访问许可定义所述第一安全区域是否被允许访问所述第二安全区域。

在其它实施例中,所述访问许可定义被允许在所述第二安全区域中执行的至少一个目标函数。

在其它实施例中,所述调用网关限制在所述代理调用网关中定义的所述访问许可。

在其它实施例中,所述调用网关包括识别所述代理调用网关的目标指针。

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