跳转至

侧信道攻击

侧信道攻击是一种**不直接针对密码算法本身的数学弱点**,而是通过分析密码设备(如智能卡、服务器、物联网设备、手机等)在运行加密算法时**物理实现过程中泄露的附加信息**,来推断出密钥或敏感数据的攻击方法。

打个比方:传统的密码分析是试图通过锁的内部结构(数学逻辑)来开锁;而侧信道攻击则是通过听锁芯转动的声音、观察钥匙插入时的震动,或者测量开锁所需的时间来复制钥匙。

以下是侧信道攻击的主要类型及其原理:


1. 时序攻击 (Timing Attack)

  • 原理:密码算法在执行不同操作时,所需的时间可能因输入数据或密钥的不同而存在微小差异。例如,某些代码中使用了条件分支(if-else),或者乘法运算的时间依赖于操作数的值。
  • 典型案例:1996年,Paul Kocher 首次提出时序攻击,成功通过分析 RSA 算法中模幂运算的时间差异,推导出了私钥。现代网络中,如果字符串比较函数(如 strcmp)在遇到第一个不匹配字符时就立即返回,攻击者就可以通过测量响应时间逐字猜出密码或 Token。

2. 功耗分析攻击 (Power Analysis Attack)

这是针对嵌入式设备(如智能卡、RFID、IoT设备)最常见、最致命的侧信道攻击。数字电路在翻转状态(0变1或1变0)时会消耗电能,功耗与处理的数据直接相关。 * 简单功耗分析 (SPA, Simple Power Analysis):攻击者直接用示波器观察设备加密时的功耗轨迹。如果算法实现不够平滑(例如 RSA 中平方和乘法操作的功耗特征明显不同),攻击者可以直接从波形图中“看”出密钥的比特序列。 * 差分功耗分析 (DPA, Differential Power Analysis):由 Paul Kocher 于 1998 年提出。攻击者收集成千上万条功耗轨迹,并基于对密钥某一位的猜测,将轨迹分为两组进行统计差分。正确的密钥猜测会导致明显的统计峰值,而错误的猜测则呈现噪声。DPA 极其强大,甚至能攻破添加了随机噪声的系统。 * 相关功耗分析 (CPA, Correlation Power Analysis):DPA 的进阶版。它使用更精确的功耗模型(如汉明重量模型 Hamming Weight),计算猜测密钥下的理论功耗与实际测量功耗之间的皮尔逊相关系数。相关系数最高的猜测即为正确密钥。

3. 电磁辐射分析 (Electromagnetic Analysis, EMA)

  • 原理:电流流过芯片内部的导线时会产生微弱的电磁场。攻击者使用高灵敏度的电磁探头(线圈)靠近芯片,捕捉其运行时的电磁辐射波形。
  • 特点:与功耗分析原理类似,但 EMA 的空间分辨率更高。攻击者甚至可以定位到芯片内部的特定模块(如 AES 的 S盒 或 特定的寄存器),从而提取局部数据,抗干扰能力有时优于直接接触的功耗分析。

4. 缓存攻击 (Cache Attack)

  • 原理:现代 CPU 使用多级缓存(Cache)来加速内存访问。当多个程序(或虚拟机)共享同一物理 CPU 时,恶意程序可以通过监控缓存的命中/未命中状态,推断出受害者程序(如加密进程)访问了哪些内存地址。
  • 常见技术:
    • Flush+Reload:攻击者先清空缓存行,等待受害者执行,然后测量重新加载该缓存行的时间。如果时间短,说明受害者访问过该数据。
    • Prime+Probe:攻击者先填满缓存,等待受害者执行,然后测量自己重新填充缓存的时间,以此推断受害者驱逐了哪些缓存行。
  • 典型案例:针对 AES 的 T-table 实现,通过缓存攻击可以高效恢复密钥;著名的 Spectre 和 Meltdown 漏洞也大量利用了缓存侧信道来泄露内存数据。

5. 声学攻击 (Acoustic Cryptanalysis)

  • 原理:电子设备在运行时,其内部的电感线圈、电容或机械部件会因电流变化产生微弱的物理振动,发出人耳通常听不见的高频声音。
  • 典型案例:研究人员曾通过放置在键盘上方的麦克风,根据敲击不同按键的微小声音差异来窃取密码;也曾通过手机麦克风录制笔记本电脑 CPU 在解密 RSA 时线圈发出的微弱啸叫,成功提取出 4096 位的 RSA 私钥。

6. 故障注入攻击 (Fault Injection Attack, FIA)

