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-dragos-platform-for-ot-monitoring

implementing-dragos-platform-for-ot-monitoring

为OT网络监控部署和配置Dragos平台,利用其600+工业协议解析器、情报驱动的威胁检测分析和资产可见性能力,保护ICS环境免受VOLTZITE、GRAPHITE和BAUXITE等威胁组织的攻击。

Independent GitHub snapshot · Automated classification · Original documentation governs

Documentation de la Skill

GitHub

name: implementing-dragos-platform-for-ot-monitoring description: > 为OT网络监控部署和配置Dragos平台,利用其600+工业协议解析器、情报驱动的威胁检测分析和资产可见性能力,保护ICS环境免受VOLTZITE、GRAPHITE和BAUXITE等威胁组织的攻击。 domain: cybersecurity subdomain: ot-ics-security tags: [ot-security, ics, dragos, threat-detection, ot-monitoring, scada, threat-intelligence, ndr] version: "1.0" author: mahipal license: Apache-2.0

为OT监控实现Dragos平台

适用场景

  • 为工业环境部署OT专用网络检测与响应(NDR)解决方案
  • 需要基于威胁情报检测已知ICS威胁组织(VOLTZITE、CHERNOVITE、KAMACITE)
  • 构建使用专用工业安全工具的OT SOC能力
  • 在单一平台上同时需要资产发现、漏洞管理和威胁检测
  • 将OT安全监控与企业SIEM(Splunk、Sentinel、QRadar)集成

不适用于无ICS组件的纯IT网络监控、OT工作站的端点检测与响应(EDR),或已标准化使用Claroty或Nozomi的环境(参见相应技能)。

前置条件

  • Dragos平台许可证和部署包
  • OT网络边界的网络TAP或SPAN端口(每个监控网段一个传感器)
  • Dragos传感器硬件(物理设备)或满足最低规格的虚拟设备
  • 允许传感器到Dragos SiteStore通信的防火墙规则(仅从OT出站的加密连接)
  • 用于威胁情报更新的Dragos知识包订阅

工作流程

步骤 1:部署Dragos传感器并配置监控

#!/usr/bin/env python3
"""Dragos平台部署验证和集成工具。

验证Dragos传感器部署、检查连通性,并
配置与企业SIEM的集成以进行OT告警转发。
"""

import json
import sys
import csv
from datetime import datetime
from typing import Optional, List, Dict

try:
    import requests
except ImportError:
    print("安装requests: pip install requests")
    sys.exit(1)


