L’interface est localisée ; les présentations et documents des Skills sont traduits automatiquement par IA dans votre langue. Le code, les commandes, chemins et termes techniques restent en version originale, et le document de l’auteur fait foi.
Explorer les Skills
Productivité · SKILL.md

implementing-nerc-cip-compliance-controls

implementing-nerc-cip-compliance-controls

本技能涵盖为大型电力系统(BES)网络系统实施北美电力可靠性公司关键基础设施保护(NERC CIP)合规控制措施。内容包括资产分类(CIP-002)、电子安全边界(CIP-005)、系统安全管理(CIP-007)、配置管理(CIP-010)、供应链风险管理(CIP-013),以及2025年更新内容,包括远程访问强制MFA和扩展的低影响资产要求。

Independent GitHub snapshot · Automated classification · Original documentation governs

Documentation de la Skill

GitHub

name: implementing-nerc-cip-compliance-controls description: > 本技能涵盖为大型电力系统(BES)网络系统实施北美电力可靠性公司关键基础设施保护(NERC CIP)合规控制措施。内容包括资产分类(CIP-002)、电子安全边界(CIP-005)、系统安全管理(CIP-007)、配置管理(CIP-010)、供应链风险管理(CIP-013),以及2025年更新内容,包括远程访问强制MFA和扩展的低影响资产要求。 domain: cybersecurity subdomain: ot-ics-security tags: [ot-security, ics, scada, industrial-control, iec62443, nerc-cip, power-grid, compliance] version: 1.0.0 author: mahipal license: Apache-2.0

实施NERC CIP合规控制措施

适用场景

  • 注册实体必须实现或维护BES网络系统的NERC CIP合规性
  • 为地区实体准备NERC CIP合规审计
  • 实施2025年CIP标准更新(CIP-003-9、CIP-005-7、CIP-010-4、CIP-013-2)
  • 在新发电、输电或控制中心资产投入运行后对BES网络系统进行分类
  • 制定合规监控和证据收集计划

不适用于非BES工业系统(参见implementing-iec-62443-security-zones)、通用IT合规框架(参见auditing-cloud-with-cis-benchmarks),或无网络安全组件的变电站物理安全。

前置条件

  • 了解NERC CIP标准(CIP-002至CIP-014)
  • 带影响等级(高、中、低)的BES网络系统清单
  • 访问电子安全边界(ESP)网络图和防火墙配置
  • 用于证据收集和审计文档的合规管理系统
  • 熟悉NERC术语表(BES网络资产、BES网络系统、电子访问点)

工作流程

步骤 1:对BES网络系统进行分类(CIP-002-5.1a)

根据对大型电力系统可靠运行的影响,识别并分类所有BES网络系统。

#!/usr/bin/env python3
"""NERC CIP BES网络系统分类工具。

实施CIP-002-5.1a分类标准,将
BES网络系统分类为高、中或低影响。
"""

import json
import sys
from dataclasses import dataclass, field, asdict
from datetime import datetime


@dataclass
class BESCyberSystem:
    """表示用于CIP-002分类的BES网络系统。"""
    system_id: str
    name: str
    description: str
    location: str
    asset_type: str  # control_center(控制中心), generation(发电), transmission(输电), distribution(配电)
    connected_mw: float = 0
    transmission_kv: float = 0
    is_control_center: bool = False
    is_backup_control_center: bool = False
    has_cranking_path: bool = False
    has_blackstart: bool = False
    is_sps_ras: bool = False  # 特殊保护系统/补救行动方案
    impact_rating: str = ""  # high, medium, low
    categorization_basis: str = ""
    cyber_assets: list = field(default_factory=list)


