第一部分 做好准备:工业控制系统渗透测试就位 2
案例研究 第一部分:无尽的灾难 2
第1章 工业控制系统安全概述 4
1.1 信息物理系统:机器崛起 5
1.1.1 传统威胁的全新攻击向量 7
1.1.2 后果:这将导致什么呢 8
1.1.3 理解工控系统所面临的现实威胁与风险 9
1.2 工业控制系统概述 12
1.2.1 画面 12
1.2.2 监视 12
1.2.3 控制 12
1.2.4 用于工控系统的普渡参考模型 13
1.2.5 常用控制系统、设备和组件的类型 15
1.3 本章总结 20
1.4 延伸阅读 20
第2章 工业控制系统风险评估 22
2.1 工控系统风险评估入门 22
2.1.1 难以确定的工控系统“风险度量标准” 23
2.1.2 风险评估标准 23
2.1.3 工控系统风险评估中评价和测量的内容 24
2.1.4 工控系统风险评估过程概述 27
2.2 工控系统风险评估过程步骤 28
2.2.1 第1阶段:资产识别与评定 30
2.2.2 第2阶段:脆弱性识别与威胁建模 36
2.2.3 后续步骤 51
2.3 本章总结 51
2.4 延伸阅读 52
第3章 通过威胁建模获取具有可操作性的工业控制系统威胁情报 53
3.1 威胁信息与威胁情报 54
3.2 威胁建模:将工控系统威胁信息转化为“可操作”的威胁情报 56
3.2.1 工控系统杀伤链 56
3.2.2 工控系统威胁建模过程 58
3.2.3 信息收集 60
3.3 本章总结 78
3.4 延伸阅读 78
案例研究 第二部分:威胁涌现 79
延伸阅读 81
第二部分 工业控制系统入侵 84
案例研究 第三部分:乘虚而入 84
延伸阅读 86
第4章 渗透测试策略 87
4.1 渗透测试的目的 88
4.2 黑盒测试、白盒测试与灰盒测试 90
4.3 特殊考量:工控系统渗透测试不同于IT系统渗透测试 91
4.4 实验环境的部署 93
4.4.1 从“类似”配置的系统中取样 93
4.4.2 虚拟化 94
4.4.3 装备 99
4.5 测试规则 100
4.6 风险场景的运用 101
4.7 工控系统渗透测试:测试策略 101
4.7.1 侦察(“踩点”) 102
4.7.2 外部测试 103
4.7.3 跳板攻击 105
4.7.4 网络之外的考虑:非对称与可替换的攻击向量 107
4.7.5 内部测试:针对工控系统网络的测试 108
4.8 本章总结 112
4.9 延伸阅读 112
第5章 工业控制系统协议攻击 114
5.1 Modbus协议 114
5.1.1 Modbus协议中间人攻击 119
5.1.2 Schneider终止CPU运行攻击 119
5.1.3 Schneider功能码90鉴别攻击 121
5.2 EtherNet/IP协议 122
5.2.1 EtherNet/IP协议身份鉴别请求攻击 124
5.2.2 EtherNet/IP协议中间人攻击 126
5.2.3 EtherNet/IP协议终止CPU运行攻击 126
5.3 DNP3协议 127
5.3.1 DNP3协议模糊测试攻击 131
5.3.2 DNP3协议鉴别攻击 133
5.4 Siemens S7通信协议 134
5.4.1 S7协议终止CPU运行攻击 135
5.4.2 S7协议鉴别攻击 141
5.4.3 S7协议口令暴力破解攻击 144
5.5 BACnet协议 147
5.6 其他协议 152
5.6.1 OMRON FINS协议鉴别攻击 152
5.6.2 PCWORX协议鉴别攻击 153
5.7 协议攻击的对抗措施 154
5.7.1 更新固件 154
5.7.2 强网络隔离和网络安全 155
5.7.3 口令暴力攻击的对抗措施 155
5.8 本章总结 156
5.9 延伸阅读 156
第6章 工业控制系统设备与应用攻击 157
6.1 软件的漏洞利用 158
6.1.1 若干基本原理 158
6.1.2 缓冲区溢出 159
6.1.3 整型溢出:上溢、下溢、截断与符合失配 164
6.1.4 指针操纵 168
6.1.5 格式化字符串 172
6.1.6 目录遍历 175
6.1.7 DLL劫持 178
6.1.8 注入 182
6.1.9 跨站脚本 186
6.1.10 跨站请求伪造 189
6.1.11 硬编码值利用 191
6.1.12 暴力攻击 192
6.2 所有软件皆有漏洞 194
6.3 本章总结 194
6.4 延伸阅读 195
第7章 工业控制系统“0-day”漏洞研究 196
7.1 像攻击者一样思考 197
7.2 步骤1:目标选取 197
7.3 步骤2:文档研究 198
7.4 步骤3:可访问接口的枚举与优先级排序 198
7.5 步骤4:逐接口分析与测试 199
7.5.1 模糊测试 199
7.5.2 静态二进制分析 205
7.5.3 动态二进制分析 211
7.6 步骤5:漏洞利用 214
7.7 融会贯通:MicroLogix案例研究 216
7.7.1 漏洞研究的准备 216
7.7.2 深入之前的工作 217
7.7.3 打造定制固件 218
7.8 本章总结 223
7.9 延伸阅读 224
7.9.1 工具 224
7.9.2 一般文献 224
第8章 工业控制系统恶意代码 225
8.1 工控系统恶意代码入门 225
8.1.1 代码释放器 225
8.1.2 Rootkits 227
8.1.3 病毒 228
8.1.4 广告软件与间谍程序 228
8.1.5 蠕虫 229
8.1.6 木马 229
8.1.7 勒索软件 231
8.1.8 感染途径 232
8.2 工控系统恶意代码分析 234
8.2.1 实验环境 234
8.2.2 Stuxnet 235
8.2.3 Flame 237
8.2.4 Havex 237
8.2.5 BlackEnergy 239
8.2.6 伪装为工控系统软件的犯罪软件 241
8.2.7 Shamoon 243
8.3 本章总结 243
8.4 延伸阅读 244
案例研究 第四部分:立足之地 245
延伸阅读 247
第三部分 融会贯通:风险缓解 250
案例研究 第五部分:何去何从 250
延伸阅读 251
第9章 工业控制系统安全标准入门 252
9.1 合规性与安全性 253
9.2 常见的工控系统网络安全标准 254
9.2.1 NIST SP 800-82 254
9.2.2 ISA/IEC 62443 255
9.2.3 NERC CIP 255
9.2.4 API 1164 256
9.2.5 CFATS 257
9.2.6 NRC Regulations 5.7 1 258
9.2.7 NE108-09 260
9.3 通用网络安全标准 260
9.3.1 NIST网络安全框架 260
9.3.2 ISO/IEC 27002:2013标准 262
9.4 本章总结 262
9.5 延伸阅读 264
第10章 工业控制系统风险缓解策略 265
10.1 风险处置 266
10.2 工控系统的特殊风险因素 266
10.2.1 机密性、完整性和可用性 266
10.2.2 纵深防御 267
10.2.3 功能安全 268
10.3 针对工控系统风险缓解措施的考量 268
10.3.1 工控系统网络方面的考量 268
10.3.2 工控系统基于主机方面的考量 269
10.3.3 工控系统物理访问方面的考量 270
10.4 漏洞利用工具、威胁和漏洞 270
10.4.1 漏洞利用工具的清除 271
10.4.2 威胁的清除 271
10.4.3 漏洞的清除 271
10.5 工控系统风险缓解的其他方面考量 284
10.5.1 系统集成问题 284
10.5.2 合规性与安全性 285
10.5.3 购买保险 285
10.5.4 蜜罐 286
10.6 风险缓解过程 286
10.6.1 风险评估步骤的融合 287
10.6.2 风险场景的融合 287
10.6.3 成本效益分析的开展 288
10.6.4 风险缓解策略的制订 290
10.7 本章总结 291
10.8 延伸阅读 291
第四部分 附录 294
附录A缩略语表 294
附录B术语表 298
附录C工业控制系统风险评估与渗透测试方法流程图 311