虽然有时被单独归类,但常与侧信道结合使用(如差分故障分析 DFA)。 * 原理:攻击者主动破坏设备的正常运行环境,使其在计算过程中产生错误。通过对比“正确输出”和“错误输出”,可以反推出内部状态或密钥。 * 注入手段: * 电压毛刺 (Voltage Glitching):在关键指令执行瞬间突然降低或升高电压。 * 时钟毛刺 (Clock Glitching):干扰时钟信号,导致 CPU 跳过指令或执行错误。 * 激光/光学注入 (Laser Fault Injection):使用聚焦激光束照射芯片特定区域,改变晶体管的状态。 * 电磁脉冲 (EMFI):使用强电磁脉冲探头干扰芯片内部电路。

7. 光学攻击 (Optical Attack)

  • 原理:利用高速摄像机或光电传感器,捕捉设备运行时的光学特征。
  • 典型案例:观察路由器或硬盘上的 LED 状态指示灯的闪烁频率来推断网络流量或数据;或者在实验室环境下,去除芯片封装,使用显微镜和光电倍增管直接观测 CMOS 芯片内部晶体管开关时的微弱发光(光子发射分析)。

侧信道攻击的特点

  1. 绕过数学安全性:即使算法在数学上是完美无缺的(如 256 位 AES),如果物理实现存在漏洞,依然会被轻易攻破。
  2. 非侵入性或半侵入性:许多攻击(如时序、缓存、声学)完全不需要接触设备,远程即可实施;而功耗和电磁攻击通常只需廉价的示波器和探头。
  3. 针对实现而非理论:攻击的是代码编写方式、编译器优化或硬件设计,而不是算法标准本身。

如何防御侧信道攻击?

防御侧信道攻击需要从算法设计、软件实现和硬件设计三个层面综合考虑: 1. 恒定时间实现 (Constant-Time Implementation):确保代码的执行时间和内存访问模式与密钥或敏感数据完全无关(例如,使用位运算代替条件分支,避免使用依赖数据的查表法)。 2. 掩码技术 (Masking/Blinding):在计算前将敏感数据与随机数进行异或(掩码),使中间值的功耗或电磁特征随机化,破坏 DPA/CPA 的统计基础。 3. 硬件级防护:在芯片设计中加入噪声发生器、功耗均衡逻辑(如双轨预充电逻辑)、传感器(检测电压/时钟异常并自动复位)。 4. 算法选择:在极端受限且易受物理攻击的环境中,优先选择原生抗侧信道能力较强的算法(如基于掩码设计友好的算法,或最新的轻量级认证加密算法 ASCON)。

如果您正在研究或开发安全验证程序(如您之前提到的基于 OpenSSL 的 C 语言程序),在处理密钥和敏感数据时,务必使用 OpenSSL 提供的**恒定时间 API**(如 CRYPTO_memcmp 代替 memcmp),并避免在密钥相关的逻辑中使用条件分支或数据依赖的数组索引。

通过响应时间差异来暴力破解

大家应该都知道,对一个登陆框进行爆破时,如果能【先爆破出用户名再针对存在的用户名爆破密码】,则比起【**同时爆破用户名和密码】**的方式能极大的提升爆破效率。

判断用户名是否存在通常是根据登陆失败后**页面上的回显(响应包的长度)**来判断,比如:

用户名存在时:“密码错误!”

用户名不存在:“用户名不正确!”

遇到这种情况,报告上就可以写一个:“低危漏洞—登陆界面未做模糊化处理”。然后就可以愉快的下班了~

但如果开发这样写:无论用户名是否存在,登陆失败的回显都是:“用户名或密码不正确!”,这种情况下是否就无法判断用户名的存在性了呢?今天给大家分享一个小tip,如何在模糊化处理的情况下尝试爆破用户名。

模糊化处理的情况下,可以根据服务器的响应时间来判断用户名的存在性,下面介绍一下如何用burp进行这个操作:

1、在爆破用户名的时候使用一个**超长的密码**

通过响应时间爆破用户名

2、**保证网速**稳定良好

通过响应时间爆破用户名

3、在爆破界面的**Columns**选项中勾选**Response**这两项。

通过响应时间爆破用户名

4、按响应时间顺序排列,**响应时间最长**的即是有可能存在的用户名

通过响应时间爆破用户名

5、此方法有一定的误差,可以**更换可能存在的用户名在字典中的位置**进行多次测试,如果发现多次测试后这个用户名仍然像腰间盘一样突出在首位,那基本可以确定此用户名存在了。

通过响应时间爆破用户名

该漏洞根本原因在于服务器处理正确密码和错误密码执行的代码步骤量不同,所以会导致响应时间存在差异,但该漏洞开发应该无法修改