​[DRAM Test]DRAM Failures之(Rowhammer、SPOILER、RAMBleed、TRRespass、Half-Double、软错误、故障模型)

一、DRAM功能模型

二、DRAM常见失效机制


1、SRAM常见失效机制:

访问失效:在读操作时,弱电流访问晶体管操作或弱电流下拉晶体管操作会导致位线放电
翻转读失效:在读操作时,较强电流访问晶体管操作或者弱电流下拉晶体管操作会导致SRAM单元的内容产生干扰
写失效:在写操作时,较强电流上拉晶体管操作会把交叉耦合翻转器的跳变点调成高电压,导致写操作失败
保持失效:即使在SRAM单元未被访问的时候,它保存的内容出现异常
2、灵敏放大器失效

3、地址的解码器失效

地址解码器的延时也会受到单个晶体管阈值电压偏差的影响。地址解码器的延时偏差会导致访问SRAM单元的时间缩短。这将直接引起对SRAM单元的访问失效或读失效。地址解码器失效的概率可以通过解码器的统计延时分布得出。

三、DRAM常见故障模型


故障类型:故障类型之间其实有很多是相重合的,但是我们针对某一种表现表现给予了具体的定义。只要符合这种定义,就可以称该类型的故障,并不需要就是究竟是否为对应故障。

1、地址解码器故障

(1)AF(Address-Decoder Faults)

一般有以下几种错误类型

Fault1:对应地址没有可访问的cell单元
Fault2:对应cell单元没有可以被访问的地址
Fault3:一个地址可以访问多个cell单元
Fault4:一个cell单元可以被多个地址访问

2、读写逻辑模块故障

(1)BF(Bridge Fault)- 桥接故障(短路故障)

共有两种:

Fault1:对地短路
Fault2:对电源短路
区分方法:测试算法中需要写入不同的pattern值来进行判断

(2)SOF(Stuck-Open Fault)- 开路故障

cell单元无法被访问

3、存储单元阵列故障

(1)SAF(Stuck-At Fault)- 固定故障

SAF:单元/连线 的逻辑值总为0或者1的故障,并且故障的逻辑值不变

(2)TF(Transition Fault)- 转换故障

TF:转换故障是SAF的一种特殊情况,当写数据时,某一存储单元失效使得 0=>1 或者 1=>0 的转变不能发生。

(3)CF(Coupling Fault)- 耦合故障

CF:某一单元的状态或其状态的变化将会影响到另一内存单元的状态,故CF故障又可以细分为三种故障

CFin(Inversion Coupling Fault)- 倒置耦合故障
CFin:一个内存单元写0 或 写1操作将使另一个内存单元的逻辑值倒置,即由 0=>1 或者 1=>0

共用2种倒置耦合故障:CF(↑;↕)、CF(↓;↕) [↑表示由0=>1变化; ↓表示1=>0变化; ↕表示翻转]

CFid(Idempotent Coupling Fault)- 固化耦合故障
CFid:一个内存单元写0 或 写1 操作将使另一个内存单元的值固定在一个确定值,可能为0,也可能为1

共有4中固化耦合故障:CF(↑;0)、CF(↑;1)、CF(↓;0)、CF(↓;1)

CFst(State Coupling Fault)- 状态耦合故障
CFst:一个内存单元的值决定另一个内存单元的值

共有4中状态耦合故障:(0;0)、(0;1)、(1;0)、(1;1)

(4)NPSF(Neighborhood Pattern Sensitive Fault)- 相邻矢量敏化故障

NPSF:一个单元因相邻单元的活动导致状态不正确

4、补充故障类型

除了上述的故障类型外,根据JEDEC手册,还可以有IDD电流故障、模式寄存器故障、Self Refresh故障等......

四、其他 DRAM 故障详解

DRAM相关故障大致可以分为以下几类:

  1. 从错误地址读取数据(地址错误)。
  2. 数据写入了错误的地址。
  3. 数据在读取时被破坏(即返回错误数据,但内存中的数据不变)。
  4. 数据在写入时已损坏(即写入正确的地址,但存储了错误的数据位)。
  5. 数据自动损坏,无需写入该内存地址(如电容漏电)。

DRAM 的“动态”部分是指需要定期刷新以避免数据错误(上面列表中的第 5 项),系统将在后台自动执行此刷新,刷新操作需要对电容充放电,并阻止对正在刷新的内存区域的访问,这也是为什么要尽量减少刷新的原因。

