使用 Kubescape 扫描 Kubernetes 上的 ICS/OT 工作负载:从 Modbus/OPC-UA 到例外与补偿控制

发布时间:2026/9/15 13:27:35

使用 Kubescape 扫描 Kubernetes 上的 ICS/OT 工作负载:从 Modbus/OPC-UA 到例外与补偿控制 使用 Kubescape 扫描 Kubernetes 上的 ICS/OT 工作负载从 Modbus/OPC-UA 到例外与补偿控制【免费下载链接】kubescapeKubescape is an open-source Kubernetes security platform for your IDE, CI/CD pipelines, and clusters. It includes risk analysis, security, compliance, and misconfiguration scanning, saving Kubernetes users and administrators precious time, effort, and resources.项目地址: https://gitcode.com/GitHub_Trending/ku/kubescape本篇指南面向运行在 Kubernetes 之上的工业控制系统ICS与运营技术OT安全工程师系统讲解如何用 Kubescape 扫描容器化的 SCADA 组件、PLC 协议桥接器与 OPC-UA 服务器。在这些场景中标准的 Kubernetes 加固控制常常与 Layer-1 协议要求相冲突本指南将带你走通扫描 → 提取失败项 → 为已记录偏差配置精准例外 → 用 NetworkPolicy 落地补偿控制的完整闭环并给出可直接复制运行的清单与配置。前置条件在开始之前请确认以下环境要素就绪已安装kubescapeCLI本仓库examples/ics-ot/目录下的示例清单modbus-deployment.yaml与opcua-deployment.yaml可选指向目标集群的 kubeconfig。本演练不要求真实集群因为扫描目标是清单文件--keep-local还会阻止结果上报到已配置的后端可选用于切片 JSON 输出的jq。从源码看--keep-local的定义位于 cmd/scan/scan.go其说明为If you do not want your Kubescape results reported to configured backend.它不能与--submit同时使用cmd/scan/scan_test.go 中的测试断言了这一约束错误信息为you can use keep-local or submit, but not both。工作原理Kubescape 会依据 NSA、MITRE 与 CIS 框架中的控制项来评估 Kubernetes 清单。在 OT 命名空间中同一套控制项既会标记云原生工作负载的配置错误也会标记 OT 的合法偏差——例如 Modbus 桥接器必需的hostNetwork: true或厂商 SCADA 容器必需的privileged: true。本指南将带你依次扫描两个示例 OT 工作负载然后演示如何为已记录的偏差划定例外范围exception而不会静默掉其他发现项。常见 ICS/OT 协议与端口协议默认端口传输层典型用途Modbus TCP502TCPPLC 读写、HMI 轮询DNP320000TCPSCADA 到 RTU 通信OPC-UA4840TCP厂商中立的 SCADA 数据交换S7Comm102TCP西门子 S7 PLC 编程与数据EtherNet/IP44818TCP/UDPRockwell/Allen-Bradley PLCBACnet47808UDP楼宇自动化IEC 60870-5-1042404TCP电力系统远动其中多个协议Modbus、S7Comm、BACnet在协议层缺乏认证只能依靠网络分段实现隔离——这正是 Kubescape 对hostNetwork、hostPort与NET_ADMIN能力增强的发现项在 OT 命名空间中格外重要的原因。与 ICS/OT 相关的 Kubescape 控制项下表列出最常被合法 OT 工作负载触发的控制项。控制项名称取自仓库内 vendored 的 ValidatingAdmissionPolicy 包 core/pkg/opaprocessor/cel/vapdata/kubescape-validating-admission-policies.yaml该 bundle 的加载逻辑可见 core/pkg/opaprocessor/cel/loader.go。控制 ID控制项名称OT 相关性C-0016Allow privilege escalation厂商容器使用 setuid 辅助程序绑定特权端口C-0038Deny resources with host IPC or PID privileges镜像主机进程状态的 COM/DCOM 桥接器C-0041Deny resources with host network access需要直接触达现场总线网段的 Modbus/DNP3 桥接器C-0044Deny resources with host port连接知名 TCP/502 端口的遗留 HMIC-0046Deny resources with insecure capabilities组播发现、原始套接字协议桥接器C-0048Deny workloads with hostpath mountsUSB 转 RS-485 适配器、PLC 标签数据库C-0057Privileged container denied需要访问/dev/mem的厂商 SCADA 容器C-0074Resources mounting docker socket denied引导启动同级 OT 容器的边缘节点扫描一个 ICS/OT 工作负载示例清单 examples/ics-ot/modbus-deployment.yaml 定义了一个位于ot-modbus命名空间的 Modbus TCP 控制器。它刻意违反了多个控制项C-0041hostNetwork: true注释声明bridge needs direct PLC subnet reachability without NATC-0044hostPort: 502供遗留 HMI 客户端连接知名 TCP/502C-0048hostPath挂载/dev/ttyUSB0USB 转 RS-485 串行桥接器type: CharDeviceC-0057privileged: true厂商 libmodbus 需要/dev/mem进行时序敏感轮询。直接对清单文件发起扫描配合--keep-local无需集群连接kubescape scan --keep-local examples/ics-ot/modbus-deployment.yaml --format json --output /tmp/modbus-scan.jsonpretty-printer 输出会按资源对失败控制项分组。以 Modbus 示例为例表格中包含HostNetwork accessC-0041、HostPath mountC-0048、Privileged containerC-0057等行以及同一清单上触发的若干附加控制项非 root 用户、默认 service account、host port 等。具体集合取决于当前使用的框架 bundle如需权威列表请传入--format json。同时扫描两个示例清单kubescape scan --keep-local examples/ics-ot/ --format json --output /tmp/ot-scan.json其中 examples/ics-ot/opcua-deployment.yaml 中的 OPC-UA 服务器会触发 C-0057privileged: true、C-0016allowPrivilegeEscalation: true、C-0038hostPID: true与 C-0046追加CAP_NET_ADMIN外加同一组次要发现项。该清单还额外定义了一个ClusterIP类型的 Service将 4840 端口暴露给集群内消费方——这是 OPC-UA 发现/数据交换的典型拓扑。过滤 JSON 输出JSON 输出将控制结果嵌套在results[].controls[]下每个控制项的状态位于status.status。提取扁平的失败控制项列表jq -r .results[].controls[] | select(.status.statusfailed) | \(.controlID) \(.name) \ /tmp/ot-scan.json | sort -uCI 中的严重级别阈值对 OT 流水线而言常见模式是仅在critical或high级别的发现项上让构建失败把更低级别的发现项作为信息提示。使用--severity-threshold实现kubescape scan --keep-local examples/ics-ot/ \ --severity-threshold high --format junit --output /tmp/ot-scan-junit.xml该标志在 cmd/scan/scan.go 中定义它是失败控制项的严重级别达到该值时命令失败并返回退出码 1的阈值且严重级别未知缺少 base score的失败控制项被视为超过任何阈值——在 CI 门禁设计中需要留意这一保守行为。为合法的 OT 用例应用例外当一个发现项代表已记录且已接受风险的 OT 偏差时应使用限定范围的例外scoped exception而不是全局禁用。异常文件 examples/exceptions/ics-ot-exceptions.json 针对带有sector: ics-ot标签的资源仅抑制 C-0041hostNetwork[ { name: exclude-ot-sector-host-network, policyType: postureExceptionPolicy, actions: [disable], resources: [ { designatorType: Attributes, attributes: { sector: ics-ot } } ], posturePolicies: [ { controlID: C-0041 } ] } ]应用例外后重新扫描kubescape scan --keep-local examples/ics-ot/ \ --exceptions examples/exceptions/ics-ot-exceptions.json \ --format json --output /tmp/ot-scan-exc.json此时针对modbus-controller的 C-0041 发现项会移出失败集合在 JSON 中以passed状态配合subStatus: w/exceptions呈现。其余发现项Modbus 控制器上的 C-0044、C-0048、C-0057OPC-UA 服务器上的 C-0016、C-0038、C-0046、C-0057仍保持failed状态因为它们不在例外覆盖范围内。例外应尽量窄化范围让真正的新配置错误仍然浮出水面。例外结构的匹配逻辑关于例外文件的字段与匹配语义examples/exceptions/README.md 给出了完整参考每个例外对象必须同时包含resources与posturePolicies条目actions支持两种disable让已接受风险以带例外通过呈现并停止影响合规评分alertOnly将其标注为已确认但保持 failed、继续计入评分资源属性支持name、kind、namespace、cluster均支持正则以及任意资源标签键不支持正则策略属性支持frameworkName、controlName、controlID均支持正则列表内是 OR 逻辑resources数组中的多个匹配项取并集对象内是 AND 逻辑单个对象中的多个属性须同时满足例如{namespace: production, kind: Deployment}只匹配 production 命名空间中的 Deployment。正因如此sector: ics-ot这种标签型选择器会命中所有携带该标签的资源——包括误贴标签的非 OT 工作负载这一点在下面的故障排查中还会展开。OT 命名空间的网络策略抑制一个 Kubescape 发现项并不会消除底层风险它只是记录该风险已被接受。因此每个 OT 例外都应配套一个补偿控制。OT 命名空间中最常见的补偿控制是 NetworkPolicy用于限制哪些 Pod 可以与本协议端口建立会话。以下模式适用于 Modbus 控制器先对ot-modbus命名空间默认拒绝所有入站流量再只允许来自 HMI 命名空间的 TCP/502 访问。apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: default-deny-ingress namespace: ot-modbus spec: podSelector: {} policyTypes: [Ingress] --- apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-modbus-from-hmi namespace: ot-modbus spec: podSelector: matchLabels: app: modbus-controller policyTypes: [Ingress] ingress: - from: - namespaceSelector: matchLabels: sector: ics-ot-hmi ports: - protocol: TCP port: 502注意Kubescape 并不强制实施 NetworkPolicy它只做检查。维护一个例外对应一条策略的映射可以让你在回答审计人员的问题如何阻止 HMI 命名空间中的攻击者触达 SIS时直接指向一个具名的单一资源。第二个常被忽视的模式是同时默认拒绝 OT 命名空间的出站流量。厂商容器常常向厂商更新端点回拨phone home显式的出站白名单可以把这类流量约束在已知路径上并防止被攻陷的 OT 容器沦为信标主机beacon hostapiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: default-deny-egress namespace: ot-modbus spec: podSelector: {} policyTypes: [Egress]在工厂网络部署中请与 OT/IT 边界的上游防火墙规则配合使用让出站白名单同时在 Kubernetes 层与 L3 边界层得到强制。框架映射NIST SP 800-82 Rev. 3 与 IEC 62443-4-2 均承认只要这些偏差被记录、被限定范围并通过网络分段得到补偿OT 系统就可以在 IT 加固基线上存在合法偏差。上文列出的 Kubescape 控制项最自然地映射到这两个框架的网络完整性与最小功能家族——800-82 r3 中的 PR.AC-5 与 PR.PT-362443-4-2 中的 SR 5.1、SR 5.2 与 SR 7.6。请将这些映射视为映射到关系而非一一对应。在合规报告中引用标识符之前务必对照当前版本的公开原始资料进行确认Kubescape 的发现项是保护性需求分析的输入而不是它的替代品。故障排查扫描某个 OT Pod 返回零发现项确认 Pod 的命名空间与标签与 Kubescape 的评估对象一致。如果该命名空间出现在通过--exceptions传入的kube-system风格例外文件中则该命名空间的所有发现项都会被抑制。先在不带--exceptions的情况下运行扫描确认原始输出中确实存在发现项再逐步把例外文件叠加回来。C-0041 在 OT 命名空间之外的工作负载上被抑制例外文件使用基于属性的选择器。如果sector: ics-ot标签被误贴到非 OT 工作负载上这些负载同样会被命中。用kubectl get pods -A -l sectorics-ot -o wide审计标签在重新扫描前移除误贴的标签。例外文件被静默忽略Kubescape 要求每个例外对象同时包含resources与posturePolicies条目。只含posturePolicies的文件不会匹配任何资源也不会产生任何excluded行。用python3 -m json.tool examples/exceptions/ics-ot-exceptions.json校验 JSON 语法并确认designatorType为Attributes、属性键要么是 Kubernetes 资源标签、要么是内置字段name、kind、namespace、cluster。kubescape scan报 failed to download policies环境中的首次扫描需要出站 HTTPS 来下载 regolibrary 框架。气隙air-gapped环境必须预先填充本地缓存或使用--use-from标志指向预先下载的 bundle该标志定义于 cmd/scan/scan.go语义为从指定路径加载本地策略对象否则下载最新版。离线工作流详见 docs/getting-started.md 中的 Offline/Air-gapped Support 章节下载单个 artifact 后可用kubescape scan framework nsa --use-from /path/nsa.json方式扫描。JSON 输出对明显违反的控制项显示status: passed部分控制项需要集群侧的 admission webhook 才能完整评估。--keep-local扫描仅针对静态规则集评估清单可能无法捕获所有条件。如需权威结果请使用对目标命名空间有读权限的 kubeconfig 扫描真实集群。进一步阅读例外机制完整参考字段、匹配逻辑与更多示例其中包含按标签、按命名空间、按集群、多例外合并等场景的 JSON 模板Azure Pipelines 集成指南用于把 OT 扫描接入 CI 流水线Kubescape 入门指南覆盖安装与离线air-gapped工作流CLI 参考涵盖scan子命令的全部标志ICS/OT 例外示例 与两个可直接运行的 OT 示例清单 modbus-deployment.yaml、opcua-deployment.yaml框架与控制项的权威标识符请以 NIST SP 800-82 Rev. 3、IEC 62443-4-2 与 MITRE ATTCK for ICS 的当前公开版本为准。【免费下载链接】kubescapeKubescape is an open-source Kubernetes security platform for your IDE, CI/CD pipelines, and clusters. It includes risk analysis, security, compliance, and misconfiguration scanning, saving Kubernetes users and administrators precious time, effort, and resources.项目地址: https://gitcode.com/GitHub_Trending/ku/kubescape创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/15 13:22:35