class DragosPlatformManager:
    """与Dragos平台API交互进行OT监控管理。"""

    def __init__(self, base_url: str, api_key: str, api_secret: str, verify_ssl: bool = True):
        self.base_url = base_url.rstrip("/")
        self.session = requests.Session()
        self.session.headers.update({
            "API-Key": api_key,
            "API-Secret": api_secret,
            "Content-Type": "application/json",
        })
        self.session.verify = verify_ssl

    def get_sensors(self) -> List[Dict]:
        """获取所有已部署的Dragos传感器及其状态。"""
        resp = self.session.get(f"{self.base_url}/api/v1/sensors")
        resp.raise_for_status()
        return resp.json().get("sensors", [])

    def get_assets(self, asset_type: Optional[str] = None) -> List[Dict]:
        """获取Dragos发现的OT资产。"""
        params = {}
        if asset_type:
            params["type"] = asset_type
        resp = self.session.get(f"{self.base_url}/api/v1/assets", params=params)
        resp.raise_for_status()
        return resp.json().get("assets", [])

    def get_notifications(self, severity: str = "high", limit: int = 50) -> List[Dict]:
        """获取威胁检测通知。"""
        params = {"min_severity": severity, "limit": limit}
        resp = self.session.get(f"{self.base_url}/api/v1/notifications", params=params)
        resp.raise_for_status()
        return resp.json().get("notifications", [])

    def get_vulnerabilities(self, severity: str = "critical") -> List[Dict]:
        """获取带有Dragos特定上下文的OT漏洞。"""
        params = {"min_severity": severity}
        resp = self.session.get(f"{self.base_url}/api/v1/vulnerabilities", params=params)
        resp.raise_for_status()
        return resp.json().get("vulnerabilities", [])

    def get_threat_groups(self) -> List[Dict]:
        """获取与当前环境相关的已追踪ICS威胁组织活动。"""
        resp = self.session.get(f"{self.base_url}/api/v1/threat-groups")
        resp.raise_for_status()
        return resp.json().get("threat_groups", [])

    def validate_deployment(self):
        """验证传感器部署健康状态和覆盖范围。"""
        sensors = self.get_sensors()
        assets = self.get_assets()

        print(f"\n{'='*65}")
        print("DRAGOS平台部署验证")
        print(f"{'='*65}")
        print(f"验证时间: {datetime.now().isoformat()}")

        print(f"\n--- 传感器状态 ---")
        healthy_sensors = 0
        for sensor in sensors:
            status = sensor.get("status", "unknown")
            icon = "[OK]" if status == "connected" else "[!!]"
            print(f"  {icon} {sensor.get('name', 'Unknown')} | 状态: {status}")
            print(f"      IP: {sensor.get('ip_address')} | 网段: {sensor.get('monitored_segment')}")
            print(f"      最后在线: {sensor.get('last_seen')} | 数据包/秒: {sensor.get('pps', 0)}")
            print(f"      知识包: {sensor.get('knowledge_pack_version', 'N/A')}")
            if status == "connected":
                healthy_sensors += 1

        print(f"\n  传感器健康: {healthy_sensors}/{len(sensors)} 正常运行")

        print(f"\n--- 资产可见性 ---")
        print(f"  发现的资产总数: {len(assets)}")
        asset_types = {}
        for asset in assets:
            atype = asset.get("type", "Unknown")
            asset_types[atype] = asset_types.get(atype, 0) + 1
        for atype, count in sorted(asset_types.items(), key=lambda x: -x[1]):
            print(f"    {atype}: {count}")

        protocols = set()
        for asset in assets:
            protocols.update(asset.get("protocols", []))
        print(f"  已观察到的协议: {', '.join(sorted(protocols))}")

        print(f"\n--- 威胁情报 ---")
        groups = self.get_threat_groups()
        print(f"  相关威胁组织: {len(groups)}")
        for group in groups:
            print(f"    - {group.get('name')}: {group.get('description', '')[:80]}")
            print(f"      目标行业: {', '.join(group.get('target_sectors', []))}")
            print(f"      活跃程度: {group.get('activity_level', 'Unknown')}")

    def generate_siem_integration_config(self, siem_type: str = "splunk"):
        """生成Dragos告警的SIEM集成配置。"""
        configs = {
            "splunk": {
                "syslog_format": "CEF",
                "syslog_port": 514,
                "severity_mapping": {
                    "critical": 10,
                    "high": 7,
                    "medium": 5,
                    "low": 3,
                    "info": 1,
                },
                "index": "ot_security",
                "sourcetype": "dragos:notification",
                "fields": [
                    "notification_id", "severity", "category", "source_ip",
                    "destination_ip", "asset_name", "protocol", "description",
                    "mitre_ics_technique", "threat_group",
                ],
            },
            "sentinel": {
                "connector_type": "Syslog-CEF",
                "workspace_id": "<workspace-id>",
                "log_analytics_table": "DragosOTAlerts_CL",
                "severity_mapping": {
                    "critical": "High",
                    "high": "High",
                    "medium": "Medium",
                    "low": "Low",
                    "info": "Informational",
                },
            },
        }

        config = configs.get(siem_type, configs["splunk"])
        print(f"\n--- {siem_type.upper()} 集成配置 ---")
        print(json.dumps(config, indent=2))
        return config


if __name__ == "__main__":
    manager = DragosPlatformManager(
        base_url="https://dragos-sitestore.plant.local",
        api_key="your-api-key",
        api_secret="your-api-secret",
        verify_ssl=True,
    )

    manager.validate_deployment()
    manager.generate_siem_integration_config("splunk")

    print(f"\n--- 近期高严重性通知 ---")
    notifications = manager.get_notifications(severity="high", limit=10)
    for n in notifications:
        print(f"  [{n.get('severity', '').upper()}] {n.get('title', '无标题')}")
        print(f"    类别: {n.get('category')} | 时间: {n.get('timestamp')}")
        print(f"    资产: {', '.join(n.get('affected_assets', []))}")
        print(f"    MITRE ICS: {n.get('mitre_technique', 'N/A')}")

步骤 2:配置检测分析和知识包

# Dragos平台检测配置
# 针对制造/能源环境调优

