| name | implementing-ot-incident-response-playbook |
| description | 按照SANS PICERL框架、IEC 62443和NIST SP 800-82,开发并实施OT专用事件响应剧本,解决包括安全关键系统、有限停机容忍度以及IT SOC、OT工程和工厂运营团队协调等ICS特有挑战。
|
| domain | cybersecurity |
| subdomain | ot-ics-security |
| tags | ["ot-security","ics","incident-response","playbook","sans","iec62443","nist","safety-critical"] |
| version | 1.0 |
| author | mahipal |
| license | Apache-2.0 |
实施OT事件响应剧本
适用场景
- 首次为OT构建专用事件响应程序
- 现有IT IR剧本未涵盖ICS/SCADA特定要求
- 准备应对EKANS或LockerGoga等OT勒索软件场景
- 将IR程序与IEC 62443和NERC CIP事件报告要求对齐
- 进行事件后审查以提升OT IR能力
不适用于无OT组件的纯IT事件响应(使用标准NIST 800-61剧本)、日常OT安全监控(参见implementing-dragos-platform-for-ot-monitoring),或桌面推演设计(参见performing-ics-tabletop-exercise)。
前置条件
- 带关键性评级和安全系统识别的OT资产清单
- 已定义的角色:OT IR负责人、IT SOC分析师、工厂运营经理、过程安全工程师
- 通信计划,包括带外通道(OT事件可能影响IT通信)
- PLC程序、HMI配置和历史数据的已知良好备份
- ICS供应商、Dragos/Claroty支持和CISA ICS-CERT的联系信息
工作流程
步骤 1:定义OT特定事件分类和响应程序
"""OT事件响应剧本引擎。
按照SANS PICERL生命周期,针对安全性、
可用性和跨团队协调的ICS特定考虑因素,
实施结构化的OT事件响应程序。
"""
import json
import sys
from datetime import datetime
from enum import Enum
from typing import Dict, List, Optional
class OTIncidentSeverity(Enum):
SEV1_SAFETY = "SEV1-SAFETY"
SEV2_PROCESS = "SEV2-PROCESS"
SEV3_ACCESS = "SEV3-ACCESS"
SEV4_RECON = "SEV4-RECON"
SEV5_IT_SPILLOVER = "SEV5-IT-SPILLOVER"
class OTIncidentCategory(Enum):
RANSOMWARE = "ransomware"
MALWARE_ICS = "malware_ics_specific"
UNAUTHORIZED_ACCESS = "unauthorized_ot_access"
PROCESS_MANIPULATION = "process_manipulation"
SIS_COMPROMISE = "safety_system_compromise"
DATA_EXFILTRATION = "ot_data_exfiltration"
SUPPLY_CHAIN = "supply_chain_compromise"
INSIDER_THREAT = "insider_threat"
PICERL_PHASES = {
"preparation": {
"description": "事件发生前的准备工作",
"ot_specific": [
"维护所有PLC程序和HMI配置的离线备份",
"记录每个过程区域的安全关闭程序",
,
,
,
,
],
},
: {
: ,
: [
,
,
,
,
,
,
],
},
: {
: ,
: [
,
,
,
,
,
,
],
},
: {
: ,
: [
,
,
,
,
,
,
],
},
: {
: ,
: [
,
,
,
,
,
,
],
},
: {
: ,
: [
,
,
,
,
,
,
],
},
}
:
():
. =
.title = title
.severity = severity
.category = category
.affected_systems = affected_systems
.created = datetime.now().isoformat()
.current_phase =
.timeline = []
.decisions = []
.containment_actions = []
():
entry = {
: datetime.now().isoformat(),
: phase,
: action,
: actor,
: notes,
}
.timeline.append(entry)
entry
():
entry = {
: datetime.now().isoformat(),
: decision,
: rationale,
: approved_by,
}
.decisions.append(entry)
entry
:
():
.playbooks = ._build_playbooks()
() -> :
{
OTIncidentCategory.RANSOMWARE: {
: ,
: ,
: [
,
,
,
,
,
,
],
: [
,
,
,
,
,
],
: [
,
,
,
,
,
,
],
: [
,
,
,
],
},
OTIncidentCategory.SIS_COMPROMISE: {
: ,
: ,
: [
,
,
,
,
,
,
],
: [
,
,
,
,
,
],
: [
,
,
,
,
],
: [
,
,
,
],
},
}
():
playbook = .playbooks.get(incident.category)
playbook:
()
()
()
()
()
()
()
()
()
()
()
()
()
i, action (playbook[], ):
()
()
i, step (playbook[], ):
()
()
item playbook[]:
()
()
req playbook[]:
()
()
phase, info PICERL_PHASES.items():
()
item info[][:]:
()
__name__ == :
engine = OTPlaybookEngine()
incident = OTIncident(
title=,
severity=OTIncidentSeverity.SEV2_PROCESS,
category=OTIncidentCategory.RANSOMWARE,
affected_systems=[, , , ],
)
engine.execute_playbook(incident)
核心概念
| 术语 | 定义 |
|---|
| PICERL | SANS事件响应生命周期:准备(Preparation)、识别(Identification)、遏制(Containment)、清除(Eradication)、恢复(Recovery)、经验教训(Lessons Learned) |
| ICS4ICS | 工业控制系统事件指挥系统 - 将FEMA ICS适配到OT网络安全响应 |
| 安全仪表系统(SIS) | 防止危险条件的独立安全控制器;SIS被攻陷可能造成人身伤害 |
| 手动/本地模式(Manual/Local Mode) | 使用本地面板控制操作PLC而非远程SCADA;当远程访问被攻陷时使用 |
| CIRCIA | 关键基础设施网络事件报告法案,要求在72小时内向CISA报告 |
| 已知良好备份(Known-Good Backup) | 经验证的PLC程序和配置离线副本,用作恢复的可信基线 |
常见场景
场景:勒索软件从IT蔓延到OT 3级
背景:勒索软件加密企业IT系统,并通过防护不足的IT/OT管道蔓延到3级历史服务器。2级HMI开始显示连接错误。
处理方法:
- 立即激活勒索软件OT IR剧本
- 在DMZ防火墙处断开IT-OT连接(南北两侧防火墙)
- 验证PLC仍在运行且过程稳定(PLC独立于IT运行)
- 如果网络化HMI受影响,将操作员切换到本地HMI面板
- 评估哪些2/3级系统被加密,哪些仍可运行
- 优先恢复HMI可见性,然后是历史服务器,再是工程师工作站
- 从离线备份恢复 — 未经沙箱测试,切勿尝试使用攻击者提供的工具解密
- 按CIRCIA要求在72小时内向CISA报告
注意事项:不要关闭PLC来"保护"它们免受勒索软件影响 — PLC运行固件而非Windows,通常不受勒索软件影响。关闭PLC会中断物理过程。在IT侧完全修复之前,切勿重新连接IT-OT管道。
输出格式
OT事件响应报告
==============================
事件ID: OT-IR-YYYYMMDD-HHMMSS
严重程度: SEV[1-5]
类别: [类别]
状态: [活跃/已遏制/已清除/已恢复/已关闭]
时间线:
[时间戳] - [阶段] - [操作] - [执行人]
受影响系统:
安全系统: [状态]
过程控制器: [状态]
HMI/SCADA: [状态]
历史服务器: [状态]
决策日志:
[时间戳] - [决策] - [理由] - [批准人]
已采取的遏制措施:
1. [操作和时间戳]
恢复状态:
[系统] - [已恢复/待恢复] - [预计完成时间]