In an industrial network the command channel an adversary uses often looks exactly like the plant's own traffic: Modbus on TCP 502, HTTPS to a vendor, a proxy that relays through a trusted host. ATT&CK for ICS describes the Command and Control tactic (TA0101) as the adversary "trying to communicate with and control compromised systems, controllers, and platforms with access to your ICS environment", and notes that adversaries mimic expected ports, protocols and IT resources to avoid suspicion. The defender's advantage is that OT traffic is far more predictable than enterprise traffic, so a well-maintained baseline turns blending in into an anomaly. This guide covers the three Command and Control techniques and two sub-techniques in ATT&CK v20, how malware and campaigns have used them, the mitigations MITRE maps, the v20 detection strategies and a rollout plan. It is written for OT network engineers, OT SOC analysts and threat hunters, and builds on the MITRE ATT&CK for ICS Guide without repeating the matrix overview.
Key takeaways
- The industrial protocol can be the command channel. FrostyGoop sends commands over Modbus on TCP 502 and Triton talks to its implant through the TriStation protocol on UDP 1502, so "C2" in OT does not always mean an internet beacon.
- Internal proxies hide the path. Industroyer reaches its external server through an internal proxy on TCP 3128, and INCONTROLLER's PLCProxy module routes traffic through a Schneider PLC's CODESYS gateway.
- Network Intrusion Prevention is mapped to every technique. In v20, M0931 covers all 5 Command and Control techniques and sub-techniques, and Filter Network Traffic (M0937) covers 3.
- Newer IoT and OT malware uses broker protocols. IOControl, the only recorded user of the two v20 sub-techniques, connects over MQTT on ports 1883 and 8883 and resolves its servers with DNS over HTTPS.
- Determinism is the defender's lever. Field devices and controllers should almost never start outbound connections, so a communication matrix with alerting on any new flow catches most of this tactic.
Where Command and Control sits in an ICS intrusion
Command and Control runs alongside the rest of the intrusion rather than at one point in it. It begins once a foothold exists (after Initial Access) and carries the operator's instructions for discovery, collection and finally the commands that impair a process. In OT there are two distinct layers of command and control, and defenders need to watch both.
- Outer channel: from the adversary's infrastructure to a compromised Windows or Linux host in the enterprise, DMZ or Level 3, typically over HTTP, HTTPS or DNS. BlackEnergy's HTTP POST requests and Stuxnet's contact attempts on port 80 are examples recorded in ATT&CK.
- Inner channel: from that host, or from malware placed on it, to controllers and field devices, using the industrial protocol itself. FrostyGoop (Modbus), Triton (TriStation) and INCONTROLLER (HTTP/HTTPS to a malicious agent on Omron PLCs) fall here.
To see how the tactic is used, we counted the "uses" relationships in the official ATT&CK v20 ICS dataset (ics-attack-20.0.json; groups, software and campaigns, excluding revoked and deprecated objects). 13 entities have a Command and Control procedure: 8 software families, 3 groups (CyberAv3ngers, OilRig and Sandworm Team) and 2 campaigns (the 2015 Ukraine Electric Power Attack and the 2025 Poland Wiper Attacks), with 19 procedure examples in total. All 8 software families with a Command and Control procedure also have procedures under other ICS tactics, most often Execution (7 of the 8), which confirms that the channel exists to deliver later actions.
| Pattern | Recorded example in ATT&CK v20 | Why it is hard to see |
|---|---|---|
| Commands over the plant's own protocol | FrostyGoop over Modbus TCP 502; Triton using the TriStation "get main processor diagnostic data" command to carry instructions to its implant | The traffic is valid protocol on its normal port; only source, function and timing differ |
| Internal proxy chain | Sandworm Team set up an internal proxy before installing backdoors in the 2015 Ukraine attack; Industroyer connects to a hardcoded internal proxy on TCP 3128 | Only one host talks to the internet, and that host may be one that normally does |
| Routing through a controller | INCONTROLLER's PLCProxy adds an IP route to the CODESYS gateway on Schneider PLCs to reach other devices | The PLC becomes a router between segments that firewalls treat as separate |
| Opening a port that looks like housekeeping | 2025 Poland Wiper Attacks: TCP 445 opened on Mikronika HMIs through a new firewall rule named "Microsoft Update" | The rule name is chosen to pass a quick review |
| Broker protocols and encrypted DNS | IOControl: MQTT on 1883 and 8883, with server names resolved through DNS over HTTPS | MQTT is normal in IIoT; DoH bypasses DNS logging |
The techniques in ATT&CK v20
ATT&CK v20 lists three Command and Control techniques for ICS, one of which has two sub-techniques. None of them sits under another ICS tactic.
| ID | Technique | Procedure examples | Recorded users | Defender focus |
|---|---|---|---|---|
| T0869 | T0869 Standard Application Layer Protocol | 7 | BlackEnergy, FrostyGoop, INCONTROLLER, OilRig, REvil, Stuxnet, Triton | Protocol use by role: which hosts may speak HTTP, Modbus, OPC or TriStation to which devices |
| T0869.001 | DNS | 1 | IOControl | ICS hosts must use designated resolvers; watch for tunnelling and DNS over HTTPS |
| T0869.002 | Publish/Subscribe Protocols | 1 | IOControl | MQTT, AMQP and DDS only to approved brokers, with client identities and topics known |
| T0884 | T0884 Connection Proxy | 4 | 2015 Ukraine Electric Power Attack, INCONTROLLER, Industroyer, Sandworm Team | Hosts holding an inbound ICS session and an outbound non-ICS session at the same time |
| T0885 | T0885 Commonly Used Port | 6 | 2015 Ukraine Electric Power Attack, 2025 Poland Wiper Attacks, CyberAv3ngers, FrostyGoop, Stuxnet, Triton | Expected ports from unexpected sources or processes; new firewall rules on OT hosts |
T0885 lists the ports adversaries rely on being open, including TCP 80 and 443, TCP/UDP 53, TCP 23, UDP 161, TCP 502 (Modbus), TCP 102 (S7comm/ISO-TSAP), TCP 20000 (DNP3), TCP 44818 (EtherNet/IP) and the dynamic ranges used by classic OPC. ATT&CK also records CyberAv3ngers using TCP 22 together with TCP 44818, TCP and UDP 2222, TCP 102 and TCP 502. The lesson is that a firewall rule permitting "port 502" says nothing about who should be sending Modbus to whom; the allowlist has to name source, destination and protocol.
Which techniques matter most for defenders
- T0869 Standard Application Layer Protocol: the most used technique in the tactic and the one that covers both layers. Inner channel use (Modbus, TriStation, CODESYS) goes straight to process impact.
- T0885 Commonly Used Port: nearly as common, and the reason port-based rules fail. Pair it with protocol-aware monitoring rather than port filtering alone.
- T0884 Connection Proxy: fewer examples, but used by the two best-known grid attacks (Sandworm Team in 2015 and Industroyer) and by INCONTROLLER. A proxy defeats segmentation that assumes traffic originates where it appears to.
- T0869.001 and T0869.002: currently one recorded user each, but they reflect the growth of IIoT gateways, cloud-connected devices and MQTT in OT, where many sites have no inspection at all.
Mitigations MITRE maps to the tactic
ATT&CK v20 maps 7 distinct ICS mitigations to the 5 Command and Control techniques and sub-techniques. All of them are network or boundary controls.
| Mitigation | Techniques mapped (v20) | What it means in an OT environment |
|---|---|---|
| M0931 Network Intrusion Prevention | T0869, T0869.001, T0869.002, T0884, T0885 | Protocol-aware IDS or IPS at zone boundaries; in Level 0 to 2 usually detect-only to avoid blocking control traffic. See the OT Network Security Monitoring Guide. |
| M0937 Filter Network Traffic | T0869.001, T0869.002, T0884 | Only designated DNS resolvers and approved MQTT brokers reachable; no direct outbound from OT hosts |
| M0930 Network Segmentation | T0869, T0885 | Zones and conduits with a DMZ between IT and OT, so the outer channel has to cross a monitored boundary. See the OT Network Segmentation, Purdue Model and IEC 62443 Zones and Conduits Guide. |
| M0807 Network Allowlists | T0869, T0884 | Host-based or switch-based allowlists of which peers each controller may talk to |
| M0804 Human User Authentication | T0885 | Authenticated access for services exposed on common ports, rather than open listeners |
| M0920 SSL/TLS Inspection | T0884 | Inspection of encrypted traffic at the IT/OT boundary, where the operational and legal context allows it |
| M0942 Disable or Remove Feature or Program | T0885 | Remove unused services and listeners on OT hosts so that a commonly used port is not already open |
For the highest-risk flows, a one-way path removes the inner and outer channel altogether: historian replication and monitoring data can leave the control network through a unidirectional gateway with no return route. See the Data Diodes and Unidirectional Gateways Guide. For the cross-tactic list of mitigations, see ATT&CK Mitigations.
Detection and measurement
The v20 detection strategies for this tactic are built around one OT-specific idea that MITRE calls an operational-fidelity gate: alert only when a flow is outside the asset's documented role and approved communication baseline. That makes the communication matrix (which host may talk to which, on which protocol) the most valuable detection asset an OT team can build.
| Technique | v20 detection strategy | Log sources named in the analytics | Signal |
|---|---|---|---|
| T0869 Standard Application Layer Protocol | DET0799 | DNS query logs, Sysmon network connection events, auditd, NSM connection logs | ICS hosts or field devices starting outbound application-layer sessions to destinations outside the baseline; DNS to non-vendor domains |
| T0869.001 DNS | DET0934 | NSM DNS and flow logs, Sysmon, osquery, network IDS | Queries bypassing designated resolvers, tunnelling-like content, sessions to DNS over HTTPS endpoints |
| T0869.002 Publish/Subscribe Protocols | DET0935 | NSM content and flow, Sysmon, osquery, network device syslog | MQTT, AMQP or DDS to an unapproved broker, or unexpected client identity and topic behaviour |
| T0884 Connection Proxy | DET0759 | NetFlow/IPFIX, Sysmon network and service creation, auditd | One host holding an inbound ICS protocol session and an outbound non-ICS session; new NAT or redirect rules on ICS ports |
| T0885 Commonly Used Port | DET0736 | NetFlow/IPFIX, Zeek SSL logs, Sysmon, auditd | Outbound sessions on 80, 443, 8080 or 53 to destinations outside the approved vendor list, from processes that are not recognised ICS software |
Telemetry to enable first
- Flow records at every zone boundary: NetFlow or IPFIX from OT firewalls and core switches, retained long enough to reconstruct a slow beacon.
- Passive OT protocol monitoring: a sensor on a SPAN or TAP port that decodes Modbus, S7comm, EtherNet/IP, DNP3 and vendor protocols. The joint advisory AA22-103A points defenders to CISA's open-source ICSNPP parsers for this purpose.
- DNS logs from the designated OT resolvers, plus a firewall rule that denies DNS to anything else so bypass attempts are logged.
- Host telemetry on Windows and Linux OT hosts: Sysmon network connection events (Event ID 3) or auditd connect calls, and firewall rule changes.
Metrics that show it is working
- Baseline coverage: share of OT zones with a documented communication matrix that is enforced or alerted on.
- Outbound exceptions: number of Level 0 to 2 assets with any permitted path to the internet, trending to zero.
- New-flow alert time: minutes from a new peer relationship appearing on a controller network to an analyst reviewing it, tested with planned purple-team flows.
- Protocol visibility: share of OT network segments covered by a protocol-decoding sensor.
- DNS hygiene: count of OT hosts resolving through anything other than designated resolvers.
Where identity fits
Command and control in OT often rides on machine identities that nobody reviews: the service account a historian uses to pull data, the client certificate an IIoT gateway presents to its MQTT broker, the OPC UA application certificate an HMI trusts. MITRE's v20 analytics for publish/subscribe misuse look for unexpected client identities and topics, which only works if those identities are inventoried. Issue each gateway and broker client its own credential, restrict topics per identity, and for OPC UA enable application authentication with explicit trust lists, as the AA22-103A advisory recommends. See the Identity for OT Environments Guide.
Implementation roadmap
- Map the real flows: collect two to four weeks of passive flow and protocol data per zone, review it with control engineers and record each legitimate peer relationship, protocol and direction.
- Remove direct outbound: route any required internet access from OT through the DMZ via proxies the security team monitors; deny everything else. Apply in log-only mode first and keep the previous rule set for rollback.
- Pin name resolution: designate OT resolvers, block outbound UDP and TCP 53 and known DNS over HTTPS endpoints from other hosts.
- Alert on matrix violations: turn the documented matrix into detection rules, starting with controller networks, where new peers are rarest.
- Add host controls: alert on firewall rule creation and new listening services on HMIs, historians and engineering workstations.
- Review IIoT and cloud paths: list every MQTT broker, cloud connector and vendor telemetry agent, and give each an owner and an approved destination list.
Decision guidance
- Detect or block at Level 0 to 2: blocking control traffic can stop a process, so most operators detect inside cell and area zones and enforce at the IT/OT boundary and DMZ.
- SSL/TLS inspection: worthwhile at the IT/OT boundary for vendor and cloud traffic; rarely practical inside control networks.
- Small sites: start with denying all outbound from OT except named destinations and logging firewall denies; a full sensor deployment can follow.
- Large operators: invest in central OT monitoring with per-site sensors and a shared communication matrix format so detections can be reused.
Framework mapping
| Framework | Relevant references |
|---|---|
| NIST SP 800-53 Rev. 5 | SC-7 Boundary Protection, SI-4 System Monitoring, CM-7 Least Functionality, AU-6 Audit Record Review, Analysis, and Reporting, SC-8 Transmission Confidentiality and Integrity |
| NIST CSF 2.0 | PR.IR-01, DE.CM-01, DE.CM-09, PR.PS-04 |
| NIST SP 800-82 Rev. 3 | OT network architecture and monitoring guidance, including the DMZ between IT and OT |
| ISA/IEC 62443-3-3 | SR 5.1 Network segmentation, SR 5.2 Zone boundary protection, SR 6.2 Continuous monitoring |
| CIS Controls v8.1 | Control 4 Secure Configuration of Enterprise Assets and Software, Control 12 Network Infrastructure Management, Control 13 Network Monitoring and Defense |
Common failure patterns
- Port-based allowlists: permitting TCP 502 or 443 between zones without naming source and destination hosts, which is exactly what T0885 relies on.
- Trusting the DMZ host: treating any traffic from a jump host or historian as legitimate, which is how internal proxies hide the outer channel.
- No DNS control in OT: hosts resolving through public resolvers, so tunnelling and DNS over HTTPS go unseen.
- Unreviewed IIoT connectors: cloud telemetry and MQTT links added by projects or vendors without security review or an approved broker list.
- Sensor blind spots: monitoring only the IT/OT boundary, so controller-to-controller relays such as INCONTROLLER's PLCProxy never cross a sensor.
- Firewall changes on hosts not monitored: a new rule named to look like an update service goes unnoticed without rule-change alerting.
Practitioner checklist
- Document a communication matrix for each OT zone and review it with control engineers.
- Deny direct outbound internet access from all Level 0 to 2 assets.
- Designate OT DNS resolvers and block other DNS and DNS over HTTPS paths.
- Deploy protocol-decoding monitoring on controller networks as well as at the boundary.
- Alert on any host holding an inbound ICS session and an outbound non-ICS session at once.
- Alert on firewall rule creation and new listening ports on HMIs and engineering workstations.
- Inventory MQTT brokers, IIoT gateways and cloud connectors with their approved destinations.
- Give each gateway and broker client its own credential or certificate.
- Test detection with planned flows between unapproved peers twice a year.
Standards and references
- MITRE ATT&CK for ICS: Command and Control (TA0101)
- MITRE ATT&CK for ICS: Standard Application Layer Protocol (T0869)
- MITRE ATT&CK for ICS: Connection Proxy (T0884)
- MITRE ATT&CK for ICS: Commonly Used Port (T0885)
- CISA: AA22-103A APT Cyber Tools Targeting ICS/SCADA Devices
- CISA: Primary Mitigations to Reduce Cyber Threats to Operational Technology
- NIST: SP 800-82 Rev. 3 Guide to Operational Technology (OT) Security
- NIST: SP 800-53 Rev. 5
Related NHI Mgmt Group resources: MITRE ATT&CK for ICS Guide · OT Network Security Monitoring Guide · Industrial Protocol Security Guide · ATT&CK for ICS Initial Access Tactic Guide · ATT&CK for ICS Persistence Tactic Guide