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…...
未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...
智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...
《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案
JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停 1. 安全点(Safepoint)阻塞 现象:JVM暂停但无GC日志,日志显示No GCs detected。原因:JVM等待所有线程进入安全点(如…...
视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)
前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块,…...
