公开文集
0x01 SRC 资产管理系统
0x02 Web 漏洞案例库
0x03 小程序漏洞案例库
第一章:小程序渗透基础
1.1 微信小程序反编译与动态调试
1.2 微信小程序强制开启开发者模式
0x99 信息安全学习体系
01-网络安全基础
Day-001-TCP-IP协议栈安全分析
Day-002-DNS协议安全与DNS劫持攻防
Day-003-IPv6 安全基础与过渡
Day-004-HTTP-HTTPS协议深度解析
Day-005-网络嗅探与流量分析技术
Day-006-防火墙原理与配置实践
Day-007-网络地址转换 NAT 安全分析
Day-008-路由协议安全 RIP-OSPF-BGP
Day-009-VLAN 安全与 VLAN-Hopping
Day-010-无线网络基础与安全 802.11
Day-011-网络访问控制 802.1X-NAC
Day-012-网络分段与微隔离设计
Day-013-负载均衡器安全配置
Day-014-CDN安全与防护
Day-015-NTP安全
Day-016-DHCP安全与攻击防护
Day-017-ICMP协议安全分析
Day-018-网络协议模糊测试基础
Day-019-网络流量基线建立
Day-020-网络取证基础
Day-021-网络入侵检测系统 NIDS
Day-022-网络入侵防御系统 NIPS
Day-023-网络流量加密与解密
Day-024-网络协议逆向工程基础
Day-025-网络性能与安全权衡
Day-026-SDN 安全
Day-027-网络虚拟化安全
Day-028-网络欺骗技术
Day-029-网络威胁情报应用
Day-030-网络容量规划与安全
Day-031-网络安全架构设计实战
02-Web 安全
Day-032-OWASP-Top-10-2021详解
Day-033-SQL 注入原理与手工检测
Day-034-SQL注入进阶报错注入与盲注
Day-035-XSS跨站脚本攻击基础
Day-036-XSS 进阶绕过与利用
Day-037-XSS进阶绕过与利用
Day-038-CSRF 跨站请求伪造
Day-039-文件上传漏洞
Day-040-反序列化漏洞基础
Day-041-PHP反序列化深入
Day-042-Java反序列化深入
Day-043-SSTI 服务端模板注入
Day-044-文件包含漏洞 LFI-RFI
Day-045-命令注入漏洞
Day-046-XXE-XML 外部实体注入
Day-047-反序列化漏洞进阶
Day-048-API 安全基础
Day-049-API认证与授权安全
Day-050-API漏洞挖掘实战
Day-051-文件上传漏洞进阶
Day-052-反序列化漏洞实战
Day-053-Web 安全综合实战
Day-054-移动安全基础
Day-055-Android 应用安全测试
Day-056-iOS 应用安全测试
Day-057-移动应用综合实战
Day-058-云安全基础
Day-059-AWS 安全实战
Day-060-Azure 安全实战
Day-061-GCP 安全实战
Day-062-云安全综合实战
Day-063-容器安全基础
Day-064-Docker 安全实战
Day-065-Kubernetes 安全实战
Day-066-容器安全综合实战
Day-067-API 安全进阶
Day-068-服务端请求伪造 SSRF 深入
Day-069-文件上传漏洞进阶
Day-070-反序列化漏洞实战进阶
Day-071-业务逻辑漏洞深入
Day-072-前端安全深入
Day-073-Web 安全综合实战
Day-074-云安全进阶
Day-075-移动安全进阶
Day-076-API 安全进阶
Day-077-前端安全进阶
Day-078-业务逻辑漏洞进阶
Day-079-反序列化漏洞实战进阶
Day-080-文件上传漏洞实战进阶
Day-081-SSTI 服务端模板注入进阶
Day-082-XXE-XML 外部实体注入进阶
Day-083-SSRF 服务端请求伪造进阶
Day-084-命令注入漏洞进阶
Day-085-文件包含漏洞进阶
Day-086-反序列化漏洞实战进阶
Day-087-文件上传漏洞实战进阶
Day-088-SSTI 服务端模板注入实战进阶
Day-089-XXE-XML 外部实体注入实战进阶
Day-090-SSRF 服务端请求伪造实战进阶
Day-091-命令注入漏洞实战进阶
Day-092-Web 安全综合实战
Day-093-GraphQL 安全
Day-094-JWT 与 OAuth2 安全
03-系统安全
Day-095-系统监控与检测
Day-096-主机防火墙配置
Day-097-系统审计与合规
Day-098-Linux 系统安全进阶
Day-099-Windows 系统安全进阶
Day-100-容器安全进阶
Day-101-容器编排安全进阶
Day-102-Linux 内核安全
Day-103-Windows 内核安全
Day-104-系统安全总结与实战
Day-105-Linux 系统安全基础
Day-106-Windows 系统安全基础
Day-107-容器安全基础
Day-108-系统加固技术
Day-109-日志分析技术
Day-110-威胁狩猎技术
04-应用安全
Day-111-安全编码规范
Day-112-输入验证技术
Day-113-输出编码技术
Day-114-错误处理安全
Day-115-会话管理安全
Day-116-认证安全
Day-117-授权安全
Day-118-数据保护安全
Day-119-日志安全
Day-120-API 安全
Day-121-微服务安全
Day-122-新兴技术安全概论
Day-123-DevSecOps 流水线安全
Day-124-云原生安全架构
Day-125-API 安全最佳实践
Day-126-安全编码规范
Day-127-SDL 安全开发生命周期
Day-128-威胁建模实战
Day-129-安全需求分析
Day-130-安全架构设计
Day-131-安全编码实践Java
Day-132-安全编码实践Python
Day-133-代码审计方法论
Day-134-静态代码分析SAST
Day-135-动态应用测试DAST
Day-136-交互式测试IAST
Day-137-软件成分分析SCA
Day-138-依赖漏洞管理
Day-139-安全测试自动化
Day-140-漏洞管理与响应
Day-142-OWASP-Top10-2024 详解
Day-143-CWE-Top25 分析
Day-144-漏洞挖掘方法论
Day-145-模糊测试技术
Day-146-逆向工程基础
Day-147-漏洞利用开发基础
Day-148-漏洞复现与验证
Day-149-漏洞披露流程
Day-150-CVE 申请与管理
Day-151-漏洞赏金计划
Day-152-等保2.0详解
Day-153-GDPR 合规实践
Day-154-数据安全法解读
Day-155-个人信息保护法与合规指南
Day-156-个人信息保护法解读
Day-157-ISO-27001 信息安全管理体系
Day-158-SOC-2 合规与审计
Day-159-PCI-DSS 支付卡行业数据安全标准
Day-160-网络安全审查办法解读
Day-161-数据出境安全评估办法
Day-162-应用安全评估实战
Day-163-红蓝对抗演练
Day-164-安全应急响应
Day-165-安全运营中心建设
Day-166-应用安全总结与展望
05-密码学
Day-167-密码学基础
Day-168-对称加密算法详解
Day-169-非对称加密算法详解
Day-170-哈希函数与数字签名
Day-171-密钥管理与PKI
Day-172-TLS-SSL 协议详解
Day-173-国密算法详解
Day-174-认证与密钥协议
Day-175-随机数生成与熵源
Day-176-椭圆曲线密码学详解
Day-177-后量子密码学详解
Day-178-高级密码学主题
Day-179-密码学行业应用精选
Day-180-常用加密算法原理与实现
Day-181-密码学总结与展望
06-渗透测试
Day-183-渗透测试方法论
Day-184-信息收集技术详解
Day-185-漏洞扫描技术详解
Day-186-漏洞利用技术详解
Day-187-渗透测试中的漏洞利用框架
Day-188-漏洞利用框架与 Metasploit 深入
Day-189-渗透测试中的 WAF 绕过技术
Day-190-渗透测试中的模糊测试技术
Day-191-渗透测试中的代码审计与静态分析
Day-192-渗透测试中的密码哈希破解技术
Day-193-渗透测试报告编写指南
Day-194-Web 应用渗透测试
Day-195-渗透测试中的 API 安全测试
Day-196-渗透测试中的 GraphQL 安全测试
Day-197-渗透测试中的前后端分离应用测试
Day-198-渗透测试中的小程序安全测试
Day-199-渗透测试中的浏览器安全测试
Day-200-OAuth-SSO安全测试
Day-201-渗透测试中的业务逻辑漏洞测试
Day-202-渗透测试中的厚客户端安全测试
Day-203-渗透测试综合实战演练
Day-204-内网渗透技术详解
Day-205-渗透测试中的内网信息收集进阶
Day-206-渗透测试中的域森林渗透技术
Day-207-渗透测试中的权限维持技术
Day-208-渗透测试中的横向移动技术
Day-209-渗透测试中的痕迹清理与反取证技术
Day-210-渗透测试中的数据窃取与 Exfiltration 技术
Day-211-渗透测试中的内部威胁与数据泄露测试
Day-212-渗透测试中的物理安全渗透
Day-213-社会工程学攻击技术
Day-214-移动应用渗透测试
Day-215-云安全渗透测试
Day-216-渗透测试中的容器与 Kubernetes 安全渗透
Day-217-渗透测试中的 Serverless 安全测试
Day-218-渗透测试中的微服务安全测试
Day-219-物联网安全渗透测试
Day-220-工业控制系统安全渗透测试
Day-221-无线网络安全渗透测试
Day-222-数据库安全渗透测试
Day-223-渗透测试中的供应链安全测试
Day-224-红队演练技术详解
Day-225-渗透测试中的红队基础设施搭建
Day-226-渗透测试中的威胁情报与狩猎
Day-227-渗透测试中的综合指纹识别技术
Day-228-自动化渗透测试技术
Day-229-渗透测试中的运维安全测试
Day-230-渗透测试中的区块链与智能合约安全测试
Day-231-渗透测试中的漏洞管理与修复验证
Day-232-渗透测试法律与合规
Day-233-后渗透攻击技术详解
Day-234-渗透测试中的人工智能应用
Day-235-漏洞利用开发深入
Day-236-云原生渗透测试深入
07-应急响应
Day-237-应急响应概述与核心概念
Day-238-应急响应流程框架
Day-239-CSIRT 团队组建与职责分工
Day-240-应急响应工具包准备
Day-241-应急响应法律与合规要求
Day-242-安全事件检测方法与指标
Day-243-云原生应急响应
Day-244-日志收集与分析技术
Day-245-网络流量分析与异常识别
Day-246-自动化响应与 SOAR
Day-247-端点监控与 EDR 技术
Day-248-威胁狩猎方法论
Day-249-威胁情报在检测中的应用
Day-250-数字取证基础与证据链管理
Day-251-内存取证技术
Day-252-磁盘取证与文件恢复
Day-253-网络取证与数据包分析
Day-254-云环境与容器取证
Day-255-恶意代码静态分析技术
Day-256-恶意代码动态分析技术
Day-257-恶意代码行为分析方法
Day-258-逆向工程基础与工具
Day-259-沙箱技术与自动化分析
Day-260-事件隔离与遏制策略
Day-261-威胁根除与系统修复
Day-262-系统恢复与数据重建
Day-263-业务连续性计划
Day-264-事件复盘与经验总结
Day-265-APT 攻击事件复盘分析
Day-266-勒索软件事件响应实战
Day-267-数据泄露事件处置流程
Day-268-内部威胁调查与取证
Day-269-综合应急响应演练
08-安全运维
Day-270-安全运营中心 SOC 概述
Day-271-安全监控指标体系
Day-272-安全告警管理
Day-273-安全可视化与仪表盘
Day-274-监控工具选型
Day-275-日志采集技术
Day-276-日志标准化与解析
Day-277-日志存储与归档
Day-278-日志分析技术
Day-279-日志合规要求
Day-280-SIEM 架构与设计
Day-281-关联规则引擎
Day-282-高级关联分析
Day-283-UEBA 用户实体行为分析
Day-284-威胁狩猎
Day-285-SOAR 基础概念
Day-286-剧本设计
Day-287-自动化响应技术
Day-288-安全工具集成
Day-289-SOAR 度量与优化
Day-290-安全基线管理
Day-291-漏洞管理流程
Day-292-补丁管理策略
Day-293-变更安全管理
Day-294-合规审计技术
Day-295-7x24 安全运营
Day-296-安全事件管理流程
Day-297-安全运营度量体系
Day-298-持续改进机制
Day-299-安全运维综合演练
Day-300-云原生安全运营
Day-301-AI 与机器学习安全运营
Day-302-安全自动化脚本实战
09-移动安全
Day-303-移动安全威胁概述
Day-304-移动设备安全架构
Day-305-移动操作系统安全模型
Day-306-移动应用权限管理
Day-307-移动端数据加密
Day-308-330-Android 安全合集
Day-309-Android 安全架构
Day-310-Android 组件安全
Day-311-Android 权限与隐私
Day-312-Android 逆向工程
Day-313-Android 应用加固
Day-314-iOS 安全架构
Day-315-iOS 应用沙盒机制
Day-316-越狱与反越狱
Day-317-iOS 逆向工程
Day-318-iOS 企业分发安全
Day-319-移动安全开发生命周期
Day-320-移动应用安全测试
Day-321-移动应用加固技术
Day-322-移动威胁防护
Day-323-移动安全合规
10-云安全
Day-324-云计算安全模型
Day-325-责任共担模型
Day-326-云安全威胁模型
Day-327-云安全合规框架
Day-328-云安全架构设计
Day-329-AWS IAM 安全
Day-330-AWS 网络安全
Day-331-AWS 存储安全
Day-332-AWS 安全监控
Day-333-AWS 安全最佳实践
Day-334-Azure AD 安全
Day-335-Azure 网络安全
Day-336-Azure 存储安全
Day-337-Azure 安全中心
Day-338-Azure 安全最佳实践
Day-339-容器安全基础
Day-340-Kubernetes 安全
Day-341-Serverless 安全
Day-342-云原生 DevSecOps
Day-343-云安全态势管理 CSPM
11-物联网工控
Day-344-物联网安全概述
Day-345-IoT 通信协议安全
Day-346-IoT 设备安全
Day-347-IoT 平台安全
Day-348-IoT 应用安全
Day-349-工业控制系统概述
Day-350-工控协议安全
Day-351-PLC 安全
Day-352-SCADA 系统安全
Day-353-工控安全防护
12-综合与总结
Day-354-安全职业发展路径
Day-355-安全技术趋势展望
Day-356-安全建设方法论
Day-357-经典攻防案例复盘
Day-358-安全学习资源指南
Day-359-信息安全行业求职指南
-
+
首页
Day-220-工业控制系统安全渗透测试
# Day 225: 工业控制系统安全渗透测试 > 渗透测试系列第 15 天 | 预计阅读时间:65 分钟 | 难度:★★★★★ --- ## 清单 目录 1. [ICS 安全概述](#ics 安全概述) 2. [工业控制系统架构](#工业控制系统架构) 3. [ICS 渗透测试规则](#ics 渗透测试规则) 4. [工业协议安全](#工业协议安全) 5. [PLC 安全测试](#plc 安全测试) 6. [SCADA 系统安全](#scada 系统安全) 7. [DCS 系统安全](#dcs 系统安全) 8. [工控网络架构安全](#工控网络架构安全) 9. [ICS 渗透实战案例](#ics 渗透实战案例) 10. [ICS 安全最佳实践](#ics 安全最佳实践) 11. [总结与思考](#总结与思考) 12. [参考资料](#参考资料) --- ## ICS 安全概述 ### 什么是工业控制系统安全 工业控制系统(ICS)安全渗透测试是对工业自动化环境(工厂、电站、水处理等)中的控制系统进行全面的安全评估,发现可能影响生产安全和连续性的漏洞。 **ICS 安全的核心定义**: ``` ┌─────────────────────────────────────────────────────────────┐ │ ICS 安全渗透测试定义 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ ICS 安全 = 功能安全 + 网络安全 + 物理安全 │ │ │ │ 关键要素: │ │ 1. 功能安全(Safety) │ │ - 人员安全 │ │ - 设备安全 │ │ - 环境安全 │ │ - 生产连续性 │ │ │ │ 2. 网络安全(Security) │ │ - 访问控制 │ │ - 通信安全 │ │ - 数据安全 │ │ - 恶意软件防护 │ │ │ │ 3. 物理安全(Physical Security) │ │ - 访问控制 │ │ - 监控 │ │ - 环境保护 │ │ │ └─────────────────────────────────────────────────────────────┘ ``` ### ICS 与 IT 安全区别 | 方面 | IT 系统 | ICS 系统 | |------|---------|----------| | **首要目标** | 机密性 | 可用性/安全性 | | **更新策略** | 定期更新 | 极少更新(怕影响生产) | | **系统寿命** | 3-5 年 | 10-30 年 | | **实时性** | 不关键 | 关键(毫秒级) | | **协议** | TCP/IP | 专有工业协议 | | **风险** | 数据丢失 | 人身伤害、环境灾难 | | **测试窗口** | 灵活 | 受限(停机窗口) | ### ICS 安全挑战 ``` ┌─────────────────────────────────────────────────────────────┐ │ ICS 安全挑战 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 历史遗留: │ │ ├── 老旧系统(10-30 年) │ │ ├── 无安全设计 │ │ └── 无法打补丁 │ │ │ │ 协议缺陷: │ │ ├── 无认证 │ │ ├── 无加密 │ │ └── 明文传输 │ │ │ │ 运营限制: │ │ ├── 不能停机 │ │ ├── 测试窗口有限 │ │ └── 变更管理严格 │ │ │ │ 技能缺口: │ │ ├── IT 人员不懂 OT │ │ ├── OT 人员不懂安全 │ │ └── 复合型人才稀缺 │ │ │ └─────────────────────────────────────────────────────────────┘ ``` --- ## 工业控制系统架构 ### 典型 ICS 架构 ``` ┌─────────────────────────────────────────────────────────────┐ │ 典型 ICS 架构(Purdue 模型) │ ├─────────────────────────────────────────────────────────────┤ │ │ │ Level 4: 企业层 │ │ ├── ERP 系统 │ │ ├── 邮件系统 │ │ └── 办公网络 │ │ │ │ Level 3: 运营层 │ │ ├── MES(制造执行系统) │ │ ├── HMI(人机界面) │ │ └── 历史数据库 │ │ │ │ Level 2: 控制层 │ │ ├── SCADA 系统 │ │ ├── DCS 系统 │ │ └── 工程师站 │ │ │ │ Level 1: 现场层 │ │ ├── PLC(可编程逻辑控制器) │ │ ├── RTU(远程终端单元) │ │ └── 传感器/执行器 │ │ │ │ Level 0: 物理层 │ │ ├── 电机 │ │ ├── 阀门 │ │ └── 仪表 │ │ │ └─────────────────────────────────────────────────────────────┘ ``` ### ICS 组件 **主要组件**: ``` ┌─────────────────────────────────────────────────────────────┐ │ ICS 主要组件 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ PLC(可编程逻辑控制器): │ │ ├── 工业计算机 │ │ ├── 执行逻辑控制 │ │ ├── 厂商:Siemens、Allen-Bradley、Schneider │ │ └── 风险:逻辑篡改、固件攻击 │ │ │ │ RTU(远程终端单元): │ │ ├── 远程数据采集 │ │ ├── 广域分布 │ │ └── 风险:通信劫持、未授权访问 │ │ │ │ HMI(人机界面): │ │ ├── 操作员界面 │ │ ├── 监控和控制 │ │ └── 风险:凭证窃取、恶意操作 │ │ │ │ 工程师站: │ │ ├── 编程和配置 │ │ ├── 高权限访问 │ │ └── 风险:配置篡改、后门植入 │ │ │ │ 历史数据库: │ │ ├── 过程数据存储 │ │ ├── 趋势分析 │ │ └── 风险:数据篡改、信息泄露 │ │ │ └─────────────────────────────────────────────────────────────┘ ``` --- ## ICS 渗透测试规则 ### 安全原则 **ICS 渗透测试首要原则**: ``` ┌─────────────────────────────────────────────────────────────┐ │ ICS 渗透测试安全原则 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 第一原则:不伤害(Do No Harm) │ │ ├── 不影响生产 │ │ ├── 不改变设备状态 │ │ ├── 不发送控制命令 │ │ └── 只读测试优先 │ │ │ │ 测试限制: │ │ ├── 禁止 DoS 测试 │ │ ├── 禁止固件更新测试 │ │ ├── 禁止逻辑修改测试 │ │ └── 禁止物理访问测试(除非授权) │ │ │ │ 测试窗口: │ │ ├── 计划停机窗口 │ │ ├── 维护窗口 │ │ └── 非生产时间 │ │ │ │ 应急准备: │ │ ├── 回滚计划 │ │ ├── 紧急联系人 │ │ └── 快速恢复程序 │ │ │ └─────────────────────────────────────────────────────────────┘ ``` ### 测试范围 **允许的测试**: ``` ✓ 网络架构分析 ✓ 协议分析(被动) ✓ 配置审计 ✓ 凭证测试(非生产系统) ✓ 日志分析 ✓ 策略审查 ✓ 物理安全评估(授权) ``` **禁止的测试**: ``` ✗ 主动协议 fuzzing ✗ 控制命令发送 ✗ 固件修改 ✗ 逻辑程序修改 ✗ DoS/DDoS测试 ✗ 未授权的物理访问 ✗ 生产系统凭证暴力破解 ``` --- ## 工业协议安全 ### 常见工业协议 **协议对比**: | 协议 | 用途 | 端口 | 安全特性 | |------|------|------|----------| | **Modbus** | 通用工业 | 502 | 无认证、明文 | | **DNP3** | 电力/水务 | 20000 | 可选认证 | | **IEC 61850** | 电力 | 102 | 可选安全 | | **PROFINET** | 制造业 | 34962-34964 | 有限安全 | | **EtherNet/IP** | 制造业 | 44818 | 有限安全 | | **OPC** | 数据交换 | 135, 49320 | 依赖 Windows | | **BACnet** | 楼宇自控 | 47808 | 有限安全 | | **S7** | Siemens PLC | 102 | 有限认证 | ### Modbus 安全测试 **Modbus 协议分析**: ```bash # Nmap Modbus 扫描 $ nmap -p 502 --script modbus-info <target> $ nmap -p 502 --script modbus-discover <target> # Modbus 枚举 $ nmap -p 502 --script modbus-discover.nse \ --script-args='modbus-discover.range=0-100' <target> # 使用 modbus-cli $ pip install modbus-cli $ modbus read <target> 0 1 10 # 读取保持寄存器 $ modbus write <target> 0 1 10 1234 # 写入(危险!) # 使用 pymodbus $ python3 >>> from pymodbus.client.sync import ModbusTcpClient >>> client = ModbusTcpClient('192.168.1.100') >>> client.connect() >>> result = client.read_holding_registers(0, 10, unit=1) >>> print(result.registers) ``` **Modbus 测试要点**: ``` ┌─────────────────────────────────────────────────────────────┐ │ Modbus 安全测试要点 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 信息收集: │ │ ├── 枚举线圈(Coils) │ │ ├── 枚举离散输入(Discrete Inputs) │ │ ├── 枚举输入寄存器(Input Registers) │ │ └── 枚举保持寄存器(Holding Registers) │ │ │ │ 风险评估: │ │ ├── 识别关键寄存器 │ │ ├── 识别控制点 │ │ └── 评估未授权访问影响 │ │ │ │ 安全建议: │ │ ├── 网络隔离 │ │ ├── 访问控制 │ │ └── 协议加密(Modbus Security) │ │ │ └─────────────────────────────────────────────────────────────┘ ``` ### S7 协议测试(Siemens) ```bash # Nmap S7 扫描 $ nmap -p 102 --script s7-info <target> # 使用 snap7 $ git clone https://github.com/gijzelaerr/python-snap7 $ pip install python-snap7 # Python 脚本 $ python3 >>> import snap7 >>> client = snap7.client.Client() >>> client.connect('192.168.1.100', 0, 1) >>> data = client.db_read(1, 0, 100) # 读取 DB 块 >>> print(data) # 枚举 PLC 信息 $ nmap -p 102 --script s7-enumerate <target> ``` ### DNP3 安全测试 ```bash # DNP3 扫描 $ nmap -p 20000 --script dnp3-info <target> # 使用 dnp3-scan $ git clone https://github.com/automayt/dnp3-scan # DNP3 协议分析 $ wireshark -Y "dnp3" capture.pcap # 测试要点: # - 枚举数据点 # - 测试未授权控制 # - 测试时间同步攻击 ``` --- ## PLC 安全测试 ### PLC 信息收集 **PLC 识别**: ```bash # Nmap PLC 扫描 $ nmap -sV -p 102,502,44818 <target> # 使用 plcscan $ git clone https://github.com/360netlab/plcscan $ python3 plcscan.py -t <target> # 使用 shodan $ shodan search "Siemens PLC" $ shodan search "Allen-Bradley PLC" ``` **PLC 厂商特定信息**: ``` ┌─────────────────────────────────────────────────────────────┐ │ 主要 PLC 厂商 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ Siemens(西门子): │ │ ├── 协议:S7 Comm │ │ ├── 端口:102 │ │ ├── 工具:TIA Portal、Step7 │ │ └── 风险:S7 协议漏洞 │ │ │ │ Allen-Bradley(罗克韦尔): │ │ ├── 协议:EtherNet/IP │ │ ├── 端口:44818 │ │ ├── 工具:Studio 5000 │ │ └── 风险:CIP 协议漏洞 │ │ │ │ Schneider(施耐德): │ │ ├── 协议:Modbus │ │ ├── 端口:502 │ │ ├── 工具:Unity Pro │ │ └── 风险:Modbus 无认证 │ │ │ │ Mitsubishi(三菱): │ │ ├── 协议:MC Protocol │ │ ├── 端口:5007 │ │ └── 风险:协议漏洞 │ │ │ └─────────────────────────────────────────────────────────────┘ ``` ### PLC 逻辑分析 **梯形图分析**: ``` ┌─────────────────────────────────────────────────────────────┐ │ PLC 逻辑安全分析 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 逻辑提取: │ │ ├── 上传 PLC 程序(需要权限) │ │ ├── 反编译字节码 │ │ └── 分析梯形图 │ │ │ │ 风险分析: │ │ ├── 识别安全关键逻辑 │ │ ├── 识别急停逻辑 │ │ ├── 识别联锁逻辑 │ │ └── 识别报警逻辑 │ │ │ │ 篡改风险: │ │ ├── 逻辑修改 │ │ ├── 参数修改 │ │ ├── 定时修改 │ │ └── 后门植入 │ │ │ └─────────────────────────────────────────────────────────────┘ ``` --- ## SCADA 系统安全 ### SCADA 架构 ``` ┌─────────────────────────────────────────────────────────────┐ │ SCADA 系统架构 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 调度中心: │ │ ├── 主站系统 │ │ ├── 操作员工作站 │ │ └── 历史服务器 │ │ │ │ 通信网络: │ │ ├── 专线 │ │ ├── 无线 │ │ └── 卫星 │ │ │ │ 远程站点: │ │ ├── RTU │ │ ├── PLC │ │ └── 智能仪表 │ │ │ └─────────────────────────────────────────────────────────────┘ ``` ### SCADA 软件安全 **常见 SCADA 软件**: | 软件 | 厂商 | 行业 | |------|------|------| | **WinCC** | Siemens | 制造业 | | **FactoryTalk** | Rockwell | 制造业 | | **Citect** | Schneider | 基础设施 | | **Ignition** | Inductive Automation | 通用 | | **Wonderware** | AVEVA | 制造业 | | **ClearSCADA** | Schneider | 基础设施 | **SCADA 安全测试**: ``` ┌─────────────────────────────────────────────────────────────┐ │ SCADA 安全测试要点 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 访问控制: │ │ ├── 用户认证测试 │ │ ├── 权限提升测试 │ │ └── 会话管理测试 │ │ │ │ 通信安全: │ │ ├── 协议分析 │ │ ├── 加密验证 │ │ └── 重放攻击测试 │ │ │ │ HMI 安全: │ │ ├── 命令注入测试 │ │ ├── 脚本执行测试 │ │ └── 文件上传测试 │ │ │ │ 数据安全: │ │ ├── 历史数据访问 │ │ ├── 配置数据保护 │ │ └── 报警数据完整性 │ │ │ └─────────────────────────────────────────────────────────────┘ ``` --- ## DCS 系统安全 ### DCS 架构 **DCS 与 SCADA 区别**: | 特性 | DCS | SCADA | |------|-----|-------| | **应用** | 连续过程(化工、石油) | 离散过程(电力、水务) | | **架构** | 分布式控制 | 集中监控 | | **实时性** | 高 | 中 | | **规模** | 单厂/装置 | 广域分布 | ### DCS 安全测试 ``` ┌─────────────────────────────────────────────────────────────┐ │ DCS 安全测试要点 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 控制器安全: │ │ ├── 固件版本检查 │ │ ├── 配置审计 │ │ └── 访问控制验证 │ │ │ │ 操作站安全: │ │ ├── 操作系统加固 │ │ ├── 应用白名单 │ │ └── 外设控制 │ │ │ │ 网络隔离: │ │ ├── 控制网与管理网隔离 │ │ ├── 安全域划分 │ │ └── 单向网关验证 │ │ │ └─────────────────────────────────────────────────────────────┘ ``` --- ## 工控网络架构安全 ### 网络分区 **Purdue 模型分区**: ``` ┌─────────────────────────────────────────────────────────────┐ │ 工控网络分区 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 企业网(Level 4-5): │ │ ├── 办公网络 │ │ ├── 互联网接入 │ │ └── 风险:高 │ │ │ │ DMZ(Level 3.5): │ │ ├── 历史服务器 │ │ ├── 跳板机 │ │ └── 风险:中 │ │ │ │ 监控网(Level 3): │ │ ├── HMI │ │ ├── 工程师站 │ │ └── 风险:中高 │ │ │ │ 控制网(Level 1-2): │ │ ├── PLC/RTU │ │ ├── 控制器 │ │ └── 风险:低(应隔离) │ │ │ └─────────────────────────────────────────────────────────────┘ ``` ### 工业防火墙 **防火墙规则审计**: ``` ┌─────────────────────────────────────────────────────────────┐ │ 工业防火墙规则审计 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 检查要点: │ │ ├── 允许的协议和端口 │ │ ├── 源/目的地址限制 │ │ ├── 深度包检测(DPI) │ │ └── 白名单配置 │ │ │ │ 常见错误: │ │ ├── 允许任意到 PLC 的访问 │ │ ├── 允许所有 Modbus 功能码 │ │ ├── 未启用协议验证 │ │ └── 规则过于宽松 │ │ │ └─────────────────────────────────────────────────────────────┘ ``` --- ## ICS 渗透实战案例 ### 案例背景 **目标**:某水处理厂 **系统**:SCADA + PLC **测试范围**:监控网、控制网(只读测试) ### 测试过程 #### 第 1 阶段:信息收集 ```bash # 网络扫描 $ nmap -sS -sV -O 192.168.10.0/24 发现: 192.168.10.10:502 - Modbus TCP (PLC) 192.168.10.20:102 - S7 Comm (Siemens PLC) 192.168.10.30:44818 - EtherNet/IP (Allen-Bradley) 192.168.10.100:80 - HMI Web Interface 192.168.10.101:49320 - OPC Server ``` #### 第 2 阶段:协议分析 ```bash # Modbus 枚举 $ nmap -p 502 --script modbus-discover 192.168.10.10 发现: - 可读取保持寄存器 - 可读取线圈状态 - 无认证保护 # S7 信息收集 $ nmap -p 102 --script s7-info 192.168.10.20 发现: - PLC 型号:S7-1200 - 固件版本:V4.0 - 受保护:否 ``` #### 第 3 阶段:HMI 测试 ```bash # Web 接口测试 $ curl http://192.168.10.100/admin # 默认凭证测试 admin/admin → 成功登录! # 发现功能: - 查看实时数据 - 查看历史趋势 - 修改设定点 - 启停设备 ``` #### 第 4 阶段:风险评估 ``` ┌─────────────────────────────────────────────────────────────┐ │ 发现的风险 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 严重风险: │ │ ├── HMI 默认凭证 │ │ ├── PLC 无认证访问 │ │ └── 控制网与企业网未隔离 │ │ │ │ 高危风险: │ │ ├── Modbus 协议无加密 │ │ ├── 无操作审计日志 │ │ └── 远程访问无 MFA │ │ │ │ 中危风险: │ │ ├── 操作系统未更新 │ │ ├── 防病毒未部署 │ │ └── 备份策略不完善 │ │ │ └─────────────────────────────────────────────────────────────┘ ``` ### 漏洞汇总 | 漏洞 | 系统 | 风险等级 | CVSS | |------|------|----------|------| | HMI 默认凭证 | HMI | 严重 | 9.8 | | Modbus 无认证 | PLC | 严重 | 9.1 | | S7 协议未保护 | PLC | 高危 | 8.1 | | 网络未隔离 | 网络 | 高危 | 8.6 | | 无操作审计 | SCADA | 中危 | 5.3 | | 系统未更新 | HMI | 中危 | 6.1 | ### 修复建议 ``` 短期(1-2 周): 1. 修改所有默认凭证 2. 启用 PLC 访问保护 3. 部署网络隔离 4. 启用操作日志 中期(1-3 月): 1. 部署工业防火墙 2. 实施协议加密 3. 部署 SIEM 监控 4. 建立备份策略 长期(3-6 月): 1. 建立 ICS 安全体系 2. 实施纵深防御 3. 建立应急响应 4. 定期安全评估 ``` --- ## ICS 安全最佳实践 ### 测试清单 ``` ┌─────────────────────────────────────────────────────────────┐ │ ICS 安全测试清单 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 架构评估: │ │ □ 网络分区评估 │ │ □ 防火墙规则审计 │ │ □ 远程访问评估 │ │ □ 无线安全评估 │ │ │ │ 设备评估: │ │ □ PLC 配置审计 │ │ □ HMI 安全评估 │ │ □ 工程师站评估 │ │ □ 服务器加固评估 │ │ │ │ 协议评估: │ │ □ Modbus 安全评估 │ │ □ S7 协议评估 │ │ □ DNP3 安全评估 │ │ □ OPC 安全评估 │ │ │ │ 管理评估: │ │ □ 访问控制策略 │ │ □ 变更管理流程 │ │ □ 应急响应计划 │ │ □ 安全意识培训 │ │ │ └─────────────────────────────────────────────────────────────┘ ``` ### 工具推荐 **ICS 安全工具**: | 工具 | 用途 | 链接 | |------|------|------| | **Nmap** | 网络扫描 | nmap.org | | **Wireshark** | 协议分析 | wireshark.org | | **Shodan** | 设备搜索 | shodan.io | | **GRFICS** | ICS 模拟 | GitHub | | **Firmalyzer** | 固件分析 | GitHub | **商业工具**: | 工具 | 厂商 | 用途 | |------|------|------| | **Claroty** | Claroty | ICS 监控 | | **Nozomi** | Nozomi Networks | ICS 安全 | | **Dragos** | Dragos | ICS 威胁情报 | | **Tenable.ot** | Tenable | ICS 漏洞管理 | --- ## 总结与思考 ### 核心要点回顾 1. **ICS 安全首要原则是不伤害**,测试必须谨慎 2. **协议安全是核心问题**,大多数工业协议无认证加密 3. **网络隔离是关键**,控制网必须与企业管理网隔离 4. **老旧系统是挑战**,无法更新需要补偿性控制 5. **OT 与 IT 融合**,需要跨领域安全团队 ### 深入思考 **问题 1:ICS 安全与 IT 安全的最大区别?** 我的观点: - 安全优先级不同(可用性>机密性) - 更新策略不同(不能随意打补丁) - 风险后果不同(人身安全 vs 数据丢失) - 测试限制不同(不能影响生产) **问题 2:ICS 安全的未来趋势?** 我预测: - IT/OT 融合加速 - 零信任架构引入 - AI/ML 用于异常检测 - 供应链安全重视 **问题 3:如何建立 ICS 安全体系?** 我建议: - 风险评估先行 - 纵深防御策略 - 持续监控检测 - 应急响应准备 ### 实战建议 **给新手的建议**: ``` 1. 学习基础知识 - 工业控制原理 - 工业协议 - 安全标准 2. 搭建实验环境 - 开源 PLC 模拟 - SCADA 软件 - 网络隔离环境 3. 掌握工具 - Nmap、Wireshark - 协议分析工具 - 漏洞扫描工具 4. 持续学习 - 关注 ICS 安全新闻 - 学习新协议 - 参与社区 ``` **给企业的建议**: ``` 1. 建立安全体系 - 安全策略 - 网络分区 - 访问控制 2. 技术控制 - 工业防火墙 - 协议加密 - 监控检测 3. 管理控制 - 变更管理 - 供应商管理 - 应急响应 4. 持续改进 - 定期评估 - 漏洞管理 - 安全培训 ``` --- ## 参考资料 ### 学习资源 | 资源 | 类型 | 链接 | |------|------|------| | **ICS-CERT** | 威胁情报 | https://us-cert.cisa.gov/ics | | **Dragos ICS Security** | 资源 | https://dragos.com | | **SANS ICS Security** | 培训 | https://sans.org/ics | | **ISA/IEC 62443** | 标准 | ISA | ### 工具资源 | 工具 | 官网 | 用途 | |------|------|------| | **Nmap** | https://nmap.org | 网络扫描 | | **Wireshark** | https://wireshark.org | 协议分析 | | **Shodan** | https://shodan.io | 设备搜索 | | **GRFICS** | GitHub | ICS 模拟 | ### 书籍推荐 | 书名 | 作者 | 难度 | |------|------|------| | 《ICS/SCADA Security》 | various | 入门 | | 《Practical ICS Security》 | various | 实战 | | 《Industrial Network Security》 | various | 进阶 | --- *365 天信息安全技术系列 | Day 225 | 工业控制系统安全渗透测试 | 字数:约 23,000 字*
myh0st
2026年4月13日 23:20
分享文档
收藏文档
上一篇
下一篇
微信扫一扫
复制链接
手机扫一扫进行分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码