detection_configuration:
  knowledge_pack:
    auto_update: true
    update_schedule: "weekly"
    include_threat_groups:
      - "VOLTZITE"    # 针对能源行业,窃取OT图表
      - "GRAPHITE"    # 2025年新威胁组织,针对ICS
      - "BAUXITE"     # 2025年新威胁组织,针对ICS
      - "CHERNOVITE"  # 开发了PIPEDREAM/INCONTROLLER框架
      - "ELECTRUM"    # 与Industroyer/CrashOverride相关
      - "KAMACITE"    # 针对能源行业初始访问

  detection_categories:
    network_baseline:
      enabled: true
      learning_period_days: 30
      alert_on:
        - "new_communication_pair"
        - "new_protocol_detected"
        - "new_device_on_network"
        - "protocol_anomaly"

    threat_detection:
      enabled: true
      alert_on:
        - "known_malware_ioc"
        - "threat_group_ttp"
        - "lateral_movement"
        - "command_and_control"
        - "data_exfiltration"

    vulnerability_correlation:
      enabled: true
      alert_on:
        - "active_exploitation_attempt"
        - "vulnerability_with_public_exploit"

  protocol_monitoring:
    modbus:
      monitor_writes: true
      baseline_function_codes: true
      baseline_register_ranges: true
    dnp3:
      monitor_control_commands: true
      detect_firmware_updates: true
    s7comm:
      detect_cpu_stop: true
      detect_program_download: true
    opc_ua:
      monitor_method_calls: true
      detect_browsing: true
    ethernet_ip:
      monitor_cip_services: true
      detect_firmware_flash: true

  alert_routing:
    critical:
      notify: ["ot_soc_team", "plant_manager"]
      siem_forward: true
      auto_ticket: true
    high:
      notify: ["ot_soc_team"]
      siem_forward: true
      auto_ticket: true
    medium:
      siem_forward: true
    low:
      siem_forward: true

核心概念

术语定义
Dragos平台专为OT网络安全打造的平台,具备ICS环境的资产可见性、威胁检测和漏洞管理能力
知识包(Knowledge Pack)Dragos威胁情报更新包,包含针对ICS特有新威胁、恶意软件和漏洞利用的检测分析
SiteStoreDragos中央管理服务器,汇聚站点内所有已部署传感器的数据
VOLTZITEDragos追踪的威胁组织,针对能源行业OT环境,窃取GIS数据和ICS网络图
PIPEDREAM/INCONTROLLER由CHERNOVITE开发的模块化ICS攻击框架,针对Schneider/OMRON PLC和OPC UA服务器
邻域守护者(Neighborhood Keeper)Dragos社区防御计划,在参与的OT环境之间共享匿名化威胁数据

常见场景

场景:检测能源公用事业中的VOLTZITE侦察活动

背景:部署在电力公司的Dragos传感器检测到异常的OPC UA浏览活动以及从工程师工作站窃取设备配置数据。

处理方法:

  1. 查看Dragos通知中的MITRE ATT&CK ICS技术映射
  2. 识别执行OPC UA浏览的源主机(检查是否为授权的工程师工作站)
  3. 检查Dragos威胁情报中与VOLTZITE TTPs的关联
  4. 检查被访问数据的范围(GIS数据、网络图、ICS配置文件)
  5. 将被攻陷的工作站从OT网络隔离
  6. 检查其他OT系统的横向移动指标
  7. 如确认威胁组织归因,联系Dragos专业服务
  8. 作为关键基础设施网络事件向CISA报告

注意事项:不要将OPC UA浏览告警视为误报——VOLTZITE专门使用这一技术进行预置。确保Dragos知识包是最新的以检测最新的VOLTZITE指标。在收集取证证据之前不要重新镜像被攻陷的工作站。

输出格式

DRAGOS OT监控部署报告
==========================================
站点: [站点名称]
日期: YYYY-MM-DD

传感器部署:
  传感器总数: [数量]
  正常运行: [数量]
  覆盖率: [已监控OT网段的百分比]

资产可见性:
  OT资产总数: [数量]
  PLC: [数量] | HMI: [数量] | 网络设备: [数量]
  协议: [列表]

威胁检测:
  相关活跃威胁组织: [数量]
  已加载检测分析: [数量]
  告警(过去30天): [按严重程度分类的数量]

SIEM集成:
  状态: [已连接/未连接]
  已转发事件(过去24小时): [数量]
Skills enregistrées