class CIP002Categorizer:
    """NERC CIP-002-5.1a BES网络系统分类引擎。"""

    def __init__(self):
        self.systems = []
        self.categorization_date = datetime.now().isoformat()

    def add_system(self, system: BESCyberSystem):
        self.systems.append(system)

    def categorize_all(self):
        """对所有系统应用CIP-002附件1标准。"""
        for system in self.systems:
            self._categorize_system(system)

    def _categorize_system(self, sys):
        """按照CIP-002附件1应用高、中、低影响标准。"""

        # 高影响标准(CIP-002附件1,标准1)
        if sys.is_control_center and sys.asset_type == "control_center":
            # 执行可靠性协调员、平衡机构或输电运营商职能的控制中心
            sys.impact_rating = "high"
            sys.categorization_basis = (
                "CIP-002 附件1 标准1.1: 执行RC/BA/TOP职能的控制中心"
            )
            return

        if sys.is_backup_control_center and sys.asset_type == "control_center":
            sys.impact_rating = "high"
            sys.categorization_basis = (
                "CIP-002 附件1 标准1.2: 执行RC/BA/TOP职能的备用控制中心"
            )
            return

        if sys.connected_mw >= 3000:
            sys.impact_rating = "high"
            sys.categorization_basis = (
                f"CIP-002 附件1 标准1.3: 发电量 >= 3000 MW "
                f"(实际: {sys.connected_mw} MW)"
            )
            return

        # 中影响标准(CIP-002附件1,标准2)
        if sys.connected_mw >= 1500 and sys.asset_type == "generation":
            sys.impact_rating = "medium"
            sys.categorization_basis = (
                f"CIP-002 附件1 标准2.1: 发电量 >= 1500 MW "
                f"(实际: {sys.connected_mw} MW)"
            )
            return

        if sys.transmission_kv >= 500:
            sys.impact_rating = "medium"
            sys.categorization_basis = (
                f"CIP-002 附件1 标准2.5: 输电 >= 500 kV "
                f"(实际: {sys.transmission_kv} kV)"
            )
            return

        if sys.has_cranking_path:
            sys.impact_rating = "medium"
            sys.categorization_basis = (
                "CIP-002 附件1 标准2.6: 启动路径元素"
            )
            return

        if sys.has_blackstart:
            sys.impact_rating = "medium"
            sys.categorization_basis = (
                "CIP-002 附件1 标准2.7: 黑启动资源"
            )
            return

        if sys.is_sps_ras:
            sys.impact_rating = "medium"
            sys.categorization_basis = (
                "CIP-002 附件1 标准2.9: SPS/RAS组件"
            )
            return

        if sys.is_control_center and sys.asset_type == "generation":
            sys.impact_rating = "medium"
            sys.categorization_basis = (
                "CIP-002 附件1 标准2.11: 中影响发电的发电控制中心"
            )
            return

        # 低影响 - 所有其他BES网络系统
        sys.impact_rating = "low"
        sys.categorization_basis = (
            "CIP-002 附件1 标准3: 不满足高或中影响标准的BES网络系统"
        )

    def generate_report(self):
        """生成CIP-002分类报告。"""
        high = [s for s in self.systems if s.impact_rating == "high"]
        medium = [s for s in self.systems if s.impact_rating == "medium"]
        low = [s for s in self.systems if s.impact_rating == "low"]

        report = []
        report.append("=" * 70)
        report.append("NERC CIP-002-5.1a BES网络系统分类")
        report.append(f"日期: {self.categorization_date}")
        report.append("=" * 70)
        report.append(f"\nBES网络系统总数: {len(self.systems)}")
        report.append(f"  高影响: {len(high)}")
        report.append(f"  中影响: {len(medium)}")
        report.append(f"  低影响: {len(low)}")

        for category, systems in [("高", high), ("中", medium), ("低", low)]:
            if systems:
                report.append(f"\n--- {category}影响系统 ---")
                for s in systems:
                    report.append(f"  [{s.system_id}] {s.name}")
                    report.append(f"    位置: {s.location}")
                    report.append(f"    类型: {s.asset_type}")
                    report.append(f"    分类依据: {s.categorization_basis}")
                    report.append(f"    网络资产: {len(s.cyber_assets)}")

        return "\n".join(report)

    def export_json(self, output_file):
        """将分类结果导出为JSON作为合规证据。"""
        data = {
            "categorization_date": self.categorization_date,
            "standard": "CIP-002-5.1a",
            "systems": [asdict(s) for s in self.systems],
        }
        with open(output_file, "w") as f:
            json.dump(data, f, indent=2)


