performing-power-grid-cybersecurity-assessment について
変電所、EMS/SCADA、シンクロフェーザー網など、電力網環境を評価するセキュリティスキルです。アーキテクチャの整理とプロトコルの確認を導き、NERC CIP 対応や内部評価に使えます。
主な機能
- 01電力網サイバー構成のマッピング
- 02IEC 61850 変電所セキュリティ評価
- 03EMS/SCADA セキュリティ評価
- 04シンクロフェーザー網の評価
- 05NERC CIP 監査の準備
活用シーン
- 01定期的な電力網セキュリティ評価
- 02変電所の GOOSE・MMS 通信の確認
- 03EMS または SCADA 制御センターの評価
- 04コンプライアンス監査の準備
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ mukul975/ anthropic-cybersecurity-skills --skill performing-power-grid-cybersecurity-assessmentインストール後、Claude Code で/performing-power-grid-cybersecurity-assessmentを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
LICENSEreferences/api-reference.mdscripts/agent.py詳細
電力網のサイバーセキュリティ評価の実施
使用するタイミング
- NERC CIP 要件に従って、電力網施設の定期的なサイバーセキュリティ評価を実施する場合
- IEC 61850 GOOSE および MMS プロトコルを使用する変電所自動化システムを評価する場合
- エネルギー管理システム(EMS)または SCADA 制御センターのセキュリティを評価する場合
- シンクロフェーザー(PMU)ネットワークおよび広域監視システムを評価する場合
- 地域エンティティによるコンプライアンス監査または社内セキュリティレビューに備える場合
使用しないでください:NERC 登録基準を下回る BES 以外のシステム、電力網に特化しない一般的な OT 評価(performing-ot-network-security-assessment を参照)、またはサイバーセキュリティの範囲外となる発電施設の物理セキュリティ評価には使用しないでください。
前提条件
- 電力網のアーキテクチャ(発電、送電、配電)を理解していること
- NERC CIP 規格および BES サイバーシステムのカテゴリ分類に精通していること
- 電力網プロトコル(IEC 61850、IEC 60870-5-104、DNP3、ICCP/TASE.2)の知識があること
- 変電所ネットワークトラフィック分析用の受動監視ツールがあること
- EMS/SCADA アーキテクチャのドキュメントおよびネットワーク図にアクセスできること
ワークフロー
ステップ 1:電力網のサイバーアーキテクチャをマッピングする
EMS、SCADA、変電所自動化、通信インフラなど、電力網の運用を支えるすべてのサイバーシステムを特定し、記録します。
# Power Grid Cyber Architecture Assessment
facility_type: "Regional Transmission Organization Control Center"
ems_systems:
primary_ems:
vendor: "GE Grid Solutions"
product: "EMS/SCADA (formerly XA/21)"
functions:
- "State estimation"
- "Automatic generation control (AGC)"
- "Security-constrained economic dispatch"
- "Contingency analysis"
protocols:
- "ICCP/TASE.2 (inter-control center)"
- "DNP3 (substation RTU polling)"
- "IEC 60870-5-104 (substation polling)"
backup_control_center:
location: "Geographically diverse backup site"
sync_method: "Real-time database mirroring"
switchover_time: "< 5 minutes"
substation_automation:
count: 145
system_types:
- vendor: "ABB"
product: "RTU560"
protocol: "DNP3 over TCP/IP"
count: 85
- vendor: "SEL"
product: "SEL-3530 RTAC"
protocol: "IEC 61850 MMS + GOOSE"
count: 40
- vendor: "Siemens"
product: "SICAM A8000"
protocol: "IEC 60870-5-104"
count: 20
communications:
primary: "MPLS WAN (carrier-provided)"
backup: "Licensed microwave radio"
last_mile: "Fiber optic to substation"
synchrophasor_network:
pmu_count: 75
pdc: "GE PDC (Phasor Data Concentrator)"
communication: "IEEE C37.118.2 over dedicated network"
data_rate: "30-60 samples per second"
ステップ 2:変電所自動化のセキュリティを評価する
IEC 61850 ベースの変電所自動化について、プロトコルのセキュリティ、アクセス制御、ネットワークのセグメンテーションを評価します。
#!/usr/bin/env python3
"""Power Grid Substation Security Assessor.
Evaluates security of IEC 61850-based substation automation
systems including GOOSE messaging, MMS client/server, and
network architecture.
"""
import json
import sys
from dataclasses import dataclass, field, asdict
from datetime import datetime
@dataclass
class SubstationFinding:
finding_id: str
severity: str
category: str
title: str
description: str
affected_systems: list
nerc_cip_ref: str
iec_62351_ref: str
remediation: str
class SubstationAssessment:
"""Assesses cybersecurity of substation automation systems."""
def __init__(self, substation_name):
self.name = substation_name
self.findings = []
self.counter = 1
def assess_iec61850_security(self, config):
"""Assess IEC 61850 protocol security."""
# GOOSE message authentication
if not config.get("goose_authentication"):
self.findings.append(SubstationFinding(
finding_id=f"SUB-{self.counter:03d}",
severity="critical",
category="Protocol Security",
title="IEC 61850 GOOSE Messages Lack Authentication",
description=(
"GOOSE messages used for protection signaling between IEDs "
"are not authenticated. An attacker on the station bus could "
"inject false trip/close commands to circuit breakers."
),
affected_systems=config.get("goose_publishers", []),
nerc_cip_ref="CIP-005-7 R1.5 - ESP internal communications",
iec_62351_ref="IEC 62351-6 - GOOSE/SV authentication",
remediation=(
"Implement IEC 62351-6 GOOSE authentication using digital "
"signatures. Deploy VLAN isolation for GOOSE traffic as interim."
),
))
self.counter += 1
# MMS service access control
if not config.get("mms_authentication"):
self.findings.append(SubstationFinding(
finding_id=f"SUB-{self.counter:03d}",
severity="high",
category="Protocol Security",
title="MMS Client Connections Lack Authentication",
description=(
"MMS (Manufacturing Message Specification) connections to IEDs "
"do not require client authentication. Any device on the station "
"bus can read/write IED configuration and operate breakers."
),
affected_systems=config.get("mms_servers", []),
nerc_cip_ref="CIP-007-6 R5 - System Access Controls",
iec_62351_ref="IEC 62351-4 - MMS security profiles",
remediation="Enable TLS for MMS connections per IEC 62351-4.",
))
self.counter += 1
# Station bus segmentation
if not config.get("station_bus_segmented"):
self.findings.append(SubstationFinding(
finding_id=f"SUB-{self.counter:03d}",
severity="high",
category="Network Architecture",
title="Flat Station Bus Network Without Segmentation",
description=(
"Station bus connects all IEDs, HMI, engineering access, "
"and WAN gateway on a single VLAN without segmentation."
),
affected_systems=["All station bus devices"],
nerc_cip_ref="CIP-005-7 R1 - ESP boundary",
iec_62351_ref="IEC 62351-10 - Security architecture",
remediation=(
"Segment station bus into VLANs: protection IEDs, "
"measurement IEDs, station HMI, and WAN gateway."
),
))
self.counter += 1
def assess_remote_access(self, config):
"""Assess remote access security for substations."""
if config.get("direct_vendor_access"):
self.findings.append(SubstationFinding(
finding_id=f"SUB-{self.counter:03d}",
severity="critical",
category="Remote Access",
title="Direct Vendor Remote Access to Substation Without MFA",
description=(
"Vendor support has direct VPN access to substation network "
"without traversing an intermediate system or requiring MFA."
),
affected_systems=["Substation WAN gateway"],
nerc_cip_ref="CIP-005-7 R2 - Remote Access Management",
iec_62351_ref="IEC 62351-8 - Role-based access control",
remediation=(
"Route vendor access through corporate jump server with MFA. "
"Implement session recording per CIP-005-7 R2.4."
),
))
self.counter += 1
def generate_report(self):
"""Generate substation assessment report."""
report = []
report.append("=" * 70)
report.append(f"SUBSTATION CYBERSECURITY ASSESSMENT: {self.name}")
report.append(f"Date: {datetime.now().isoformat()}")
report.append("=" * 70)
for sev in ["critical", "high", "medium", "low"]:
findings = [f for f in self.findings if f.severity == sev]
if findings:
report.append(f"\n--- {sev.upper()} ({len(findings)}) ---")
for f in findings:
report.append(f" [{f.finding_id}] {f.title}")
report.append(f" {f.description[:100]}...")
report.append(f" NERC CIP: {f.nerc_cip_ref}")
report.append(f" Remediation: {f.remediation[:80]}...")
return "\n".join(report)
if __name__ == "__main__":
assessment = SubstationAssessment("Substation Alpha - 345kV")
assessment.assess_iec61850_security({
"goose_authentication": False,
"mms_authentication": False,
"station_bus_segmented": False,
"goose_publishers": ["SEL-411L-01", "SEL-411L-02", "SEL-487E-01"],
"mms_servers": ["SEL-3530-RTAC", "ABB-REF615-01"],
})
assessment.assess_remote_access({
"direct_vendor_access": True,
})
print(assessment.generate_report())
主要な概念
| 用語 | 定義 |
|---|---|
| IEC 61850 | 変電所の通信ネットワークおよびシステムに関する国際規格です。保護信号には GOOSE を、SCADA データには MMS を使用します |
| GOOSE | Generic Object Oriented Substation Event。IED 間の高速なピアツーピア保護信号に使用するマルチキャストプロトコルです(遮断時間は 4ms 未満) |
| MMS | Manufacturing Message Specification。IED データの読み取り・書き込みや遮断器の操作に使用するクライアント/サーバープロトコルです |
| IEC 62351 | 電力システム通信プロトコル向けのセキュリティ規格群です。IEC 61850、DNP3、IEC 104 に認証と暗号化を提供します |
| ICCP/TASE.2 | 異なる電力事業者の制御センター間でデータを交換するための、制御センター間通信プロトコルです |
| シンクロフェーザー(PMU) | 広域監視用に、電圧と電流を毎秒 30~60 サンプルで時刻同期して測定するフェーザー測定装置です |
ツールとシステム
- Dragos Platform:電力網を標的とするグループ(ELECTRUM、KAMACITE)に関する特定の脅威インテリジェンスを備えた OT セキュリティプラットフォーム
- SEL-3620 Ethernet Security Gateway:暗号化、アクセス制御、侵入検知を提供する変電所セキュリティデバイス
- GRIDsure:Idaho National Laboratory による電力網サイバーセキュリティ評価フレームワーク
- Wireshark with IEC 61850 Dissector:変電所の GOOSE および MMS トラフィックを分析するプロトコル解析ツール
出力形式
Power Grid Cybersecurity Assessment Report
=============================================
Facility: [Name and Type]
NERC Registration: [Entity ID]
BES Impact Rating: [High/Medium/Low]
SUBSTATION FINDINGS: [N]
EMS/SCADA FINDINGS: [N]
COMMUNICATION FINDINGS: [N]
NERC CIP COMPLIANCE:
CIP-002: [Status]
CIP-005: [Status]
CIP-007: [Status]
コメント
Markdown 対応