ATF(TF-A)安全通告 TFV-1 (CVE-2016-10319)
安全之安全(security²)博客目录导读
ATF(TF-A)安全通告汇总
目录
一、ATF(TF-A)安全通告 TFV-1 (CVE-2016-10319)
二、CVE-2016-10319
一、ATF(TF-A)安全通告 TFV-1 (CVE-2016-10319)
| Title | 错误的固件更新SMC可能导致意外的大数据拷贝到安全内存中 |
|---|---|
| CVE ID | CVE-2016-10319 |
| Date | 18 Oct 2016 |
| Versions Affected | v1.2 and v1.3 (since commit 48bfb88) |
| Configurations Affected | 使用AArch64 BL1的平台加上在BL31之前执行的不受信任的非安全世界固件更新代码 |
| Impact | 将意外的大数据复制到BL1平台代码报告的空闲安全内存中 |
| Fix Version | Pull Request #783 |
| Credit | IOActive |
二、CVE-2016-10319
通用可信固件(TF-A) BL1代码包含一个SMC接口,该接口在冷复位后短暂可用,以支持固件更新(Firmware Update,FWU)功能(也称为恢复模式)。这允许在非安全世界中下实现大多数FWU功能,同时在BL1中保留基本的镜像身份验证功能。当冷启动到达EL3 Runtime Software(如AArch64系统上的BL31)时,FWU SMC接口将被EL3 Runtime SMC接口取代。平台可以选择使用多少FWU功能(如果有的话)。
BL1 FWU SMC处理代码,目前只支持AArch64,包含几个漏洞,当所有以下条件满足时可能会被利用:
1. 平台代码使用启用了TRUSTED_BOARD_BOOT构建选项的TF BL1。
2. 平台代码安排在BL31启动之前,在冷启动路径上执行不受信任的非安全世界FWU代码。从这个意义上说,不可信是指不在ROM中或未经过身份验证或已被攻击者以其他方式执行的代码。
3. 平台代码从bl1_plat_mem_check()的ARM平台版本复制下面描述的不安全模式。
这些漏洞包括在处理FWU_SMC_IMAGE_COPY SMC时输入验证检查中的潜在整数溢出。SMC实现的目的是将镜像复制到安全内存中,以供后续身份验证,但是这些漏洞可能允许攻击者将意外的大数据复制到安全内存中。请注意,需要一个单独的漏洞来利用这些漏洞;例如,一种让系统根据意外的安全内存内容改变其行为的方法。
其中两个漏洞位于bl1/bl1_fwu.c中的bl1_fwu_image_copy()函数。下面列出了这些,参考v1.3标记版本的代码:
1)Line 155:
/** If last block is more than expected then* clip the block to the required image size.*/
if (image_desc->copied_size + block_size >image_desc->image_info.image_size) {block_size = image_desc->image_info.image_size -image_desc->copied_size;WARN("BL1-FWU: Copy argument block_size > remaining image size."" Clipping block_size\n");
}/* Make sure the image src/size is mapped. */
if (bl1_plat_mem_check(image_src, block_size, flags)) {WARN("BL1-FWU: Copy arguments source/size not mapped\n");return -ENOMEM;
}INFO("BL1-FWU: Continuing image copy in blocks\n");/* Copy image for given block size. */
base_addr += image_desc->copied_size;
image_desc->copied_size += block_size;
memcpy((void *)base_addr, (const void *)image_src, block_size);
...
当在多个smc上以块方式执行镜像复制操作时,执行此代码片段。block_size是一个SMC参数,因此可能被攻击者控制。一个非常大的值可能会导致第一个if语句中的整数溢出,这将绕过检查,允许将未剪切的block_size传递给bl1_plat_mem_check()。如果bl1_plat_mem_check()也通过了,这可能会导致意外的大数据拷贝到安全内存中。
2)Line 206:
/* Make sure the image src/size is mapped. */
if (bl1_plat_mem_check(image_src, block_size, flags)) {WARN("BL1-FWU: Copy arguments source/size not mapped\n");return -ENOMEM;
}/* Find out how much free trusted ram remains after BL1 load */
mem_layout = bl1_plat_sec_mem_layout();
if ((image_desc->image_info.image_base < mem_layout->free_base) ||(image_desc->image_info.image_base + image_size >mem_layout->free_base + mem_layout->free_size)) {WARN("BL1-FWU: Memory not available to copy\n");return -ENOMEM;
}/* Update the image size. */
image_desc->image_info.image_size = image_size;/* Copy image for given size. */
memcpy((void *)base_addr, (const void *)image_src, block_size);
...
该代码片段在镜像复制操作的第一次调用期间执行。block_size和image_size都是SMC参数。一个非常大的image_size值可能会导致第二个if语句中的整数溢出,这将绕过检查,允许继续执行。如果bl1_plat_mem_check()也通过了,这可能会导致意外的大数据拷贝到安全内存中。
如果平台对bl1_plat_mem_check()的实现是正确的,那么它可能有助于防止上述2个漏洞被利用。然而,此函数的ARM平台版本包含类似的漏洞:
plat/arm/common/arm_bl1_fwu.c中bl1_plat_mem_check()函数的第88行:
while (mmap[index].mem_size) {if ((mem_base >= mmap[index].mem_base) &&((mem_base + mem_size)<= (mmap[index].mem_base +mmap[index].mem_size)))return 0;index++;
}
...
这个函数检查传递的内存区域是否在ARM平台映射的一个区域内。这里,mem_size可以是从bl1_fwu_image_copy()传递过来的block_size。mem_size的值太大可能导致整数溢出,导致函数错误地返回success。复制此不安全模式的平台将具有相同的漏洞。
参考:9.1. Advisory TFV-1 (CVE-2016-10319) — Trusted Firmware-A 2.9.0 documentation
相关文章:
ATF(TF-A)安全通告 TFV-1 (CVE-2016-10319)
安全之安全(security)博客目录导读 ATF(TF-A)安全通告汇总 目录 一、ATF(TF-A)安全通告 TFV-1 (CVE-2016-10319) 二、CVE-2016-10319 一、ATF(TF-A)安全通告 TFV-1 (CVE-2016-10319) Title 错误的固件更新SMC可能导致意外的大数据拷贝到安全内存中 CVE ID CVE-2016-10319 …...
说说我最近筛简历和面试的感受。。
大家好,我是鱼皮。 都说现在行情不好、找工作难,但招人又谈何容易?! 最近我们公司在招开发,实习社招都有。我收到的简历很多,但认真投递的、符合要求的却寥寥无几,而且都是我自己看简历、选人…...
Mysql /etc/my.cnf参数详解(一)
[mysqld] #server相关 server_id176452388 //每个MySQL服务器都需要具有唯一的server_id值 super_read_only 0 //不开启只读,在slave节点会开启即super_read_only 1 port 3306 //指定了Mysql开放的端口; default-storage-engine InnoDB skip-name…...
用最少数量的箭引爆气球【贪心算法】
用最少数量的箭引爆气球 有一些球形气球贴在一堵用 XY 平面表示的墙面上。墙面上的气球记录在整数数组 points ,其中points[i] [xstart, xend] 表示水平直径在 xstart 和 xend之间的气球。你不知道气球的确切 y 坐标。 一支弓箭可以沿着 x 轴从不同点 完全垂直 地…...
Matlab论文插图绘制模板第109期—特征渲染的标签气泡散点图
在之前的文章中,分享了Matlab标签散点图的绘制模板: 特征渲染的标签散点图: 进一步,再来分享一下特征渲染的标签气泡散点图的绘制模板,从而可以再添加一个维度的信息。 先来看一下成品效果: 特别提示&…...
音视频 ffplay命令播放媒体
播放本地文件 ffplay -window_title "test time" -ss 2 -t 10 -autoexit test.mp4 ffplay buweishui.mp3播放网络流 ffplay -window_title "rtmp stream" rtmp://202.69.69.180:443/webcast/bshdlive-pc强制解码器 mpeg4解码器:ffplay -vco…...
使用Fiddler模拟网络
Fiddler已经预置提供了模拟Modem速度的选项,其位置位于: Rules->Performances->Simulate Modem Speeds 勾选该选项后,所有通过Fiddler代理的流量都会变得用56k modem上网一般。 要直观观察限速后的效果,最好使用运行在浏览…...
【Axure高保真原型】多图表动态切换
今天和大家分享多图表动态切换的原型模板,点击不同的图标可以动态切换对应的表,包括柱状图、条形图、饼图、环形图、折线图、曲线图、面积图、阶梯图、雷达图;而且图表数据可以在左侧表格中动态维护,包括增加修改和删除࿰…...
笔试题-访问控制修饰符范围
...
基于飞腾芯片的设计与调试入门指导
一、啥是自主可控 国产CPU现在厂家细算起来其实有很多,现在华为、小米也在做自己的CPU,瑞芯微、全志等的SoC现在也是广泛应用。但是真正能叫做自主可控的CPU厂商,只有6家。那啥是自主可控?首先来不严谨的讲下现在数字芯片是怎么做的设计。FPGA大家都知道,可以通过Verilog…...
了解 HarmonyOS
引言 在开始 HarmonyOS 开发之前,了解其背景、特点和架构是非常重要的。本章将为你提供一个全面的 HarmonyOS 概览。 目录 什么是 HarmonyOS HarmonyOS 的发展历程 HarmonyOS 的特点 HarmonyOS 的架构 HarmonyOS 与其他操作系统的比较 1. 什么是 HarmonyOS …...
【校招VIP】产品面试之面试官的真实意图
考点介绍: 大厂面试时,面试官提出的问题除了了解经历和想法外,最看重的是思维逻辑能力、团队协作能力和协调能力。 『产品面试之面试官的真实意图』相关题目及解析内容可点击文章末尾链接查看! 一、考点题目 1. 你遇到的最大的…...
实现远程访问Linux堡垒机:通过JumpServer系统进行安全的服务器管理
文章目录 前言1. 安装Jump server2. 本地访问jump server3. 安装 cpolar内网穿透软件4. 配置Jump server公网访问地址5. 公网远程访问Jump server6. 固定Jump server公网地址 前言 JumpServer 是广受欢迎的开源堡垒机,是符合 4A 规范的专业运维安全审计系统。JumpS…...
Go 1.21新增的 maps 包详解
maps 包提供了几个非常有用的用于操作 map 类型(任何类型的 map)的函数,本文接下来详细介绍下这几个函数。 maps.Clone 定义如下: func Clone[M ~map[K]V, K comparable, V any](m M) M 返回 m 的一个副本,因为新的…...
《向量数据库指南》——腾讯云向量数据库(Tencent Cloud VectorDB) SDK 正式开源
腾讯云向量数据库 SDK 宣布正式开源。根据介绍,腾讯云向量数据库(Tencent Cloud VectorDB)的 Python SDK 与 Java SDK 是基于数据库设计模型,遵循 HTTP 协议,将 API 封装成易于使用的 Python 与 Java 函数或类,为开发者提供了更加友好、更加便捷的数据库使用和管理方式。…...
Tutorial: Mathmatical Derivation of Backpropagation
目录 1. 概要 2. Gradient Descent 3. Chain rule 3.1 单变量基本链式法则 3.2 单变量全微分链式法则 3.3 小贴士:微分、导数、导函数是什么关系? 4. What and why backpropagation? 5. Backpropagation for a simple neural network 5.1 基于…...
如何在 Linux 中设置 SSH 无密码登录
SSH(Secure SHELL)是一种开源且可信的网络协议,用于登录远程服务器以执行命令和程序。 它还用于使用安全复制 (SCP) 命令和 rsync 命令通过网络将文件从一台计算机传输到另一台计算机。 在本文[1]中,我们将向您展示如何在基于 RHE…...
什么时候用增量式PID,什么时候用位置式PID
PID控制器原理: 增量式PID: 位置式PID: 什么时候用位置式PID,什么时候用增量式PID: 在设计PID控制器时,应该考虑下什么时候用增量式,什么时候用位置式。需要看控制器输出u与控制目标之间的关系…...
Go语言入门记录:从基础到变量、函数、控制语句、包引用、interface、panic、go协程、Channel、sync下的waitGroup和Once等
程序入口文件的包名必须是main,但主程序文件所在文件夹名称不必须是main,即我们下图hello_world.go在main中,所以感觉package main写顺理成章,但是如果我们把main目录名称改成随便的名字如filename也是可以运行的,所以…...
位运算进阶操作
位运算的进阶操作,适合做题的时候用,共10点 1.通过位运算与特定的位模式进行掩码操作,可以提取、设置或清除特定的位信息。例如,我们可以使用位掩码来检查一个数的二进制表示中特定位置是否为1。 bool checkBit(int num, int po…...
Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...
(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...
微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...
智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...
