漏洞概述 漏洞名称: CWE-208: Observable Timing Discrepancy 漏洞描述: 两个不同的操作在产品中需要不同的时间来完成,这种时间差异可以被攻击者观察到,并揭示与安全相关的信息,关于产品的状态。在安全相关的上下文中,即使是微小的时间差异也可能被攻击者利用,间接推断出关于产品内部操作的某些细节。例如,在某些加密算法中,攻击者可以利用时间差异来推断关于私钥的某些属性,使密钥更容易被破解。时间差异有效地形成了一个定时侧信道。 影响范围 影响: 读取应用程序数据,绕过保护机制 范围: 机密性,访问控制 修复方案 1. 硬件模块示例: - 在硬件模块中,检查用户提供的密码以授予用户访问权限。用户提供的密码与金标准密码进行逐字节比较。 - 如果代码在错误的密码输入时中断,攻击者可以通过重复尝试猜测正确的密码。 - 为了修复这个弱点,整个字符串的比较应该一次性完成,或者攻击者不会得到任何关于密码是否正确或失败的指示,因为比较会在 信号被设置之前运行完所有位。 2. 软件示例: - 在软件中,攻击者观察用户输入正确密码时的认证时间。 - 当攻击者尝试自己的值时,他们可以先尝试不同长度的字符串。当他们找到一个正确长度的字符串时,计算会花费更长的时间,因为循环至少会运行一次。此外,使用此代码,攻击者可以一次学习密码的一个字符,因为当字符正确时,计算会花费更长的时间。这样的攻击可以破解最复杂的密码,只需几百次猜测。 - 在这个例子中,实际密码必须以恒定时间处理,无论实际密码是否异常长。这就是为什么一个好的算法,例如,存储密码的加密单向哈希,然后比较哈希,这总是具有相同的长度。 POC代码 硬件模块示例 软件示例 其他信息 相关视图: - 研究概念 (View-1000) - 软件开发 (View-699) - 架构概念 (View-1008) 模式介绍: - 架构和设计: 此弱点指的是与架构安全战术相关的错误设计。 适用平台: - 语言: 非语言特定 - 技术: 非技术特定 演示示例: - 示例1: 硬件模块 - 示例2: 软件示例 选定观察示例: - CVE-2019-10072: Java框架比较HMAC签名使用String.equals()而不是恒定时间算法,导致时间差异 - CVE-2019-10582: 智能手机OS使用非恒定时间的比较函数,允许侧信道 - CVE-2014-0984: 路由器中的密码检查函数在遇到第一个错误字符时终止验证,允许远程攻击者通过暴力攻击获取密码 - CVE-2003-0078: SSL实现未执行MAC计算,如果使用了错误的块密码填充,可能导致信息泄露 - CVE-2000-1117: 虚拟机允许恶意网站操作员通过测量延迟确定客户端上文件的存在 - CVE-2003-0637: 产品对不存在的用户返回较短的超时,使远程攻击者更容易猜测用户名并进行暴力密码猜测 - CVE-2003-0190: 产品立即发送错误消息,当用户不存在时,允许远程攻击者通过定时攻击确定有效用户名 - CVE-2004-1602: FTP服务器响应不同时间,当给定用户名存在时,允许远程攻击者通过定时服务器响应识别有效用户名 - CVE-2005-0918: 浏览器允许远程攻击者通过设置src属性到目标文件名并使用JavaScript确定任意文件的存在 弱点顺序性: - 主要: 弱点独立于其他弱点存在 - 结果: 弱点通常与某些其他弱点的存在相关 功能区域: - 加密 - 认证 成员: - SFP Secondary Cluster: State Disclosure - Comprehensive Categorization: Sensitive Information Exposure 漏洞映射说明: - 使用: 允许 - 原因: 可接受的使用 - 理由: 此CWE条目在基础抽象级别,是映射到漏洞根本原因的优选抽象级别 - 评论: 仔细阅读名称和描述,确保此映射是适当的。不要试图“强制”映射到较低级别 备注: - 关系: 通常在加密应用程序和算法中主要 - 维护: CWE 4.16移除了一个硬件模块的演示示例,因为它不准确且无法适应。CWE团队正在开发替代方案 分类映射: - PLOVER: 定时差异信息泄露 相关攻击模式: - CAPEC-462: 跨域搜索定时 - CAPEC-541: 应用指纹识别 - CAPEC-580: 系统足迹 内容历史: - 提交日期: 2006-07-19 - 提交者: PLOVER - 组织: MITRE