系统具有不同级别的 DRAM 故障保护。在硬件设计期间,模拟用于确保刷新操作足以防止数据损坏,并且内存总线不会损坏传输中的地址和数据(列表中的第 1 项到第 4 项)。当前的消费者系统通常根本不保护存储的数据,因为没有冗余,仅依赖于精心设计的内存刷新,许多服务器系统使用带有纠错码 (ECC) 的 DRAM,提高DRAM可靠性。

如何触发 DRAM 故障?

DRAM 故障可以自发发生,就像任何硬件故障一样,如果 DRAM 模块有缺陷或存在其他一些硬件缺陷,例如超出其规格运行的故障电源,则 DRAM 故障可能会以非常明显的速度发生并影响系统稳定性。

众所周知,某些内存访问模式更有可能暴露有缺陷的 DRAM 模块。memtest86+作为 Red Hat Enterprise Linux 一部分提供的RAM 测试器使用此类测试模式来暴露内存子系统中的硬件缺陷。

Rowhammer 攻击如何运作?

Rowhammer是指使用 CLFLUSH、CLFLUSHOPT 和 CLWB 系列 CPU 指令进行 DRAM 应力的特定技术。这一系列指令是由 i386 和 x86_64 架构提供的非特权指令,它们可以被滥用来增加到特定位置的 DRAM 流量。这使得编写 DRAM 故障诱导器特别有趣,这些程序可以作为普通进程在虚拟机管理程序中运行,因为 CLFLUSH 指令不需要特殊权限。

由 Rowhammer 引起的故障类型对应于初始列表中的第 5 项,存储的数据被更改,无需明确的内存写入,并且不一定在被访问的地址处,发生这种情况是因为访问模式使有关所需 DRAM 刷新率的设计假设无效:当以这种方式访问​​ DRAM 时,内存刷新发生的频率不足以可靠地保存存储的数据。

CLFLUSH 指令提供了一种特别有效的内存压力器,这对于许多系统来说都是困难的。CPU 提供其他方法(例如非临时内存访问)也可以绕过缓存,并且压力测试人员可以通过选择内存访问来达到非常相似的效果。

TRRespass (CVE-2020-10255)

为了缓解此类内存压力,系统供应商已在 DRAM 中构建了目标行刷新 (TRR) 机制。TRR 本质上刷新目标内存行以引发位翻转,从而避免通过 Rowhammer 效应自发的单元损坏。

该领域的最新研究表明,已发布的 TRR 机制不是单一的缓解措施,当然也不是修复所有 DRAM 或 Rowhammer 变体的机制。所述TRR保护机制可以在存储器控制器单元(MMU)中或在DRAM芯片内部实现。研究表明,在许多配备最新 DDR4 DRAM 芯片的新机器上,TRR 机制要么不存在,要么默认不启用,服务器类机器默认启用 TRR,而零售消费者机器可能没有,缓解措施似乎也没有涵盖整个内存地址空间。

TRR 保护机制仍然相当不透明,并且没有关于它如何保护 DRAM 免受众多 Rowhammer 变体影响的文档。为了克服围绕 TRR 的这种不透明性,构建了“TRRespass”工具,这是一个多面的 Rowhammer 模糊器,它可以帮助找到可能导致自发位损坏的更新的内存访问模式。

SPOILER:它与 Rowhammer 攻击有什么关系?

SPOILER 漏洞是一种微架构泄漏,允许攻击者确定非特权用户空间进程中的虚拟到物理页面映射。它利用内存顺序缓冲区中推测加载和存储操作的数据依赖性,并使用rdtscpmfence指令来测量揭示内存布局的时序差异。允许检测连续物理内存页面的范围,使得 Rowhammer 更有效和更容易;只需几秒钟的攻击,而不是数周。

SPOILER 漏洞特定于 Intel CPU,从第一代 Intel Core 处理器开始就出现了,此漏洞与 Spectre 漏洞不同且独立,它可能会被 Web 浏览器执行的恶意 JavaScript 代码或系统上运行的不受信任的代码所利用。

RAMBleed

