密码攻击常见方法
密码攻击常见方法
概述
密码攻击是指攻击者试图绕过密码保护机制以获取未授权访问的一类技术手段。从最直接的暴力穷举到巧妙利用数学特性的生日攻击,再到利用物理信息泄露的侧信道攻击,密码攻击的方法多种多样。了解这些攻击方式不仅是红队渗透测试的必备知识,也是蓝队防御者构建安全系统的重要参考。
在实际安全评估中,密码攻击是最常见的攻击向量之一。根据 Verizon 的数据泄露调查报告,弱密码和凭证泄露始终是数据泄露的主要原因之一。理解各类密码攻击的原理、适用场景和防御方法,有助于安全从业者在攻防两端都能做出正确的判断和决策。
核心概念
暴力破解攻击
暴力破解(Brute Force Attack)是最直接的攻击方式,系统性地尝试所有可能的密码组合,直到找到正确的密码。对于一个长度为 n、字符集大小为 m 的密码空间,理论上最多需要尝试 m^n 次。例如,8 位纯数字密码的搜索空间为 10^8(一亿),在现代计算机上几秒内即可穷举完毕。
暴力破解的效率取决于密码的长度、复杂度和计算资源。在线暴力破解(针对登录接口)通常受限于速率限制和账号锁定机制;离线暴力破解(针对获取的哈希值)不受此类限制,速度可以非常快。使用 GPU 加速的工具如 Hashcat 可以达到每秒数十亿次哈希计算的速度。
字典攻击
字典攻击(Dictionary Attack)使用预先收集的常用密码列表(字典)来尝试破解,而不是穷举所有可能的组合。字典通常包含常见密码(如 "password123"、"qwerty")、泄露的密码库、常见单词及变形(大小写变换、数字替换、特殊字符追加等)。
高质量的字典可以覆盖大量用户常用的密码模式,使字典攻击的效率远高于纯暴力破解。常用的字典资源包括 rockyou.txt(来自 2009 年 RockYou 数据泄露,包含 1400 多万条真实密码)、SecLists 项目中的密码字典、以及针对特定目标定制的字典。字典攻击的变形规则(如 Hashcat 的 rule 文件)可以将基础词汇自动扩展为数千种变体。
彩虹表攻击
彩虹表(Rainbow Table)是一种以空间换时间的密码破解技术,通过预计算并存储哈希链来加速破解过程。与简单的查找表不同,彩虹表使用归约函数在哈希值和候选密码之间建立链式关系,大幅减少了存储空间需求。
彩虹表的局限性在于:它只对未加盐的哈希有效——如果哈希过程中使用了随机盐值,每个密码的哈希值都不同,预计算的彩虹表就无法使用。这也是为什么现代密码存储方案(如 bcrypt、scrypt、Argon2)都强调使用随机盐值。常用的彩虹表工具包括 Ophcrack、RainbowCrack 等,线上服务如 CrackStation 提供了大规模的预计算数据库。
生日攻击
生日攻击(Birthday Attack)基于概率论中的生日悖论:在一个 23 人的群体中,至少有两人生日相同的概率超过 50%。推广到密码学中,对于一个输出长度为 n 位的哈希函数,大约只需要 2^(n/2) 次计算就能找到碰撞,而非直觉上的 2^n 次。
生日攻击是一种通用的碰撞攻击方法,它解释了为什么哈希函数的输出长度需要足够长——SHA-1 的 160 位输出意味着 2^80 次计算即可找到碰撞,这个量级在国家级计算能力面前已不再安全。这也推动了向 SHA-256 等更长输出的哈希函数迁移。
侧信道攻击
侧信道攻击(Side-Channel Attack)通过分析密码系统的物理实现特征(如执行时间、功耗、电磁辐射、声音、缓存行为等)来推断密钥或其他秘密信息,而不是直接攻击算法的数学原理。
常见的侧信道攻击包括:时序攻击(Timing Attack)——通过测量加密操作的执行时间差异来推断密钥信息,如 Bernstein 对 OpenSSL AES 的缓存时序攻击;功耗分析——简单功耗分析(SPA)和差分功耗分析(DPA)通过分析设备的功耗模式来提取密钥;缓存攻击——利用 CPU 缓存的访问模式来推断加密操作中的秘密数据。
实战要点
- 选择合适的攻击工具:Hashcat 支持 GPU 加速,适合离线哈希破解;John the Ripper 功能全面,支持多种哈希格式;Hydra 和 Medusa 适合在线服务的凭证爆破。
- 优化攻击策略:先尝试字典攻击,再使用规则变形,最后才考虑暴力穷举。合理的攻击顺序可以大幅提高效率。
- 使用加盐哈希防御彩虹表:在存储密码时,始终使用随机盐值配合慢哈希函数(如 bcrypt、Argon2id)。
- 实施速率限制:对在线登录接口实施速率限制、验证码和账号锁定机制,防止在线暴力破解。
- 关注常量时间实现:在实现密码比较等安全敏感操作时,使用常量时间比较函数(如 Python 的
hmac.compare_digest())以防止时序攻击。
总结
密码攻击的方法从简单到复杂,覆盖了从暴力穷举到利用物理信息泄露的广泛范围。每种攻击方法都有其适用场景和局限性,防御者需要综合运用多种策略来构建纵深防御体系。
对于安全从业者来说,了解攻击方法不是为了恶意使用,而是为了更好地理解安全威胁,从而做出正确的防御决策。在实践中,强密码策略、加盐慢哈希、速率限制和常量时间实现等措施的综合运用,可以有效抵御大多数密码攻击。