描述
产品的比较逻辑执行一系列步骤而不是在一个操作在整个字符串。如果有一个比较失败的一个逻辑这些步骤,操作可能容易受到时间攻击可以在拦截过程的结果用于邪恶的目的。
扩展描述
比较逻辑是用来比较不同的对象包括密码、消息认证码(mac)和反应验证的挑战。当比较逻辑实现细粒度(例如,逐字节的比较)和优惠比较失败的情况下,攻击者可以利用这个实现完全失败发生时识别。多尝试,攻击者可以猜测正确的密码/响应挑战和提高他们的特权。
的关系
模式的介绍
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
常见的后果
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
示范例子
示例1
考虑一个例子硬件模块,检查一个用户提供的密码授权访问用户。用户提供的密码而逐字节的方式对黄金的价值。
always_comb @ (posedge clk)
开始
分配check_pass(握)= 4 'b0; (我= 0;我< 4;我+ +)开始
如果(entered_pass[(我* 8 - 1):我]eq golden_pass((* 8 - 1):我))
分配check_pass[我]= 1; 继续;
其他的
分配check_pass[我]= 0; 打破;
结束
分配grant_access = (check_pass = = 4 'b1111) ?1 'b1: 1 'b0;
结束
由于代码中断输入了错误的密码,攻击者可以猜测正确的密码,byte-check迭代很少有重复尝试。
要修复这个弱点,要么整个字符串的比较应该是一次性完成的,或攻击者没有得到指示是否通过或失败发生之前允许比较贯穿所有比特grant_access信号集。
always_comb @ (posedge clk) 开始
分配check_pass(握)= 4 'b0; (我= 0;我< 4;我+ +)开始
如果(entered_pass[(我* 8 - 1):我]eq golden_pass([8 * 1):我])
分配check_pass[我]= 1; 继续;
其他的
分配check_pass[我]= 0; 继续;
结束
分配grant_access = (check_pass = = 4 'b1111) ?1 'b1: 1 'b0;
结束
观察到的例子
参考 |
描述 |
|
智能手机操作系统使用比较函数,在固定时间内不允许侧通道 |
|
在路由器密码的检验函数终止确认密码输入时,遇到的第一个不正确的字符,它允许远程攻击者获取密码通过蛮力攻击依赖于时间的差异反应不正确的密码猜测,即时间边信道攻击。 |
潜在的缓解措施
实施阶段:
硬件设计师应该确保比较逻辑实现,比较在一个操作,而不是小块。
|
脆弱性映射笔记
用法:允许
(CWE ID可以用来映射到现实世界的漏洞) |
原因:可接受的使用 |
理由是: 这CWE条目底部的抽象级别,这是一个首选的抽象级别映射到漏洞的根本原因。 |
评论: 仔细阅读这两个名称和描述,以确保此映射是一个适当的配合。不要试图“力”映射到底层基础/变体只是遵守这首选的抽象级别。 |
引用
更多的信息是可用的,请编辑自定义过滤器或选择一个不同的过滤器。
|