在当代全行业 DRAM 内存实现中发现了一个名为 RAMBleed CVE-2019-0174 的漏洞,该漏洞允许非特权攻击者通过利用 Rowhammer 位翻转效应读取属于其他进程的某些内存,否则读取的数据可能无法访问,并且可能包含潜在的秘密信息。RAMBleed 是一种旁道读取漏洞,因为 Rowhammer 引起的位翻转允许攻击者推断属于其他进程的内存中的位值,用精心构建的攻击者页面围绕受害者数据页面,在其上执行hammering 可以允许在攻击者控制的页面之一中引发相关数据位翻转,并重建数据。

与之前的 Rowhammer 攻击不同,RAMBleed 不需要使用大页面和巨大的TLB;概念验证代码可以每秒大约 3-4 位的速度读取内存。这种攻击不是特定于架构的,而且很多易受 Rowhammer 攻击的 DRAM 内存实现都易受 RAMBleed 攻击。

有一些常见的针对 Rowhammer 的基于硬件的缓解措施也有可能缓解 RAMBleed,这些是目标行刷新 (TRR)、增加的 DRAM 刷新间隔(DRAM 刷新率加倍)和 ECC 内存的使用。但是,这些策略实际缓解问题的程度各不相同,并且是特定于硬件平台的,预计供应商将提供合适的平台特定指导。

迄今为止,由于 ECC 内存的广泛使用增加了复杂性,因此尚未在服务器平台上证明这种攻击。然而,研究人员已经证明,理论上可以绕过 ECC,即使在存在 ECC 内存的情况下也能创建持续翻转,并对服务器进行攻击,也可能跨虚拟机进行攻击。虽然 ECC 内存确实使 Rowhammering 过程复杂化,但它不会阻止 Rowhammer,因此不会阻止 RAMBleed。

Half Double

row hammer攻击是通过访问与目标位相邻的 DRAM 行来攻击与被攻击的单元相邻行。Half-double 攻击证明,这种攻击可以基于对不直接在相邻邻居旁边的行的访问来影响目标单元,允许攻击者在他们的目标攻击中使用额外的行,并使现有的硬件缓解措施无效,这种半双攻击利用了硅的物理特性,并且随着内存芯片密度的增加而变得更加容易。

JEDEC 已经发布了两份关于 DRAM 和系统级缓解Half Double攻击技术的文件(JEP 300-1JEP301-1)。

DRAM故障有什么影响?

内存是一个基本的系统组件;一切都取决于它的正确操作。因此,大多数 DRAM 故障都有可能破坏系统的正确运行,包括实施安全边界和关键数据,例如私钥材料。

如果发生此类故障,本地和远程攻击者都可能从中受益,本地攻击者可以更明确并触发 DRAM相关故障。

Sandboxing解决方案是否受到影响?

Java 和 JavaScript 沙盒不提供对 CLFLUSH 指令的访问,这意味着这种特定的 DRAM 压力变体将不起作用。然而,这两种语言的当前版本都提供了足够灵活的数据结构,因此有可能通过其他方式诱发 DRAM 故障。

SELinux 和容器不提供保护,因为它们在执行前不会拦截整个指令流,因此它们无法阻止诸如 CLFLUSH 之类的指令。

管理程序呢?

RHEV 等虚拟机管理程序目前不提供针对 DRAM 故障及其被滥用的保护。

Chrome 浏览器能够保护用户吗?
  • -> https://nvd.nist.gov/vuln/detail/CVE-2015-0565

谷歌公开声称他们解决了与 Chrome 浏览器中的 DRAM 故障注入相关的漏洞,特别是在 Native Client 功能中。

Chrome 的 Native Client 组件使用受信任的编译器方法来执行从不受信任的来源下载的原生机器代码。指令流被扫描和审计,以寻找避免沙盒的危险指令。以前的 Chrome 版本允许 CLFLUSH 指令,该指令使基于 CLFLUSH 的 DRAM 故障诱导器能够运行,当前 Chrome 版本中的 Native Client 不允许 CLFLUSH,这阻止了这种方法的工作。

如上所述,CLFLUSH 不是强调 DRAM 所必需的,因此 Chrome 中的保护可能不完整,它仅适用于 Native Client 向量,可能还有其他方法可以通过 Web 浏览器触发 DRAM 故障,例如使用 JavaScript。

对于此类问题,是否可以使用基于软件的解决方案?