HTML表格打造发票收据凭证:动态行与中文大写金额

简介:面向网页前端初学者的HTML发票收据凭证界面实践项目,基于原生HTML表格构建可录入项目、数量、单价的电子凭证,支持填写中文数字与阿拉伯数字,并通过JavaScript实时监听输入变化自动计算合计金额,适合用于快速生成…

2026/9/15 13:42:37

大数据实践全记录:集群部署、性能调优、可视化大屏与遥感数据

和“大数据实践”死磕的路上,这些坑我必须记下来熟悉我的朋友都知道,我一直在以“实践笔记”的方式记录自己做大数据项目的全过程。这篇“大数据实践笔记2”,是我最近从重新规划集群、到动手跑数据任务、再到做大屏可视化、甚至去啃遥感卫星轨…

2026/9/15 13:37:36

ENVI 5.3.1实战:Landsat 8辐射定标与FLAASH大气校正全流程

用ENVI 5.3.1做Landsat 8影像的辐射定标和大气校正,是每个搞遥感的人最早接触的一整套预处理流水线。不管你后面是要算植被指数、反演地表温度,还是做土地利用分类,这一步绕不过去。今天我把完整的实例操作、参数设置、容易踩的坑从头到尾捋一…

2026/9/15 4:54:30

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/15 0:01:16