if __name__ == "__main__":
    categorizer = CIP002Categorizer()

    # BES网络系统示例
    categorizer.add_system(BESCyberSystem(
        system_id="BCS-001", name="主能量控制中心EMS",
        description="用于BA运营的能量管理系统",
        location="Alpha控制中心", asset_type="control_center",
        is_control_center=True))

    categorizer.add_system(BESCyberSystem(
        system_id="BCS-002", name="风电场SCADA",
        description="500MW风力发电设施的SCADA",
        location="Delta风电场", asset_type="generation",
        connected_mw=500))

    categorizer.add_system(BESCyberSystem(
        system_id="BCS-003", name="Alpha变电站RTU",
        description="345kV输电变电站",
        location="Alpha变电站", asset_type="transmission",
        transmission_kv=345))

    categorizer.categorize_all()
    print(categorizer.generate_report())

步骤 2:实施电子安全边界(CIP-005-7)

在高影响和中影响BES网络系统周围定义并强制执行电子安全边界(ESP),在所有边界穿越点设置电子访问点(EAP)。

# 电子安全边界 - 防火墙配置
# CIP-005-7 R1: 电子安全边界

# 为控制中心EMS(高影响)定义ESP边界
# ESP边界内的所有BES网络资产

# Palo Alto PA-3260 - ESP边界防火墙

# 入站规则 - 严格限制进入ESP的内容
# CIP-005-7 R1.3: 所有入站/出站访问权限均已记录

# 允许来自邻近BA的ICCP(控制中心间通信协议)
set rulebase security rules ICCP-Inbound from Corporate-Zone to ESP-Zone
set rulebase security rules ICCP-Inbound source 192.168.100.10
set rulebase security rules ICCP-Inbound destination 10.20.1.50
set rulebase security rules ICCP-Inbound application iccp
set rulebase security rules ICCP-Inbound service application-default
set rulebase security rules ICCP-Inbound action allow
set rulebase security rules ICCP-Inbound log-setting CIP-Audit-Log

# 允许NTP进行时间同步(CIP-007 R5.7)
set rulebase security rules NTP-Inbound from Corporate-Zone to ESP-Zone
set rulebase security rules NTP-Inbound source 192.168.100.1
set rulebase security rules NTP-Inbound destination 10.20.1.1
set rulebase security rules NTP-Inbound application ntp
set rulebase security rules NTP-Inbound action allow

# CIP-005-7 R2: 远程访问管理
# 所有远程访问会话需要中间系统
# CIP-005-7 R2.4: 需要多因素认证(2025年更新)

set rulebase security rules RemoteAccess from External to DMZ-Zone
set rulebase security rules RemoteAccess destination 172.16.1.10
set rulebase security rules RemoteAccess application ssl-vpn
set rulebase security rules RemoteAccess action allow
# MFA在中间系统(跳板服务器)上强制执行

# 默认拒绝所有其他流量
set rulebase security rules ESP-Default-Deny from any to ESP-Zone
set rulebase security rules ESP-Default-Deny action deny
set rulebase security rules ESP-Default-Deny log-setting CIP-Audit-Log

步骤 3:实施系统安全管理(CIP-007-6)

为BES网络资产配置安全控制,包括端口管理、安全补丁、恶意代码预防和安全事件监控。

# CIP-007-6实施检查清单