理论上可能可以将内存映射到虚拟机管理程序或操作系统进程,这样 Rowhammer 样式的 DRAM 故障注入仅影响同一安全域(用户或程序)内的数据。由于以下几个原因,这在实践中不太可能可行:

  • 有必要禁用跨安全边界的只读页面共享(例如内核同页合并或进程之间共享的只读映射),从而大大降低系统负载密度。
  • 该机制高度依赖于内存配置,并且仅对非常特定的系统配置有效,具体取决于 CPU 芯片和微代码版本、系统固件版本、主板版本等。

即使在今天,在具有此类设施的系统上,也可以mcelog使用包中的edac-util命令来监视 MCE 事件的发生(使用),尤其是 EDAC(错误检测和纠正)计数器edac-utils。这些工具可用于在可利用的 DRAM 故障发生之前发现与 DRAM 相关的系统退化的早期迹象。

客户应对DRAM故障怎么办?

DRAM 故障是硬件供应商需要解决的问题,需要拥有足够的设计储备和 ECC 内存等技术。

五、DRAM的软错误详解

如果为了提高DRAM的存储容量而提高集成度,那么当然要减少连接到FET的电容器的容量,所以用于存储的电荷量也将随之减少。随着容量的减少,数据的正确读取将变得困难,除此之外,还会存在由于α射线而破坏存储的问题。在射线中,α射线虽然是氦的原子核,但如果它飞人DRAM的电容器部分,则电荷将消减,存储将丢失,这称为软错误。为了防止即使是一页纸的α射线,需要注意封装所利用的材料中包含的放射线同位素中所放射出的α射线,而不必在意在封装状态下来白外界的α射线。   

 一般来说,因为完全除去同位素是困难的,所以,为了降低软错误的概率,无论如何需要在DRAM单元上确保某种程度的容量。但是,即使那样也不能使软错误 **DRAM的软错误详解** DRAM(动态随机存取存储器)是现代计算机系统中的关键组件,主要用于临时存储数据。随着技术的进步,DRAM的集成度不断提高,以满足更高的存储容量需求。然而,这种高密度集成也带来了新的挑战,其中之一就是“软错误”问题。

**一、软错误的产生** 软错误主要是由宇宙射线或放射性同位素产生的α粒子引起的。当这些高速移动的α粒子撞击DRAM中的电容器时,它们会将电容器中的电荷消除,导致存储在电容器中的数据丢失或改变。由于α粒子具有较高的电荷量,即使少量的碰撞也可能造成显著的影响,尤其是在电容器容量减小以提高集成度的情况下。

**二、电容器容量与软错误的关系** 电容器的容量直接影响其存储电荷的能力。为了提高DRAM的存储密度,电容器的尺寸会被缩小,进而导致存储电荷的减少。这使得数据的读取更加敏感,容易受到外部干扰,包括α粒子的影响。因此,电容器的容量设计需在存储效率和抵御软错误之间找到平衡。

**三、封装材料的影响** 封装是保护DRAM芯片免受环境影响的关键步骤。由于封装材料中可能含有放射性同位素,它们释放的α射线会对DRAM内部造成潜在威胁。因此,选择低放射性的封装材料是减少软错误发生的一个重要策略。尽管无法完全消除同位素,但通过优化材料选择和封装工艺,可以显著降低由内部放射源引发的软错误。

**四、软错误的防护措施**

1. **容量冗余**:保留一部分电容器容量作为容错空间,可以在一定程度上抵消因α粒子造成的电荷损失。

2. **错误检测与校正**:在高端计算机系统中,通常采用错误检测和校正码(如ECC,Error Correction Code)来检测并修复由软错误导致的数据错误。

3. **多模冗余**:通过使用多个DRAM模块并行工作,即使某个模块出现软错误,其他模块仍能提供正确的数据,从而提高系统的整体可靠性。

4. **硬件设计改进**:设计更抗辐射的电路结构,例如使用更宽的信号线以减少α粒子的影响。

5. **软件策略**:在软件层面,可以采用定期刷新和数据备份策略,以减少数据丢失的风险。 **

五、不同应用场合的应对策略** 对于可靠性要求不那么高的系统,如个人计算机,通常不会采用复杂的错误检测和校正机制,因为这会增加成本和复杂性。而在服务器、数据中心或航空航天等对可靠性要求极高的领域,软错误防护措施是必不可少的。

DRAM的软错误是一个复杂的问题,需要综合考虑硬件设计、封装材料选择、错误检测技术等多个方面来解决。随着技术的不断发展,如何在追求存储密度和保证数据完整性之间找到最佳平衡,将继续是DRAM设计的重要课题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值