概述
目前网络上介绍侧信道攻击的文章大多过于浅薄或者过于学术,让真正想要一探究竟的爱好者找不到合适方法和路径去深入了解侧信道攻击,本文借助于ChipWhisperer平台,以Demo展示的方式介绍常见的侧信道攻击手法,让爱好者一窥侧信道攻击的世界。
所需的硬件
ChipWhisperer-Nano:低成本侧信道攻击练习平台,中国地区可在mouser.cn上进行购买,售价300多元。
准备软件和示例教材
github仓库:https://github.com/newaetech/chipwhisperer
github仓库中有相应的软件安装说明,不在此赘述。
ChipWhisperer-Nano平台介绍
官网说明:https://rtfm.newae.com/Capture/ChipWhisperer-Nano/
ChipWhisperer有好几个侧信道攻击平台,其中ChipWhisperer-Nano是最便宜的一款。ChipWhisperer-Nano平台上同时包含信号捕获模块和目标模块,如下图所示:
Measurement Section 主要包括一个CPU芯片和一个ADC芯片,其中ADC芯片负责将模拟信号转换为数字信号。
Target Section包含一个STM32F0芯片,作为被攻击的对象,在本文的Demo里,密码校验程序就运行在Target Section里。
动手做
文件准备
chipwhisperer软件安装完成后,我们使用jupyter访问官方教材。本次Demo使用到的文件
jupyter教学文件
chipwhisperer/jupyter/courses/sca101/Lab 2_1B – Power Analysis for Password Bypass (MAIN).ipynb
chipwhisperer/jupyter/courses/sca101/Lab 2_1B – Power Analysis for Password Bypass (HARDWARE).ipynb
密码校验代码文件
chipwhisperer/hardware/victims/firmware/basic-passwdcheck
目标代码烧录
打开Lab 2_1B – Power Analysis for Password Bypass (HARDWARE).ipynb文件,可以看到该文件提供以下几个功能:
- 通过USB连接chipwhisperer-nano设备
- 编译和烧录密码校验程序
- 提供串口通信函数
1. 通过USB连接chipwhisperer-nano设备,此处使用了Setup_Generic.ipynb文件,该文件提供了连接和重置设备等功能。
2. 编译和烧录密码校验程序,编译完成的密码校验程序会烧录到STM32F0中
3. 定义一个和Target Section通信的函数。
开始侧信道攻击–基于功率分析
首先需要明确的是,CPU在进行不同的运算时,功率消耗是不一样的。基于该特性,在破解密码时,可以通过功率测量分辨出“异常”行为。攻击教学文件位于Power Analysis for Password Bypass (MAIN).ipynb中。
初次尝试
我们首先尝试向密码验证程序连续输入两个字符,看功率有何不同。
第一次:
我们向程序中分别输入a和0两个字符,观察芯片功率的变化,可以发现两次输入功率变化基本一致。
第二次:
我们向程序中分别输入h和0两个字符,观察芯片功率的变化,可以发现其中一次的功率出现了“异常”。
分析原因
我们打开chipwhisperer/hardware/victims/firmware/basic-passwdcheck目录下的basic-passwdcheck.c文件,可以看出该密码验证程序验证密码时每次验证一个字节,验证成功或失败会进入到不同的流程,造成功率消耗不同。由于正确密码为”h0px3″,那么我们第二次输入h就会造成功率消耗和其他字符不一致。
自动攻击每一个字节
为了知道哪一种功率曲线代表错误的字节,我们可以使用0x00(空字节),然后使用a-z0-9所有的字符跟0x00进行比较,就可以分别得出正确的字节。通过如下示例,我们可以看出第一个字符肯定不是a。
自动化破解密码
在了解了基于功率分析的密码破解原理后,我们可以通过自动化脚本实现密码的破解。如下脚本展示了如何破解密码的第四位字符。一旦找到了功率曲线不一样的字符,那么那就找到了密码的第四位字符。
加速密码破解
我们可以通过肉眼观察的方式确定那个字符的功率曲线“异常”,但是效率太低,我们可以将功率曲线数字化,在进行对比,得出异常的曲线属于哪个字符。
具体做法如下,首先将要猜解的某一位字符先基于0x00绘制一个代表错误密码的功率曲线数值,在分别计算a-z0-9每一位字符与该曲线的绝对值,当该绝对值大于设定的阈值时(本demo的阈值为40,通过多次观察可得出),打印出该字符。
总结
先说一下破解效率,使用侧信道破解密码最多需要测试的次数为:sizeof([a-z][0-9])x密码位数,在本Demo中,最多需要尝试34×5次。而传统的暴力破解手段需要34^5次,侧信道的攻击效率要高得多。本文的密码校验程序虽然在实际业务中基本不会出现,但作为教学示例,可以帮助爱好者对侧信道攻击有更好的理解。
来源:freebuf.com 2021-04-26 14:54:33 by: wang3919379
请登录后发表评论
注册