AI英语单词APP开发:自适应学习算法与移动端优化实践

1. 项目概述 作为一名在移动应用开发领域摸爬滚打多年的老手,我最近完成了一个AI英语单词APP的开发项目。这个项目将传统单词记忆方法与现代AI技术相结合,打造了一款能够智能适应不同用户学习习惯的英语学习工具。 市面上大多数单词APP都存在一个通病&a…

2026/9/15 0:01:16

Flutter与OpenHarmony结合开发手语学习APP实战

1. 项目背景与核心价值作为一名同时接触过Flutter和OpenHarmony的开发者,最近我完成了一个基于Flutter for OpenHarmony的手语学习APP实战项目。这个项目最大的特点在于实现了跨平台框架与国产操作系统深度结合的创新实践——用Flutter开发的应用能完美运行在OpenHa…

2026/9/15 0:01:16

六个月成为机器人工程师:从ROS2到SLAM的实战路径

1. 六个月的紧迫感从哪来:先搞清楚你要成为哪种机器人工程师说实话,六个月的期限并不是一个宽松的时间线。市面上任何一本正经的机器人学教材都超过五百页,ROS2的官方文档可以翻到你怀疑人生,再加上ABB、KUKA这些工业机器人厂家动…

2026/9/14 11:59:31

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/14 13:53:59

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/15 11:42:23

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码