ATF(TF-A) SPMC威胁模型-安全检测与评估
安全之安全(security²)博客目录导读
ATF(TF-A) 威胁模型汇总
目录
一、简介
二、评估目标
1、数据流图
三、威胁分析
1、信任边界
2、资产
3、威胁代理
4、威胁类型
5、威胁评估
5.1 端点在直接请求/响应调用中模拟发送方或接收方FF-A ID
5.2 篡改端点和SPMC之间的共享内存
5.3 端点可以篡改自己的状态或另一个端点的状态
5.4 攻击者可能试图通过使用外部DRAM stress技术注入错误
5.5 保护SPMC不受SMMU上游DMA设备的影响
5.6 重放端点之间过去通信的片段
5.7 恶意端点可能试图通过使用无效或不正确的输入参数来提取数据或状态信息
5.8 恶意端点可能伪造直接消息请求,从而通过直接消息响应揭示另一个端点的内部状态
5.9 探测端点之间的FF-A通信
5.10 恶意代理可能会尝试使用基于软件的cache侧信道攻击技术来泄露SPMC状态或秘密
5.11 恶意端点可能会尝试向SPMC发送针对端点内某个服务的请求,从而拒绝另一个端点访问该服务
5.12 恶意端点可能会尝试通过FFA_NOTIFICATION_BITMAP_CREATE在SPMC中分配通知位图
5.13 恶意端点可能试图通过FFA_NOTIFICATION_BITMAP_DESTROY销毁SPMC中的通知位图
5.14 恶意端点可能会尝试使用FF-A调用FFA_NOTIFICATION_BIND向非预期发送方授予权限,以设置针对另一个接收方的通知
5.15 恶意分区端点可能会尝试设置未绑定到它的通知
5.16 恶意分区端点可能会尝试获取不针对发送到它的通知
5.17 恶意分区端点可能会尝试通过FFA_NOTIFICATION_INFO_GET调用获取关于挂起通知的信息
5.18 恶意分区端点可能会尝试向另一个分区端点发送通知,阻碍其操作
5.19 恶意端点可能滥用FFA_RUN调用来恢复或打开其他端点执行上下文,试图更改SPMC和sp的内部状态,从而可能导致非法状态转换和死锁
5.20 恶意端点可以通过使用FFA_INTERRUPT调用来执行拒绝服务攻击
5.21 恶意安全端点可能会deactivate(虚拟)安全中断,该中断并不是SPMC发出的信号,从而试图改变SPMC的状态,并可能导致系统崩溃
5.22 恶意的安全端点可能不会deactive SPMC向它发出的虚拟中断信号,而是执行安全中断信号完成。这种破坏SPMC内部状态的尝试可能导致未知状态,并进一步导致系统崩溃
5.23 恶意端点可以利用非安全中断抢占安全端点,从而试图使其无法处理针对它的安全虚拟中断
5.24 安全端点依赖于CPU周期的主调度器。恶意端点可能会延迟安全端点的调度。如果不及时处理安全中断,可能会危及SP和SPMC的状态,从而使系统无响应
5.25 恶意的FF-A端点可以使用内存共享调用来耗尽SPMC资源
5.26 如果由于致命错误而终止,而没有释放共享/出借的内存,则借用方可能会干扰出借方的操作
5.27 恶意的FF-A端点可能试图篡改共享/出借内存的内容,同时被其他FF-A端点访问
5.28 恶意的FF-A端点可能会尝试共享不在其翻译机制中的内存,或者尝试指定比它在给定时间拥有的属性更宽松的属性
一、简介
本文提供了TF-ASecure Partition Manager(SPM)实现的威胁模型,或者更一般地说,是运行在实现了FEAT_SEL2(以前称为Armv8.4 Secure EL2)体系结构扩展的系统上的S-EL2参考固件。SPM的实现是基于Arm Firmware Framework for Arm A-profile规范。
简而言之,广泛的FF-A规范和S-EL2固件实现提供:
1)互不信任的软件组件或FF-A术语中的端点的隔离。
2)安全世界中不同的沙箱称为安全分区。这允许从多个供应商隔离服务。
3)在FF-A端点之间进行通信和内存共享的标准协议。
4)正常世界和安全世界的相互隔离(例如,可信操作系统被阻止映射任意NS物理内存区域,如内核或Hypervisor)。
二、评估目标
在该威胁模型中,评估的目标是S-EL2固件或Secure Partition Manager Core组件(SPMC)。EL3下的monitor和SPMD由通用TF-A威胁模型涵盖。
这个威胁模型的范围是:
1)S-EL2 SPMC的TF-A实现基于运行在TrustZone安全环境中的Hafnium hypervisor(在S-EL2异常级别)。该威胁模型与非安全世界的Hypervisor或VMs无关。不包括S-EL1和EL3 SPMC解决方案。
2)该实现符合FF-A v1.0规范和FF-A v1.1规范的一些特性。
3)安全分区是在引导时静态配置的。
4)关注生命周期的运行时部分(没有特别强调引导时间、出厂固件配置、固件更新等)。
5)不包括高级或侵入性物理攻击,如解封,FIB(聚焦离子束)等。
6)假设启用了安全引导,特别是TF-A安全引导(TBBR或双CoT)。攻击者不能引导未经SiP或平台提供程序批准的任意镜像。
1、数据流图
下图显示了SPM的高级数据流图,该数据流图分为位于EL3的SPMD组件和位于S-EL2的SPMC组件。SPMD主要充当非安全世界和安全世界之间的中继器/直通器。它被认为暴露了很小的攻击面。
下表给出了每个图元素的描述。在图中,红色虚线表示信任边界。虚线之外的组件被认为是不可信的。
元素 | 描述 |
---|---|
| SP到SPMC通信。FF-A函数调用或实现定义的Hypervisor调用。 |
| SPMC到SPMD的FF-A调用。 |
| SPMD到NS转发。 |
| SP到SP FF-A直接消息请求/响应。为了简化图表,请注意SP到SP的通信是通过SPMC进行的(SP1向SPMC执行直接的消息请求,目标是SP2。从SP2到SP1的直接消息响应也是如此)。 |
| 硬件控制 |
| Bootloader镜像加载 |
| 外部内存访问 |
三、威胁分析
此威胁模型遵循与通用TF-A威胁模型类似的方法。以下部分定义:
1)信任边界
2)资产
3)威胁代理
4)威胁类型
1、信任边界
1)非安全世界是不可信的。
2)安全世界和非安全世界是不同的信任边界。
3)EL3监视器、SPMD和SPMC是可信的。
4)引导加载程序(如果使用TF-A,特别是BL1/BL2)和运行时BL31通过使用可信引导被隐式信任。
5)EL3 monitor,SPMD, SPMC不信任SP(Secure Partitions)。
2、资产
确定以下资产:
1)SPMC状态。
2)SP的状态。
3)endpoints之间的信息交换(partition消息)。
4)SPMC secrets(例如启用时的指针身份验证密钥)。
5)SP secrets(例如应用程序密钥)。
6)调度周期。
7)共享内存。
3、威胁代理
确定以下威胁代理:
1)非安全端点(稍后称为NS-Endpoint):NS-EL2 (Hypervisor)或NS-EL1 (VM或OS内核)上的非安全世界客户端。
2)安全端点(以后称为S-Endpoint):通常是一个安全分区。
3)硬件攻击(非侵入性)需要对设备进行物理访问,例如总线探测或DRAM压力测试。
4、威胁类型
在通用TF-A威胁模型中暴露的以下威胁类别被重用(re-used):
1)欺骗(Spoofing)
2)篡改(Tampering)
3)抵赖(Repudiation)
4)信息泄露(Information disclosure)
5)拒绝服务(Denial of service)
6)特权提升(Elevation of privilege)
类似地,此威胁模型重用相同的威胁风险评级。风险分析是基于服务器或移动终端进行评估的。
5、威胁评估
通过对数据流图的每个元素应用STRIDE威胁分析,可以识别出以下威胁。
5.1 端点在直接请求/响应调用中模拟发送方或接收方FF-A ID
序号 | 01 | ||
---|---|---|---|
威胁 | 端点在直接请求/响应调用中模拟发送方或接收方FF-A ID | ||
数据流 | DF1, DF2, DF3, DF4 | ||
受影响的TF-A组件 | SPMD, SPMC | ||
资产 | SP状态 | ||
威胁 代理 | NS-Endpoint, S-Endpoint | ||
| 欺骗 | ||
产品 类型 | 服务器 | 移动终端 | |
| 严重(5) | 严重(5) | |
可能性评分 | 严重(5) | 严重(5) | |
| 严重(25) | 严重(25) | |
缓解 措施 | TF-A SPMC并没有减轻这种威胁。下面的指导留给系统集成商在必要时实现。SPMC必须在直接消息请求/响应接口中执行检查,以确保端点不能欺骗源和目的世界(例如,由NWd发起的直接发送到SWd的消息不能使用SWd ID作为发送方ID)。此外,可以添加驻留在SPMC中的软件组件,用于直接请求/响应过滤。它可以配置已知ID列表,以及在一个端点和另一个端点之间可以发生哪些交互(例如,哪个NWd端点ID向哪个SWd端点ID发送直接请求)。该组件检查发送方/接收方字段,以确保端点之间的合法通信。类似的组件可以存在于操作系统内核驱动程序或Hypervisor中,尽管它仍然不受SPMD/SPMC的信任。 |
5.2 篡改端点和SPMC之间的共享内存
序号 | 02 | |
---|---|---|
威胁 | 篡改端点和SPMC之间的共享内存。当SPMC处理RX/TX缓冲区时,恶意端点可能会试图篡改其RX/TX缓冲区内容(TOCTOU)。 | |
数据流 | DF1, DF3, DF4, DF7 | |
受影响的TF-A组件 | SPMC | |
资产 | 共享内存,信息交换 | |
威胁 代理 | NS-Endpoint, S-Endpoint | |
| 篡改 | |
产品 类型 |
| 移动终端 |
| 高(4) | 高(4) |
可能性评分 | 高(4) | 高(4) |
| 高(16) | 高(16) |
| 在FF-A v1.0和v1.1的上下文中,这是共享RX/TX缓冲对以及在PARTITION_INFO_GET或mem共享原语中的使用情况。SPMC必须在处理TX缓冲区的内容之前将其内容复制到内部临时缓冲区。 SPMC必须对不受信任的端点通过TX缓冲区传输的数据实现强化的输入验证。TF-A SPMC通过强制检查通过RX/TX缓冲区传输的数据来减轻这种威胁。 |
5.3 端点可以篡改自己的状态或另一个端点的状态
序号 | 03 | |
---|---|---|
威胁 | 端点可以篡改自己的状态或另一个端点的状态。恶意端点可能试图通过使用不寻常的FF-A函数调用组合(或乱序)来破坏自己或其他SP状态。这也可以是一个端点向另一个端点发出FF-A函数调用,而后者还没有处于接收它的状态(例如,SP在正常世界尚未启动时向正常世界发送直接请求)。 通过在FF-A内存共享、直接请求和响应或处理中断中使用意外转换来改变SPMC状态本身。这可以通过随机刺激注入或fuzzing来实现。 | |
数据流 | DF1, DF2, DF3, DF4 | |
受影响的TF-A组件 | SPMD, SPMC | |
资产 | SP状态, SPMC状态 | |
威胁 代理 | NS-Endpoint, S-Endpoint | |
| 篡改 | |
产品 类型 |
|
|
| 高(4) | 高(4) |
可能性评分 | 中(3) | 中(3) |
| 高(12) | 高(12) |
| TF-A SPMC通过遵循FF-A v1.1 EAC0规范中描述的分区运行时模型指导来缓解此类威胁。SPMC在运行时执行大量检查,通过遵循分区运行时模型来防止非法状态转换。 |
5.4 攻击者可能试图通过使用外部DRAM stress技术注入错误
序号 | 04 | |
---|---|---|
威胁 | 攻击者可能试图通过使用外部DRAM stress技术注入错误。恶意代理可能会尝试在SPMC管理的页表中切换SP Stage-2 MMU描述符位。这可能发生在Rowhammer类型的攻击中。 | |
数据流 | DF7 | |
受影响的TF-A组件 | SPMC | |
资产 | SP或SPMC状态 | |
威胁 代理 | 硬件攻击 | |
| 篡改 | |
产品 类型 | 服务器 |
|
| 高(4) | 高(4) |
可能性评分 | 低(2) | 中(3) |
| 中(8) | 高(12) |
| TF-A SPMC不提供针对此类攻击的缓解措施。它可以通过使用专用硬件电路或在芯片组或平台级别进行加固来解决,这留给集成商。 |
5.5 保护SPMC不受SMMU上游DMA设备的影响
序号 | 05 | |
---|---|---|
威胁 | 保护SPMC不受SMMU上游DMA设备的影响。设备可能试图篡改内部SPMC代码/数据段。 | |
数据流 | DF5 | |
受影响的TF-A组件 | SPMC | |
资产 | SPMC或SP状态 | |
威胁 代理 | NS-Endpoint, S-Endpoint | |
| 篡改、特权提升 | |
产品 类型 |
|
|
| 高(4) | 高(4) |
可能性评分 | 中(3) | 中(3) |
| 高(12) | 高(12) |
| 平台可能更喜欢通过SMMU配置和页表分配引导时间、静态分配的内存区域。FF-A v1.1规范通过静态DMA隔离提供了这种功能。TF-A SPMC并没有减轻这种威胁。它将在未来的版本中采用静态DMA隔离方法。 |
5.6 重放端点之间过去通信的片段
序号 | 06 | |
---|---|---|
威胁 | 重放端点之间过去通信的片段。恶意端点可能会重放发生在两个合法端点之间的消息交换,从而触发故障或从接收端点提取秘密。特别是,端点和SPMC之间带有碎片消息的内存共享操作可能会被恶意代理重放,因为恶意代理可以访问或获得对不属于该代理的内存区域的权限。 | |
数据流 | DF2, DF3 | |
受影响的TF-A组件 | SPMC | |
资产 | 信息交换 | |
威胁 代理 | NS-Endpoint, S-Endpoint | |
| 抵赖 | |
产品 类型 |
|
|
| 中(3) | 中(3) |
可能性评分 | 高(4) | 高(4) |
| 高(12) | 高(12) |
| TF-A SPMC并没有减轻这种威胁。 |
5.7 恶意端点可能试图通过使用无效或不正确的输入参数来提取数据或状态信息
序号 | 07 | |
---|---|---|
威胁 | 恶意端点可能试图通过使用无效或不正确的输入参数来提取数据或状态信息。缺乏输入参数验证或恶意伪造输入参数的副作用可能会影响SPMC。 | |
数据流 | DF1, DF2, DF3, DF4 | |
受影响的TF-A组件 | SPMD, SPMC | |
资产 | SP/SPMC秘密,SP/SPMC状态 | |
威胁 代理 | NS-Endpoint, S-Endpoint | |
| 信息交换 | |
产品 类型 |
|
|
| 高(4) | 高(4) |
可能性评分 | 中(3) | 中(3) |
| 高(12) | 高(12) |
| 安全分区必须遵循安全标准和最佳实践,以减轻被常见漏洞利用的风险。使用软件(金丝雀)或硬件强化技术(XN、WXN、BTI、指针身份验证、MTE)有助于及早发现和阻止漏洞利用。TF-A SPMC通过实现栈保护、指针认证、BTI、XN、WXN和安全加固技术来减轻这种威胁。 |
5.8 恶意端点可能伪造直接消息请求,从而通过直接消息响应揭示另一个端点的内部状态
序号 | 08 | |
---|---|---|
威胁 | 恶意端点可能伪造直接消息请求,从而通过直接消息响应揭示另一个端点的内部状态。安全分区或SPMC通过直接消息响应来回复分区消息,其中包含可能揭示其内部状态的信息(例如超出允许范围的分区消息响应)。 | |
数据流 | DF1, DF2, DF3, DF4 | |
受影响的TF-A组件 | SPMC | |
资产 | SPMC/SP状态 | |
威胁 代理 | NS-Endpoint, S-Endpoint | |
| 信息泄露 | |
产品 类型 | 服务器 | 移动终端 |
| 中(3) | 中(3) |
可能性评分 | 低(2) | 低(2) |
| 中(6) | 中(6) |
| 对于针对SPMC的直接请求的特定情况,对后者进行加固,以防止通过直接消息响应透露其内部状态或SP的状态。此外,SPMC根据分区运行时模型建立的规则在运行时执行大量检查,以阻止端点对另一个端点的内部状态进行恶意提取。 |
5.9 探测端点之间的FF-A通信
序号 | 09 | |
---|---|---|
威胁 | 探测端点之间的FF-A通信。SPMC和sp通常加载到外部内存(由TrustZone内存控制器保护)。当共享缓冲区保存在外部内存中时,恶意代理可以使用非侵入性方法探测外部内存总线,并提取SP和SPMC之间的通信,或者SP之间的通信。 | |
数据流 | DF7 | |
受影响的TF-A组件 | SPMC | |
资产 | SP/SPMC状态, SP/SPMC秘密 | |
威胁 代理 | 硬件攻击 | |
| 信息泄露 | |
产品 类型 | 服务器 | 移动终端 |
| 中(3) | 中(3) |
可能性评分 | 低(2) | 中(3) |
| 中(6) | 中(9) |
| 期望平台或芯片组提供保护DRAM内容的保障。TF-A SPMC不能减轻这类攻击,这是留给集成商的。 |
5.10 恶意代理可能会尝试使用基于软件的cache侧信道攻击技术来泄露SPMC状态或秘密
序号 | 10 | |
---|---|---|
威胁 | 恶意代理可能会尝试使用基于软件的cache侧信道攻击技术来泄露SPMC状态或秘密。 | |
数据流 | DF7 | |
受影响的TF-A组件 | SPMC | |
资产 | SP或SPMC状态 | |
威胁 代理 | NS-Endpoint, S-Endpoint | |
| 信息泄露 | |
产品 类型 | 服务器 | 移动终端 |
| 中(3) | 中(3) |
可能性评分 | 低(2) | 低(2) |
| 中(6) | 中(6) |
| 从集成的角度来看,假设在S-EL2中使用SPMC组件的平台(因此实现了Armv8.4 FEAT_SEL2架构扩展)实现了对Spectre, Meltdown或其他cache时间侧信道类型攻击的缓解。TF-A SPMC实现了一种缓解(防止在异常返回后进行投机的屏障指令)。SPMC可以通过软件缓解措施(例如投机屏障)进一步加强,以应对硬件中未涵盖的情况。使用加固的编译器和适当的选项,代码检查是减轻幽灵类型攻击的推荐方法。对于未硬化的内核,使用诸如内核页表隔离之类的技术可以帮助减轻Meltdown类型的攻击。 |
5.11 恶意端点可能会尝试向SPMC发送针对端点内某个服务的请求,从而拒绝另一个端点访问该服务
序号 | 11 | |
---|---|---|
威胁 | 恶意端点可能会尝试向SPMC发送针对端点内某个服务的请求,从而拒绝另一个端点访问该服务。类似地,恶意端点可能以端点内的服务为目标,使得后者无法从另一个端点请求服务。 | |
数据流 | DF1, DF2, DF3, DF4 | |
受影响的TF-A组件 | SPMC | |
资产 | SPMC状态 | |
威胁 代理 | NS-Endpoint, S-Endpoint | |
| 拒绝服务 | |
产品 类型 | 服务器 | 移动终端 |
| 中(3) | 中(3) |
可能性评分 | 中(3) | 中(3) |
| 中(9) | 中(9) |
| TF-A SPMC并没有减轻这种威胁。限制操作完成的时间可以通过使用受信任的看门狗来实现。其他服务质量监控可以在SPMC中实现,例如在有限的时间范围内计算操作的数量。 |
5.12 恶意端点可能会尝试通过FFA_NOTIFICATION_BITMAP_CREATE在SPMC中分配通知位图
序号 | 12 | |
---|---|---|
威胁 | 恶意端点可能会尝试通过FFA_NOTIFICATION_BITMAP_CREATE在SPMC中分配通知位图。这可能是试图耗尽SPMC的内存,或者为不打算接收来自sp的通知的VM分配位图。从而创造了一个本来不应该存在的渠道的可能性。 | |
数据流 | DF1, DF2, DF3 | |
受影响的TF-A组件 | SPMC | |
资产 | SPMC状态 | |
威胁 代理 | NS-Endpoint, S-Endpoint | |
| 拒绝服务,欺骗 | |
产品 类型 | 服务器 |
|
| 中(3) | 中(3) |
可能性评分 | 中(3) | 中(3) |
| 中(9) | 中(9) |
| TF-A SPMC通过为位图分配定义一个固定大小的池来减轻这种威胁。它还限制了指定的从NWd端点使用的FF-A调用。在NWd中,管理程序应该限制对指定的FF-A调用的访问。 |
5.13 恶意端点可能试图通过FFA_NOTIFICATION_BITMAP_DESTROY销毁SPMC中的通知位图
序号 | 13 | |
---|---|---|
威胁 | 恶意端点可能试图通过FFA_NOTIFICATION_BITMAP_DESTROY销毁SPMC中的通知位图。这可能是试图篡改SPMC状态,使分区无法接收通知。 | |
数据流 | DF1, DF2, DF3 | |
受影响的TF-A组件 | SPMC | |
资产 | SPMC状态 | |
威胁 代理 | NS-Endpoint, S-Endpoint | |
| 篡改 | |
产品 类型 | 服务器 |
|
| 低(2) | 低(2) |
可能性评分 | 低(2) | 低(2) |
| 低(4) | 低(4) |
| TF-A SPMC通过限制NWd发出指定的FF-A调用来缓解这一问题。此外,如果存在待处理的通知,则不能销毁通知位图。在NWd中,管理程序必须限制可以发出指定调用的NS-Endpoint。 |
5.14 恶意端点可能会尝试使用FF-A调用FFA_NOTIFICATION_BIND向非预期发送方授予权限,以设置针对另一个接收方的通知
序号 | 14 | |
---|---|---|
威胁 | 恶意端点可能会尝试使用FF-A调用FFA_NOTIFICATION_BIND向非预期发送方授予权限,以设置针对另一个接收方的通知。这可能是试图篡改SPMC状态,从而建立一个意想不到的、可能是恶意的通信通道。 | |
数据流 | DF1, DF2, DF3 | |
受影响的TF-A组件 | SPMC | |
资产 | SPMC状态 | |
威胁 代理 | NS-Endpoint, S-Endpoint | |
| 篡改、欺骗 | |
产品 类型 |
| 移动终端 |
| 低(2) | 低(2) |
可能性评分 | 中(3) | 中(3) |
| 中(6) | 中(6) |
| TF-A SPMC通过限制指定的FFA_NOTIFICATION_BIND调用只能由接收方发出来缓解这种情况。接收方负责将通知id分配给一个特定分区。此外,不打算接收通知的接收器必须在各自分区的清单中禁用通知接收。至于来自NWd的呼叫,如果NWd VM在初始化时分配了位图,TF-A SPMC不能保证不会发生这种威胁。Hypervisor必须在NWd中进行缓解,类似于SPMC在SWd中的调用。但是,如果Hypervisor已经被破坏,SPMC将无法缓解从NWd转发的呼叫。 |
5.15 恶意分区端点可能会尝试设置未绑定到它的通知
序号 | 15 | |
---|---|---|
威胁 | 恶意分区端点可能会尝试设置未绑定到它的通知 | |
数据流 | DF1, DF2, DF3 | |
受影响的TF-A组件 | SPMC | |
资产 | SPMC状态 | |
威胁 代理 | NS-Endpoint, S-Endpoint | |
| 欺骗 | |
产品 类型 | 服务器 |
|
| 低(2) | 低(2) |
可能性评分 | 低(2) | 低(2) |
| 低(4) | 低(4) |
| TF-A SPMC通过检查调用FFA_NOTIFICATION_SET的输入中提供的发送方ID来减轻这种情况。对于给定的接收方,SPMC跟踪哪些通知绑定到哪个发送方。如果发送方是SP,则提供的发送方ID必须与当前正在运行的分区的ID匹配。 |
5.16 恶意分区端点可能会尝试获取不针对发送到它的通知
序号 | 16 | |
---|---|---|
威胁 | 恶意分区端点可能会尝试获取不针对发送到它的通知。 | |
数据流 | DF1, DF2, DF3 | |
受影响的TF-A组件 | SPMC | |
资产 | SPMC状态 | |
威胁 代理 | NS-Endpoint, S-Endpoint | |
| 欺骗 | |
产品 类型 |
| 移动终端 |
| 提示(1) | 提示(1) |
可能性评分 | 低(2) | 低(2) |
| 低(2) | 低(2) |
| TF-A SPMC通过检查调用FFA_NOTIFICATION_GET的输入中提供的接收方ID来减轻这种情况。SPMC跟踪每个接收方等待的通知。提供的接收方ID必须与当前正在运行的分区的ID匹配(如果它是SP)。对于从NWd转发的呼叫,如果接收者已经创建了它的位图,并且有挂起的通知,SPMC将返回挂起的通知。如果Hypervisor或OS内核受到威胁,SPMC将无法减轻来自恶意NWd端点的调用。 |
5.17 恶意分区端点可能会尝试通过FFA_NOTIFICATION_INFO_GET调用获取关于挂起通知的信息
序号 | 17 | |
---|---|---|
威胁 | 恶意分区端点可能会尝试通过FFA_NOTIFICATION_INFO_GET调用获取关于挂起通知的信息。这个调用意味着NWd FF-A驱动程序使用。 | |
数据流 | DF1, DF2, DF3 | |
受影响的TF-A组件 | SPMC | |
资产 | SPMC状态 | |
威胁 代理 | NS-Endpoint, S-Endpoint | |
| 信息泄露 | |
产品 类型 |
|
|
| 低(2) | 低(2) |
可能性评分 | 中(3) | 中(3) |
| 中(6) | 中(6) |
| TF-A SPMC通过将错误返回给sp对FFA_NOTIFICATION_INFO_GET的调用来减轻这种情况。如果Hypervisor或OS内核受到威胁,SPMC将无法减轻来自恶意NWd端点的调用。 |
5.18 恶意分区端点可能会尝试向另一个分区端点发送通知,阻碍其操作
序号 | 18 | |
---|---|---|
威胁 | 恶意分区端点可能会尝试向另一个分区端点发送通知,阻碍其操作。恶意端点的意图可能是干扰接收器和/或主端点的执行,因为它们都可以被NPI和SRI分别抢占。 | |
数据流 | DF1, DF2, DF3, DF4 | |
受影响的TF-A组件 | SPMC | |
资产 | SPMC/SP状态,CPU周期 | |
威胁 代理 | NS-Endpoint, S-Endpoint | |
| 拒绝服务 | |
产品 类型 |
|
|
| 低(2) | 低(2) |
可能性评分 | 中(3) | 中(3) |
| 中(6) | 中(6) |
| TF-A SPMC并没有减轻这种威胁。然而,由于架构的原因,影响是有限的:通知没有排队,已经发出信号的通知需要由接收方检索,直到它可以再次发送。 SRI和NPI在处理之前都不能挂起,这限制了虚假中断的数量。-在给定的执行上下文中,给定的接收者只能将最大数量的通知绑定到给定的发送者。 |
5.19 恶意端点可能滥用FFA_RUN调用来恢复或打开其他端点执行上下文,试图更改SPMC和sp的内部状态,从而可能导致非法状态转换和死锁
序号 | 19 | |
---|---|---|
威胁 | 恶意端点可能滥用FFA_RUN调用来恢复或打开其他端点执行上下文,试图更改SPMC和sp的内部状态,从而可能导致非法状态转换和死锁。端点可以使用FFA_MSG_SEND_DIRECT_REQ ABI调用到另一个端点执行上下文来创建调用链。恶意端点可能会滥用这一点,在调用链中形成循环,从而导致潜在的死锁。 | |
数据流 | DF1, DF2, DF4 | |
受影响的TF-A组件 | SPMC, SPMD | |
资产 | SPMC/SP状态,调度周期 | |
威胁 代理 | NS-Endpoint, S-Endpoint | |
| 篡改、拒绝服务 | |
产品 类型 |
|
|
| 中(3) | 中(3) |
可能性评分 | 中(3) | 中(3) |
| 中(9) | 中(9) |
| TF-A SPMC通过遵循FF-A v1.1 EAC0规范中描述的分区运行时模型指导来缓解此类威胁。SPMC在运行时执行大量检查,通过遵循分区运行时模型来防止非法状态转换。此外,如果接收端端点是当前调用链中当前端点的前身,SPMC将通过返回FFA_DENIED错误代码来拒绝任何形成循环的尝试。只有主调度器才允许打开其他分区的执行上下文,尽管SPMC没有能力检查其标识。安全分区基于运行时模型恢复其他分区的执行上下文的能力有限。这种企图不能损害SPMC的完整性。 |
5.20 恶意端点可以通过使用FFA_INTERRUPT调用来执行拒绝服务攻击
序号 | 20 | |
---|---|---|
威胁 | 恶意端点可以通过使用FFA_INTERRUPT调用来执行拒绝服务攻击,该调用可能试图导致系统崩溃或进入未知状态,因为没有物理中断可以挂起,以便在SPMC中处理。 | |
数据流 | DF1, DF2, DF5 | |
受影响的TF-A组件 | SPMC, SPMD | |
资产 | SPMC/SP状态,调度周期 | |
威胁 代理 | NS-Endpoint, S-Endpoint | |
| 篡改,拒绝服务 | |
产品 类型 |
|
|
| 中(3) | 中(3) |
可能性评分 | 中(3) | 中(3) |
| 中(9) | 中(9) |
| TF-A SPMC通过检测来自分区的调用和简单地返回FFA_ERROR状态接口来缓解这种攻击。SPMC只允许SPMD使用FFA_INTERRUPT ABI来与在非安全世界执行时触发的挂起的安全中断通信。 |
5.21 恶意安全端点可能会deactivate(虚拟)安全中断,该中断并不是SPMC发出的信号,从而试图改变SPMC的状态,并可能导致系统崩溃
序号 | 21 | |
---|---|---|
威胁 | 恶意安全端点可能会deactivate(虚拟)安全中断,该中断并不是SPMC发出的信号,从而试图改变SPMC的状态,并可能导致系统崩溃。SPMC将虚拟中断id映射到物理中断id,以保持虚拟中断驱动程序的简单实现。类似地,恶意安全端点可能会为安全中断多次调用deactivation ABI。此外,恶意安全端点可能会试图停用SPMC向另一个端点执行上下文发出的(虚拟)安全中断,甚至在处理安全中断之前。 | |
数据流 | DF1, DF5 | |
受影响的TF-A组件 | SPMC | |
资产 | SPMC/SP状态 | |
威胁 代理 | S-Endpoint | |
| 篡改 | |
产品 类型 |
|
|
| 中(3) | 中(3) |
可能性评分 | 中(3) | 中(3) |
| 中(9) | 中(9) |
| 在初始化时,TF-A SPMC解析分区清单,以找到负责处理各种安全物理中断的目标执行上下文。TF-A SPMC通过以下方式缓解上述威胁:
|
5.22 恶意的安全端点可能不会deactive SPMC向它发出的虚拟中断信号,而是执行安全中断信号完成。这种破坏SPMC内部状态的尝试可能导致未知状态,并进一步导致系统崩溃
序号 | 22 | |
---|---|---|
威胁 | 恶意的安全端点可能不会deactive SPMC向它发出的虚拟中断信号,而是执行安全中断信号完成。这种破坏SPMC内部状态的尝试可能导致未知状态,并进一步导致系统崩溃。类似地,恶意安全端点可能故意不执行中断停用或中断完成信号。由于SPMC一次只能处理一个安全中断,这可能会阻塞系统,因为所有中断都被无限期地屏蔽,这可能会导致系统崩溃或重新启动。 | |
数据流 | DF1, DF5 | |
受影响的TF-A组件 | SPMC | |
资产 | SPMC/SP状态,调度周期 | |
威胁 代理 | S-Endpoint | |
| 篡改、拒绝服务 | |
产品 类型 |
|
|
| 中(3) | 中(3) |
可能性评分 | 中(3) | 中(3) |
| 中(9) | 中(9) |
| TF-A SPMC不能缓解这种威胁。这是当前SPMC实现的一个限制,需要在未来的版本中加以处理。 |
5.23 恶意端点可以利用非安全中断抢占安全端点,从而试图使其无法处理针对它的安全虚拟中断
序号 | 23 | |
---|---|---|
威胁 | 恶意端点可以利用非安全中断抢占安全端点,从而试图使其无法处理针对它的安全虚拟中断。这可能导致优先级反转,因为安全虚拟中断保持挂起,而非安全中断由非安全世界虚拟机处理。 | |
数据流 | DF1, DF2, DF3, DF5 | |
受影响的TF-A组件 | SPMC, SPMD | |
资产 | SPMC/SP状态,调度周期 | |
威胁 代理 | NS-Endpoint | |
| 拒绝服务 | |
产品 类型 | 服务器 |
|
| 中(3) | 中(3) |
可能性评分 | 中(3) | 中(3) |
| 中(9) | 中(9) |
| TF-A SPMC本身并不能缓解此类威胁。系统集成商必须采取必要的高层设计决策,考虑中断优先级。SPMC执行其角色,使sp能够根据FF-A v1.1 EAC0规范中的指导,在分区清单的帮助下指定针对非安全中断的适当操作。 |
5.24 安全端点依赖于CPU周期的主调度器。恶意端点可能会延迟安全端点的调度。如果不及时处理安全中断,可能会危及SP和SPMC的状态,从而使系统无响应
序号 | 24 | |
---|---|---|
威胁 | 安全端点依赖于CPU周期的主调度器。恶意端点可能会延迟安全端点的调度。如果不及时处理安全中断,可能会危及SP和SPMC的状态,从而使系统无响应 | |
数据流 | DF1, DF2, DF3, DF5 | |
受影响的TF-A组件 | SPMC, SPMD | |
资产 | SPMC/SP状态,调度周期 | |
威胁 代理 | NS-Endpoint | |
| 拒绝服务 | |
产品 类型 |
|
|
| 中(3) | 中(3) |
可能性评分 | 中(3) | 中(3) |
| 中(9) | 中(9) |
| TF-A SPMC不能完全缓解此类威胁。但是,根据FF-A v1.1 EAC0规范中提供的指导,SPMC规定了CPU周期,以便在SPMC调度模式下运行安全端点执行上下文,该模式不能被非安全中断抢占。这减少了周期分配对主调度器的依赖。此外,所有进一步的中断都被屏蔽,直到当前CPU上挂起的安全虚拟中断被处理。这允许SP执行上下文即使在被中断时也能继续处理。 |
5.25 恶意的FF-A端点可以使用内存共享调用来耗尽SPMC资源
序号 | 25 | |
---|---|---|
威胁 | 恶意的FF-A端点可以使用内存共享调用来耗尽SPMC资源。对于涉及SP的每个正在进行的操作,SPMC分配资源来跟踪其状态。如果操作从未结束,则资源永远不会释放。在最坏的情况下,永远不会结束的多个操作可能会耗尽SPMC资源,导致无法进行内存共享操作。这可能会影响其他无害的FF-A端点,使其无法合法地使用内存共享功能。其目的甚至可能是导致SPMC消耗过多的CPU周期,试图使其拒绝向NWd提供服务。 | |
数据流 | DF1, DF2 | |
受影响的TF-A组件 | SPMC, SPMD | |
资产 | SPMC状态 | |
威胁 代理 | NS-Endpoint, S-Endpoint | |
| 拒绝服务 | |
产品 类型 |
|
|
| 高(4) | 中(3) |
可能性评分 | 高(4) | 中3) |
| 高(16) | 中(9) |
| TF-A SPMC使用静态分配的内存池来跟踪正在进行的内存共享操作。在可能的攻击之后,这可能由于内存不足而失败,并向调用者返回错误。此时,任何其他需要使用内存共享进行操作的端点都可能使自己处于不可用状态。关于CPU周期耗尽威胁,SPMC没有提供任何缓解措施,因为虚拟FF-A实例上的任何FF-A端点都允许调用内存共享/出借/赠予。 |
5.26 如果由于致命错误而终止,而没有释放共享/出借的内存,则借用方可能会干扰出借方的操作
序号 | 26 | |
---|---|---|
威胁 | 如果由于致命错误而终止,而没有释放共享/出借的内存,则借用方可能会干扰出借方的操作。这种情况可能使出借方无法运作。 | |
数据流 | DF1, DF2 | |
受影响的TF-A组件 | SPMC | |
资产 | SP状态 | |
威胁 代理 | NS-Endpoint, S-Endpoint | |
| 拒绝服务 | |
产品 类型 |
| 移动终端 |
| 高(4) | 高(2) |
可能性评分 | 中(3) | 中(3) |
| 高(12) | 高(6) |
| TF-A SPMC没有为这种情况提供缓解措施。在失败的情况下,FF-A端点必须尝试放弃共享/出借的内存。用于跟踪SPMC中操作的内存也将保持可用。 |
5.27 恶意的FF-A端点可能试图篡改共享/出借内存的内容,同时被其他FF-A端点访问
序号 | 27 | |
---|---|---|
威胁 | 恶意的FF-A端点可能试图篡改共享/出借内存的内容,同时被其他FF-A端点访问。它可能会尝试这样做:当通过各自的FF-A调用检索或放弃对内存的访问时,使用一个清除标志;或者直接访问内存,而不考虑所有相关端点之间的同步协议。 | |
数据流 | DF1, DF2 | |
受影响的TF-A组件 | SPMC, FF-A endpoint | |
资产 | SP状态 | |
威胁 代理 | NS-Endpoint, S-Endpoint | |
| 拒绝服务、篡改 | |
产品 类型 |
|
|
| 低(2) | 低(2) |
可能性评分 | 中(3) | 中(3) |
| 中(6) | 中(6) |
| 对于威胁中定义的第一种情况,TF-A SPMC通过确保只有在涉及多个借用方的场景中,当所有借用方都放弃对内存的访问时才清除内存,从而减轻了威胁。此外,如果接收方被授予RO权限,则SPMC将通过向相应的FF-A调用返回错误,拒绝代表借用方清除内存的任何请求。威胁中定义的第二种情况不能由SPMC减轻。NS/S FF-A端点需要建立一个健壮的协议来使用共享内存。 |
5.28 恶意的FF-A端点可能会尝试共享不在其翻译机制中的内存,或者尝试指定比它在给定时间拥有的属性更宽松的属性
序号 | 28 | |
---|---|---|
威胁 | 恶意的FF-A端点可能会尝试共享不在其翻译机制中的内存,或者尝试指定比它在给定时间拥有的属性更宽松的属性。这两种方式都可能是试图提升其特权。 | |
数据流 | DF1, DF2 | |
受影响的TF-A组件 | SPMC, FF-A endpoint | |
资产 | SP状态 | |
威胁 代理 | NS-Endpoint, S-Endpoint | |
| 拒绝服务、篡改 | |
产品 类型 |
|
|
| 高(4) | 低(2) |
可能性评分 | 中(3) | 低(2) |
| 高(12) | 低(4) |
| TF-A SPMC通过对提供的内存区域描述符执行完整性检查来减轻这种威胁。对于虚拟FF-A实例上的操作,一旦提供了完整的内存描述符,SPMC就会验证内存是否是调用者转换机制的一部分。SPMC还检查所提供的内存属性是否在所有者拥有的内存属性范围内(就权限而言)。如果指定了更宽松的属性,SPMC将返回错误FFA_INVALID_PARAMETERS。在任何共享/出借或赠予内存的调用以及检索请求中都强制执行许可规则。 |
参考: 11.2. SPMC Threat Model — Trusted Firmware-A 2.9.0 documentation
相关文章:
ATF(TF-A) SPMC威胁模型-安全检测与评估
安全之安全(security)博客目录导读 ATF(TF-A) 威胁模型汇总 目录 一、简介 二、评估目标 1、数据流图 三、威胁分析 1、信任边界 2、资产 3、威胁代理 4、威胁类型 5、威胁评估 5.1 端点在直接请求/响应调用中模拟发送方或接收方FF-A ID 5.2 篡改端点和SPMC之间的…...
BIO AIO NIO 的区别
BIO AIO NIO 是 Java 中用于 I/O 操作的三种不同的编程模型。它们的区别在于它们执行I/O 操作的方式和效率。在讲 BIO,NIO,AIO 之前先来回顾一下这样几个概念:同步与异步,阻塞与非阻塞。 同步与异步 同步:同步就是发起一个调用后ÿ…...
大数据学习1.1-Centos8网络配置
1.查看虚拟网卡 2.配置网络信息 打勾处取消 记住箭头的数字 3.修改 网络连接 4.进入虚拟网络 5.进入属性 6.修改IPv4 5.将iIP和DNS进行修改 6.配置网络信息-进入修改网络配置文件 # 进入root用户 su root # 进入网络配置文件 cd /etc/sysconfig/network-scripts/ # 修改网络配…...
在Android studio 创建Flutter项目运行出现问题总结
在Android studio 中配置Flutter出现的问题 A problem occurred configuring root project ‘android’出现这个问题。解决办法 首先找到flutter配置的位置 在D:\xxx\flutter\packages\flutter_tools\gradle位置中的flutter.gradle buildscript { repositories { googl…...
Ceph入门到精通-ceph对于长文件名如何处理
RADOS object with short name 上一篇博文,我们将介绍了对象相关的数据结构ghobject_t,以及对象在底层文件系统存储的文件名,以及如何从文件名对应到 ghobject_t对象。 映射关系如下图所示: 这里面有一个漏洞,即obje…...
vue+element-ui 项目实战示例详解【目录】
vue 和 element是两个流行的前端即时,通常用于管理后台,PC等页面 能够快速构建美观的界面 1. vue2 介绍 Vue.js是一个流行的JavaScript框架,用于构建用户界面。它的版本分为Vue 2和Vue 3,而Element是一个基于Vue.js 2的UI组件库。…...
性能测试-性能调优主要方向和原则(15)
性能调优主要方向明确性能瓶颈之后,就需要进行性能调优了,调优主要从图所示的多个方向入手。能优化手段并不一定是独立应用的,在一次优化过程中很可能应用了多种优化技巧。 硬件层面优化 硬件层面优化更偏向于监控,当定位到硬件资源成为瓶颈后,更多是采用扩容等手段来解决…...
关于taos数据库使用过程中突发“unable to establish connection”问题解决
项目使用的版本信息 1.taos的版本信息 3.0.4.1 2.jdbc的版本 3.2.1 3.druid连接池版本 1.2.11问题描述 Java应用服务连接,突然大量抛出如下的异常信息导致应用宕机: sql: select server_status(), desc: unable to establish connection和集团DBA沟通…...
【Qt】Qt中将字符串转换为数字类型的函数总结以及用法示例
在Qt中,可以使用以下函数将字符串转换为数字类型: toInt():将字符串转换为int类型。toDouble():将字符串转换为double类型。toFloat():将字符串转换为float类型。toLongLong():将字符串转换为long long类型…...
效率工具3-计算机网络工具
查看各个状态的tcp连接情况 netstat -n | awk ‘/^tcp/ {S[$NF]} END {for(a in S) print a, S[a]}’ /^tcp/ 正则表达式匹配 netstat 命令输出的匹配部分,即以 "TCP" 开始的行{S[$NF]} 对于符合条件的每一行,awk 命令将使用数组 S 来计算每…...
2万多条汉字笔画笔顺查询ACCESS\EXCEL数据库
发现很多新华字典类的数据都没有笔顺的相关数据,因此就找了一下笔顺查询相关,发现有两个模式,一种是每个字每个笔画都有一张图片(很庞大的图片数据量);一种是笔画图片文件显示型,比如今天采集的…...
我的一周年创作纪念日,感谢有你们
机缘 还记得 2022 年 09 月 19 日吗? 我撰写了第 1 篇技术博客:《纯CSS实现Material文本框(PC和移动端都可以使用)》;从此就开始了我在CSDN记录日常工作中开发和学习的第一步。在后续又参加了新星计划,取得…...
【音视频】ffplay源码解析-PacketQueue队列
包队列架构位置 对应结构体源码 MyAVPacketList typedef struct MyAVPacketList {AVPacket pkt; //解封装后的数据struct MyAVPacketList *next; //下一个节点int serial; //播放序列 } MyAVPacketList;PacketQueue typedef struct PacketQueue {MyAVPacketList …...
C++ 霍夫变换圆形检测
霍夫变换圆形检测 一、检测原理二、实现步骤三、算法实现一、检测原理 HoughCircles 参数说明: HoughCircles( InputArray image, // 输入图像 ,必须是 8 位的单通道灰度图像 OutputArray circles, // 输出结果,发现的圆信息 Int method, // 方法 - HOUGH…...
南阳师范学院图书馆藏《乡村振兴战略下传统村落文化旅游设计》许少辉八一新著——2023学生开学季辉少许
南阳师范学院图书馆藏《乡村振兴战略下传统村落文化旅游设计》许少辉八一新著——2023学生开学季辉少许...
如何将你在树莓派上部署的 IoT 物联网 MQTT 服务发布到公网?
上一章,你成功的在树莓派搭建了 EMQX 开源社区版,用来提供 MQTT 服务,并验证了设备端接入和消息通信。但你发现只能在局域网内访问 emqx.local 服务,而 IoT 设备分布在全国各地公共网络环境,这些设备该如何接入呢&a…...
系统架构设计师(第二版)学习笔记----软件工程
【原文链接】系统架构设计师(第二版)学习笔记----软件工程 文章目录 一、软件工程1.1 软件危机的表现1.2 软件工程的内容 二、软件过程模型2.1 软件的声明周期2.2 瀑布模型2.3 瀑布模型的缺点2.4 原型模型2.5 原型模型开发阶段2.6 开发原型的途径2.7 螺旋…...
C与C++字符串分割方法示例汇总
在C语言中,没有内置的字符串分割函数。但是,你可以使用其他字符串操作函数和循环来实现字符串分割。这里是使用 strtok 函数在C中分割字符串的示例: #include <stdio.h> #include <string.h> int main() {char str[] "Hel…...
HTTP代理与VPN:网络代理技术的比较
HTTP代理和VPN是两种常见的网络代理技术,它们可以帮助用户隐藏自己的IP地址、保护网络隐私、绕过网络限制等。本文将介绍HTTP代理和VPN的定义、工作原理、优缺点以及使用场景。 一、HTTP代理 HTTP代理是一种通过代理服务器转发网络请求的技术。当用户发起网络请求时…...
免费低代码平台,助企业高效管理任务
编者按:本文主要介绍了免费的低代码平台实现了高效的任务管理系统,助力企业在任务管理方面的效率更上一层楼!这个免费的低代码平台,将提高员工的工作效率。它不仅是一个任务管理系统,更是一个能让 企业 摆脱繁琐工作&a…...
基于conda的相关命令
conda 查看python版本环境 打开Anaconda Prompt的命令输入框 查看自己的python版本 conda env list激活相应的python版本(环境) conda avtivate python_3.9 若输入以下命令可查看python版本 python -V #注意V是大写安装相应的包 pip install 包名5.查看已安装…...
【微信小程序】swiper的使用
1.swiper的基本使用 <jxz-header></jxz-header> <view class"banner"><swiperprevious-margin"30rpx"autoplayinterval"2000"indicator-dotsindicator-color"rgba(0,0,0,0.3)"indicator-active-color"#bda…...
iText实战--PDF和iText 简介
PDF可以做如下事务 iText 5步创建PDF import java.io.FileOutputStream; import com.itextpdf.text.Document; import com.itextpdf.text.Paragraph; import com.itextpdf.text.pdf.PdfWriter;public class PdfHelloWorld {/*** param args*/public static void main(String[]…...
「大数据-0.1」虚拟机VMware安装、配置、使用、创建大数据集群教程
目录 一、下载VMware Wworkstation Pro 16 二、安装VMware Wworkstation Pro 16 三、检查与设置VMware的网卡 1. 检查 2. 设置VMware网段 四、在VMware上安装Linux虚拟机 五、对安装好的虚拟机进行设置 1. 打开设置 2. 设置中文 3. 修改字体大小 4. 修改终端字体大小 5. 关闭虚…...
【HTTP】GET 和 POST 的区别
GET 和 POST 的区别 首先: GET 和 POST 没有本质区别, 具体来说, GET 的使用场景可替换为 POST,POST 使用的场景也可以替换为 GET. 语义上的区别: GET 通常用来获取数据, POST 通常用来上传数据. 现状是 GET 也经常用来上传数据, POST 也经常用来获取数据. 数据存放的位置不同…...
Unity Asset Bundle Browser 工具
Unity Asset Bundle Browser 工具 您可以在 Unity 项目中使用 Asset Bundle Browser 工具能够查看和编辑资源包的配置。 有关更多信息,请参阅 Unity Asset Bundle Browser 文档。 注意:此工具是不受支持的实用程序。查看极大的资源包可能会导致性能下…...
使用Linkerd实现流量管理:学习如何使用Linkerd的路由规则来实现流量的动态控制
🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…...
1462. 课程表 IV
文章目录 Tag题目来源题目解读解题思路方法一:Floyd传递闭包方法二:拓扑排序 思考写在最后 Tag 【拓扑排序】【传递闭包】【并查集】【数组】 题目来源 1462. 课程表 IV 题目解读 给你一个表示课程先决条件的数组 prerequisites,prerequis…...
QTday2
完善登录框 点击登录按钮后,判断账号(admin)和密码(123456)是否一致,如果匹配失败,则弹出错误对话框,文本内容“账号密码不匹配,是否重新登录”,给定两个按钮…...
thrift的简单使用
写在前面 本文一起看下一种由facebook出品的rpc框架thrift。 源码 。 1:开发步骤 1:编写thrift idl文件 2:根据thrift idl文件生成java模板代码 3:继承模板代码的*.Iface接口给出server的具体服务实现 4:使用模板的HelloWorldSe…...
自己做的网站怎么置顶/谷歌关键词分析工具
vue 从入门到精通(二) 上一篇总结了一些vue的理论知识,如果你没看懂的话……那返回去继续去看啊!反正我要开始第二篇了。 vue提供了大量的指令,比如:v-if,v-bind,v-on……太多,多写项目,多看API,…...
做网站公司高端/搜狗站长工具综合查询
原标题:django打造电商项目本课程的特点是实战,老师将手把手教大家搞个“大”项目,开发一套功能完备的系统!全程采用企业级标准电商平台实战项目,以互联网公司标准开发流程,带领大家实践从0到项目正式上线。…...
网站制作书籍推荐/百度关键词优化软件排名
bzoj3944:Sum 裸的杜教筛 bzoj4916:神犇和蒟蒻 按照筛phi的方式稍微推一下就好 bzoj3512:DZY Loves Math IV 我打了一个神奇的(杜教筛记忆化搜索(搜索里面有两层根号的找约数,总体上是在利用mu来容斥)),这种方法虽然不优秀但是也能过,然而正解是(杜教筛记忆化搜索(充分利用phi函…...
淘宝上找人做网站/网络营销和网络推广
♣题目部分在Oracle中,举例说明“集合操作关联转变(Set Join Conversion)”查询转换。♣答案部分1LHRorclasm > SELECT * FROM SCOTT.EMP A WHERE A.EMPNO>74692 2 MINUS3 3 SELECT * FROM SCOTT.EMP A WHERE A.EMPNO>7839;45…...
用c做网站/百度推广怎么做免费
近几年以来,Python 的应用场景越来越多,几乎可以应用于自然科学、工程技术、金融、通信和商业等各种领域。究其原因在于 Python 的简单易学、功能强大。 想系统地学点东西,发现很多不错的技术文档都是英文资料,发现英文竟然成为了…...
北京新一轮病毒/网站优化人员通常会将目标关键词放在网站首页中的
SQL Server 中master..spt_values的应用 今天在做数据分析报表的时候遇到一个这样的问题。 表结构如下。 部门编码、部门名称、部门人员ID(中间用逗号分割) 我想通过和人员表链接,查询出一个新的数据集,查询出的结果集格式如下&…...