cip_007_controls:
  R1_ports_services:
    description: "端口和服务管理"
    requirements:
      - "禁用或限制所有不必要的物理端口(USB、串口)"
      - "禁用所有不必要的逻辑端口和服务"
      - "记录所有启用的端口/服务及业务理由"
    implementation:
      windows_servers: |
        # 禁用Windows BES网络资产上的不必要服务
        Set-Service -Name "RemoteRegistry" -StartupType Disabled
        Set-Service -Name "WinRM" -StartupType Disabled
        Set-Service -Name "Spooler" -StartupType Disabled
        # 通过组策略禁用USB存储
        # 计算机配置 > 管理模板 > 系统 > 可移动存储访问
      linux_servers: |
        # 禁用不必要的服务
        systemctl disable cups bluetooth avahi-daemon
        systemctl mask cups bluetooth avahi-daemon
        # 禁用USB存储
        echo "blacklist usb-storage" > /etc/modprobe.d/disable-usb.conf

  R2_security_patches:
    description: "安全补丁管理"
    requirements:
      - "跟踪所有BES网络系统的安全补丁"
      - "在可用后35天内评估补丁"
      - "应用补丁或记录缓解计划"
      - "在生产前于非生产环境测试补丁"
    implementation:
      tracking: "Windows使用WSUS/SCCM;Linux使用yum/dnf"
      testing: "维护镜像生产环境的预演环境"
      evidence: "在合规追踪系统中记录补丁评估"

  R3_malicious_code:
    description: "恶意代码预防"
    requirements:
      - "在所有适用的BES网络资产上部署反恶意软件"
      - "更新签名或使用应用程序白名单"
      - "缓解来自临时网络资产的威胁"
    implementation:
      servers: "CrowdFalcon或Carbon Black,使用OT优化策略"
      hmi_stations: "应用程序白名单(Carbon Black App Control)"
      transient_devices: "连接到BCA之前扫描所有可移动介质"

  R4_security_event_monitoring:
    description: "安全事件监控"
    requirements:
      - "记录所有高/中影响BCS上的安全事件"
      - "对检测到的安全事件生成告警"
      - "日志至少保留90天(CIP-007-6 R4.3)"
      - "至少每15天审查一次日志"
    implementation:
      siem: "Splunk Enterprise Security配合CIP内容包"
      log_sources:
        - "ESP边界防火墙日志"
        - "EAP认证日志"
        - "BES网络资产认证成功/失败"
        - "远程访问会话日志"
        - "恶意代码检测事件"
      retention: "在线保存90天,归档3年"

  R5_system_access:
    description: "系统访问控制"
    requirements:
      - "对所有交互访问强制执行认证"
      - "实施最小权限访问控制"
      - "更改默认密码"
      - "强制执行密码复杂度(CIP-007-6 R5.5)"
      - "限制登录失败尝试次数"
    implementation:
      password_policy:
        min_length: 8
        complexity: "大小写混合 + 数字 + 特殊字符"
        max_age_days: 365
        lockout_threshold: 5
        lockout_duration_minutes: 30
      shared_accounts: "记录所有共享/服务账户及授权"

核心概念

术语定义
BES网络系统(BES Cyber System)为大型电力系统执行可靠性功能的一个或多个BES网络资产的集合
电子安全边界(ESP)包含BES网络系统的网络逻辑边界,所有流量通过电子访问点流入流出
电子访问点(EAP)ESP边界上控制进出ESP流量的接口
中间系统(Intermediate System)用于远程访问的系统,防止直接连接到BES网络资产(跳板服务器)
临时网络资产(Transient Cyber Asset)连续日历天数少于30天直接连接到BES网络系统的设备(笔记本电脑、USB驱动器)
NERC术语表CIP标准中使用的官方定义;合规需要精确术语

工具和系统

  • Tripwire Enterprise:CIP-010基线管理的配置合规监控和文件完整性监控
  • Splunk配合CIP内容包:SIEM,具有预建的CIP-007安全事件监控仪表板和告警
  • Carbon Black App Control:HMI工作站和BES网络资产的应用程序白名单(CIP-007 R3)
  • Trellix/McAfee ePO:端点保护,为BES网络资产提供OT优化扫描策略

输出格式

NERC CIP合规评估报告
=======================================
实体: [注册实体名称]
日期: YYYY-MM-DD
标准: CIP-002至CIP-014

BES网络系统分类:
  高影响: [N] 个系统
  中影响: [N] 个系统
  低影响: [N] 个系统

各标准合规状态:
  CIP-002: [合规/部分合规/不合规]
  CIP-005: [状态] - 已识别 [N] 个差距
  CIP-007: [状态] - 已识别 [N] 个差距
  CIP-010: [状态] - 已识别 [N] 个差距
  CIP-013: [状态] - 已识别 [N] 个差距
Skills enregistrées