第 1章 牙科卫生:嵌入式安全简介 1
1.1 硬件组件 1
1.2 软件组件 3
1.2.1 初始引导代码 3
1.2.2 引导加载程序 4
1.2.3 可信执行环境操作系统和可信应用程序 4
1.2.4 固件映像 5
1.2.5 主操作系统内核和应用程序 5
1.3 硬件威胁建模 5
1.3.1 什么是安全 6
1.3.2 攻击树 8
1.4 剖析攻击者 8
1.5 攻击类型 10
1.5.1 针对硬件的软件攻击 10
1.5.2 PCB级攻击 12
1.5.3 逻辑攻击 13
1.5.4 非入侵攻击 14
1.5.5 芯片入侵攻击 14
1.6 资产和安全目标 17
1.6.1 二进制代码的机密性和完整性 18
1.6.2 密钥的机密性和完整性 18
1.6.3 远程引导证明 19
1.6.4 个人可识别信息的保密性和完整性 20
1.6.5 传感器数据完整性和机密性 20
1.6.6 内容机密性保护 20
1.6.7 安全性和故障容忍性 21
1.7 对策 21
1.7.1 保护 21
1.7.2 检测 22
1.7.3 响应 22
1.8 攻击树示例 22
1.8.1 识别与利用 25
1.8.2 可扩展性 25
1.8.3 分析攻击树 25
1.8.4 对硬件攻击路径进行评分 25
1.9 披露安全问题 27
1.10 总结 28
第 2章 伸出手,触摸我,触摸你:硬件外围设备接口 29
2.1 电子基础知识 29
2.1.1 电压 30
2.1.2 电流 30
2.1.3 电阻 30
2.1.4 欧姆定律 30
2.1.5 交流/直流 31
2.1.6 电阻 31
2.1.7 功率 32
2.2 数字通信逻辑协议 32
2.2.1 逻辑电平 33
2.2.2 高阻抗、上拉和下拉 34
2.2.3 推挽vs.三态vs.集电极开路或漏极开路 35
2.2.4 异步vs.同步vs.嵌入式时钟 36
2.2.5 差分信号 37
2.3 低速串行接口 38
2.3.1 通用异步接收发送设备串行 38
2.3.2 串行外围接口 40
2.3.3 内部IC接口 42
2.3.4 安全数字输入/输出和嵌入式多媒体卡 45
2.3.5 CAN总线 46
2.3.6 JTAG和其他调试接口 47
2.4 并行接口 50
2.5 高速串行接口 52
2.5.1 通用串行总线 52
2.5.2 PCI Express 54
2.5.3 以太网 54
2.6 测量 54
2.6.1 万用表:伏特 55
2.6.2 万用表:连通性 55
2.6.3 数字示波器 55
2.6.4 逻辑分析仪 59
2.7 总结 59
第3章 接头套管:识别组件和收集信息 60
3.1 信息收集 60
3.1.1 联邦通信委员会备案 61
3.1.2 专利 62
3.1.3 数据手册和原理图 64
3.1.4 信息搜索示例:USB armory设备 65
3.2 拆解示例 71
3.2.1 识别电路板上的IC 71
3.2.2 小型引线封装:SOIC、SOP和QFP 73
3.2.3 无引线的封装:SO和QFN 74
3.2.4 球栅格阵列 75
3.2.5 芯片级封装 77
3.2.6 DIP、通孔和其他 77
3.3 PCB上的IC封装示例 78
3.4 映射PCB 83
3.5 从固件中提取信息 88
3.5.1 获取固件映像 88
3.5.2 分析固件映像 90
3.6 总结 96
第4章 瓷器店里的公牛:引入故障注入 97
4.1 故障安全机制 98
4.1.1 规避固件签名验证 98
4.1.2 获得对锁定功能的访问权限 98
4.1.3 恢复加密密钥 99
4.2 OpenSSH故障注入练习 99
4.2.1 将故障注入C代码 99
4.2.2 将故障注入机器代码 101
4.3 故障注入器 102
4.3.1 目标设备和故障目标 103
4.3.2 故障注入工具 103
4.3.3 目标准备和控制 104
4.4 故障查找方法 108
4.4.1 发现故障原语 108
4.4.2 搜索有效故障 111
4.4.3 搜索策略 117
4.4.4 分析结果 119
4.5 总结 121
第5章 不要舔探头:如何注入故障 122
5.1 时钟故障攻击 122
5.1.1 亚稳态 126
5.1.2 故障敏感性分析 128
5.1.3 局限性 129
5.1.4 所需硬件 129
5.1.5 时钟故障注入参数 131
5.2 电压故障注入 132
5.2.1 产生电压故障 132
5.2.2 构建基于多路复用器的注入器 133
5.2.3 短接攻击 136
5.2.4 使用短接器攻击树莓派 137
5.2.5 电压故障注入参数搜索 142
5.3 电磁故障注入攻击 142
5.3.1 产生电磁故障 144
5.3.2 电磁故障注入的架构 144
5.3.3 EMFI脉冲形状和宽度 146
5.3.4 电磁故障注入的搜索参数 147
5.4 光学故障注入 147
5.4.1 芯片准备 148
5.4.2 正面和背面攻击 149
5.4.3 激光源 150
5.4.4 光学故障注入设置 151
5.4.5 光学故障可配置注入参数 152
5.5 基底偏置注入 152
5.6 硬件故障的触发 154
5.7 总结 156
第6章 测试时间:故障注入实验室 157
6.1 第 一个例子:简单的循环 158
6.2 第二个例子:注入有用的故障 161
6.2.1 使用短接电路故障来攻击配置字段 161
6.2.2 多路复用故障注入 174
6.3 第三个例子:差分故障分析 179
6.3.1 一点RSA数学知识 179
6.3.2 从目标获取正确的签名 182
6.4 总结 185
第7章 X标记现场:Trezor One钱包内存转储 186
7.1 攻击介绍 186
7.2 Trezor One钱包内部细节 187
7.3 USB读取请求故障 188
7.4 反汇编代码 190
7.5 构建固件,进行故障注入攻击 191
7.6 USB触发和时序 194
7.7 实践案例 197
7.7.1 设置 197
7.7.2 查看故障注入代码 198
7.7.3 运行代码 201
7.7.4 确认转储 202
7.7.5 微调EM脉冲 203
7.7.6 基于USB消息的时序调整 203
7.8 总结 204
第8章 我有力量:功率分析简介 206
8.1 定时攻击 207
8.1.1 硬盘驱动器定时攻击 209
8.1.2 定时攻击的功率测量 212
8.2 简单功率分析 212
8.2.1 在RSA上应用SPA 213
8.2.2 将SPA应用于RSA和Redux 215
8.2.3 ECDSA上的SPA 217
8.3 总结 222
第9章 测试时间:简单功率分析 223
9.1 家庭实验室 223
9.1.1 构建基本硬件设置 223
9.1.2 购买设备 227
9.1.3 准备目标代码 227
9.1.4 构建安装程序 229
9.2 整合:SPA攻击 231
9.2.1 准备目标 231
9.2.2 准备示波器 232
9.2.3 信号的分析 234
9.2.4 编写通信和分析脚本 234
9.2.5 编写攻击脚本 237
9.3 ChipWhisperer-Nano示例 240
9.3.1 构建和加载固件 240
9.3.2 通信分析 240
9.3.3 捕获轨迹 241
9.3.4 从轨迹到攻击 243
9.4 总结 246
第 10章 追踪差异:基础差分功率分析 247
10.1 微控制器内部 248
10.1.1 改变电容器上的电压 248
10.1.2 从电源到数据再到电源 250
10.2 直观的异或运算示例 251
10.3 差分功率分析攻击 253
10.3.1 使用泄露假设预测功率 253
10.3.2 Python中的DPA攻击 256
10.4 了解你的敌人:高级加密标准速成课程 260
10.5 相关功率分析攻击 262
10.5.1 相关系数 263
10.5.2 使用CPA攻击AES-128 267
10.5.3 与目标设备通信 271
10.5.4 示波器捕获速率 272
10.6 总结 272
第 11章 更加极客:高级功率分析 273
11.1 主要障碍 274
11.2 衡量成功 276
11.2.1 基于成功率的度量 276
11.2.2 基于熵的度量 277
11.2.3 相关峰值进度 278
11.2.4 相关峰值高度 279
11.3 真实设备上的测量 280
11.3.1 设备操作 280
11.3.2 测量探头 282
11.3.3 确定敏感网络 285
11.3.4 自动探头扫描 285
11.3.5 示波器设置 286
11.4 轨迹集分析与处理 289
11.4.1 分析技术 290
11.4.2 信号处理 299
11.4.3 使用卷积神经网络的深度学习 302
11.5 总结 304
第 12章 测试时间:高级差分功率分析 305
12.1 引导加载程序简介 305
12.1.1 引导加载程序通信协议 306
12.1.2 AES-256 CBC的详细信息 307
12.1.3 攻击AES-256 307
12.2 获取和构建引导加载程序代码 309
12.3 运行目标并捕获轨迹 309
12.3.1 计算CRC 310
12.3.2 与引导加载程序通信 310
12.3.3 捕获概览轨迹 310
12.3.4 捕获详细轨迹 312
12.4 分析 312
12.4.1 第 14轮密钥 313
12.4.2 第 13轮密钥 314
12.5 恢复初始向量 317
12.5.1 要捕获的内容 317
12.5.2 获取第 一条轨迹 318
12.5.3 获取剩余轨迹 319
12.5.4 分析 319
12.6 攻击签名 323
12.6.1 攻击理论 323
12.6.2 功率分析轨迹 323
12.6.3 分析 324
12.6.4 所有4字节 325
12.7 分析引导加载程序源代码 325
12.8 总结 328
第 13章 不是玩笑:现实工作中的例子 330
13.1 故障注入攻击 330
13.1.1 PlayStation 3虚拟机管理程序 330
13.1.2 Xbox 360游戏机 333
13.2 功率分析攻击 335
13.3 总结 340
第 14章 重新思考:防御对策、认证和完美防御 343
14.1 防御对策 344
14.1.1 实施防御对策 344
14.1.2 验证防御对策 357
14.2 行业认证 359
14.3 变得更好 362
14.4 总结 362