<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Mike Anderson</title>
    <description>The latest articles on DEV Community by Mike Anderson (@mike_anderson_d01f52129fb).</description>
    <link>https://dev.to/mike_anderson_d01f52129fb</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3932577%2F7a35e2bb-d2d6-4419-9e8b-1ca4a99fc1ca.png</url>
      <title>DEV Community: Mike Anderson</title>
      <link>https://dev.to/mike_anderson_d01f52129fb</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mike_anderson_d01f52129fb"/>
    <language>en</language>
    <item>
      <title>The Color of War: AI Purple Teaming Link 16 J-Messages Without Touching the Live Network</title>
      <dc:creator>Mike Anderson</dc:creator>
      <pubDate>Fri, 17 Jul 2026 14:34:47 +0000</pubDate>
      <link>https://dev.to/mike_anderson_d01f52129fb/the-color-of-war-how-to-train-purple-teams-for-ai-driven-defense-of-networks-you-cannot-touch-19hg</link>
      <guid>https://dev.to/mike_anderson_d01f52129fb/the-color-of-war-how-to-train-purple-teams-for-ai-driven-defense-of-networks-you-cannot-touch-19hg</guid>
      <description>&lt;h2&gt;
  
  
  The Color of War: AI Purple Teaming Link 16 J-Messages Without Touching the Live Network
&lt;/h2&gt;

&lt;p&gt;There are networks you do not casually scan.&lt;/p&gt;

&lt;p&gt;Not because they are secure.&lt;/p&gt;

&lt;p&gt;Because they are dangerous to break.&lt;/p&gt;

&lt;p&gt;A web app can be tested in staging.&lt;br&gt;&lt;br&gt;
A cloud workload can be isolated.&lt;br&gt;&lt;br&gt;
A container can be rebuilt.&lt;br&gt;&lt;br&gt;
A failed API release can be rolled back.&lt;/p&gt;

&lt;p&gt;A tactical data link is different.&lt;/p&gt;

&lt;p&gt;If the wrong message is trusted, the system may believe a false track.&lt;br&gt;&lt;br&gt;
If timing is manipulated, the system may act on stale information.&lt;br&gt;&lt;br&gt;
If identity is confused, the system may build a corrupted battlespace picture.&lt;br&gt;&lt;br&gt;
If detection is noisy, operators may stop trusting the alarms.&lt;br&gt;&lt;br&gt;
If testing is careless, the test itself becomes the risk.&lt;/p&gt;

&lt;p&gt;That is the problem this article solves:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;How do you red-team, blue-team, and purple-team Link 16 J-message protocol behavior when the real network cannot be touched?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is not a generic AI security article.&lt;/p&gt;

&lt;p&gt;This is a defense-centric walkthrough of a controlled purple-team exercise: build a digital twin of the Link 16 protocol layer, train red AI to discover J-message failure modes, train blue AI to detect them, and use purple-team engagement to turn the exercise into engineering controls.&lt;/p&gt;

&lt;p&gt;The objective is simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Break the twin 10,000 times so the real mission network does not have to break once.&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  What We Are Building
&lt;/h2&gt;

&lt;p&gt;We are building a safe test architecture for Link 16-style J-message protocol testing.&lt;/p&gt;

&lt;p&gt;The system under test is not the aircraft.&lt;br&gt;&lt;br&gt;
It is not the radio hardware.&lt;br&gt;&lt;br&gt;
It is not classified cryptography.&lt;br&gt;&lt;br&gt;
It is not a live operational network.&lt;/p&gt;

&lt;p&gt;The system under test is the &lt;strong&gt;J-message processing and timing logic&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;message schema validation&lt;/li&gt;
&lt;li&gt;source identity handling&lt;/li&gt;
&lt;li&gt;timestamp and freshness validation&lt;/li&gt;
&lt;li&gt;TDMA slot discipline&lt;/li&gt;
&lt;li&gt;replay behavior&lt;/li&gt;
&lt;li&gt;malformed-field handling&lt;/li&gt;
&lt;li&gt;track-fusion plausibility&lt;/li&gt;
&lt;li&gt;degraded communication behavior&lt;/li&gt;
&lt;li&gt;alert explainability&lt;/li&gt;
&lt;li&gt;operator decision support&lt;/li&gt;
&lt;li&gt;remediation and regression proof&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Everything happens inside a lab.&lt;/p&gt;

&lt;p&gt;No live RF.&lt;br&gt;&lt;br&gt;
No live tactical network.&lt;br&gt;&lt;br&gt;
No real aircraft.&lt;br&gt;&lt;br&gt;
No operational exploitation.&lt;/p&gt;

&lt;p&gt;The phrase to keep in mind:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;We test the protocol logic, not the live battlespace.&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  The Journey
&lt;/h2&gt;

&lt;p&gt;This article follows one continuous exercise.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Understand why Link 16 is not normal IT.&lt;/li&gt;
&lt;li&gt;Treat TDMA timing as a security signal.&lt;/li&gt;
&lt;li&gt;Treat J-messages as the protocol API.&lt;/li&gt;
&lt;li&gt;Build a digital twin where the protocol can be safely broken.&lt;/li&gt;
&lt;li&gt;Train a red AI agent to discover J-message failure modes.&lt;/li&gt;
&lt;li&gt;Train a blue AI agent to detect timing, identity, sequence, and plausibility anomalies.&lt;/li&gt;
&lt;li&gt;Run a purple-team engagement.&lt;/li&gt;
&lt;li&gt;Produce evidence, remediation, and regression tests.&lt;/li&gt;
&lt;li&gt;Convert the lesson into a model for future defense systems.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is the missing connection in many AI-security conversations.&lt;/p&gt;

&lt;p&gt;AI is not the strategy.&lt;/p&gt;

&lt;p&gt;The purple-team engagement is the strategy.&lt;/p&gt;

&lt;p&gt;AI is the accelerator.&lt;/p&gt;


&lt;h2&gt;
  
  
  1. The Problem: Link 16 Is Not Your Enterprise LAN
&lt;/h2&gt;

&lt;p&gt;Security teams are comfortable with IP.&lt;/p&gt;

&lt;p&gt;Ports. Packets. Agents. Logs. SIEM. EDR. CloudTrail. VPC Flow Logs. Suricata. Zeek. Kubernetes events. GitHub alerts. Terraform drift.&lt;/p&gt;

&lt;p&gt;That world gives us visibility.&lt;/p&gt;

&lt;p&gt;A Link 16-style tactical network does not give us that comfort.&lt;/p&gt;

&lt;p&gt;It is a tactical data link used to share situational awareness and command information between military platforms. For this article, the important thing is not the operational implementation. The important thing is the security model:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Link 16 is a deterministic, time-disciplined, structured-message network where trust depends on message validity, timing, source identity, and shared state.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is a very different target.&lt;/p&gt;

&lt;p&gt;There may be no normal IP path to scan.&lt;br&gt;&lt;br&gt;
There may be no endpoint agent to install.&lt;br&gt;&lt;br&gt;
There may be no safe packet capture.&lt;br&gt;&lt;br&gt;
There may be no acceptable test outage.&lt;br&gt;&lt;br&gt;
There may be no room for “we were just testing.”&lt;/p&gt;

&lt;p&gt;In enterprise IT, a failed test might break a service.&lt;/p&gt;

&lt;p&gt;In a tactical environment, a failed assumption can corrupt the picture people rely on to make decisions.&lt;/p&gt;

&lt;p&gt;That is why traditional pentesting is the wrong starting point.&lt;/p&gt;

&lt;p&gt;The right starting point is a safe, replayable twin.&lt;/p&gt;


&lt;h2&gt;
  
  
  2. TDMA: The Clock Is Part of the Security Boundary
&lt;/h2&gt;

&lt;p&gt;Link 16-style communication is time-disciplined.&lt;/p&gt;

&lt;p&gt;A useful mental model is TDMA: &lt;strong&gt;Time Division Multiple Access&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Each participant gets a scheduled time slot. It speaks when it is allowed to speak. Others listen when they are supposed to listen.&lt;/p&gt;

&lt;p&gt;Simplified:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Cycle 1:
  Slot 0 -&amp;gt; F-16 #1
  Slot 1 -&amp;gt; AWACS
  Slot 2 -&amp;gt; Ship
  Slot 3 -&amp;gt; F-16 #2

Cycle 2:
  Slot 4 -&amp;gt; F-16 #1
  Slot 5 -&amp;gt; AWACS
  Slot 6 -&amp;gt; Ship
  Slot 7 -&amp;gt; F-16 #2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For software engineers, imagine a distributed system where each service has a strict write window. If a service writes outside its window, that is not just bad engineering. It is a security signal.&lt;/p&gt;

&lt;p&gt;Timing becomes telemetry.&lt;/p&gt;

&lt;p&gt;Blue team can ask:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Did the message arrive in the expected slot?&lt;/li&gt;
&lt;li&gt;Did the participant transmit when expected?&lt;/li&gt;
&lt;li&gt;Did timing drift slowly?&lt;/li&gt;
&lt;li&gt;Did the message arrive too late to be trusted?&lt;/li&gt;
&lt;li&gt;Did a stale update look fresh?&lt;/li&gt;
&lt;li&gt;Did silence itself become meaningful?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is the first defense insight:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;In deterministic networks, time is not metadata. Time is part of the control surface.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That cuts both ways.&lt;/p&gt;

&lt;p&gt;The defender can detect deviations because the system is predictable.&lt;/p&gt;

&lt;p&gt;The adversary, defect, or failure condition can also exploit trust in predictable timing if validation is weak.&lt;/p&gt;

&lt;p&gt;That is why the purple-team exercise focuses on timing and J-message behavior together.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. J-Messages: The Language and the Attack Surface
&lt;/h2&gt;

&lt;p&gt;If TDMA is the clock, J-messages are the language.&lt;/p&gt;

&lt;p&gt;A J-message is the structured data that travels in the slot. It may represent participant identity, track data, position, velocity, status, commands, or other tactical state.&lt;/p&gt;

&lt;p&gt;For software engineers, the best analogy is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A J-message is a strict binary API call sent on a clock.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Not HTTP.&lt;br&gt;&lt;br&gt;
Not JSON.&lt;br&gt;&lt;br&gt;
Not a TCP port.&lt;br&gt;&lt;br&gt;
Not a web form.&lt;br&gt;&lt;br&gt;
Not a normal packet capture exercise.&lt;/p&gt;

&lt;p&gt;A simplified simulated J-message frame might look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;+------------+-----------+----------------------+----------+------------+
| Msg Type   | Source ID | Position             | Velocity | Timestamp  |
+------------+-----------+----------------------+----------+------------+
| Track      | F16-01    | lat / lon / altitude | vector   | T+217s     |
+------------+-----------+----------------------+----------+------------+
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now the attack surface becomes clearer.&lt;/p&gt;

&lt;p&gt;Not “Can I run nmap?”&lt;/p&gt;

&lt;p&gt;The real questions are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Can the parser safely reject malformed fields?&lt;/li&gt;
&lt;li&gt;Can the receiver detect duplicate or conflicting source IDs?&lt;/li&gt;
&lt;li&gt;Can the system reject stale but well-formed messages?&lt;/li&gt;
&lt;li&gt;Can track fusion detect physically impossible movement?&lt;/li&gt;
&lt;li&gt;Can timing validation detect messages outside the expected slot?&lt;/li&gt;
&lt;li&gt;Can the system degrade safely when slots are missing?&lt;/li&gt;
&lt;li&gt;Can the SOC explain which message, which slot, and which rule caused the alert?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is why J-message testing matters.&lt;/p&gt;

&lt;p&gt;A message can be syntactically valid but operationally dangerous.&lt;/p&gt;

&lt;p&gt;That is the heart of the exercise.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Why Traditional Pentesting Fails
&lt;/h2&gt;

&lt;p&gt;Traditional pentesting asks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What is exposed?&lt;/li&gt;
&lt;li&gt;What service is vulnerable?&lt;/li&gt;
&lt;li&gt;Can authentication be bypassed?&lt;/li&gt;
&lt;li&gt;Can privilege be escalated?&lt;/li&gt;
&lt;li&gt;Can data be extracted?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those questions matter in normal IT.&lt;/p&gt;

&lt;p&gt;They do not fully solve Link 16 J-message risk.&lt;/p&gt;

&lt;p&gt;For this problem, the better questions are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What message fields are trusted too easily?&lt;/li&gt;
&lt;li&gt;What timestamp assumptions are not enforced?&lt;/li&gt;
&lt;li&gt;What identity conflicts are not resolved safely?&lt;/li&gt;
&lt;li&gt;What replay windows are too permissive?&lt;/li&gt;
&lt;li&gt;What malformed fields destabilize parsing?&lt;/li&gt;
&lt;li&gt;What impossible track update survives fusion?&lt;/li&gt;
&lt;li&gt;What blue-team signal proves the issue?&lt;/li&gt;
&lt;li&gt;What engineering control prevents recurrence?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A scanner cannot answer those questions.&lt;/p&gt;

&lt;p&gt;A live tactical test is unsafe.&lt;/p&gt;

&lt;p&gt;A generic dashboard is not enough.&lt;/p&gt;

&lt;p&gt;The answer is a digital twin with a purple-team operating model.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. The Digital Twin: The Safe War Lab
&lt;/h2&gt;

&lt;p&gt;The digital twin is where dangerous questions become safe experiments.&lt;/p&gt;

&lt;p&gt;It does not need to be a real aircraft.&lt;br&gt;&lt;br&gt;
It does not need to be real RF.&lt;br&gt;&lt;br&gt;
It does not need to expose classified implementation details.&lt;/p&gt;

&lt;p&gt;It needs to simulate the protocol-layer behavior we care about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;J-message structure&lt;/li&gt;
&lt;li&gt;TDMA slot timing&lt;/li&gt;
&lt;li&gt;participant identity&lt;/li&gt;
&lt;li&gt;timestamp and freshness logic&lt;/li&gt;
&lt;li&gt;parser behavior&lt;/li&gt;
&lt;li&gt;track database updates&lt;/li&gt;
&lt;li&gt;fusion plausibility&lt;/li&gt;
&lt;li&gt;degraded-link behavior&lt;/li&gt;
&lt;li&gt;telemetry capture&lt;/li&gt;
&lt;li&gt;replay&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A useful twin gives us one thing the live network cannot:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;permission to fail safely.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Inside the twin, red can try.&lt;br&gt;&lt;br&gt;
Blue can detect.&lt;br&gt;&lt;br&gt;
Purple can judge.&lt;br&gt;&lt;br&gt;
Engineering can fix.&lt;br&gt;&lt;br&gt;
The replay can prove whether the fix worked.&lt;/p&gt;


&lt;h2&gt;
  
  
  Physical World to Digital Twin Mapping
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Physical Link 16 Concept&lt;/th&gt;
&lt;th&gt;Digital Twin Equivalent&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;F-16 mission computer&lt;/td&gt;
&lt;td&gt;Pod running simulated terminal logic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AWACS node&lt;/td&gt;
&lt;td&gt;Pod running command/coordination logic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ship node&lt;/td&gt;
&lt;td&gt;Pod running participant logic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TDMA slot plan&lt;/td&gt;
&lt;td&gt;ConfigMap or mounted YAML schedule&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Radio transmission&lt;/td&gt;
&lt;td&gt;UDP or event bus message between pods&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RF interference&lt;/td&gt;
&lt;td&gt;Network delay, loss, deny policy, or chaos injection&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mission replay&lt;/td&gt;
&lt;td&gt;Persistent replay file&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tactical picture&lt;/td&gt;
&lt;td&gt;Simulated track database&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SOC visibility&lt;/td&gt;
&lt;td&gt;Kafka stream, logs, metrics, model output&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Purple-team evidence&lt;/td&gt;
&lt;td&gt;Replay bundle and after-action report&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This does not mean we containerize a fighter jet.&lt;/p&gt;

&lt;p&gt;We containerize the protocol node.&lt;/p&gt;

&lt;p&gt;That is the correct abstraction.&lt;/p&gt;


&lt;h2&gt;
  
  
  Kubernetes as the Lab Harness
&lt;/h2&gt;

&lt;p&gt;Kubernetes is useful because this exercise needs repeatability, isolation, and scale.&lt;/p&gt;

&lt;p&gt;Each participant can be a pod.&lt;br&gt;&lt;br&gt;
Each mission can be a namespace.&lt;br&gt;&lt;br&gt;
Each TDMA schedule can be YAML.&lt;br&gt;&lt;br&gt;
Each scenario can emit telemetry.&lt;br&gt;&lt;br&gt;
Each replay can be stored.&lt;br&gt;&lt;br&gt;
Each defense change can be versioned.&lt;br&gt;&lt;br&gt;
Each night can run hundreds or thousands of engagements.&lt;/p&gt;

&lt;p&gt;A simplified architecture:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;+----------------------------------------------------------+
| Kubernetes Digital Twin                                  |
|                                                          |
|  +----------+     +----------+     +----------+          |
|  | F-16 #1  | --&amp;gt; | AWACS    | --&amp;gt; | Ship     |          |
|  +----------+     +----------+     +----------+          |
|        |               |               |                 |
|        +---------------+---------------+                 |
|                        |                                 |
|                 J-message Event Mesh                     |
|                        |                                 |
|        +---------------+---------------+                 |
|        |                               |                 |
|  Red AI Agent                    Blue AI Agent            |
|        |                               |                 |
|        +---------------+---------------+                 |
|                        |                                 |
|              Purple Evidence Store                       |
+----------------------------------------------------------+
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The twin is not a gimmick.&lt;/p&gt;

&lt;p&gt;It is the only safe place where this exercise can be run at useful scale.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. The Mission: Test J-Message Trust
&lt;/h2&gt;

&lt;p&gt;The purple-team mission statement:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Determine whether AI-assisted red, blue, and purple teams can safely discover, detect, explain, and remediate J-message protocol failure modes inside a Link 16 digital twin.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That mission gives each team a role.&lt;/p&gt;

&lt;h2&gt;
  
  
  Red Team Mission
&lt;/h2&gt;

&lt;p&gt;Discover safe, replayable J-message failure modes in the twin.&lt;/p&gt;

&lt;h2&gt;
  
  
  Blue Team Mission
&lt;/h2&gt;

&lt;p&gt;Detect and explain J-message anomalies using timing, identity, freshness, sequence, parser, and track-fusion signals.&lt;/p&gt;

&lt;h2&gt;
  
  
  Purple Team Mission
&lt;/h2&gt;

&lt;p&gt;Validate whether the red behavior matters, whether blue detection is useful, and whether engineering can fix the control gap.&lt;/p&gt;

&lt;p&gt;This framing prevents the article from becoming an AI tool dump.&lt;/p&gt;

&lt;p&gt;Everything serves the mission.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. The AI Toolchain: Models, Engines, Harnesses, and What Each Team Actually Does
&lt;/h2&gt;

&lt;p&gt;The prompt is explicit: the AI system is not one model doing everything. It is three different AI roles running inside the same Kubernetes-based digital twin.&lt;/p&gt;

&lt;p&gt;Each role has a different model, engine, harness, and mission.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Team&lt;/th&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Engine / Runtime&lt;/th&gt;
&lt;th&gt;Harness&lt;/th&gt;
&lt;th&gt;Primary Job&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Red Team&lt;/td&gt;
&lt;td&gt;PPO policy with LSTM memory&lt;/td&gt;
&lt;td&gt;Ray RLlib&lt;/td&gt;
&lt;td&gt;Custom Gym environment wrapping the twin&lt;/td&gt;
&lt;td&gt;Discover safe, replayable J-message failure modes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Blue Team&lt;/td&gt;
&lt;td&gt;Pre-trained Transformer in PyTorch&lt;/td&gt;
&lt;td&gt;TorchServe or Triton&lt;/td&gt;
&lt;td&gt;Kafka consumer + validators + correlation engine&lt;/td&gt;
&lt;td&gt;Detect timing, identity, sequence, freshness, and track anomalies&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Purple / SOC Team&lt;/td&gt;
&lt;td&gt;Llama 3 or Mistral LLM&lt;/td&gt;
&lt;td&gt;Ollama for local lab or approved API&lt;/td&gt;
&lt;td&gt;LangChain + MCP tools&lt;/td&gt;
&lt;td&gt;Retrieve evidence, summarize engagement, draft after-action report&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This matters because each model type solves a different problem.&lt;/p&gt;

&lt;p&gt;The red problem is exploration.&lt;br&gt;&lt;br&gt;
The blue problem is sequence understanding.&lt;br&gt;&lt;br&gt;
The purple problem is evidence explanation.&lt;/p&gt;

&lt;p&gt;Using one generic LLM for all three would be the wrong architecture.&lt;/p&gt;


&lt;h2&gt;
  
  
  Why PPO/LSTM for Red?
&lt;/h2&gt;

&lt;p&gt;The red agent is trying to discover multi-step protocol failure modes.&lt;/p&gt;

&lt;p&gt;A single J-message anomaly may not be interesting. The interesting failure may require a sequence:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;introduce timing jitter,&lt;/li&gt;
&lt;li&gt;wait for recovery state,&lt;/li&gt;
&lt;li&gt;replay a stale synthetic track,&lt;/li&gt;
&lt;li&gt;observe whether the track database accepts it,&lt;/li&gt;
&lt;li&gt;adapt if blue detects it.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That is sequential decision-making.&lt;/p&gt;

&lt;p&gt;PPO gives the red agent a stable reinforcement learning method for exploring the action space. LSTM memory helps it remember previous steps in the episode, which matters when the failure only appears after a chain of message and timing events.&lt;/p&gt;

&lt;p&gt;The red agent is not a free-form attacker.&lt;/p&gt;

&lt;p&gt;It is a policy model trained inside a controlled Gym environment.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Red PPO/LSTM Agent
        ↓
Custom Gym Environment
        ↓
MCP Tool API
        ↓
Kubernetes Digital Twin
        ↓
J-message stream + track database
        ↓
Reward calculation
        ↓
Policy update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The red agent observes the twin state, selects a safe simulated action, receives reward or penalty, and learns over many episodes.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why a Transformer for Blue?
&lt;/h2&gt;

&lt;p&gt;The blue agent is watching a stream.&lt;/p&gt;

&lt;p&gt;J-messages are not isolated events. They form sequences over time:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;source → slot → message type → timestamp → track state → next message
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A static signature can catch obvious failures, but it struggles with context.&lt;/p&gt;

&lt;p&gt;The blue Transformer learns normal protocol grammar:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;what messages usually follow each other,&lt;/li&gt;
&lt;li&gt;which source usually speaks in which slot,&lt;/li&gt;
&lt;li&gt;how timing behaves during normal and degraded modes,&lt;/li&gt;
&lt;li&gt;how track updates evolve,&lt;/li&gt;
&lt;li&gt;which kinematic changes are plausible,&lt;/li&gt;
&lt;li&gt;which sequence patterns are unusual.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The blue model does not replace deterministic validation.&lt;/p&gt;

&lt;p&gt;It sits beside it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Kafka J-message stream
        ↓
Tokeniser / Feature Extractor
        ↓
Transformer sequence model
        ↓
Physics checker + timing validator
        ↓
Correlation engine
        ↓
Anomaly score + reason codes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is why the blue output can say:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This was not just a weird message. It was stale during recovery, from a source with valid identity, in a slot that looked normal, but the sequence and track movement were inconsistent.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is the kind of explanation a SOC analyst and protocol engineer can use.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Llama/Mistral + LangChain + MCP for Purple?
&lt;/h2&gt;

&lt;p&gt;The purple team does not need an LLM to invent findings.&lt;/p&gt;

&lt;p&gt;It needs an LLM to retrieve evidence, organize timelines, and write a clear after-action report.&lt;/p&gt;

&lt;p&gt;The purple LLM analyst uses:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Llama 3 or Mistral&lt;/strong&gt; as the language model,&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ollama&lt;/strong&gt; when the lab needs local/offline execution,&lt;/li&gt;
&lt;li&gt;an approved API when policy allows managed inference,&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LangChain&lt;/strong&gt; as the agent harness,&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP&lt;/strong&gt; as the safe tool interface to internal lab data.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The LLM does not touch the live network.&lt;/p&gt;

&lt;p&gt;It reads from the twin’s evidence stores:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;LLM Analyst
  ├── retrieve_message_history(track_id)
  ├── get_blue_attention_map(alert_id)
  ├── get_red_episode_trace(episode_id)
  ├── get_slot_plan(scenario_id)
  ├── get_track_db_diff(track_id)
  └── generate_after_action_report()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;MCP is important because it gives the LLM a controlled, auditable way to access the twin’s evidence. The LLM is not browsing around freely. It is using approved tools against approved lab data.&lt;/p&gt;

&lt;p&gt;The LLM’s mission:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Turn red/blue telemetry into a human-readable report without inventing facts.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  8. Kubernetes Lab Setup: How the AI System Actually Runs
&lt;/h2&gt;

&lt;p&gt;The lab runs as a controlled Kubernetes environment.&lt;/p&gt;

&lt;p&gt;Not because Kubernetes is a fighter jet.&lt;/p&gt;

&lt;p&gt;Because Kubernetes gives us repeatable scenarios, isolated namespaces, declarative configuration, telemetry, scaling, and replay.&lt;/p&gt;

&lt;p&gt;A practical lab namespace looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;namespace: link16-purple-lab

Workload Pods:
  node-f16-1
  node-awacs
  node-ship
  node-f16-2
  rf-emulator
  red-rl-agent
  blue-transformer
  soc-llm-analyst
  mcp-server
  kafka
  track-db
  evidence-store
  soc-dashboard
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The flow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;+---------------------------------------------------------------+
| link16-purple-lab namespace                                   |
|                                                               |
|  Simulated Link 16 Nodes                                      |
|  +---------+   +---------+   +---------+   +---------+        |
|  | F16-01  |   | AWACS   |   | Ship    |   | F16-02  |        |
|  +----+----+   +----+----+   +----+----+   +----+----+        |
|       |             |             |             |             |
|       +-------------+-------------+-------------+             |
|                         |                                     |
|                 Kafka J-message Stream                        |
|                         |                                     |
|       +-----------------+------------------+                  |
|       |                                    |                  |
| +-----v------+                      +------v---------+        |
| | Red PPO/   |  MCP safe actions    | Blue Transformer|        |
| | LSTM Agent |---------------------&amp;gt;| + Validators    |        |
| +-----+------+                      +------+---------+        |
|       |                                    |                  |
|       +-----------------+------------------+                  |
|                         |                                     |
|                 Evidence Store / Track DB                     |
|                         |                                     |
|                 SOC LLM Analyst + Dashboard                   |
+---------------------------------------------------------------+
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The key Kubernetes objects:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Component&lt;/th&gt;
&lt;th&gt;Kubernetes Object&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Simulated participants&lt;/td&gt;
&lt;td&gt;Deployments / StatefulSets&lt;/td&gt;
&lt;td&gt;Run terminal logic and J-message processing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TDMA schedule&lt;/td&gt;
&lt;td&gt;ConfigMap&lt;/td&gt;
&lt;td&gt;Defines slot plan and participant timing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scenario definition&lt;/td&gt;
&lt;td&gt;ConfigMap or CRD&lt;/td&gt;
&lt;td&gt;Defines mission, participants, allowed red actions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kafka&lt;/td&gt;
&lt;td&gt;StatefulSet / Operator&lt;/td&gt;
&lt;td&gt;Carries J-message telemetry&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Track DB&lt;/td&gt;
&lt;td&gt;StatefulSet&lt;/td&gt;
&lt;td&gt;Maintains simulated tactical picture&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Red training&lt;/td&gt;
&lt;td&gt;RayCluster / Jobs&lt;/td&gt;
&lt;td&gt;Runs PPO/LSTM training episodes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Blue inference&lt;/td&gt;
&lt;td&gt;Deployment&lt;/td&gt;
&lt;td&gt;Serves Transformer model via TorchServe or Triton&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LLM analyst&lt;/td&gt;
&lt;td&gt;Deployment&lt;/td&gt;
&lt;td&gt;Runs LangChain agent with local Ollama or API gateway&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MCP server&lt;/td&gt;
&lt;td&gt;Deployment&lt;/td&gt;
&lt;td&gt;Provides controlled tool access to twin telemetry&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Evidence store&lt;/td&gt;
&lt;td&gt;PVC / object storage&lt;/td&gt;
&lt;td&gt;Stores replays, alerts, traces, and reports&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SOC dashboard&lt;/td&gt;
&lt;td&gt;Deployment / Service&lt;/td&gt;
&lt;td&gt;Shows alerts, timelines, and after-action reports&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Network effects&lt;/td&gt;
&lt;td&gt;NetworkPolicy / chaos tooling&lt;/td&gt;
&lt;td&gt;Simulates loss, denial, latency, and degraded links&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This is not a demo-only architecture.&lt;/p&gt;

&lt;p&gt;This is the operating model.&lt;/p&gt;




&lt;h2&gt;
  
  
  Lab Deployment Flow
&lt;/h2&gt;

&lt;p&gt;A safe lab run looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. GitOps deploys namespace and base services
2. TDMA slot plan loads from ConfigMap
3. Simulated participants start producing J-messages
4. Kafka captures full message stream
5. Blue Transformer starts baseline scoring
6. Red PPO/LSTM agent starts lab-only training episodes
7. MCP server exposes approved twin actions and evidence queries
8. Purple dashboard shows red action, blue detection, and timeline
9. LLM analyst drafts evidence-bound after-action report
10. Engineering fix is deployed back into the twin
11. Replay confirms whether the fix worked
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A conceptual lab manifest structure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;k8s/
  namespaces/
    link16-purple-lab.yaml
  configmaps/
    tdma-slot-plan.yaml
    scenario-ghost-track.yaml
    red-action-policy.yaml
  deployments/
    node-f16-1.yaml
    node-awacs.yaml
    node-ship.yaml
    node-f16-2.yaml
    blue-transformer.yaml
    soc-llm-analyst.yaml
    mcp-server.yaml
  ray/
    red-rl-training-job.yaml
  serving/
    torchserve-blue-model.yaml
    triton-blue-model.yaml
  policies/
    networkpolicy-deny-awacs-f16.yaml
    red-agent-egress-deny.yaml
    mcp-tool-allowlist.yaml
  storage/
    evidence-pvc.yaml
    replay-store.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The most important lab control:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The red agent never gets direct Kubernetes admin rights and never touches the live network. It only calls approved MCP tools scoped to the twin.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  MCP Tool Boundary for the Lab
&lt;/h2&gt;

&lt;p&gt;The MCP server is the control point between AI agents and the twin.&lt;/p&gt;

&lt;p&gt;Red tools are action tools:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;simulate_delay_message(message_id, delay_ms)
simulate_drop_slot(node_id, slot_id)
simulate_replay_message(message_id, replay_window)
simulate_identity_conflict(source_id, scenario_id)
simulate_kinematic_edge_case(track_id, profile)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Blue tools are context tools:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;get_slot_plan(scenario_id)
get_track_state(track_id)
check_slot_sync(message_id)
check_physics(track_id)
get_message_context(message_id)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Purple tools are evidence tools:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;retrieve_message_history(track_id)
get_red_episode_trace(episode_id)
get_blue_attention_map(alert_id)
get_detection_timeline(alert_id)
generate_report(finding_id)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each tool call must be logged:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;mcp_audit_event&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;timestamp&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;T+217s&lt;/span&gt;
  &lt;span class="na"&gt;agent&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;red-rl-agent&lt;/span&gt;
  &lt;span class="na"&gt;tool&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;simulate_replay_message&lt;/span&gt;
  &lt;span class="na"&gt;scenario&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ghost_track_recovery&lt;/span&gt;
  &lt;span class="na"&gt;allowed&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
  &lt;span class="na"&gt;evidence_pointer&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;replay/episode-00981/&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is how the lab stays safe and auditable.&lt;/p&gt;




&lt;h2&gt;
  
  
  9. Red AI Agent: Training the Synthetic Adversary
&lt;/h2&gt;

&lt;p&gt;The red AI agent is not a hacker.&lt;/p&gt;

&lt;p&gt;It is a controlled failure-mode discovery engine.&lt;/p&gt;

&lt;p&gt;It has no live network access.&lt;br&gt;&lt;br&gt;
It has no real RF access.&lt;br&gt;&lt;br&gt;
It does not bypass real crypto.&lt;br&gt;&lt;br&gt;
It does not deploy malware.&lt;br&gt;&lt;br&gt;
It does not operate outside the twin.&lt;/p&gt;

&lt;p&gt;Its job is to explore how the simulated protocol stack can be confused, degraded, or forced into unsafe state assumptions.&lt;/p&gt;

&lt;p&gt;Think of the red agent as a sparring partner for the protocol.&lt;/p&gt;


&lt;h2&gt;
  
  
  Red Agent Objective
&lt;/h2&gt;

&lt;p&gt;The red agent’s model choice is deliberate:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;PPO&lt;/strong&gt; gives stable reinforcement learning for bounded action exploration.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LSTM memory&lt;/strong&gt; helps the agent learn multi-step timing and replay sequences.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ray RLlib&lt;/strong&gt; lets training scale across GPU or CPU worker nodes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gym harness&lt;/strong&gt; exposes the digital twin as &lt;code&gt;reset()&lt;/code&gt;, &lt;code&gt;step(action)&lt;/code&gt;, &lt;code&gt;reward&lt;/code&gt;, and &lt;code&gt;done&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP tools&lt;/strong&gt; are the only way the agent can act on the twin.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The red agent tries to answer:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Can I create a J-message sequence that degrades the tactical picture while staying inside realistic lab boundaries?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Safe simulated action categories:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;delay a simulated J-message&lt;/li&gt;
&lt;li&gt;suppress a simulated slot&lt;/li&gt;
&lt;li&gt;replay a synthetic lab message&lt;/li&gt;
&lt;li&gt;introduce a simulated source identity conflict&lt;/li&gt;
&lt;li&gt;alter a simulated field within schema boundaries&lt;/li&gt;
&lt;li&gt;trigger a malformed-field test case&lt;/li&gt;
&lt;li&gt;introduce timing jitter inside approved limits&lt;/li&gt;
&lt;li&gt;create a kinematic edge case for track fusion&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are not operational attack instructions.&lt;/p&gt;

&lt;p&gt;They are controlled test actions exposed by the twin.&lt;/p&gt;


&lt;h2&gt;
  
  
  Red Agent Configuration
&lt;/h2&gt;

&lt;p&gt;A conceptual red-agent configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;red_agent&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;jmessage_red_rl_agent&lt;/span&gt;
  &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;link16_digital_twin&lt;/span&gt;
  &lt;span class="na"&gt;live_system_access&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;

  &lt;span class="na"&gt;observations&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;recent_jmessage_sequence&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;current_slot_number&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;participant_state_table&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;track_database_summary&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;blue_detection_feedback&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;scenario_phase&lt;/span&gt;

  &lt;span class="na"&gt;allowed_actions&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;simulate_delay_message&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;simulate_drop_slot&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;simulate_replay_message&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;simulate_identity_conflict&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;simulate_schema_boundary_case&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;simulate_kinematic_edge_case&lt;/span&gt;

  &lt;span class="na"&gt;prohibited_actions&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;live_network_access&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;real_radio_interaction&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;credential_access&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;malware_behavior&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;destructive_payloads&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;persistence&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;external_network_calls&lt;/span&gt;

  &lt;span class="na"&gt;evidence&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;log_action&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
    &lt;span class="na"&gt;retain_episode_replay&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
    &lt;span class="na"&gt;retain_reward_trace&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
    &lt;span class="na"&gt;retain_blue_response&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The control philosophy matters more than the syntax:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The red agent can only manipulate the twin through approved, logged, replayable simulation actions.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Red Agent Reward Design
&lt;/h2&gt;

&lt;p&gt;A bad reward function teaches chaos.&lt;/p&gt;

&lt;p&gt;A good reward function teaches useful failure discovery.&lt;/p&gt;

&lt;p&gt;The red agent should not be rewarded for maximum disruption. It should be rewarded for finding realistic, repeatable, safety-bounded gaps that blue misses or detects too late.&lt;/p&gt;

&lt;p&gt;Conceptual reward function:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;red_reward&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;system_impact&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;blue_response&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;reward&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;violates_safety_boundary&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;reward&lt;/span&gt; &lt;span class="o"&gt;-=&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;is_unrealistic_for_scenario&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;reward&lt;/span&gt; &lt;span class="o"&gt;-=&lt;/span&gt; &lt;span class="mi"&gt;25&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;system_impact&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;created_ghost_track&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;reward&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;system_impact&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;created_stale_state_acceptance&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;reward&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;system_impact&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;caused_parser_instability&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;reward&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;system_impact&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;degraded_track_confidence&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;reward&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;blue_response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;detected_immediately&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;reward&lt;/span&gt; &lt;span class="o"&gt;-=&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;blue_response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;detected_late&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;reward&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;blue_response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;missed&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;system_impact&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;is_replayable&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;reward&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;system_impact&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;has_replay_evidence&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;reward&lt;/span&gt; &lt;span class="o"&gt;-=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;reward&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This trains the red agent to discover control gaps, not generate noise.&lt;/p&gt;




&lt;h2&gt;
  
  
  Red Agent Training Loop
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Reset mission scenario
    ↓
Observe J-message state
    ↓
Choose safe simulated action
    ↓
Apply action inside twin
    ↓
Measure tactical-picture impact
    ↓
Measure blue-team response
    ↓
Calculate reward
    ↓
Store replay evidence
    ↓
Repeat
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pseudocode:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;episode&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;NUM_EPISODES&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;state&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;twin&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;scenario&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nf"&gt;random_scenario&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
    &lt;span class="n"&gt;done&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;

    &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;done&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;action&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;red_policy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;select_action&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;state&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;safety_policy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;allowed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
            &lt;span class="n"&gt;evidence&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log_violation&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="n"&gt;reward&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;
            &lt;span class="k"&gt;break&lt;/span&gt;

        &lt;span class="n"&gt;next_state&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;impact&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;blue_response&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;done&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;twin&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;step&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="n"&gt;reward&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;red_reward&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;system_impact&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;impact&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;blue_response&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;blue_response&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;action&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="n"&gt;red_policy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;learn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;state&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;reward&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;next_state&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="n"&gt;evidence&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;store&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;episode&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;episode&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;state&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;state&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;impact&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;impact&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;blue_response&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;blue_response&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;reward&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;reward&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="n"&gt;state&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;next_state&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The output is a failure-mode catalog.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;failure_mode_id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;RED-FM-041&lt;/span&gt;
&lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;stale track accepted during recovery window&lt;/span&gt;
&lt;span class="na"&gt;scenario&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;degraded_link_recovery&lt;/span&gt;
&lt;span class="na"&gt;impact&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;track database accepted old position as current&lt;/span&gt;
&lt;span class="na"&gt;blue_result&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;detected late&lt;/span&gt;
&lt;span class="na"&gt;repeatability&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;88%&lt;/span&gt;
&lt;span class="na"&gt;recommended_control&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;enforce timestamp freshness during recovery state&lt;/span&gt;
&lt;span class="na"&gt;evidence&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;replay/RED-FM-041/messages.jsonl&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;replay/RED-FM-041/timing.jsonl&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;replay/RED-FM-041/blue_response.json&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is the first meaningful handoff.&lt;/p&gt;

&lt;p&gt;Red found a failure mode.&lt;/p&gt;

&lt;p&gt;Now blue must prove it can detect it.&lt;/p&gt;




&lt;h2&gt;
  
  
  10. Blue AI Agent: Training the Defender
&lt;/h2&gt;

&lt;p&gt;The blue team model is a &lt;strong&gt;pre-trained Transformer implemented in PyTorch&lt;/strong&gt;, served through &lt;strong&gt;TorchServe or Triton&lt;/strong&gt; for real-time inference against the Kafka J-message stream.&lt;/p&gt;

&lt;p&gt;The blue AI agent is not just a model.&lt;/p&gt;

&lt;p&gt;It is a detection system.&lt;/p&gt;

&lt;p&gt;Its mission:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Watch the J-message stream and determine whether message, timing, identity, sequence, freshness, or track behavior violates expected mission state.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The blue agent must be explainable.&lt;/p&gt;

&lt;p&gt;If it cannot tell the operator why the alert fired, it is not ready for high-consequence environments.&lt;/p&gt;




&lt;h2&gt;
  
  
  Blue Agent Inputs
&lt;/h2&gt;

&lt;p&gt;The blue agent consumes structured telemetry:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;J-message stream&lt;/li&gt;
&lt;li&gt;TDMA slot timing&lt;/li&gt;
&lt;li&gt;participant identity table&lt;/li&gt;
&lt;li&gt;timestamp deltas&lt;/li&gt;
&lt;li&gt;track database changes&lt;/li&gt;
&lt;li&gt;parser validation results&lt;/li&gt;
&lt;li&gt;replay and freshness indicators&lt;/li&gt;
&lt;li&gt;simulated kinematic plausibility&lt;/li&gt;
&lt;li&gt;scenario metadata&lt;/li&gt;
&lt;li&gt;red-agent replay labels for training&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is not “throw logs into AI.”&lt;/p&gt;

&lt;p&gt;This is detection engineering.&lt;/p&gt;




&lt;h2&gt;
  
  
  Blue Agent Architecture
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Kafka J-message stream
        ↓
Tokeniser / Feature Extractor
        ↓
+----------------------+-------------------------+
| Deterministic Rules  | Sequence Model          |
| - schema validity    | - Transformer / LSTM    |
| - timing boundary    | - next-message predict  |
| - replay freshness   | - anomaly scoring       |
| - source identity    | - sequence drift        |
| - state transition   |                         |
+----------------------+-------------------------+
        ↓
Correlation Engine
        ↓
Anomaly Score + Reason Codes
        ↓
SOC Alert + Evidence Pointer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Rules catch what must never happen.&lt;/p&gt;

&lt;p&gt;The model catches what looks wrong in context.&lt;/p&gt;

&lt;p&gt;Correlation decides whether it matters.&lt;/p&gt;




&lt;h2&gt;
  
  
  Blue Agent Configuration
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;blue_agent&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;jmessage_blue_detector&lt;/span&gt;
  &lt;span class="na"&gt;purpose&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;detect_explain_prioritize&lt;/span&gt;

  &lt;span class="na"&gt;telemetry_inputs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;jmessage_stream&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;tdma_timing_events&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;participant_identity_state&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;track_database_updates&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;parser_validation_results&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;red_replay_labels_for_training&lt;/span&gt;

  &lt;span class="na"&gt;validators&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;schema_validator&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;timing_window_validator&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;replay_freshness_validator&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;source_identity_validator&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;track_plausibility_validator&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;state_transition_validator&lt;/span&gt;

  &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;sequence_anomaly_detector&lt;/span&gt;
    &lt;span class="na"&gt;objectives&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;next_message_prediction&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;timing_sequence_anomaly&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;track_plausibility_classification&lt;/span&gt;

  &lt;span class="na"&gt;correlation&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;alert_threshold&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.85&lt;/span&gt;
    &lt;span class="na"&gt;critical_threshold&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.95&lt;/span&gt;
    &lt;span class="na"&gt;require_reason_codes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;

  &lt;span class="na"&gt;output&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;anomaly_score&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;reason_codes&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;affected_track&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;affected_source_id&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;slot_number&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;message_pointer&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;replay_pointer&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;recommended_playbook&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The output must answer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What happened?&lt;/li&gt;
&lt;li&gt;Why is it suspicious?&lt;/li&gt;
&lt;li&gt;Which message caused it?&lt;/li&gt;
&lt;li&gt;Which slot was involved?&lt;/li&gt;
&lt;li&gt;Which source was involved?&lt;/li&gt;
&lt;li&gt;What control failed?&lt;/li&gt;
&lt;li&gt;What should the operator do?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If blue cannot explain it, purple cannot use it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Blue Agent Training
&lt;/h2&gt;

&lt;p&gt;Blue training starts with normal mission traffic.&lt;/p&gt;

&lt;p&gt;The model needs to learn what normal looks like before it can identify abnormal behavior.&lt;/p&gt;

&lt;p&gt;Training data classes:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Class&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Normal&lt;/td&gt;
&lt;td&gt;Expected J-message behavior&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Degraded but acceptable&lt;/td&gt;
&lt;td&gt;Loss, latency, or recovery within bounds&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Suspicious&lt;/td&gt;
&lt;td&gt;Requires investigation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Confirmed failure mode&lt;/td&gt;
&lt;td&gt;Red replay proved a control gap&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Remediated&lt;/td&gt;
&lt;td&gt;Fixed and regression-tested behavior&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Training loop:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Collect baseline J-message telemetry
    ↓
Label normal and degraded scenarios
    ↓
Replay red-agent failure modes
    ↓
Tokenize message, timing, identity, and state features
    ↓
Train sequence model
    ↓
Tune deterministic validators
    ↓
Evaluate false positives in degraded mode
    ↓
Promote stable detections into purple exercise
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pseudocode:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;normal&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;load_sequences&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;telemetry/baseline/&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;degraded&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;load_sequences&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;telemetry/degraded_acceptable/&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;red_replays&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;load_sequences&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;evidence/red_failure_modes/&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;remediated&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;load_sequences&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;evidence/remediated_replays/&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;dataset&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;build_dataset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;normal&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;normal&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;degraded&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;degraded&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;suspicious&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;red_replays&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;remediated&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;remediated&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;SequenceDetector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;features&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;message_type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;source_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;slot_delta&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;timestamp_delta&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;schema_valid&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;freshness_score&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;track_plausibility&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;state_transition&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;train&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;evaluate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;test_sets&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;normal&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;normal&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;holdout&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;degraded&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;degraded&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;holdout&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;red_replay&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;red_replays&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;holdout&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The important metrics are not only ML metrics.&lt;/p&gt;

&lt;p&gt;For blue-team operations, the useful metrics are:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Why it matters&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Detection precision&lt;/td&gt;
&lt;td&gt;Avoids analyst overload&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Detection recall&lt;/td&gt;
&lt;td&gt;Measures missed failure modes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mean time to detect&lt;/td&gt;
&lt;td&gt;Shows operational value&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;False positives in degraded mode&lt;/td&gt;
&lt;td&gt;Prevents alert storms under stress&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Replay consistency&lt;/td&gt;
&lt;td&gt;Proves repeatability&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Explanation quality&lt;/td&gt;
&lt;td&gt;Helps operators trust the alert&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Engineering actionability&lt;/td&gt;
&lt;td&gt;Helps owners fix the control&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The blue agent is ready only when it can detect, explain, and survive degraded-mode testing.&lt;/p&gt;




&lt;h2&gt;
  
  
  11. Purple Team Engagement: The Center of the Exercise
&lt;/h2&gt;

&lt;p&gt;Red AI training is not the outcome.&lt;br&gt;&lt;br&gt;
Blue AI detection is not the outcome.&lt;br&gt;&lt;br&gt;
A dashboard is not the outcome.&lt;/p&gt;

&lt;p&gt;The outcome is purple-team improvement.&lt;/p&gt;

&lt;p&gt;Purple team connects:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Red action
  → expected telemetry
  → blue detection
  → operator decision
  → control gap
  → engineering fix
  → replay proof
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Without that chain, the exercise is theater.&lt;/p&gt;




&lt;h2&gt;
  
  
  Purple Team Roles
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Role&lt;/th&gt;
&lt;th&gt;Responsibility&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Purple Lead&lt;/td&gt;
&lt;td&gt;Owns mission, scope, safety boundary, and final decision&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Red AI Engineer&lt;/td&gt;
&lt;td&gt;Trains red agent and validates replay realism&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Blue Detection Engineer&lt;/td&gt;
&lt;td&gt;Builds validators, model scoring, and alert logic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Twin Platform Engineer&lt;/td&gt;
&lt;td&gt;Maintains Kubernetes lab, telemetry, replay, and isolation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SOC Analyst&lt;/td&gt;
&lt;td&gt;Tests whether alerts are understandable and actionable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Protocol Engineer&lt;/td&gt;
&lt;td&gt;Fixes J-message validation, timing, parser, or fusion logic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Risk Owner&lt;/td&gt;
&lt;td&gt;Accepts, rejects, or prioritizes residual risk&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Evidence Scribe&lt;/td&gt;
&lt;td&gt;Maintains timeline, replay bundle, and final report&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Purple team is not a color.&lt;/p&gt;

&lt;p&gt;It is the control function.&lt;/p&gt;




&lt;h2&gt;
  
  
  Purple Team Training
&lt;/h2&gt;

&lt;p&gt;Purple-team training is not the same as red or blue training.&lt;/p&gt;

&lt;p&gt;Red learns how to challenge the protocol.&lt;br&gt;&lt;br&gt;
Blue learns how to detect protocol anomalies.&lt;br&gt;&lt;br&gt;
Purple learns how to judge whether the exercise produced a real control improvement.&lt;/p&gt;

&lt;p&gt;Purple training has six drills.&lt;/p&gt;
&lt;h3&gt;
  
  
  Drill 1: Baseline Recognition
&lt;/h3&gt;

&lt;p&gt;The team studies normal J-message flow, slot timing, participant behavior, and track-state transitions.&lt;/p&gt;

&lt;p&gt;The goal:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Everyone can explain normal before discussing abnormal.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  Drill 2: Red Replay Review
&lt;/h3&gt;

&lt;p&gt;The red agent produces a failure-mode replay.&lt;/p&gt;

&lt;p&gt;Purple asks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is this behavior realistic in the lab model?&lt;/li&gt;
&lt;li&gt;Is it safe?&lt;/li&gt;
&lt;li&gt;Is it repeatable?&lt;/li&gt;
&lt;li&gt;Does it represent a meaningful protocol risk?&lt;/li&gt;
&lt;li&gt;Is it just model weirdness?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Separate useful failure modes from artificial noise.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  Drill 3: Blue Alert Validation
&lt;/h3&gt;

&lt;p&gt;Blue raises an alert.&lt;/p&gt;

&lt;p&gt;Purple asks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Did the alert identify the message?&lt;/li&gt;
&lt;li&gt;Did it identify the slot?&lt;/li&gt;
&lt;li&gt;Did it identify the source?&lt;/li&gt;
&lt;li&gt;Did it explain the reason?&lt;/li&gt;
&lt;li&gt;Did it provide evidence?&lt;/li&gt;
&lt;li&gt;Would an operator know what to do?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Improve alert quality, not just detection rate.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  Drill 4: Operator Decision Tabletop
&lt;/h3&gt;

&lt;p&gt;The SOC analyst receives the alert and must choose:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;monitor&lt;/li&gt;
&lt;li&gt;enrich&lt;/li&gt;
&lt;li&gt;suppress&lt;/li&gt;
&lt;li&gt;escalate&lt;/li&gt;
&lt;li&gt;isolate in the twin&lt;/li&gt;
&lt;li&gt;open engineering defect&lt;/li&gt;
&lt;li&gt;request replay&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Train human judgment under uncertainty.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  Drill 5: Engineering Remediation Workshop
&lt;/h3&gt;

&lt;p&gt;Protocol engineering reviews the evidence.&lt;/p&gt;

&lt;p&gt;The team decides whether the fix belongs in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;parser validation&lt;/li&gt;
&lt;li&gt;timestamp freshness enforcement&lt;/li&gt;
&lt;li&gt;source identity logic&lt;/li&gt;
&lt;li&gt;TDMA timing validation&lt;/li&gt;
&lt;li&gt;track-fusion plausibility&lt;/li&gt;
&lt;li&gt;degraded-mode handling&lt;/li&gt;
&lt;li&gt;detection tuning&lt;/li&gt;
&lt;li&gt;operator playbook&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Convert the finding into a specific control.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  Drill 6: Regression Replay
&lt;/h3&gt;

&lt;p&gt;The original red replay is run again after the fix.&lt;/p&gt;

&lt;p&gt;The goal:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Prove the control works and does not break normal or degraded behavior.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is purple-team training.&lt;/p&gt;

&lt;p&gt;It trains the people, the process, and the system.&lt;/p&gt;


&lt;h2&gt;
  
  
  12. The Engagement Scenario: Ghost Track in the Twin
&lt;/h2&gt;

&lt;p&gt;Now the article becomes a story.&lt;/p&gt;

&lt;p&gt;The lab spins up before sunrise.&lt;/p&gt;

&lt;p&gt;Five simulated participants come online inside the Kubernetes twin: F-16 #1, AWACS, Ship, F-16 #2, and an RF emulator. The slot plan loads from a ConfigMap. Kafka starts receiving J-message telemetry. The blue agent watches baseline traffic. The red agent waits for the exercise window.&lt;/p&gt;

&lt;p&gt;The purple lead states the mission:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Test whether a stale or conflicting J-message can degrade the simulated track picture, and whether blue detection can explain the anomaly fast enough for operator action.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;No live network.&lt;br&gt;&lt;br&gt;
No real aircraft.&lt;br&gt;&lt;br&gt;
No operational messages.&lt;br&gt;&lt;br&gt;
Only the twin.&lt;/p&gt;


&lt;h2&gt;
  
  
  Baseline
&lt;/h2&gt;

&lt;p&gt;The baseline run is clean.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;T+000s  Twin starts
T+005s  Participants join scenario
T+010s  Slot cycle stabilizes
T+030s  Track database healthy
T+060s  Blue confirms normal timing and message sequence
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Blue records the baseline:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;baseline_status&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;timing&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;normal&lt;/span&gt;
  &lt;span class="na"&gt;identity&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;normal&lt;/span&gt;
  &lt;span class="na"&gt;freshness&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;normal&lt;/span&gt;
  &lt;span class="na"&gt;track_plausibility&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;normal&lt;/span&gt;
  &lt;span class="na"&gt;parser_errors&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;none&lt;/span&gt;
  &lt;span class="na"&gt;anomaly_score&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.04&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Purple approves the red window.&lt;/p&gt;




&lt;h2&gt;
  
  
  Red Action
&lt;/h2&gt;

&lt;p&gt;The red agent chooses a safe simulated action chain.&lt;/p&gt;

&lt;p&gt;It does not attack a real network.&lt;br&gt;&lt;br&gt;
It acts only through the twin’s approved API.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;T+090s  Red delays a simulated track update inside allowed lab range
T+096s  Red replays a stale synthetic track message during recovery state
T+097s  Twin accepts message as structurally valid
T+098s  Track database briefly trusts stale position
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The red agent logs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;red_action&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;scenario&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ghost_track_recovery_window&lt;/span&gt;
  &lt;span class="na"&gt;action_chain&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;simulate_delay_message&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;simulate_replay_message&lt;/span&gt;
  &lt;span class="na"&gt;target_effect&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;stale_track_accepted_as_current&lt;/span&gt;
  &lt;span class="na"&gt;safety_boundary&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;twin_only&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The red team has not “won” yet.&lt;/p&gt;

&lt;p&gt;A red finding matters only if purple can prove impact and blue can validate detection quality.&lt;/p&gt;




&lt;h2&gt;
  
  
  Blue Detection
&lt;/h2&gt;

&lt;p&gt;Blue sees three weak signals before correlation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Signal 1: Message was structurally valid
Signal 2: Timestamp freshness was suspicious
Signal 3: Track movement was inconsistent with recent state
Signal 4: Slot timing was within tolerance but sequence context was abnormal
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The deterministic validators alone do not fire a critical alert.&lt;/p&gt;

&lt;p&gt;The sequence model raises the anomaly score.&lt;/p&gt;

&lt;p&gt;The correlation engine combines timing, freshness, and track plausibility.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;blue_alert&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;alert_id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;BLUE-ALERT-219&lt;/span&gt;
  &lt;span class="na"&gt;confidence&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.982&lt;/span&gt;
  &lt;span class="na"&gt;affected_source&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;SIM-F16-01&lt;/span&gt;
  &lt;span class="na"&gt;affected_track&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;TRACK-17&lt;/span&gt;
  &lt;span class="na"&gt;slot_context&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;recovery_window&lt;/span&gt;
  &lt;span class="na"&gt;reason_codes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;stale_timestamp_during_recovery&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;sequence_context_mismatch&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;track_plausibility_deviation&lt;/span&gt;
  &lt;span class="na"&gt;recommended_action&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;isolate_simulated_track_and_replay&lt;/span&gt;
  &lt;span class="na"&gt;evidence&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;messages/T+090_to_T+100.jsonl&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;timing/T+090_to_T+100.jsonl&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;trackdb/diff_T+098.json&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is a good alert.&lt;/p&gt;

&lt;p&gt;It does not just say “anomaly detected.”&lt;/p&gt;

&lt;p&gt;It tells the operator what changed and why.&lt;/p&gt;




&lt;h2&gt;
  
  
  Purple Review
&lt;/h2&gt;

&lt;p&gt;Purple pauses the exercise.&lt;/p&gt;

&lt;p&gt;The team asks five questions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Was the red action safe and inside scope?&lt;/li&gt;
&lt;li&gt;Did the twin produce repeatable impact?&lt;/li&gt;
&lt;li&gt;Did blue detect the issue fast enough?&lt;/li&gt;
&lt;li&gt;Did the alert explain the issue clearly?&lt;/li&gt;
&lt;li&gt;Can engineering fix the control gap?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The answer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;purple_assessment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;red_realism&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;acceptable_for_protocol_layer_lab&lt;/span&gt;
  &lt;span class="na"&gt;safety_boundary&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;maintained&lt;/span&gt;
  &lt;span class="na"&gt;impact&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;stale_track_accepted_during_recovery&lt;/span&gt;
  &lt;span class="na"&gt;blue_detection&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;detected&lt;/span&gt;
  &lt;span class="na"&gt;detection_quality&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;high&lt;/span&gt;
  &lt;span class="na"&gt;operator_actionability&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;acceptable&lt;/span&gt;
  &lt;span class="na"&gt;control_gap&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;freshness_validation_not_bound_to_recovery_state&lt;/span&gt;
  &lt;span class="na"&gt;remediation_owner&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;protocol_engineering&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now the exercise becomes valuable.&lt;/p&gt;

&lt;p&gt;Red did not merely create an anomaly.&lt;/p&gt;

&lt;p&gt;Blue did not merely create an alert.&lt;/p&gt;

&lt;p&gt;Purple identified a control gap.&lt;/p&gt;




&lt;h2&gt;
  
  
  Engineering Fix
&lt;/h2&gt;

&lt;p&gt;The fix is not “add AI.”&lt;/p&gt;

&lt;p&gt;The fix is protocol engineering.&lt;/p&gt;

&lt;p&gt;Engineering updates the simulated terminal logic:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Before:
  Accept message if schema valid and source known.

After:
  Accept message only if:
    - schema valid
    - source known
    - timestamp fresh
    - state transition valid
    - recovery-window freshness rule satisfied
    - track movement plausible
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The control is specific.&lt;/p&gt;

&lt;p&gt;The owner is clear.&lt;/p&gt;

&lt;p&gt;The evidence is replayable.&lt;/p&gt;




&lt;h2&gt;
  
  
  Regression Replay
&lt;/h2&gt;

&lt;p&gt;The red replay runs again.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;T+000s  Replay starts
T+090s  Red repeats same simulated action chain
T+098s  Message reaches receiver
T+099s  Freshness validation rejects stale state
T+100s  Blue alert fires with lower impact classification
T+105s  Track database remains consistent
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Regression result:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;regression_result&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;finding_id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;PT-JMSG-014&lt;/span&gt;
  &lt;span class="na"&gt;previous_status&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;exploitable_in_twin&lt;/span&gt;
  &lt;span class="na"&gt;current_status&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;remediated&lt;/span&gt;
  &lt;span class="na"&gt;replay_passed&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
  &lt;span class="na"&gt;false_positive_check&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;passed&lt;/span&gt;
  &lt;span class="na"&gt;degraded_mode_check&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;passed&lt;/span&gt;
  &lt;span class="na"&gt;residual_risk&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;low_for_protocol_layer_scope&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is the win.&lt;/p&gt;

&lt;p&gt;Not a flashy hack.&lt;/p&gt;

&lt;p&gt;A proven control improvement.&lt;/p&gt;




&lt;h2&gt;
  
  
  13. The Purple Team Scorecard
&lt;/h2&gt;

&lt;p&gt;A good purple exercise needs a scorecard.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;Question&lt;/th&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Safety&lt;/td&gt;
&lt;td&gt;Did red stay inside twin-only controls?&lt;/td&gt;
&lt;td&gt;Required&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Realism&lt;/td&gt;
&lt;td&gt;Was the scenario meaningful for protocol logic?&lt;/td&gt;
&lt;td&gt;Required&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Repeatability&lt;/td&gt;
&lt;td&gt;Could the failure be replayed?&lt;/td&gt;
&lt;td&gt;Required&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Detection&lt;/td&gt;
&lt;td&gt;Did blue detect it?&lt;/td&gt;
&lt;td&gt;Required&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Explainability&lt;/td&gt;
&lt;td&gt;Did the alert explain why?&lt;/td&gt;
&lt;td&gt;Required&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Operator action&lt;/td&gt;
&lt;td&gt;Did SOC know what to do?&lt;/td&gt;
&lt;td&gt;Required&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Engineering action&lt;/td&gt;
&lt;td&gt;Could the owner fix it?&lt;/td&gt;
&lt;td&gt;Required&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Regression&lt;/td&gt;
&lt;td&gt;Did the fix survive replay?&lt;/td&gt;
&lt;td&gt;Required&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;False positives&lt;/td&gt;
&lt;td&gt;Did the fix break normal/degraded traffic?&lt;/td&gt;
&lt;td&gt;Required&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Residual risk&lt;/td&gt;
&lt;td&gt;Is remaining risk documented?&lt;/td&gt;
&lt;td&gt;Required&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This is how the purple team avoids theater.&lt;/p&gt;

&lt;p&gt;No vague “AI found risk.”&lt;/p&gt;

&lt;p&gt;No vague “blue detected anomaly.”&lt;/p&gt;

&lt;p&gt;No vague “engineering should improve validation.”&lt;/p&gt;

&lt;p&gt;The result must be:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;specific failure, specific evidence, specific owner, specific fix, replay-proven outcome.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  14. What Logs and Evidence Matter
&lt;/h2&gt;

&lt;p&gt;A defense-grade exercise must produce evidence.&lt;/p&gt;

&lt;p&gt;Not screenshots alone.&lt;/p&gt;

&lt;p&gt;The evidence pack should include:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;evidence/
  scenario.yaml
  slot_plan.yaml
  red_actions.jsonl
  jmessages.jsonl
  timing_events.jsonl
  trackdb_before.json
  trackdb_after.json
  blue_alert.json
  model_scores.json
  operator_decision.md
  engineering_fix.diff
  regression_result.json
  after_action_report.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The after-action report should answer:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;What was tested?&lt;/li&gt;
&lt;li&gt;What did red attempt inside the twin?&lt;/li&gt;
&lt;li&gt;What changed in the J-message stream?&lt;/li&gt;
&lt;li&gt;What changed in timing or state?&lt;/li&gt;
&lt;li&gt;What did blue detect?&lt;/li&gt;
&lt;li&gt;What did blue miss?&lt;/li&gt;
&lt;li&gt;What did the SOC analyst decide?&lt;/li&gt;
&lt;li&gt;What control failed?&lt;/li&gt;
&lt;li&gt;Who owns the fix?&lt;/li&gt;
&lt;li&gt;Did replay prove the remediation?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If the exercise cannot produce this, it is not mature purple teaming.&lt;/p&gt;




&lt;h2&gt;
  
  
  15. The Purple LLM Analyst: Model, Runner, Harness, and Guardrails
&lt;/h2&gt;

&lt;p&gt;The purple team uses an LLM differently from red and blue.&lt;/p&gt;

&lt;p&gt;Red acts in the twin.&lt;br&gt;&lt;br&gt;
Blue scores the stream.&lt;br&gt;&lt;br&gt;
Purple explains the engagement.&lt;/p&gt;

&lt;p&gt;The recommended purple analyst stack is:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Choice&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Model&lt;/td&gt;
&lt;td&gt;Llama 3 or Mistral&lt;/td&gt;
&lt;td&gt;Generate human-readable summaries and reports&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Runner&lt;/td&gt;
&lt;td&gt;Ollama for local lab, or approved API gateway&lt;/td&gt;
&lt;td&gt;Run the model privately or through governed inference&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Harness&lt;/td&gt;
&lt;td&gt;LangChain agent&lt;/td&gt;
&lt;td&gt;Manage the evidence-retrieval workflow&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tool boundary&lt;/td&gt;
&lt;td&gt;MCP&lt;/td&gt;
&lt;td&gt;Provide approved access to logs, alerts, replays, and attention maps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Output&lt;/td&gt;
&lt;td&gt;After-action report&lt;/td&gt;
&lt;td&gt;Turn telemetry into decisions&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;For defense-style labs, local inference through Ollama is attractive when the exercise data is sensitive and should not leave the lab. A managed API may be acceptable only if the data classification, retention, region, and contractual controls allow it.&lt;/p&gt;

&lt;p&gt;The LLM analyst should be configured with a strict evidence-only instruction:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;soc_llm_analyst&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;model_options&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;llama3&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;mistral&lt;/span&gt;
  &lt;span class="na"&gt;runner_options&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;ollama_local&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;approved_api_gateway&lt;/span&gt;

  &lt;span class="na"&gt;harness&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;langchain&lt;/span&gt;
  &lt;span class="na"&gt;tool_interface&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;mcp&lt;/span&gt;

  &lt;span class="na"&gt;allowed_tools&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;retrieve_message_history&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;get_blue_attention_map&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;get_red_episode_trace&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;get_detection_timeline&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;generate_after_action_report&lt;/span&gt;

  &lt;span class="na"&gt;prohibited_actions&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;execute_red_action&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;modify_twin_state&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;approve_containment&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;access_live_network&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;infer_missing_facts&lt;/span&gt;

  &lt;span class="na"&gt;output_requirements&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;cite_evidence_pointer&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;mark_unknowns&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;identify_control_gap&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;identify_remediation_owner&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;identify_residual_risk&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This keeps the LLM in the analyst role.&lt;/p&gt;

&lt;p&gt;It does not command the exercise.&lt;/p&gt;

&lt;p&gt;It writes the report that helps humans make the decision.&lt;/p&gt;




&lt;h2&gt;
  
  
  16. The LLM Analyst: Useful, but Not in Command
&lt;/h2&gt;

&lt;p&gt;The LLM analyst is valuable, but it should not run the mission.&lt;/p&gt;

&lt;p&gt;It should not touch live systems.&lt;br&gt;&lt;br&gt;
It should not approve containment.&lt;br&gt;&lt;br&gt;
It should not invent facts.&lt;br&gt;&lt;br&gt;
It should not write final risk acceptance alone.&lt;/p&gt;

&lt;p&gt;Its job is evidence acceleration.&lt;/p&gt;

&lt;p&gt;A safe LLM analyst can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;retrieve replay timelines&lt;/li&gt;
&lt;li&gt;summarize red actions&lt;/li&gt;
&lt;li&gt;summarize blue detection&lt;/li&gt;
&lt;li&gt;compare baseline and abnormal message flow&lt;/li&gt;
&lt;li&gt;draft after-action reports&lt;/li&gt;
&lt;li&gt;map evidence to findings&lt;/li&gt;
&lt;li&gt;identify missing evidence&lt;/li&gt;
&lt;li&gt;prepare executive summaries&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Safe prompt pattern:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Use only the provided replay files, alert JSON, timing logs, and scenario metadata.

Produce:
1. Scenario summary
2. Red action summary
3. Blue detection summary
4. Timeline
5. Control gap
6. Evidence list
7. Recommended engineering fix
8. False-positive considerations
9. Residual risk

Do not infer facts not present in evidence.
Mark unknowns explicitly.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The LLM is not the commander.&lt;/p&gt;

&lt;p&gt;It is the scribe who never sleeps.&lt;/p&gt;




&lt;h2&gt;
  
  
  17. Designing “Link 18”: What We Should Build Next Time
&lt;/h2&gt;

&lt;p&gt;If a next-generation tactical data link were designed tomorrow, the lesson from this exercise is clear.&lt;/p&gt;

&lt;p&gt;Security should be built into the protocol from day one.&lt;/p&gt;

&lt;p&gt;Design principles:&lt;/p&gt;

&lt;h2&gt;
  
  
  Message-Level Authenticity
&lt;/h2&gt;

&lt;p&gt;Do not rely only on channel trust. Messages should carry strong identity, integrity, and freshness guarantees appropriate to the mission.&lt;/p&gt;

&lt;h2&gt;
  
  
  Built-In Timing Validation
&lt;/h2&gt;

&lt;p&gt;The system should treat timing deviations as first-class security signals.&lt;/p&gt;

&lt;h2&gt;
  
  
  State-Aware Message Validation
&lt;/h2&gt;

&lt;p&gt;A message should not be accepted only because it is well-formed. It must be valid for the current mission state.&lt;/p&gt;

&lt;h2&gt;
  
  
  Digital Twin Mandatory for Updates
&lt;/h2&gt;

&lt;p&gt;No major protocol or terminal update should ship without replay testing in the twin.&lt;/p&gt;

&lt;h2&gt;
  
  
  Continuous Purple Teaming
&lt;/h2&gt;

&lt;p&gt;Red AI should search for failure modes.&lt;br&gt;&lt;br&gt;
Blue AI should detect and explain.&lt;br&gt;&lt;br&gt;
Purple team should validate, prioritize, and force regression.&lt;/p&gt;
&lt;h2&gt;
  
  
  Safe Degradation
&lt;/h2&gt;

&lt;p&gt;When confidence drops, the system should degrade visibly and safely.&lt;/p&gt;

&lt;p&gt;A resilient system is not one that never fails.&lt;/p&gt;

&lt;p&gt;It is one that fails in a way defenders can see, understand, and recover from.&lt;/p&gt;


&lt;h2&gt;
  
  
  18. Why This Matters Beyond Defense
&lt;/h2&gt;

&lt;p&gt;This article is defense-centric by design.&lt;/p&gt;

&lt;p&gt;But the pattern is not defense-only.&lt;/p&gt;

&lt;p&gt;Fintech platforms depend on message ordering, identity, replay protection, ledger state, transaction freshness, and fraud signals.&lt;/p&gt;

&lt;p&gt;Healthcare platforms depend on device telemetry, patient identity, clinical workflow state, and timely trust in data.&lt;/p&gt;

&lt;p&gt;Industrial platforms depend on deterministic command and sensor behavior.&lt;/p&gt;

&lt;p&gt;The lesson is not that every sector should copy Link 16.&lt;/p&gt;

&lt;p&gt;The lesson is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Any system that depends on structured, time-sensitive, machine-to-machine trust needs a way to safely test how that trust fails.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For fintech:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Can replayed transaction events corrupt state?&lt;/li&gt;
&lt;li&gt;Can duplicate identity confuse fraud decisions?&lt;/li&gt;
&lt;li&gt;Can delayed settlement messages produce false confidence?&lt;/li&gt;
&lt;li&gt;Can reconciliation detect sequence anomalies?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For healthcare:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Can stale telemetry be accepted as current?&lt;/li&gt;
&lt;li&gt;Can device identity mismatch affect clinical decisions?&lt;/li&gt;
&lt;li&gt;Can workflow events be replayed safely in a twin?&lt;/li&gt;
&lt;li&gt;Can alerts explain risk without overwhelming operators?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But those are extensions.&lt;/p&gt;

&lt;p&gt;The core defense lesson remains:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Build the twin. Train red. Train blue. Engage purple. Fix the protocol. Replay until proven.&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  19. Final Takeaway
&lt;/h2&gt;

&lt;p&gt;The original problem was never “how do we use AI?”&lt;/p&gt;

&lt;p&gt;The real problem is sharper:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;How do we safely test the J-message protocol behavior of a Link 16-style network when live testing is unacceptable?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The answer is not a scanner.&lt;/p&gt;

&lt;p&gt;The answer is not a dashboard.&lt;/p&gt;

&lt;p&gt;The answer is an AI-powered purple-team operating model:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Digital Twin
    ↓
Red AI discovers safe J-message failure modes
    ↓
Blue AI detects timing, identity, freshness, and track anomalies
    ↓
Purple team validates operational relevance
    ↓
Engineering fixes protocol controls
    ↓
Replay proves the fix
    ↓
Scenario becomes continuous regression
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is the journey.&lt;/p&gt;

&lt;p&gt;Red finds the weakness.&lt;br&gt;&lt;br&gt;
Blue proves the detection.&lt;br&gt;&lt;br&gt;
Purple makes the system stronger.&lt;/p&gt;

&lt;p&gt;The color of war is not red.&lt;/p&gt;

&lt;p&gt;It is not blue.&lt;/p&gt;

&lt;p&gt;It is purple.&lt;/p&gt;

</description>
      <category>cybersecurity</category>
      <category>ai</category>
      <category>link16</category>
      <category>kubernetes</category>
    </item>
    <item>
      <title>AWS Security AI Architecture: Managed MCP, Custom MCP, or Lambda + Bedrock?</title>
      <dc:creator>Mike Anderson</dc:creator>
      <pubDate>Thu, 16 Jul 2026 10:54:55 +0000</pubDate>
      <link>https://dev.to/mike_anderson_d01f52129fb/aws-security-ai-architecture-managed-mcp-custom-mcp-or-lambda-bedrock-10m7</link>
      <guid>https://dev.to/mike_anderson_d01f52129fb/aws-security-ai-architecture-managed-mcp-custom-mcp-or-lambda-bedrock-10m7</guid>
      <description>&lt;h2&gt;
  
  
  AWS Security AI Architecture: Managed MCP, Custom MCP, or Lambda + Bedrock?
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Executive decision
&lt;/h2&gt;

&lt;p&gt;There is no single “correct” architecture for AI-assisted AWS security work.&lt;/p&gt;

&lt;p&gt;For Security Hub, GuardDuty, ECR, and cloud security reporting, there are three valid patterns:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;AWS Managed MCP / AWS Agent Toolkit&lt;/strong&gt; for live, read-only AWS investigation from an AI coding assistant.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Custom MCP&lt;/strong&gt; for analyzing approved security reports already stored in S3.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lambda + boto3 + Bedrock&lt;/strong&gt; for scheduled, deterministic production report generation.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;All three are correct.&lt;/p&gt;

&lt;p&gt;They solve different problems.&lt;/p&gt;

&lt;p&gt;The mistake is not choosing one over the other. The mistake is using the right technology in the wrong operating model.&lt;/p&gt;

&lt;p&gt;A scheduled production report should not depend on an analyst’s laptop. A report-analysis assistant should not need broad live AWS API access. A developer investigating AWS findings interactively should not be forced to wait for a weekly Lambda job.&lt;/p&gt;

&lt;p&gt;The clean model is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Production reporting lane:
Lambda + boto3 + Bedrock + S3

Analyst report-review lane:
Custom MCP + S3 reports + optional Bedrock analysis

Developer / live triage lane:
AWS Managed MCP + Claude Code / Codex + read-only IAM
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That separation removes most of the confusion.&lt;/p&gt;




&lt;h2&gt;
  
  
  The problem we are solving
&lt;/h2&gt;

&lt;p&gt;AWS security teams usually deal with three different workflows that look similar at first glance but are operationally different.&lt;/p&gt;

&lt;h3&gt;
  
  
  Workflow 1: Live investigation
&lt;/h3&gt;

&lt;p&gt;A security engineer wants to ask:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Show me the current HIGH and CRITICAL Security Hub findings.
Explain which ones are immediate risk.
Check GuardDuty or Inspector context.
Draft remediation wording.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is interactive. The engineer is present. The assistant may need to call live AWS APIs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Workflow 2: Report analysis
&lt;/h3&gt;

&lt;p&gt;A weekly Security Hub or GuardDuty report already exists in S3.&lt;/p&gt;

&lt;p&gt;An analyst wants to paste a finding and ask:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Is this finding already covered in the latest report?
What evidence supports it?
What owner action is needed?
Give me Jira-ready wording.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is not live AWS investigation. This is analysis of approved report artifacts.&lt;/p&gt;

&lt;h3&gt;
  
  
  Workflow 3: Scheduled reporting
&lt;/h3&gt;

&lt;p&gt;The organization needs a report every week, without a human sitting in front of Claude Code or Codex.&lt;/p&gt;

&lt;p&gt;The system should:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Collect findings
Score and sort them
Enrich them
Generate Markdown/HTML/JSON/CSV
Store the output in S3
Run on schedule
Fallback safely if AI enrichment fails
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is backend automation.&lt;/p&gt;

&lt;p&gt;These three workflows should not use the same architecture.&lt;/p&gt;




&lt;h2&gt;
  
  
  Approach 1: AWS Managed MCP for live read-only Security Hub triage
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What it is
&lt;/h3&gt;

&lt;p&gt;AWS Managed MCP, delivered through AWS Agent Toolkit, lets AI coding agents interact with AWS through the Model Context Protocol.&lt;/p&gt;

&lt;p&gt;AWS describes the AWS MCP Server as a managed remote MCP server that gives AI agents secure access to AWS through MCP. It can expose AWS API access, documentation search, curated skills, CloudWatch metrics, and IAM-based controls. It is designed to work with coding agents such as Claude Code and Codex.&lt;/p&gt;

&lt;p&gt;The architecture looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Security engineer
        ↓
Claude Code / Codex
        ↓
AWS Managed MCP Server
        ↓
Read-only AWS SSO profile / IAM role
        ↓
Security Hub / GuardDuty / Inspector / Config / CloudTrail
        ↓
Local analysis output
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The key point:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;AWS Managed MCP is a live AWS access path for an AI assistant.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That can be very useful, but it must be controlled.&lt;/p&gt;




&lt;h3&gt;
  
  
  Best use cases
&lt;/h3&gt;

&lt;p&gt;Use AWS Managed MCP when the analyst or engineer needs live AWS context.&lt;/p&gt;

&lt;p&gt;Good examples:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Read current Security Hub findings.
Check current GuardDuty findings.
Search AWS documentation.
Review AWS Config resource state.
Look up CloudTrail events.
Ask for remediation guidance while reviewing live AWS evidence.
Use Claude Code or Codex during security tooling development.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Security Hub’s &lt;code&gt;GetFindings&lt;/code&gt; API returns findings matching specified criteria, and if cross-Region aggregation is enabled, calling it from the aggregation home Region can include findings from linked Regions. That makes it a strong fit for read-only triage when the IAM role is scoped correctly.&lt;/p&gt;




&lt;h3&gt;
  
  
  When this approach is best
&lt;/h3&gt;

&lt;p&gt;Choose AWS Managed MCP when:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;A human analyst is actively driving the session.
The task requires current AWS state.
The user is already working in Claude Code, Codex, Cursor, Kiro, or another MCP-capable client.
The organization can enforce read-only IAM, SSO, approval prompts, and audit logging.
The output is advisory, not automatically applied.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is a good design for a junior security engineer who needs help understanding findings but should not be allowed to modify AWS.&lt;/p&gt;




&lt;h3&gt;
  
  
  Required controls
&lt;/h3&gt;

&lt;p&gt;The minimum safe posture is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Dedicated read-only SSO permission set.
No administrator profile.
No long-lived access keys.
Explicit deny for Security Hub, GuardDuty, IAM, S3, EC2, KMS, and Config write actions.
Tool approval enabled.
Script execution denied or separately approved.
No secret or PII access.
CloudTrail visibility.
Negative-control test proving write actions fail.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;AWS Managed MCP is powerful because it can expose broad AWS capability. AWS notes that Agent Toolkit can allow agents to interact with AWS APIs, run sandboxed scripts, search AWS documentation, and apply enterprise controls through IAM context keys and CloudWatch metrics.&lt;/p&gt;

&lt;p&gt;That means IAM is not optional. IAM is the control boundary.&lt;/p&gt;




&lt;h3&gt;
  
  
  Why this approach is not ideal for scheduled reports
&lt;/h3&gt;

&lt;p&gt;AWS Managed MCP is not the best engine for scheduled reporting.&lt;/p&gt;

&lt;p&gt;A weekly report should not require:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;An analyst session.
A local MCP client.
A laptop profile.
A Claude Code/Codex session.
Manual approval of each tool call.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For scheduled reporting, use Lambda.&lt;/p&gt;




&lt;h2&gt;
  
  
  Approach 2: Custom MCP for analyzing generated S3 reports
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What it is
&lt;/h3&gt;

&lt;p&gt;A custom MCP server is your own MCP service that exposes a narrow set of approved tools.&lt;/p&gt;

&lt;p&gt;In this design, the MCP server does not query live Security Hub.&lt;/p&gt;

&lt;p&gt;It reads only the security reports that your production reporting pipeline has already generated into S3.&lt;/p&gt;

&lt;p&gt;The architecture looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Analyst
        ↓
Claude Code / Codex
        ↓
Custom Report Analyst MCP Server
        ↓
Read-only S3 access
        ↓
Generated Security Hub / GuardDuty reports
        ↓
Optional Bedrock analysis
        ↓
Evidence-bound response
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The MCP tools should be intentionally limited:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;healthcheck
list_available_reports
read_report_excerpt
search_reports
analyze_finding_against_reports
generate_ticket_draft
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The MCP server should not expose:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;call_aws
run_script
put_object
update_finding
batch_update_findings
create_ticket
send_slack
assume_role
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is the core security design.&lt;/p&gt;

&lt;p&gt;The custom MCP server is not a general AWS assistant. It is a report analyst.&lt;/p&gt;




&lt;h3&gt;
  
  
  Best use cases
&lt;/h3&gt;

&lt;p&gt;Use custom MCP when the source of truth is an approved report artifact.&lt;/p&gt;

&lt;p&gt;Good examples:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Analyze a pasted Security Hub finding against the latest weekly report.
Search generated GuardDuty reports for a finding ID.
Compare a resource ARN against recent findings.
Generate Jira-ready remediation wording from existing report evidence.
Explain whether a finding is immediate risk or backlog based on the report.
Create analyst notes without touching live AWS APIs.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is especially useful when the organization already has a strong reporting pipeline and wants AI-assisted review without giving the assistant broad AWS access.&lt;/p&gt;




&lt;h3&gt;
  
  
  Why custom MCP is safer for report analysis
&lt;/h3&gt;

&lt;p&gt;If the task is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Read the report and explain the finding.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;then the agent does not need live Security Hub access.&lt;/p&gt;

&lt;p&gt;It only needs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;s3:GetObject
s3:ListBucket
kms:Decrypt, if the reports are encrypted with KMS
bedrock:InvokeModel, if second-pass model analysis is used
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is a much narrower trust boundary.&lt;/p&gt;

&lt;p&gt;The analyst prompt can say:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Use only the report analyst MCP server.
Do not call live AWS APIs.
Do not update Security Hub.
Do not create tickets.
Analyze this finding against the latest generated reports.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This avoids a common failure mode: the AI assistant silently switching from “report analysis” to “live AWS investigation.”&lt;/p&gt;




&lt;h3&gt;
  
  
  When this approach is best
&lt;/h3&gt;

&lt;p&gt;Choose custom MCP when:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Reports already exist in S3.
The analyst should analyze approved artifacts, not live AWS state.
You want the smallest possible tool surface.
You want the same report evidence used across analysts.
You want the assistant to produce draft analysis, not operational changes.
You want to avoid broad AWS API exposure.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is the right pattern for security teams that already generate Security Hub or GuardDuty reports through a controlled pipeline.&lt;/p&gt;




&lt;h3&gt;
  
  
  Required controls
&lt;/h3&gt;

&lt;p&gt;The custom MCP server should run with a runtime role that can only:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;List approved report prefixes.
Read approved report objects.
Decrypt report objects if needed.
Invoke an approved Bedrock model if model-assisted analysis is enabled.
Write CloudWatch logs.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It should explicitly deny:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Security Hub writes.
GuardDuty writes.
S3 writes to the report bucket.
IAM changes.
EC2 changes.
KMS destructive actions.
Lambda invoke.
SSM commands.
ECS Exec.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The endpoint should require company authentication. Do not expose a public MCP endpoint with a long-lived shared token.&lt;/p&gt;

&lt;p&gt;A good production pattern is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Claude Code signed in with a company account
        +
Company SSO / OAuth / short-lived MCP bearer token
        +
Custom MCP endpoint
        +
Read-only report access
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The Claude or Codex account gives access to the AI client. The company token gives access to the MCP endpoint. The MCP runtime role gives access to the report bucket.&lt;/p&gt;

&lt;p&gt;Those are separate identities, and that separation is healthy.&lt;/p&gt;




&lt;h3&gt;
  
  
  Why this approach is not ideal for generating reports
&lt;/h3&gt;

&lt;p&gt;Custom MCP should not replace a backend reporting pipeline.&lt;/p&gt;

&lt;p&gt;If the job is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Every Tuesday, collect all Security Hub findings, enrich them, and write reports to S3.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;then MCP is not the right primary engine.&lt;/p&gt;

&lt;p&gt;MCP is a tool interface for an agent. It is not a scheduler, state tracker, report renderer, or production batch engine by default.&lt;/p&gt;

&lt;p&gt;For that, use Lambda or another backend compute service.&lt;/p&gt;




&lt;h2&gt;
  
  
  Approach 3: Lambda + boto3 + Bedrock for scheduled reporting
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What it is
&lt;/h3&gt;

&lt;p&gt;The Lambda + boto3 + Bedrock pattern is a backend automation pipeline.&lt;/p&gt;

&lt;p&gt;In the reviewed implementation pattern, Lambda performs deterministic collection, scoring, filtering, enrichment, fallback handling, and report assembly.&lt;/p&gt;

&lt;p&gt;The architecture looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;EventBridge Scheduler
        ↓
Lambda
        ↓
boto3 reads Security Hub and ECR
        ↓
Bedrock Converse API enriches bounded batches
        ↓
Lambda assembles final report deterministically
        ↓
S3 stores Markdown, HTML, JSON, SVG, and state files
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is not MCP.&lt;/p&gt;

&lt;p&gt;This is not an interactive agent.&lt;/p&gt;

&lt;p&gt;This is a scheduled reporting system.&lt;/p&gt;

&lt;p&gt;Amazon Bedrock’s Converse API provides a consistent interface for sending messages to supported models, and the operation requires &lt;code&gt;bedrock:InvokeModel&lt;/code&gt; permission.&lt;/p&gt;

&lt;p&gt;That fits the Lambda model well: the function prepares bounded input, invokes the model, validates or falls back, and writes the final report.&lt;/p&gt;




&lt;h3&gt;
  
  
  What this pattern does well
&lt;/h3&gt;

&lt;p&gt;The Lambda pattern is strong because it is deterministic around the model.&lt;/p&gt;

&lt;p&gt;A good production implementation does not ask the model to do everything.&lt;/p&gt;

&lt;p&gt;It should use the model for bounded enrichment, while Lambda owns:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Collection
Filtering
Scoring
Sorting
Deduplication
ECR latest-image filtering
Report structure
Fallback behavior
S3 output
State tracking
Schedule
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is the correct division of labor.&lt;/p&gt;

&lt;p&gt;The model helps with language, explanation, remediation wording, and executive summarization.&lt;/p&gt;

&lt;p&gt;The code controls the evidence pipeline.&lt;/p&gt;




&lt;h3&gt;
  
  
  Best use cases
&lt;/h3&gt;

&lt;p&gt;Use Lambda + boto3 + Bedrock when:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Reports must run on a schedule.
The output must be consistent every week.
No analyst should be required to trigger the workflow.
Findings need deterministic scoring and sorting.
The organization needs report history and burn-down trends.
The output must be stored centrally.
There must be fallback if AI enrichment fails.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is the right pattern for:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Weekly Security Hub executive reports.
GuardDuty summary reports.
ECR vulnerability reporting.
Manager-facing HTML reports.
DevOps remediation backlog generation.
Security trend/burn-down reporting.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Why Lambda is better than MCP for this job
&lt;/h3&gt;

&lt;p&gt;Lambda has a clear production control model:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Lambda execution role
        ↓
Read security findings
        ↓
Invoke Bedrock
        ↓
Write reports to S3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is easy to audit.&lt;/p&gt;

&lt;p&gt;MCP would add unnecessary moving parts:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;MCP client
Agent session
Tool approval
Workstation profile
Prompt/session state
Interactive user dependency
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Those are useful for human-led analysis. They are not useful for unattended weekly reporting.&lt;/p&gt;




&lt;h3&gt;
  
  
  Required controls
&lt;/h3&gt;

&lt;p&gt;For a production Lambda reporting job, enforce:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;securityhub:GetFindings only for Security Hub read.
ECR read-only actions if ECR latest-image validation is required.
bedrock:InvokeModel scoped to approved model or inference profile where possible.
s3:PutObject only to approved report prefixes.
s3:GetObject only for state/history files if needed.
No Security Hub write permissions.
No GuardDuty write permissions.
No IAM mutation.
No remediation actions.
CloudWatch logging.
S3 encryption and versioning.
EventBridge schedule ownership.
Deterministic fallback when Bedrock fails.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The most important design rule:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Bedrock should enrich the report. It should not control the report pipeline.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The Lambda should be able to produce a safe deterministic report even if the model fails, times out, or returns malformed output.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why all three designs are correct
&lt;/h2&gt;

&lt;p&gt;The confusion usually comes from treating “AI security assistant” as one thing.&lt;/p&gt;

&lt;p&gt;It is not one thing.&lt;/p&gt;

&lt;p&gt;There are at least three jobs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Live investigation
Report analysis
Report generation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each job has a different control boundary.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Question&lt;/th&gt;
&lt;th&gt;Best architecture&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;“What is currently in Security Hub?”&lt;/td&gt;
&lt;td&gt;AWS Managed MCP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;“What does the latest generated report say about this finding?”&lt;/td&gt;
&lt;td&gt;Custom MCP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;“Generate the weekly report every Tuesday.”&lt;/td&gt;
&lt;td&gt;Lambda + boto3 + Bedrock&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;“Help me review Terraform or AWS docs while coding.”&lt;/td&gt;
&lt;td&gt;AWS Managed MCP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;“Analyze approved S3 report artifacts only.”&lt;/td&gt;
&lt;td&gt;Custom MCP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;“Create manager-ready reports without human interaction.”&lt;/td&gt;
&lt;td&gt;Lambda&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;That is why all three are valid.&lt;/p&gt;

&lt;p&gt;They are not competing solutions. They are lanes.&lt;/p&gt;




&lt;h2&gt;
  
  
  The clean operating model
&lt;/h2&gt;

&lt;p&gt;Use this model to avoid confusion.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Lane 1: Production reporting
Purpose: Generate reports
Technology: Lambda + boto3 + Bedrock + S3
Trigger: EventBridge schedule or controlled manual invoke
Output: Markdown, HTML, JSON, CSV, SVG, report state
Human role: Review report and act on findings

Lane 2: Report analyst
Purpose: Analyze generated reports
Technology: Custom MCP
Trigger: Analyst prompt in Claude Code or Codex
Output: Evidence-bound analysis and ticket wording
Human role: Paste finding, review answer, create ticket manually

Lane 3: Live AWS triage / developer assistant
Purpose: Query live AWS context or docs
Technology: AWS Managed MCP / Agent Toolkit
Trigger: Analyst or developer prompt
Output: Live read-only investigation notes, docs, code guidance
Human role: Approve tool calls and validate output
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is the architecture I would use in a mature security program.&lt;/p&gt;




&lt;h2&gt;
  
  
  When to use what, based on corporate tooling
&lt;/h2&gt;

&lt;h3&gt;
  
  
  If your company uses Claude Code
&lt;/h3&gt;

&lt;p&gt;Use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AWS Managed MCP for live AWS read-only triage.
Custom MCP for report analysis.
Lambda for scheduled reports.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Claude Code becomes the analyst interface. The MCP endpoint should be company-authenticated, preferably through OAuth, SSO, ZTNA, or short-lived tokens.&lt;/p&gt;

&lt;h3&gt;
  
  
  If your company uses Codex
&lt;/h3&gt;

&lt;p&gt;Use the same pattern.&lt;/p&gt;

&lt;p&gt;Codex can be the MCP client for either:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AWS Managed MCP
Custom Report Analyst MCP
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But do not confuse the Codex account with the AWS identity. The AI account authenticates you to the tool. The MCP endpoint must still require company-side authorization.&lt;/p&gt;

&lt;h3&gt;
  
  
  If your company has strict SSO and no local AWS profiles
&lt;/h3&gt;

&lt;p&gt;Use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Custom MCP for report analysis.
Lambda for report generation.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Avoid requiring every analyst to configure AWS profiles locally.&lt;/p&gt;

&lt;p&gt;Let the MCP backend carry the read-only runtime role and company endpoint authentication.&lt;/p&gt;

&lt;h3&gt;
  
  
  If your company allows read-only AWS SSO profiles on engineer laptops
&lt;/h3&gt;

&lt;p&gt;AWS Managed MCP becomes more attractive.&lt;/p&gt;

&lt;p&gt;Use it for live investigation, but keep write actions denied.&lt;/p&gt;

&lt;h3&gt;
  
  
  If your company does not allow AI tools to access live AWS
&lt;/h3&gt;

&lt;p&gt;Do not use AWS Managed MCP for live API calls.&lt;/p&gt;

&lt;p&gt;Use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Lambda generates approved reports.
Custom MCP reads only approved report artifacts.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This gives the AI assistant useful context without granting broad live AWS access.&lt;/p&gt;

&lt;h3&gt;
  
  
  If your company already has strong serverless standards
&lt;/h3&gt;

&lt;p&gt;Lambda + boto3 + Bedrock is the cleanest reporting engine.&lt;/p&gt;

&lt;p&gt;Use SAM, Terraform, or your internal platform pattern. Keep the reporting job deterministic and auditable.&lt;/p&gt;

&lt;h3&gt;
  
  
  If your company is Kubernetes-first
&lt;/h3&gt;

&lt;p&gt;The custom MCP server can run on EKS.&lt;/p&gt;

&lt;p&gt;But do not choose EKS just because it is more advanced. For a small stateless MCP API, ECS Fargate or Lambda-style backend hosting is often simpler. EKS is appropriate when the organization already has hardened Kubernetes standards, ingress controls, pod identity, network policies, and platform ownership.&lt;/p&gt;




&lt;h2&gt;
  
  
  Common misunderstanding: “MCP means the model is doing the work”
&lt;/h2&gt;

&lt;p&gt;No.&lt;/p&gt;

&lt;p&gt;MCP is the tool interface.&lt;/p&gt;

&lt;p&gt;The model reasons.&lt;/p&gt;

&lt;p&gt;The MCP server exposes tools.&lt;/p&gt;

&lt;p&gt;IAM and application code enforce permissions.&lt;/p&gt;

&lt;p&gt;The backend system still matters.&lt;/p&gt;

&lt;p&gt;A bad MCP design can give the model too many hands.&lt;/p&gt;

&lt;p&gt;A good MCP design gives it only the tools it needs.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AWS Managed MCP:
Good for live read-only AWS questions.

Custom MCP:
Good for reading approved S3 report artifacts.

Lambda:
Good for scheduled collection and report generation.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Different tools. Different jobs.&lt;/p&gt;




&lt;h2&gt;
  
  
  Common misunderstanding: “Custom MCP is always safer”
&lt;/h2&gt;

&lt;p&gt;Not automatically.&lt;/p&gt;

&lt;p&gt;Custom MCP is safer only if it exposes fewer tools and has better boundaries.&lt;/p&gt;

&lt;p&gt;A custom MCP server with a generic &lt;code&gt;call_aws&lt;/code&gt; tool can be riskier than AWS Managed MCP with strong IAM controls.&lt;/p&gt;

&lt;p&gt;A safe custom MCP server should be domain-specific:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Read this report.
Search this report.
Analyze this pasted finding against reports.
Generate ticket draft.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It should not become a private version of the entire AWS API.&lt;/p&gt;




&lt;h2&gt;
  
  
  Common misunderstanding: “Lambda + Bedrock is not agentic, so it is less advanced”
&lt;/h2&gt;

&lt;p&gt;That is the wrong way to think about it.&lt;/p&gt;

&lt;p&gt;Scheduled security reporting should be boring.&lt;/p&gt;

&lt;p&gt;Boring is good.&lt;/p&gt;

&lt;p&gt;A weekly executive report should not depend on an agent making fresh tool decisions every time. It should follow a known pipeline:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Collect
Normalize
Score
Sort
Enrich
Validate
Fallback
Render
Store
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The AI model can improve the wording and analysis, but the pipeline should remain deterministic.&lt;/p&gt;

&lt;p&gt;That is a stronger architecture for production reporting.&lt;/p&gt;




&lt;h2&gt;
  
  
  Security decision table
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Requirement&lt;/th&gt;
&lt;th&gt;AWS Managed MCP&lt;/th&gt;
&lt;th&gt;Custom MCP&lt;/th&gt;
&lt;th&gt;Lambda + boto3 + Bedrock&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Live AWS Security Hub triage&lt;/td&gt;
&lt;td&gt;Strong&lt;/td&gt;
&lt;td&gt;Weak unless it calls live AWS&lt;/td&gt;
&lt;td&gt;Possible but not interactive&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Analyze generated S3 reports&lt;/td&gt;
&lt;td&gt;Possible but too broad&lt;/td&gt;
&lt;td&gt;Strong&lt;/td&gt;
&lt;td&gt;Possible but not conversational&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scheduled weekly report&lt;/td&gt;
&lt;td&gt;Weak&lt;/td&gt;
&lt;td&gt;Weak&lt;/td&gt;
&lt;td&gt;Strong&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Read-only guardrails&lt;/td&gt;
&lt;td&gt;IAM + tool approval&lt;/td&gt;
&lt;td&gt;IAM + app tool design&lt;/td&gt;
&lt;td&gt;IAM execution role&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No local AWS profile needed&lt;/td&gt;
&lt;td&gt;Usually no&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Best user interface&lt;/td&gt;
&lt;td&gt;Claude Code / Codex&lt;/td&gt;
&lt;td&gt;Claude Code / Codex&lt;/td&gt;
&lt;td&gt;S3/HTML/Slack/Jira after generation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Best production automation&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Best analyst conversation&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lowest live AWS API exposure&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Medium, controlled by Lambda role&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Best audit story for scheduled reports&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;Strong&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Best audit story for report artifact analysis&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;Strong&lt;/td&gt;
&lt;td&gt;Strong for generation, not interaction&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Recommended final architecture
&lt;/h2&gt;

&lt;p&gt;For a mature AWS security team, I would implement all three, but keep them separated.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. Lambda + boto3 + Bedrock
   Generates official weekly/daily security reports.

2. Custom MCP
   Lets analysts ask questions about those reports without querying live AWS.

3. AWS Managed MCP
   Lets approved engineers perform live read-only AWS triage and development support.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The important rule:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Do not let the lanes blur.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Production reporting should not depend on a chat session.&lt;/p&gt;

&lt;p&gt;Report analysis should not silently become live AWS querying.&lt;/p&gt;

&lt;p&gt;Live AWS querying should not perform write actions.&lt;/p&gt;

&lt;p&gt;Do not force one architecture to do all three jobs.&lt;/p&gt;

&lt;p&gt;That is how security automation becomes confusing and risky.&lt;/p&gt;

&lt;p&gt;The best architecture is not the most advanced one. It is the one with the clearest control boundary for the job.&lt;/p&gt;




&lt;h2&gt;
  
  
  Example workflow
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Monday morning: scheduled report generation
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;EventBridge triggers Lambda.
Lambda collects Security Hub findings.
Lambda validates ECR latest-image findings.
Lambda invokes Bedrock in bounded batches.
Lambda assembles Markdown and HTML.
Lambda writes report artifacts to S3.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No analyst is involved.&lt;/p&gt;

&lt;h3&gt;
  
  
  Later that day: analyst reviews one finding
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Analyst opens Claude Code.
Analyst pastes a Security Hub finding.
Claude Code calls custom MCP.
Custom MCP reads latest S3 reports.
Custom MCP returns evidence-bound analysis.
Analyst creates Jira ticket manually.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No live Security Hub API call is needed.&lt;/p&gt;

&lt;h3&gt;
  
  
  During remediation: engineer needs AWS context
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Engineer opens Claude Code or Codex.
Engineer uses AWS Managed MCP with read-only SSO profile.
Agent searches AWS docs and checks live AWS state.
Engineer validates and implements remediation through normal change control.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No automatic remediation is approved.&lt;/p&gt;




</description>
      <category>aws</category>
      <category>cybersecurity</category>
      <category>mcp</category>
      <category>bedrock</category>
    </item>
    <item>
      <title>MCP for AWS Security Engineers: Build a Read-Only Security Hub Triage Agent</title>
      <dc:creator>Mike Anderson</dc:creator>
      <pubDate>Thu, 16 Jul 2026 09:54:32 +0000</pubDate>
      <link>https://dev.to/mike_anderson_d01f52129fb/mcp-for-aws-security-engineers-build-a-read-only-security-hub-triage-agent-1iep</link>
      <guid>https://dev.to/mike_anderson_d01f52129fb/mcp-for-aws-security-engineers-build-a-read-only-security-hub-triage-agent-1iep</guid>
      <description>&lt;h2&gt;
  
  
  MCP for AWS Security Engineers: Build a Read-Only Security Hub Triage Agent
&lt;/h2&gt;

&lt;p&gt;For AWS-heavy security work, I would start with &lt;strong&gt;AWS Agent Toolkit for AWS and the managed AWS MCP Server&lt;/strong&gt;, not a custom MCP server.&lt;/p&gt;

&lt;p&gt;The reason is practical. AWS now provides a managed MCP path that can connect AI coding agents to AWS documentation, AWS APIs, AWS skills, and existing IAM credentials. The Agent Toolkit also provides plugin-based setup for supported agents such as Claude Code and Codex.&lt;/p&gt;

&lt;p&gt;For security teams, that is the right starting point because the enforcement point remains AWS IAM, not the model.&lt;/p&gt;

&lt;p&gt;The initial operating model should be strict:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Read-only first.&lt;/li&gt;
&lt;li&gt;No production write authority.&lt;/li&gt;
&lt;li&gt;No access to secrets.&lt;/li&gt;
&lt;li&gt;No raw customer PII or sensitive incident logs in prompt context.&lt;/li&gt;
&lt;li&gt;No automatic remediation.&lt;/li&gt;
&lt;li&gt;No AI-approved suppression, exception, merge, deploy, or risk acceptance.&lt;/li&gt;
&lt;li&gt;Human review and CI/CD remain the release authority.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is the same posture I would use for a governed Claude Code or Codex rollout: named identities, SSO, scoped credentials, default deny, tool approval, audit logs, and security evidence tied back to tickets, pull requests, CI logs, and cloud findings.&lt;/p&gt;




&lt;h2&gt;
  
  
  What we are building
&lt;/h2&gt;

&lt;p&gt;This article walks through a practical security workflow:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A read-only Security Hub triage assistant that helps a junior security engineer produce a daily or weekly findings summary, remediation backlog, and evidence pack without allowing the agent to modify AWS.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The agent will be able to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Read AWS Security Hub findings.&lt;/li&gt;
&lt;li&gt;Group findings by account, severity, product, resource, and control.&lt;/li&gt;
&lt;li&gt;Explain why a finding matters.&lt;/li&gt;
&lt;li&gt;Draft remediation tickets.&lt;/li&gt;
&lt;li&gt;Draft a Slack-ready summary.&lt;/li&gt;
&lt;li&gt;Produce local markdown, CSV, and JSON evidence files.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The agent will &lt;strong&gt;not&lt;/strong&gt; be able to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Suppress findings.&lt;/li&gt;
&lt;li&gt;Archive findings.&lt;/li&gt;
&lt;li&gt;Mark findings resolved.&lt;/li&gt;
&lt;li&gt;Disable Security Hub standards.&lt;/li&gt;
&lt;li&gt;Modify IAM, S3, EC2, KMS, GuardDuty, Inspector, or Config.&lt;/li&gt;
&lt;li&gt;Deploy remediation.&lt;/li&gt;
&lt;li&gt;Run destructive scripts.&lt;/li&gt;
&lt;li&gt;Approve risk acceptance.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is not a generic AI demo. This is a security-controlled workflow where MCP gives the agent access to context, while IAM, SCPs, tool approval, and human review define the real boundary.&lt;/p&gt;




&lt;h2&gt;
  
  
  What is MCP?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;MCP stands for Model Context Protocol.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In plain English, MCP is a standard way for an AI assistant to connect to external systems such as cloud platforms, source code repositories, ticketing systems, databases, monitoring tools, documentation, and security platforms.&lt;/p&gt;

&lt;p&gt;A simple mental model:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;LLM / Agent
   |
   | asks for context or tool execution
   v
MCP Client
   |
   | speaks MCP
   v
MCP Server
   |
   | exposes approved tools and data
   v
AWS / GitHub / Jira / Security Hub / Internal APIs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;MCP is &lt;strong&gt;not the model&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;MCP is &lt;strong&gt;not Claude&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;MCP is &lt;strong&gt;not Codex&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;MCP is the connector layer that lets an AI tool interact with approved external capabilities in a consistent way.&lt;/p&gt;

&lt;p&gt;A practical comparison:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Component&lt;/th&gt;
&lt;th&gt;What it is&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;AI model&lt;/td&gt;
&lt;td&gt;The reasoning engine&lt;/td&gt;
&lt;td&gt;Claude, GPT, Nova, Qwen&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Agent client&lt;/td&gt;
&lt;td&gt;The user-facing agent tool&lt;/td&gt;
&lt;td&gt;Claude Code, Codex, Cursor, Kiro&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MCP server&lt;/td&gt;
&lt;td&gt;The tool and data connector&lt;/td&gt;
&lt;td&gt;AWS MCP Server, GitHub MCP Server&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tool&lt;/td&gt;
&lt;td&gt;An action exposed by the server&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;securityhub:GetFindings&lt;/code&gt;, documentation search&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Resource&lt;/td&gt;
&lt;td&gt;Read-only context exposed by the server&lt;/td&gt;
&lt;td&gt;Documentation, metadata, finding details&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IAM / policy&lt;/td&gt;
&lt;td&gt;The enforcement layer&lt;/td&gt;
&lt;td&gt;AWS role, SCP, permission boundary&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The important security point is simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;MCP gives the agent hands. IAM decides what those hands are allowed to touch.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  What an MCP server actually does
&lt;/h2&gt;

&lt;p&gt;An MCP server exposes capabilities to an AI agent.&lt;/p&gt;

&lt;p&gt;Those capabilities usually fall into three areas:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;MCP capability&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;th&gt;Security impact&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Tools&lt;/td&gt;
&lt;td&gt;Callable functions or actions&lt;/td&gt;
&lt;td&gt;Can be read-only or mutating&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Resources&lt;/td&gt;
&lt;td&gt;Context or data the model can read&lt;/td&gt;
&lt;td&gt;Usually safer, but can expose sensitive data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Prompts&lt;/td&gt;
&lt;td&gt;Reusable task templates&lt;/td&gt;
&lt;td&gt;Useful for standardized workflows&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;That matters because a junior engineer may think, “The model only answers questions.”&lt;/p&gt;

&lt;p&gt;That assumption is no longer safe once tools are attached.&lt;/p&gt;

&lt;p&gt;With MCP, the model may be able to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Query Security Hub findings.&lt;/li&gt;
&lt;li&gt;Search AWS documentation.&lt;/li&gt;
&lt;li&gt;Call AWS APIs.&lt;/li&gt;
&lt;li&gt;Read repository files.&lt;/li&gt;
&lt;li&gt;Read Jira tickets.&lt;/li&gt;
&lt;li&gt;Read internal runbooks.&lt;/li&gt;
&lt;li&gt;Generate remediation plans.&lt;/li&gt;
&lt;li&gt;In poorly controlled environments, call write APIs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is why the first security decision is not:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Which model should we use?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The first security decision is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What tool permissions will this agent have, and where are those permissions enforced?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For production security work, the model must never be treated as the control boundary.&lt;/p&gt;

&lt;p&gt;The control boundary must be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;IAM.&lt;/li&gt;
&lt;li&gt;SCPs.&lt;/li&gt;
&lt;li&gt;Permission boundaries.&lt;/li&gt;
&lt;li&gt;SSO permission sets.&lt;/li&gt;
&lt;li&gt;MCP tool allowlists.&lt;/li&gt;
&lt;li&gt;Claude Code or Codex approval modes.&lt;/li&gt;
&lt;li&gt;Audit logs.&lt;/li&gt;
&lt;li&gt;Human approval.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Where MCP fits in the agent architecture
&lt;/h2&gt;

&lt;p&gt;A useful operating model is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Prompt -&amp;gt; Agent loop -&amp;gt; MCP tools -&amp;gt; External systems -&amp;gt; Evidence/output
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;strong&gt;agent loop&lt;/strong&gt; is the cycle where the model reasons, requests a tool, receives the result, reasons again, and continues until the task is complete.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;harness&lt;/strong&gt; is everything around that loop: tool permissions, context management, project rules, logs, approval gates, hooks, and safety boundaries.&lt;/p&gt;

&lt;p&gt;For security work, MCP sits inside the harness.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Claude Code / Codex
   |
   | project rules, approval mode, permissions
   v
MCP client
   |
   | approved tool calls only
   v
AWS MCP Server
   |
   | authenticated AWS API access
   v
AWS IAM role / permission set
   |
   | read-only Security Hub permissions
   v
AWS Security Hub
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That distinction is important.&lt;/p&gt;

&lt;p&gt;The model can recommend. The harness controls. IAM enforces.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why MCP is useful for cybersecurity work
&lt;/h2&gt;

&lt;p&gt;Security work is context-heavy.&lt;/p&gt;

&lt;p&gt;A security engineer rarely needs a generic answer. We need the assistant to understand:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which AWS account is affected.&lt;/li&gt;
&lt;li&gt;Which Security Hub control failed.&lt;/li&gt;
&lt;li&gt;Whether the finding is active, archived, suppressed, or resolved.&lt;/li&gt;
&lt;li&gt;Whether the source is Security Hub CSPM, GuardDuty, Inspector, Macie, Config, or another product.&lt;/li&gt;
&lt;li&gt;Whether the affected resource is public-facing.&lt;/li&gt;
&lt;li&gt;Whether the account is production, shared services, security tooling, or sandbox.&lt;/li&gt;
&lt;li&gt;What remediation is appropriate.&lt;/li&gt;
&lt;li&gt;What evidence should be retained.&lt;/li&gt;
&lt;li&gt;What should be fixed immediately versus tracked in backlog.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without MCP, the engineer manually copies and pastes data into the AI tool.&lt;/p&gt;

&lt;p&gt;With MCP, the agent can retrieve approved read-only data directly and produce a consistent investigation output.&lt;/p&gt;

&lt;p&gt;Useful security workflows include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Security Hub triage.&lt;/li&gt;
&lt;li&gt;GuardDuty finding explanation.&lt;/li&gt;
&lt;li&gt;Inspector vulnerability prioritization.&lt;/li&gt;
&lt;li&gt;CloudTrail event review.&lt;/li&gt;
&lt;li&gt;IAM access review support.&lt;/li&gt;
&lt;li&gt;AWS documentation lookup.&lt;/li&gt;
&lt;li&gt;Control evidence preparation.&lt;/li&gt;
&lt;li&gt;Remediation backlog drafting.&lt;/li&gt;
&lt;li&gt;Incident timeline drafting.&lt;/li&gt;
&lt;li&gt;Cloud security review preparation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But MCP is not magic.&lt;/p&gt;

&lt;p&gt;It does not replace security ownership, SOC judgment, IAM design, threat modeling, change control, CI/CD gates, incident commander decisions, or audit evidence review.&lt;/p&gt;

&lt;p&gt;MCP should reduce manual collection and improve consistency. It should not become an ungoverned SOAR platform.&lt;/p&gt;




&lt;h2&gt;
  
  
  Should security teams build their own MCP server?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Recommendation: use official or vendor-supported MCP servers first. Build your own only when you have a specific internal workflow that existing servers cannot safely support.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For AWS security work, start with:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;AWS Agent Toolkit for AWS.&lt;/li&gt;
&lt;li&gt;AWS MCP Server.&lt;/li&gt;
&lt;li&gt;A dedicated read-only AWS profile or IAM Identity Center permission set.&lt;/li&gt;
&lt;li&gt;Claude Code or Codex MCP configuration.&lt;/li&gt;
&lt;li&gt;A controlled Security Hub triage workflow.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Decision table
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Use case&lt;/th&gt;
&lt;th&gt;Build your own MCP server?&lt;/th&gt;
&lt;th&gt;Recommended path&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;AWS documentation lookup&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;AWS Agent Toolkit / AWS MCP Server&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Security Hub read-only triage&lt;/td&gt;
&lt;td&gt;No, initially&lt;/td&gt;
&lt;td&gt;AWS MCP Server with read-only IAM&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GuardDuty / Inspector / Macie review&lt;/td&gt;
&lt;td&gt;No, initially&lt;/td&gt;
&lt;td&gt;AWS MCP Server with scoped read-only permissions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Jira ticket drafting&lt;/td&gt;
&lt;td&gt;Usually no&lt;/td&gt;
&lt;td&gt;Vendor MCP server or local draft output&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GitHub repo analysis&lt;/td&gt;
&lt;td&gt;Usually no&lt;/td&gt;
&lt;td&gt;GitHub MCP or native repo context with repo-scoped permissions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Internal CMDB enrichment&lt;/td&gt;
&lt;td&gt;Maybe&lt;/td&gt;
&lt;td&gt;Internal read-only MCP server&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Internal GRC evidence register&lt;/td&gt;
&lt;td&gt;Maybe&lt;/td&gt;
&lt;td&gt;Private MCP server or API wrapper&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Automated remediation&lt;/td&gt;
&lt;td&gt;Not initially&lt;/td&gt;
&lt;td&gt;Keep outside MCP until governance is mature&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Security Hub suppression/update&lt;/td&gt;
&lt;td&gt;No for junior workflow&lt;/td&gt;
&lt;td&gt;Human and SOC-approved process only&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Trusted source order
&lt;/h3&gt;

&lt;p&gt;Use this priority order for MCP servers:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Official vendor documentation.&lt;/li&gt;
&lt;li&gt;Official AWS Agent Toolkit / AWS MCP Server.&lt;/li&gt;
&lt;li&gt;Official MCP Registry where appropriate.&lt;/li&gt;
&lt;li&gt;Vendor-maintained GitHub repositories.&lt;/li&gt;
&lt;li&gt;Your internal private registry for internal MCP servers.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Be careful with random public MCP servers.&lt;/p&gt;

&lt;p&gt;For a security team, an MCP server is not a harmless browser extension. It is a privileged integration point.&lt;/p&gt;

&lt;p&gt;A malicious or poorly written MCP server can become:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A credential theft path.&lt;/li&gt;
&lt;li&gt;A data exfiltration path.&lt;/li&gt;
&lt;li&gt;A prompt-injection bridge.&lt;/li&gt;
&lt;li&gt;A hidden write-action path.&lt;/li&gt;
&lt;li&gt;A supply chain risk.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Treat MCP servers like production integrations.&lt;/p&gt;




&lt;h2&gt;
  
  
  AWS Agent Toolkit: what it gives you
&lt;/h2&gt;

&lt;p&gt;AWS Agent Toolkit provides plugins that bundle AWS MCP Server configuration and curated AWS skills for agent workflows.&lt;/p&gt;

&lt;p&gt;For the workflow in this article, the relevant AWS MCP Server capabilities are:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;Use in this workflow&lt;/th&gt;
&lt;th&gt;Initial recommendation&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Documentation search&lt;/td&gt;
&lt;td&gt;Explain Security Hub controls and AWS service behavior&lt;/td&gt;
&lt;td&gt;Allow&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AWS API calls&lt;/td&gt;
&lt;td&gt;Read Security Hub, GuardDuty, Inspector, Config, and CloudTrail context&lt;/td&gt;
&lt;td&gt;Allow only through read-only IAM&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sandboxed script execution&lt;/td&gt;
&lt;td&gt;Run multi-step AWS checks&lt;/td&gt;
&lt;td&gt;Disable or require explicit approval at pilot stage&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Presigned URL generation&lt;/td&gt;
&lt;td&gt;File transfer support&lt;/td&gt;
&lt;td&gt;Disable unless specifically needed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Long-running task polling&lt;/td&gt;
&lt;td&gt;Check status of API/script tasks&lt;/td&gt;
&lt;td&gt;Allow only if required&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;For a read-only security workflow, I would allow documentation tools and controlled AWS API calls. I would &lt;strong&gt;deny or require approval for script execution initially&lt;/strong&gt;, especially for junior engineers.&lt;/p&gt;




&lt;h2&gt;
  
  
  Target architecture
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Security Engineer
   |
   | asks question in Claude Code or Codex
   v
Claude Code / Codex
   |
   | MCP client
   v
AWS Agent Toolkit / AWS MCP Server
   |
   | authenticated request
   v
AWS IAM Identity Center profile: sec-mcp-readonly
   |
   | read-only permissions only
   v
AWS Security Hub
   |
   | Get / List / Describe / BatchGet only
   v
Local output files
   |
   | markdown summary, CSV backlog, JSON evidence
   v
Human review
   |
   | Jira / Slack / audit evidence
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The key design choice is that the agent can &lt;strong&gt;read and reason&lt;/strong&gt;, but it cannot &lt;strong&gt;change the environment&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This aligns with a production cloud security baseline: least privilege, centralized identity, MFA, guardrails, logging, evidence retention, and clear owner accountability.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 1: Create the AWS read-only identity
&lt;/h2&gt;

&lt;p&gt;Use IAM Identity Center if available.&lt;/p&gt;

&lt;p&gt;Create a permission set:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Permission set name: SecMCPReadOnly
Session duration: 4 hours
Assigned group: SecurityEngineering-MCP-ReadOnly
Accounts: security tooling account and selected workload accounts
MFA: required through IdP / IAM Identity Center
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Do not use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An administrator role.&lt;/li&gt;
&lt;li&gt;A shared access key.&lt;/li&gt;
&lt;li&gt;A personal long-lived IAM user.&lt;/li&gt;
&lt;li&gt;A generic service account that hides the human operator.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Use a named human identity with SSO. The goal is that every MCP-driven AWS API call is attributable to a real engineer.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 2: Attach a scoped read-only IAM policy
&lt;/h2&gt;

&lt;p&gt;AWS provides managed read-only policies, but for this workflow I prefer a custom policy because the scope is explicit and easier to explain during audit.&lt;/p&gt;

&lt;h3&gt;
  
  
  IAM policy: Security Hub MCP read-only
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2012-10-17"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Statement"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Sid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"AllowIdentityCheck"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Effect"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Allow"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"sts:GetCallerIdentity"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Resource"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"*"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Sid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"AllowSecurityHubReadOnly"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Effect"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Allow"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"securityhub:Get*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"securityhub:List*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"securityhub:Describe*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"securityhub:BatchGet*"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Resource"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"*"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Sid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"AllowReadOnlyInvestigationContext"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Effect"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Allow"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"cloudtrail:LookupEvents"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"guardduty:GetFindings"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"guardduty:ListFindings"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"guardduty:ListDetectors"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"inspector2:ListFindings"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"access-analyzer:ListFindings"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"access-analyzer:GetFinding"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"organizations:DescribeOrganization"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"organizations:ListAccounts"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"config:SelectResourceConfig"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"config:GetResourceConfigHistory"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Resource"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"*"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Sid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"DenyWriteActionsForMCPPilot"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Effect"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Deny"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"securityhub:BatchUpdateFindings"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"securityhub:BatchImportFindings"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"securityhub:Update*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"securityhub:Delete*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"securityhub:Disable*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"securityhub:Enable*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"securityhub:Create*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"securityhub:TagResource"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"securityhub:UntagResource"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"iam:*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"s3:Put*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"s3:Delete*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"ec2:AuthorizeSecurityGroupIngress"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"ec2:AuthorizeSecurityGroupEgress"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"ec2:RevokeSecurityGroupIngress"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"ec2:RevokeSecurityGroupEgress"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"kms:Put*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"kms:ScheduleKeyDeletion"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"config:Put*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"config:Delete*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"guardduty:Update*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"guardduty:Delete*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"inspector2:Update*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"inspector2:BatchUpdate*"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Resource"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"*"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Why include the explicit deny?
&lt;/h3&gt;

&lt;p&gt;The explicit deny is not there because the allow statement grants those actions. It does not.&lt;/p&gt;

&lt;p&gt;The explicit deny is there because real environments are messy.&lt;/p&gt;

&lt;p&gt;A user may later inherit another permission set, a group policy, or a temporary role that adds write access. Explicit deny reduces the chance that the MCP workflow accidentally gains mutation capability through permission creep.&lt;/p&gt;

&lt;p&gt;For production accounts, pair this with an SCP or permission boundary where possible.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 3: Add an optional SCP for production accounts
&lt;/h2&gt;

&lt;p&gt;For production accounts, I would add an organization-level safety net.&lt;/p&gt;

&lt;p&gt;Example SCP concept:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2012-10-17"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Statement"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Sid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"PreventMCPReadOnlyRoleFromMutatingSecurityHub"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Effect"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Deny"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"securityhub:BatchUpdateFindings"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"securityhub:Update*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"securityhub:Delete*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"securityhub:Disable*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"securityhub:Enable*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"securityhub:Create*"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Resource"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Condition"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"ArnLike"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"aws:PrincipalArn"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="s2"&gt;"arn:aws:iam::*:role/aws-reserved/sso.amazonaws.com/*/AWSReservedSSO_SecMCPReadOnly_*"&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Test this carefully in a non-production account before applying it broadly.&lt;/p&gt;

&lt;p&gt;The SCP should not block the SOC, security tooling account, CI/CD remediation roles, or incident response break-glass roles.&lt;/p&gt;

&lt;p&gt;The objective is narrow:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This MCP read-only role must never mutate Security Hub findings or configuration.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Step 4: Configure AWS CLI and SSO profile
&lt;/h2&gt;

&lt;p&gt;Install or update the AWS CLI, then configure SSO:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws configure sso &lt;span class="nt"&gt;--profile&lt;/span&gt; sec-mcp-readonly
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Validate the identity:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws sts get-caller-identity &lt;span class="nt"&gt;--profile&lt;/span&gt; sec-mcp-readonly
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Expected output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"UserId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"AROAXXXXX:security.engineer@example.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Account"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"123456789012"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Arn"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"arn:aws:sts::123456789012:assumed-role/AWSReservedSSO_SecMCPReadOnly_xxxxx/security.engineer@example.com"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then test Security Hub read access:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws securityhub get-findings &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--profile&lt;/span&gt; sec-mcp-readonly &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--region&lt;/span&gt; us-east-1 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--max-results&lt;/span&gt; 5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now test that write access fails:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws securityhub batch-update-findings &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--profile&lt;/span&gt; sec-mcp-readonly &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--region&lt;/span&gt; us-east-1 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--finding-identifiers&lt;/span&gt; &lt;span class="s1"&gt;'[{"Id":"test","ProductArn":"arn:aws:securityhub:us-east-1::product/aws/securityhub"}]'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--workflow&lt;/span&gt; &lt;span class="s1"&gt;'{"Status":"SUPPRESSED"}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Expected result:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AccessDeniedException
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Keep that negative-control result as rollout evidence.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 5: Install AWS Agent Toolkit for Claude Code
&lt;/h2&gt;

&lt;p&gt;In Claude Code, install the AWS plugin:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/plugin install aws-core@claude-plugins-official
/reload-plugins
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then validate that the AWS MCP server is visible:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For the pilot, I would configure Claude Code so AWS API calls require approval and script execution is denied or requires explicit human approval.&lt;/p&gt;

&lt;p&gt;The point is not to slow engineers down. The point is to prevent the first rollout from quietly becoming an unapproved automation channel.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 6: Install AWS Agent Toolkit for Codex
&lt;/h2&gt;

&lt;p&gt;For Codex, AWS documents plugin setup through the Codex plugin marketplace:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;codex plugin marketplace add aws/agent-toolkit-for-aws
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then open Codex and use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/plugins
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Install the &lt;code&gt;aws-core&lt;/code&gt; plugin.&lt;/p&gt;

&lt;p&gt;For the pilot, configure Codex so MCP tools are explicitly approved and write-capable tools are disabled or denied.&lt;/p&gt;

&lt;p&gt;The exact approval configuration may vary by Codex version, so validate against the current Codex configuration reference before publishing your internal runbook.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 7: Direct MCP configuration if plugin install is not available
&lt;/h2&gt;

&lt;p&gt;If you cannot use the plugin flow, configure the AWS MCP Server directly through the MCP Proxy for AWS.&lt;/p&gt;

&lt;p&gt;Example Claude Code configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude mcp add-json aws-mcp &lt;span class="nt"&gt;--scope&lt;/span&gt; user &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="s1"&gt;'{
  "command": "uvx",
  "args": [
    "mcp-proxy-for-aws",
    "https://aws-mcp.us-east-1.api.aws/mcp",
    "--metadata",
    "AWS_REGION=us-east-1"
  ],
  "env": {
    "AWS_PROFILE": "sec-mcp-readonly"
  }
}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For Codex, place the MCP server configuration in your Codex config file.&lt;/p&gt;

&lt;p&gt;Example concept:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight toml"&gt;&lt;code&gt;&lt;span class="nn"&gt;[mcp_servers.aws-mcp]&lt;/span&gt;
&lt;span class="py"&gt;command&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"uvx"&lt;/span&gt;
&lt;span class="py"&gt;args&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="s"&gt;"mcp-proxy-for-aws"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s"&gt;"https://aws-mcp.us-east-1.api.aws/mcp"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s"&gt;"--metadata"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="py"&gt;"AWS_REGION&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="err"&gt;us-east&lt;/span&gt;&lt;span class="mi"&gt;-1&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="nn"&gt;[mcp_servers.aws-mcp.env]&lt;/span&gt;
&lt;span class="py"&gt;AWS_PROFILE&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"sec-mcp-readonly"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For multi-account security teams, configure an explicit profile allowlist. Do not let the agent discover or use every AWS profile on the workstation.&lt;/p&gt;

&lt;p&gt;Example concept:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;AWS_MCP_PROXY_PROFILES&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"sec-mcp-readonly prod-readonly security-readonly"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The default profile should be read-only.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 8: Configure tool approval and safety settings
&lt;/h2&gt;

&lt;p&gt;The security posture should be tool-specific.&lt;/p&gt;

&lt;p&gt;Recommended pilot posture:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool type&lt;/th&gt;
&lt;th&gt;Pilot setting&lt;/th&gt;
&lt;th&gt;Rationale&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;AWS documentation search&lt;/td&gt;
&lt;td&gt;Allow&lt;/td&gt;
&lt;td&gt;Low risk and high value&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AWS read-only API call&lt;/td&gt;
&lt;td&gt;Ask / approve&lt;/td&gt;
&lt;td&gt;Lets the engineer verify account and region&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AWS script execution&lt;/td&gt;
&lt;td&gt;Deny or ask&lt;/td&gt;
&lt;td&gt;Can create broad data access and complex behavior&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Presigned URL generation&lt;/td&gt;
&lt;td&gt;Deny&lt;/td&gt;
&lt;td&gt;Not needed for Security Hub triage&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;File write to local project&lt;/td&gt;
&lt;td&gt;Allow to approved output folder&lt;/td&gt;
&lt;td&gt;Needed for evidence pack&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Shell command execution&lt;/td&gt;
&lt;td&gt;Ask&lt;/td&gt;
&lt;td&gt;Can expose local files or environment variables&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Git operations&lt;/td&gt;
&lt;td&gt;Ask&lt;/td&gt;
&lt;td&gt;Prevents accidental commits or pushes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A good project rule is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;This project is a read-only AWS Security Hub triage workflow.

The agent may:
- Read Security Hub, GuardDuty, Inspector, Config, CloudTrail, and AWS documentation using the sec-mcp-readonly profile.
- Write markdown, CSV, and JSON files only under ./output.
- Draft remediation recommendations.

The agent must not:
- Modify AWS resources.
- Suppress, archive, import, or update Security Hub findings.
- Read secrets, credentials, environment files, customer PII, or raw sensitive logs.
- Commit, push, merge, deploy, or approve changes.
- Run remediation automatically.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 9: Create the local project folder
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; securityhub-mcp-triage/&lt;span class="o"&gt;{&lt;/span&gt;prompts,filters,output,evidence&lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="nb"&gt;cd &lt;/span&gt;securityhub-mcp-triage
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Recommended structure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;securityhub-mcp-triage/
  prompts/
    securityhub-triage.md
  filters/
    securityhub-critical-high.json
  output/
  evidence/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Keep this folder separate from application repositories. It should not contain source code, credentials, &lt;code&gt;.env&lt;/code&gt; files, or customer data.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 10: Create the Security Hub filter
&lt;/h2&gt;

&lt;p&gt;Create &lt;code&gt;filters/securityhub-critical-high.json&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"WorkflowStatus"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"NEW"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Comparison"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"EQUALS"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"NOTIFIED"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Comparison"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"EQUALS"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"RecordState"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ACTIVE"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Comparison"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"EQUALS"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"SeverityLabel"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"CRITICAL"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Comparison"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"EQUALS"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"HIGH"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Comparison"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"EQUALS"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Optional CLI validation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws securityhub get-findings &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--profile&lt;/span&gt; sec-mcp-readonly &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--region&lt;/span&gt; us-east-1 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--filters&lt;/span&gt; file://filters/securityhub-critical-high.json &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--max-results&lt;/span&gt; 25 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; evidence/securityhub-critical-high-sample.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This gives the engineer a known-good baseline before asking the agent to reason over the findings.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 11: Create the agent prompt
&lt;/h2&gt;

&lt;p&gt;Create &lt;code&gt;prompts/securityhub-triage.md&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;You are supporting a read-only AWS Security Hub triage workflow.

Operating constraints:
&lt;span class="p"&gt;-&lt;/span&gt; Use AWS profile: sec-mcp-readonly.
&lt;span class="p"&gt;-&lt;/span&gt; Use region: us-east-1 unless findings indicate another region.
&lt;span class="p"&gt;-&lt;/span&gt; Read only. Do not modify AWS resources.
&lt;span class="p"&gt;-&lt;/span&gt; Do not suppress, archive, import, update, or resolve findings.
&lt;span class="p"&gt;-&lt;/span&gt; Do not access secrets, credentials, customer PII, or raw sensitive incident logs.
&lt;span class="p"&gt;-&lt;/span&gt; Do not run remediation.
&lt;span class="p"&gt;-&lt;/span&gt; Do not commit, push, merge, deploy, or approve changes.
&lt;span class="p"&gt;-&lt;/span&gt; Write outputs only under ./output.

Task:
&lt;span class="p"&gt;1.&lt;/span&gt; Retrieve active CRITICAL and HIGH Security Hub findings using filters/securityhub-critical-high.json.
&lt;span class="p"&gt;2.&lt;/span&gt; Group findings by:
&lt;span class="p"&gt;   -&lt;/span&gt; AWS account
&lt;span class="p"&gt;   -&lt;/span&gt; Region
&lt;span class="p"&gt;   -&lt;/span&gt; Severity
&lt;span class="p"&gt;   -&lt;/span&gt; Product/source
&lt;span class="p"&gt;   -&lt;/span&gt; Resource type
&lt;span class="p"&gt;   -&lt;/span&gt; Control ID or finding type
&lt;span class="p"&gt;3.&lt;/span&gt; For each group, explain:
&lt;span class="p"&gt;   -&lt;/span&gt; Why it matters
&lt;span class="p"&gt;   -&lt;/span&gt; Failure mode
&lt;span class="p"&gt;   -&lt;/span&gt; Likely owner
&lt;span class="p"&gt;   -&lt;/span&gt; Recommended remediation
&lt;span class="p"&gt;   -&lt;/span&gt; Evidence required
&lt;span class="p"&gt;   -&lt;/span&gt; Whether it is immediate risk or backlog
&lt;span class="p"&gt;4.&lt;/span&gt; Produce the following files:
&lt;span class="p"&gt;   -&lt;/span&gt; output/securityhub-executive-summary.md
&lt;span class="p"&gt;   -&lt;/span&gt; output/securityhub-technical-findings.md
&lt;span class="p"&gt;   -&lt;/span&gt; output/securityhub-remediation-backlog.csv
&lt;span class="p"&gt;   -&lt;/span&gt; output/securityhub-evidence-index.md
&lt;span class="p"&gt;5.&lt;/span&gt; Include a final section called "Human review required" listing anything that must be confirmed manually.

Prioritization rules:
&lt;span class="p"&gt;-&lt;/span&gt; Internet exposure in production is immediate.
&lt;span class="p"&gt;-&lt;/span&gt; Privileged IAM or access analyzer findings are immediate.
&lt;span class="p"&gt;-&lt;/span&gt; Critical exploitable vulnerabilities on internet-facing workloads are immediate.
&lt;span class="p"&gt;-&lt;/span&gt; Missing encryption on sensitive data stores is high priority.
&lt;span class="p"&gt;-&lt;/span&gt; Missing logging or monitoring is high priority, but may be backlog if compensating controls exist.
&lt;span class="p"&gt;-&lt;/span&gt; Anything involving possible data exposure must be escalated to the SOC or incident commander.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This prompt does three important things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;It defines the job.&lt;/li&gt;
&lt;li&gt;It defines the boundaries.&lt;/li&gt;
&lt;li&gt;It defines the output format.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That is what makes the workflow repeatable.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 12: Run the workflow in Claude Code
&lt;/h2&gt;

&lt;p&gt;Open Claude Code in the project folder.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;securityhub-mcp-triage
claude
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Use prompts/securityhub-triage.md and perform the Security Hub triage workflow.
Before using any AWS MCP tool, show me the planned tool call, account/profile, region, and purpose.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;During tool approval, verify:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AWS profile is &lt;code&gt;sec-mcp-readonly&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Region is expected.&lt;/li&gt;
&lt;li&gt;API action is read-only.&lt;/li&gt;
&lt;li&gt;No script execution is being requested unless explicitly approved.&lt;/li&gt;
&lt;li&gt;No write, update, delete, suppress, or remediation action is requested.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If the agent asks to use a write action, stop the run and fix the permissions or project rules.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 13: Run the workflow in Codex
&lt;/h2&gt;

&lt;p&gt;In Codex:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;securityhub-mcp-triage
codex
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Prompt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Use prompts/securityhub-triage.md and produce the required output files.
Use only the configured AWS MCP server and the sec-mcp-readonly profile.
Ask before each AWS API tool call.
Do not run write actions or remediation.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Same review logic applies:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Confirm profile.&lt;/li&gt;
&lt;li&gt;Confirm region.&lt;/li&gt;
&lt;li&gt;Confirm read-only API action.&lt;/li&gt;
&lt;li&gt;Confirm output path.&lt;/li&gt;
&lt;li&gt;Deny script execution unless this has already been approved for the pilot.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Expected outputs
&lt;/h2&gt;

&lt;p&gt;The workflow should produce four local files.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. &lt;code&gt;output/securityhub-executive-summary.md&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;This file should be leadership-readable.&lt;/p&gt;

&lt;p&gt;Example structure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Security Hub Executive Summary&lt;/span&gt;

Date: 2026-07-16
AWS profile: sec-mcp-readonly
Region: us-east-1
Scope: Active CRITICAL/HIGH findings

&lt;span class="gu"&gt;## Summary&lt;/span&gt;

Total active CRITICAL/HIGH findings reviewed: 42

Immediate action required: 6
High priority remediation: 18
Backlog / owner validation: 18

&lt;span class="gu"&gt;## Key risk themes&lt;/span&gt;
&lt;span class="p"&gt;
1.&lt;/span&gt; Public exposure on internet-facing resources
&lt;span class="p"&gt;2.&lt;/span&gt; Privileged IAM misconfiguration
&lt;span class="p"&gt;3.&lt;/span&gt; Inspector critical vulnerabilities on production EC2
&lt;span class="p"&gt;4.&lt;/span&gt; Missing encryption on data stores
&lt;span class="p"&gt;5.&lt;/span&gt; Security logging gaps

&lt;span class="gu"&gt;## Immediate escalation&lt;/span&gt;

The following findings require same-day owner response...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. &lt;code&gt;output/securityhub-technical-findings.md&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;This file should be engineer-readable.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gu"&gt;## Finding group: Public S3 bucket exposure&lt;/span&gt;

Priority: Immediate

Affected resources:
&lt;span class="p"&gt;-&lt;/span&gt; arn:aws:s3:::example-prod-export-bucket

Why it matters:
A public S3 bucket in a production account creates direct data exposure risk.
If the bucket contains logs, exports, backups, or customer data, the issue may become a reportable incident.

Failure mode:
An attacker or external party can access exposed objects without authentication.
If bucket contents include credentials, logs, exports, or regulated data, this can lead to data breach, credential compromise, and compliance exposure.

Required remediation:
&lt;span class="p"&gt;-&lt;/span&gt; Confirm business owner.
&lt;span class="p"&gt;-&lt;/span&gt; Validate whether bucket is intentionally public.
&lt;span class="p"&gt;-&lt;/span&gt; Enable S3 Block Public Access at account and bucket level unless explicitly approved.
&lt;span class="p"&gt;-&lt;/span&gt; Review bucket policy and ACL.
&lt;span class="p"&gt;-&lt;/span&gt; Review CloudTrail data events if enabled.
&lt;span class="p"&gt;-&lt;/span&gt; Assess object sensitivity.
&lt;span class="p"&gt;-&lt;/span&gt; Open incident if sensitive data was exposed.

Evidence required:
&lt;span class="p"&gt;-&lt;/span&gt; Security Hub finding JSON.
&lt;span class="p"&gt;-&lt;/span&gt; S3 bucket policy export.
&lt;span class="p"&gt;-&lt;/span&gt; Public access block configuration.
&lt;span class="p"&gt;-&lt;/span&gt; Object sensitivity confirmation from data owner.
&lt;span class="p"&gt;-&lt;/span&gt; CloudTrail access review.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. &lt;code&gt;output/securityhub-remediation-backlog.csv&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Example columns:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;priority,severity,account,region,resource_type,resource_id,finding_title,recommended_owner,remediation_action,evidence_required,sla,notes
Immediate,CRITICAL,123456789012,us-east-1,S3,bucket-name,Public bucket exposure,Data Platform,Disable public access and validate exposure,Finding JSON; bucket policy; access review,Same day,Escalate if sensitive data exists
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. &lt;code&gt;output/securityhub-evidence-index.md&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Evidence Index&lt;/span&gt;

&lt;span class="gu"&gt;## Evidence collected&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; Security Hub finding export
&lt;span class="p"&gt;-&lt;/span&gt; Finding group summary
&lt;span class="p"&gt;-&lt;/span&gt; AWS account and region
&lt;span class="p"&gt;-&lt;/span&gt; Resource identifiers
&lt;span class="p"&gt;-&lt;/span&gt; Remediation backlog
&lt;span class="p"&gt;-&lt;/span&gt; Negative-control test showing write actions fail

&lt;span class="gu"&gt;## Evidence not collected&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; Raw customer logs
&lt;span class="p"&gt;-&lt;/span&gt; Secrets
&lt;span class="p"&gt;-&lt;/span&gt; PII
&lt;span class="p"&gt;-&lt;/span&gt; Full object contents
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  How to prioritize findings
&lt;/h2&gt;

&lt;p&gt;Use a practical triage model.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Priority&lt;/th&gt;
&lt;th&gt;Criteria&lt;/th&gt;
&lt;th&gt;Response expectation&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Immediate&lt;/td&gt;
&lt;td&gt;Active internet exposure, privileged IAM risk, possible data exposure, exploited vulnerability, production blast radius&lt;/td&gt;
&lt;td&gt;Same-day owner response and SOC visibility&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;Security control failure on sensitive or production resources&lt;/td&gt;
&lt;td&gt;Remediation ticket with SLA&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;Misconfiguration with limited exposure or compensating controls&lt;/td&gt;
&lt;td&gt;Backlog with owner and due date&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Informational&lt;/td&gt;
&lt;td&gt;Hygiene issue, duplicate finding, non-production low impact&lt;/td&gt;
&lt;td&gt;Track, tune, or suppress through approved process&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Priority is not only the Security Hub severity label.&lt;/p&gt;

&lt;p&gt;Security Hub severity matters, but real prioritization should also consider:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Production versus non-production.&lt;/li&gt;
&lt;li&gt;Public exposure.&lt;/li&gt;
&lt;li&gt;Data sensitivity.&lt;/li&gt;
&lt;li&gt;Exploitability.&lt;/li&gt;
&lt;li&gt;Privilege impact.&lt;/li&gt;
&lt;li&gt;Lateral movement potential.&lt;/li&gt;
&lt;li&gt;Compensating controls.&lt;/li&gt;
&lt;li&gt;Asset owner.&lt;/li&gt;
&lt;li&gt;Existing exception status.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is where the agent can help, but the human still owns the decision.&lt;/p&gt;




&lt;h2&gt;
  
  
  Evidence required for audit
&lt;/h2&gt;

&lt;p&gt;Keep these artifacts:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Evidence&lt;/th&gt;
&lt;th&gt;Why it matters&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;IAM permission set export&lt;/td&gt;
&lt;td&gt;Shows least privilege scope&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IAM policy JSON&lt;/td&gt;
&lt;td&gt;Shows allowed and denied actions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SCP or permission boundary export&lt;/td&gt;
&lt;td&gt;Shows preventive guardrail&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AWS CLI identity check&lt;/td&gt;
&lt;td&gt;Proves named identity&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Security Hub finding export&lt;/td&gt;
&lt;td&gt;Shows source evidence&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Output files&lt;/td&gt;
&lt;td&gt;Shows triage result&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Negative-control test&lt;/td&gt;
&lt;td&gt;Proves write actions fail&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tool approval log or session transcript&lt;/td&gt;
&lt;td&gt;Shows human oversight&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Jira tickets&lt;/td&gt;
&lt;td&gt;Shows remediation ownership&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Slack or incident notes&lt;/td&gt;
&lt;td&gt;Shows escalation path&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Do not store:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Raw customer data.&lt;/li&gt;
&lt;li&gt;Secrets.&lt;/li&gt;
&lt;li&gt;Access keys.&lt;/li&gt;
&lt;li&gt;Sensitive logs copied unnecessarily.&lt;/li&gt;
&lt;li&gt;Full data object contents.&lt;/li&gt;
&lt;li&gt;Anything that creates a new evidence-handling problem.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Negative control test: prove write actions fail
&lt;/h2&gt;

&lt;p&gt;A safe rollout must include a negative-control test.&lt;/p&gt;

&lt;p&gt;Test one prohibited write action in a non-production or controlled environment:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws securityhub batch-update-findings &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--profile&lt;/span&gt; sec-mcp-readonly &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--region&lt;/span&gt; us-east-1 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--finding-identifiers&lt;/span&gt; &lt;span class="s1"&gt;'[{"Id":"test","ProductArn":"arn:aws:securityhub:us-east-1::product/aws/securityhub"}]'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--workflow&lt;/span&gt; &lt;span class="s1"&gt;'{"Status":"SUPPRESSED"}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Expected result:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AccessDeniedException
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Keep the result as evidence.&lt;/p&gt;

&lt;p&gt;If the command succeeds, the design is not approved.&lt;/p&gt;




&lt;h2&gt;
  
  
  Failure modes and required controls
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Failure mode&lt;/th&gt;
&lt;th&gt;What can go wrong&lt;/th&gt;
&lt;th&gt;Required control&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Agent gains write access&lt;/td&gt;
&lt;td&gt;Findings are suppressed or resources are modified&lt;/td&gt;
&lt;td&gt;IAM explicit deny, SCP, permission boundary&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Prompt injection through finding text&lt;/td&gt;
&lt;td&gt;Agent follows malicious instructions embedded in external content&lt;/td&gt;
&lt;td&gt;Treat findings as untrusted data, use strict project rules&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Excessive data retrieval&lt;/td&gt;
&lt;td&gt;Agent pulls sensitive logs or PII into local files&lt;/td&gt;
&lt;td&gt;Data minimization, deny secret/PII access, output path controls&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Wrong AWS account&lt;/td&gt;
&lt;td&gt;Agent queries or reports the wrong account&lt;/td&gt;
&lt;td&gt;SSO profile naming, &lt;code&gt;sts:GetCallerIdentity&lt;/code&gt;, account allowlist&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Poor prioritization&lt;/td&gt;
&lt;td&gt;Critical exposure is treated as backlog&lt;/td&gt;
&lt;td&gt;Human review and explicit prioritization rules&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No audit trail&lt;/td&gt;
&lt;td&gt;Outputs cannot be defended in audit&lt;/td&gt;
&lt;td&gt;Tool logs, CloudTrail, evidence index, ticket linkage&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Auto-remediation drift&lt;/td&gt;
&lt;td&gt;AI makes changes outside change control&lt;/td&gt;
&lt;td&gt;No write access, CI/CD remains release authority&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Public or untrusted MCP server&lt;/td&gt;
&lt;td&gt;Credentials or data are exposed&lt;/td&gt;
&lt;td&gt;Use official/vendor/internal MCP servers only&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Where AWS AgentCore Gateway fits
&lt;/h2&gt;

&lt;p&gt;For a single engineer or small pilot, AWS Agent Toolkit plus read-only IAM is enough.&lt;/p&gt;

&lt;p&gt;For enterprise use, evaluate AWS AgentCore Gateway.&lt;/p&gt;

&lt;p&gt;The reason is governance.&lt;/p&gt;

&lt;p&gt;As MCP usage grows, security teams eventually need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Central tool registration.&lt;/li&gt;
&lt;li&gt;Central authentication.&lt;/li&gt;
&lt;li&gt;Fine-grained access control.&lt;/li&gt;
&lt;li&gt;Tool observability.&lt;/li&gt;
&lt;li&gt;Network control.&lt;/li&gt;
&lt;li&gt;Credential management.&lt;/li&gt;
&lt;li&gt;Private connectivity.&lt;/li&gt;
&lt;li&gt;SCP enforcement.&lt;/li&gt;
&lt;li&gt;Standardized approval patterns.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Recommended maturity path:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Pilot: AWS Agent Toolkit + AWS MCP Server + read-only IAM profile
Scale: Add centralized governance and gateway controls
Custom: Build private MCP servers only for internal systems that are not covered
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Do not start by building a custom MCP platform unless you already have a clear internal integration gap.&lt;/p&gt;




&lt;h2&gt;
  
  
  Practical AWS security use cases for MCP agents
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Security Hub triage
&lt;/h3&gt;

&lt;p&gt;Best first use case.&lt;/p&gt;

&lt;p&gt;Input:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Security Hub findings.&lt;/li&gt;
&lt;li&gt;Account context.&lt;/li&gt;
&lt;li&gt;Severity.&lt;/li&gt;
&lt;li&gt;Resource metadata.&lt;/li&gt;
&lt;li&gt;AWS documentation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Output:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Executive summary.&lt;/li&gt;
&lt;li&gt;Technical findings.&lt;/li&gt;
&lt;li&gt;Remediation backlog.&lt;/li&gt;
&lt;li&gt;Evidence index.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Risk: low if read-only.&lt;/p&gt;

&lt;h3&gt;
  
  
  GuardDuty investigation support
&lt;/h3&gt;

&lt;p&gt;The agent can help explain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Finding type.&lt;/li&gt;
&lt;li&gt;Likely attack path.&lt;/li&gt;
&lt;li&gt;Affected principal.&lt;/li&gt;
&lt;li&gt;Source IP.&lt;/li&gt;
&lt;li&gt;First and last seen timestamps.&lt;/li&gt;
&lt;li&gt;Recommended containment steps.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Do not let the agent disable keys, quarantine instances, or modify policies automatically.&lt;/p&gt;

&lt;h3&gt;
  
  
  Inspector vulnerability prioritization
&lt;/h3&gt;

&lt;p&gt;The agent can group Inspector findings by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Public exposure.&lt;/li&gt;
&lt;li&gt;Exploit availability.&lt;/li&gt;
&lt;li&gt;Package.&lt;/li&gt;
&lt;li&gt;Workload owner.&lt;/li&gt;
&lt;li&gt;Production impact.&lt;/li&gt;
&lt;li&gt;Patch SLA.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The output can be a CSV remediation backlog.&lt;/p&gt;

&lt;p&gt;Do not let the agent patch systems automatically.&lt;/p&gt;

&lt;h3&gt;
  
  
  IAM access review assistant
&lt;/h3&gt;

&lt;p&gt;The agent can summarize:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Unused access.&lt;/li&gt;
&lt;li&gt;High-risk permissions.&lt;/li&gt;
&lt;li&gt;External trust relationships.&lt;/li&gt;
&lt;li&gt;Access Analyzer findings.&lt;/li&gt;
&lt;li&gt;Privileged roles.&lt;/li&gt;
&lt;li&gt;Service accounts with broad permissions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Do not let the agent change IAM policy.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cloud security review evidence pack
&lt;/h3&gt;

&lt;p&gt;The agent can collect read-only evidence for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CloudTrail.&lt;/li&gt;
&lt;li&gt;Config.&lt;/li&gt;
&lt;li&gt;GuardDuty.&lt;/li&gt;
&lt;li&gt;Security Hub.&lt;/li&gt;
&lt;li&gt;Inspector.&lt;/li&gt;
&lt;li&gt;S3 Block Public Access.&lt;/li&gt;
&lt;li&gt;Encryption configuration.&lt;/li&gt;
&lt;li&gt;Account inventory.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is useful before audits, risk reviews, and architecture reviews.&lt;/p&gt;




&lt;h2&gt;
  
  
  Claude Code vs Codex: how I would use both
&lt;/h2&gt;

&lt;p&gt;I would not frame this as Claude Code versus Codex.&lt;/p&gt;

&lt;p&gt;I would use both where they are strongest.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Best use&lt;/th&gt;
&lt;th&gt;Security posture&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Claude Code&lt;/td&gt;
&lt;td&gt;Deep reasoning, architecture review, long-form security analysis, runbook drafting&lt;/td&gt;
&lt;td&gt;Strong project rules and tool approval&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Codex&lt;/td&gt;
&lt;td&gt;Code changes, CLI-driven development workflow, reproducible implementation tasks&lt;/td&gt;
&lt;td&gt;Sandbox, approval policy, repo controls&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AWS MCP Server&lt;/td&gt;
&lt;td&gt;AWS documentation and authenticated AWS API access&lt;/td&gt;
&lt;td&gt;IAM-enforced read-only first&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CI/CD&lt;/td&gt;
&lt;td&gt;Tests, scanning, deployment, policy gates&lt;/td&gt;
&lt;td&gt;Release authority remains outside the AI tool&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;For security work, the safest split is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Claude Code: analyze and explain
Codex: implement controlled code changes
AWS MCP Server: retrieve AWS context
CI/CD: validate and release
Human owner: approve risk and remediation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The AI tool can accelerate the workflow, but it should not become the approval authority.&lt;/p&gt;




&lt;h2&gt;
  
  
  Junior engineer runbook
&lt;/h2&gt;

&lt;p&gt;Use this workflow for daily or weekly triage.&lt;/p&gt;

&lt;h3&gt;
  
  
  Before starting
&lt;/h3&gt;

&lt;p&gt;Confirm:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You are using &lt;code&gt;sec-mcp-readonly&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;MFA is active.&lt;/li&gt;
&lt;li&gt;You are in the correct AWS account and region.&lt;/li&gt;
&lt;li&gt;The MCP server is the approved AWS MCP Server.&lt;/li&gt;
&lt;li&gt;Output will be written only to &lt;code&gt;./output&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;No customer PII, secrets, or raw sensitive logs will be collected.&lt;/li&gt;
&lt;li&gt;Tool approvals are enabled.&lt;/li&gt;
&lt;li&gt;Write actions are denied.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Daily triage workflow
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Run &lt;code&gt;aws sts get-caller-identity&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Run a small Security Hub read test.&lt;/li&gt;
&lt;li&gt;Start Claude Code or Codex in the project folder.&lt;/li&gt;
&lt;li&gt;Load &lt;code&gt;prompts/securityhub-triage.md&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Approve only read-only AWS API calls.&lt;/li&gt;
&lt;li&gt;Review generated output files.&lt;/li&gt;
&lt;li&gt;Validate immediate-risk findings manually in the AWS Console.&lt;/li&gt;
&lt;li&gt;Create Jira tickets for owners.&lt;/li&gt;
&lt;li&gt;Escalate possible data exposure to SOC or the incident commander.&lt;/li&gt;
&lt;li&gt;Store the evidence index with the ticket.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  AWS Console paths for manual validation
&lt;/h2&gt;

&lt;p&gt;Security Hub:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AWS Console -&amp;gt; Security Hub -&amp;gt; Findings
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;GuardDuty:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AWS Console -&amp;gt; GuardDuty -&amp;gt; Findings
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Inspector:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AWS Console -&amp;gt; Inspector -&amp;gt; Findings
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;CloudTrail:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AWS Console -&amp;gt; CloudTrail -&amp;gt; Event history
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Config:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AWS Console -&amp;gt; AWS Config -&amp;gt; Resources / Advanced queries
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;S3 public access:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AWS Console -&amp;gt; S3 -&amp;gt; Bucket -&amp;gt; Permissions -&amp;gt; Block Public Access / Bucket policy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Manual validation matters because MCP output is an aid, not evidence by itself.&lt;/p&gt;




&lt;h2&gt;
  
  
  What to fix first
&lt;/h2&gt;

&lt;p&gt;Fix in this order:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Public exposure of production resources.&lt;/li&gt;
&lt;li&gt;Possible sensitive data exposure.&lt;/li&gt;
&lt;li&gt;Privileged IAM misconfiguration.&lt;/li&gt;
&lt;li&gt;Active GuardDuty findings.&lt;/li&gt;
&lt;li&gt;Critical exploitable vulnerabilities on internet-facing workloads.&lt;/li&gt;
&lt;li&gt;Disabled or missing logging in production.&lt;/li&gt;
&lt;li&gt;Missing encryption on sensitive stores.&lt;/li&gt;
&lt;li&gt;Repeated control failures with no owner.&lt;/li&gt;
&lt;li&gt;Non-production hygiene issues.&lt;/li&gt;
&lt;li&gt;Informational findings and duplicates.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The top of the list is about blast radius and business impact, not just severity labels.&lt;/p&gt;




&lt;h2&gt;
  
  
  Residual risk
&lt;/h2&gt;

&lt;p&gt;Even with read-only IAM and MCP controls, some risk remains.&lt;/p&gt;

&lt;p&gt;Residual risks include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The agent may misinterpret a finding.&lt;/li&gt;
&lt;li&gt;The agent may over-prioritize or under-prioritize business impact.&lt;/li&gt;
&lt;li&gt;Prompt injection may appear in finding text, ticket text, or documentation.&lt;/li&gt;
&lt;li&gt;Local output files may contain sensitive metadata.&lt;/li&gt;
&lt;li&gt;Engineers may approve unsafe tool calls.&lt;/li&gt;
&lt;li&gt;AWS permissions may drift over time.&lt;/li&gt;
&lt;li&gt;MCP server behavior and client capabilities may change with version updates.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Acceptable residual risk for a pilot:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Read-only triage and evidence drafting with human review.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Not acceptable for a pilot:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Automated suppression, remediation, policy changes, deployments, or risk acceptance.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Final Slack-ready wording
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Decision: Approved with conditions.

We can pilot AWS MCP Server through AWS Agent Toolkit for a read-only Security Hub triage workflow.

Approved scope:
- Read Security Hub findings.
- Read limited investigation context from GuardDuty, Inspector, Config, CloudTrail, Organizations, and Access Analyzer.
- Generate local markdown/CSV/JSON summaries.
- Draft remediation tickets and Slack summaries.

Not approved:
- Security Hub suppression or updates.
- AWS resource changes.
- IAM changes.
- Secret or PII access.
- Automated remediation.
- AI-approved exception, merge, deploy, or risk acceptance.

Required controls:
- Named SSO identity.
- Dedicated SecMCPReadOnly permission set.
- Explicit deny for write actions.
- SCP or permission boundary for production where possible.
- MCP tool approval enabled.
- Script execution denied or separately approved.
- CloudTrail audit visibility.
- Negative-control test proving write actions fail.

Residual risk is acceptable for a read-only pilot with human review.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Final recommendation
&lt;/h2&gt;

&lt;p&gt;Start with a narrow, governed workflow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Use case: Security Hub triage
Agent: Claude Code or Codex
Connector: AWS Agent Toolkit / AWS MCP Server
AWS identity: SecMCPReadOnly
Permissions: read-only + explicit deny
Output: executive summary, technical findings, remediation backlog, evidence index
Approval: human review before tickets, suppression, remediation, or risk acceptance
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Do not build a custom MCP server first.&lt;/p&gt;

&lt;p&gt;Do not give the agent production write access.&lt;/p&gt;

&lt;p&gt;Do not let the agent suppress findings or approve exceptions.&lt;/p&gt;

&lt;p&gt;Get the read-only triage workflow working, prove the controls, collect evidence, and then decide whether more advanced workflows are justified.&lt;/p&gt;

&lt;p&gt;That is the safe path from AI-assisted security work to production-grade security operations.&lt;/p&gt;




</description>
      <category>aws</category>
      <category>cybersecurity</category>
      <category>mcp</category>
      <category>devsecops</category>
    </item>
    <item>
      <title>Implementation Control Matrix:[Part-7]: State-Owned ICS Cybersecurity Blueprint</title>
      <dc:creator>Mike Anderson</dc:creator>
      <pubDate>Tue, 14 Jul 2026 13:18:30 +0000</pubDate>
      <link>https://dev.to/mike_anderson_d01f52129fb/implementation-control-matrixpart-7-state-owned-ics-cybersecurity-blueprint-1kjo</link>
      <guid>https://dev.to/mike_anderson_d01f52129fb/implementation-control-matrixpart-7-state-owned-ics-cybersecurity-blueprint-1kjo</guid>
      <description>&lt;p&gt;Related with the following articles/posts:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/mike_anderson_d01f52129fb/executive-brief-state-owned-ics-cybersecurity-blueprint-a-five-part-series-journey-part-0-373l"&gt;Previous Series: Part 1: Executive Briefing&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/mike_anderson_d01f52129fb/securing-state-owned-ics-part-1-national-risk-threat-landscape-and-the-first-30-days-4ad3"&gt;Previous Series: Part 2: National Risk, Threat Landscape, and the First 30 Days&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/mike_anderson_d01f52129fb/securing-state-owned-ics-part-3-target-architecture-for-it-ot-cloud-and-power-grid-1mdi"&gt;Previous Series: Part-3: Target Architecture for IT, OT, Cloud, and Power Grid Environments&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/mike_anderson_d01f52129fb/securing-state-owned-ics-part-4-tools-technologies-and-control-implementation-catalog-521f"&gt;Previous Series: Part-4: Tools, Technologies, and Control Implementation Catalog&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/mike_anderson_d01f52129fb/securing-state-owned-ics-part-5-soc-detection-incident-response-resilience-and-exercises-g5"&gt;Previous Series: Part-5: SOC, Detection, Incident Response, Resilience, and Exercises&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/mike_anderson_d01f52129fb/securing-state-owned-ics-part-6-ai-governance-procurement-and-the-180-day-national-roadmap-2117"&gt;Previous Series: Part-6: AI, Governance, Procurement, and the 180-Day National Roadmap&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Implementation Control Matrix
&lt;/h1&gt;

&lt;p&gt;Use this as an internal checklist after publishing the blog series.&lt;/p&gt;

&lt;p&gt;Each control should have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;owner&lt;/li&gt;
&lt;li&gt;enforcement point&lt;/li&gt;
&lt;li&gt;evidence&lt;/li&gt;
&lt;li&gt;review frequency&lt;/li&gt;
&lt;li&gt;exception process&lt;/li&gt;
&lt;li&gt;residual risk statement&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Control 1: Critical process ownership
&lt;/h2&gt;

&lt;p&gt;Objective:&lt;/p&gt;

&lt;p&gt;Identify the national services and physical processes where cyber compromise can create major public, safety, economic, or national impact.&lt;/p&gt;

&lt;p&gt;Enforcement points:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;national critical infrastructure register&lt;/li&gt;
&lt;li&gt;utility risk register&lt;/li&gt;
&lt;li&gt;plant process inventory&lt;/li&gt;
&lt;li&gt;executive risk committee&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Evidence:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;critical process list&lt;/li&gt;
&lt;li&gt;named business owner&lt;/li&gt;
&lt;li&gt;named OT owner&lt;/li&gt;
&lt;li&gt;consequence rating&lt;/li&gt;
&lt;li&gt;dependency map&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Failure mode:&lt;/p&gt;

&lt;p&gt;The organization secures systems based on technology importance instead of national consequence.&lt;/p&gt;




&lt;h2&gt;
  
  
  Control 2: OT asset inventory
&lt;/h2&gt;

&lt;p&gt;Objective:&lt;/p&gt;

&lt;p&gt;Maintain an accurate inventory of critical OT assets, versions, owners, zones, communication flows, and backup status.&lt;/p&gt;

&lt;p&gt;Enforcement points:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;passive discovery platform&lt;/li&gt;
&lt;li&gt;CMDB&lt;/li&gt;
&lt;li&gt;engineering documentation&lt;/li&gt;
&lt;li&gt;plant walkdowns&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Evidence:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;asset inventory export&lt;/li&gt;
&lt;li&gt;unknown asset report&lt;/li&gt;
&lt;li&gt;firmware and software list&lt;/li&gt;
&lt;li&gt;ownership field&lt;/li&gt;
&lt;li&gt;criticality field&lt;/li&gt;
&lt;li&gt;monthly reconciliation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Failure mode:&lt;/p&gt;

&lt;p&gt;The inventory misses serial devices, spare controllers, relay settings, offline engineering laptops, or undocumented modems.&lt;/p&gt;




&lt;h2&gt;
  
  
  Control 3: IT/OT segmentation
&lt;/h2&gt;

&lt;p&gt;Objective:&lt;/p&gt;

&lt;p&gt;Prevent enterprise compromise from reaching control systems directly.&lt;/p&gt;

&lt;p&gt;Enforcement points:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;enterprise-to-OT firewall&lt;/li&gt;
&lt;li&gt;OT DMZ&lt;/li&gt;
&lt;li&gt;proxies and brokers&lt;/li&gt;
&lt;li&gt;industrial firewalls&lt;/li&gt;
&lt;li&gt;router and switch ACLs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Evidence:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;zone and conduit diagram&lt;/li&gt;
&lt;li&gt;firewall rule export&lt;/li&gt;
&lt;li&gt;blocked direct access test&lt;/li&gt;
&lt;li&gt;quarterly rule review&lt;/li&gt;
&lt;li&gt;exception register&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Failure mode:&lt;/p&gt;

&lt;p&gt;A firewall exists, but broad rules allow direct access into OT.&lt;/p&gt;




&lt;h2&gt;
  
  
  Control 4: Vendor remote access
&lt;/h2&gt;

&lt;p&gt;Objective:&lt;/p&gt;

&lt;p&gt;Ensure vendor access is approved, MFA-protected, time-bound, recorded, and limited to named assets.&lt;/p&gt;

&lt;p&gt;Enforcement points:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;remote access portal&lt;/li&gt;
&lt;li&gt;MFA&lt;/li&gt;
&lt;li&gt;PAM&lt;/li&gt;
&lt;li&gt;jump host&lt;/li&gt;
&lt;li&gt;ticketing system&lt;/li&gt;
&lt;li&gt;firewall policy&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Evidence:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;access approval ticket&lt;/li&gt;
&lt;li&gt;MFA logs&lt;/li&gt;
&lt;li&gt;session recording&lt;/li&gt;
&lt;li&gt;target asset list&lt;/li&gt;
&lt;li&gt;monthly vendor account review&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Failure mode:&lt;/p&gt;

&lt;p&gt;A vendor VPN lands directly inside Level 2 or Level 1 with broad subnet access.&lt;/p&gt;




&lt;h2&gt;
  
  
  Control 5: OT identity and privileged access
&lt;/h2&gt;

&lt;p&gt;Objective:&lt;/p&gt;

&lt;p&gt;Prevent credential compromise from becoming OT control.&lt;/p&gt;

&lt;p&gt;Enforcement points:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;separate or controlled OT identity boundary&lt;/li&gt;
&lt;li&gt;PAM&lt;/li&gt;
&lt;li&gt;MFA&lt;/li&gt;
&lt;li&gt;local admin password management&lt;/li&gt;
&lt;li&gt;privileged access review&lt;/li&gt;
&lt;li&gt;break-glass procedure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Evidence:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;privileged account inventory&lt;/li&gt;
&lt;li&gt;MFA enforcement report&lt;/li&gt;
&lt;li&gt;PAM session logs&lt;/li&gt;
&lt;li&gt;break-glass test record&lt;/li&gt;
&lt;li&gt;service account register&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Failure mode:&lt;/p&gt;

&lt;p&gt;Corporate identity compromise grants direct access to OT workstations or systems.&lt;/p&gt;




&lt;h2&gt;
  
  
  Control 6: Engineering workstation security
&lt;/h2&gt;

&lt;p&gt;Objective:&lt;/p&gt;

&lt;p&gt;Protect the systems used to configure controllers, relays, HMIs, and SCADA applications.&lt;/p&gt;

&lt;p&gt;Enforcement points:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;application allowlisting&lt;/li&gt;
&lt;li&gt;endpoint hardening&lt;/li&gt;
&lt;li&gt;USB control&lt;/li&gt;
&lt;li&gt;local admin restriction&lt;/li&gt;
&lt;li&gt;jump host access&lt;/li&gt;
&lt;li&gt;backup images&lt;/li&gt;
&lt;li&gt;log forwarding&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Evidence:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;hardening baseline&lt;/li&gt;
&lt;li&gt;allowlisting policy&lt;/li&gt;
&lt;li&gt;local admin review&lt;/li&gt;
&lt;li&gt;USB exception register&lt;/li&gt;
&lt;li&gt;golden image record&lt;/li&gt;
&lt;li&gt;restore test&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Failure mode:&lt;/p&gt;

&lt;p&gt;An engineering workstation becomes the bridge between attacker access and controller modification.&lt;/p&gt;




&lt;h2&gt;
  
  
  Control 7: Controller, RTU, IED, and relay protection
&lt;/h2&gt;

&lt;p&gt;Objective:&lt;/p&gt;

&lt;p&gt;Restrict and monitor changes to control logic, relay settings, firmware, and device configuration.&lt;/p&gt;

&lt;p&gt;Enforcement points:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;controller ACLs where supported&lt;/li&gt;
&lt;li&gt;cell firewall&lt;/li&gt;
&lt;li&gt;approved engineering stations&lt;/li&gt;
&lt;li&gt;physical cabinet control&lt;/li&gt;
&lt;li&gt;change workflow&lt;/li&gt;
&lt;li&gt;logic backup&lt;/li&gt;
&lt;li&gt;checksum or integrity validation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Evidence:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;approved engineering source list&lt;/li&gt;
&lt;li&gt;controller configuration export&lt;/li&gt;
&lt;li&gt;logic backup&lt;/li&gt;
&lt;li&gt;relay setting backup&lt;/li&gt;
&lt;li&gt;change ticket&lt;/li&gt;
&lt;li&gt;integrity validation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Failure mode:&lt;/p&gt;

&lt;p&gt;Anyone on the plant VLAN can reach a programming interface.&lt;/p&gt;




&lt;h2&gt;
  
  
  Control 8: OT monitoring and detection
&lt;/h2&gt;

&lt;p&gt;Objective:&lt;/p&gt;

&lt;p&gt;Detect unauthorized access, control writes, new devices, segmentation failures, abnormal engineering activity, and suspicious remote access.&lt;/p&gt;

&lt;p&gt;Enforcement points:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;passive OT sensors&lt;/li&gt;
&lt;li&gt;SIEM&lt;/li&gt;
&lt;li&gt;packet capture&lt;/li&gt;
&lt;li&gt;jump host logs&lt;/li&gt;
&lt;li&gt;identity logs&lt;/li&gt;
&lt;li&gt;firewall logs&lt;/li&gt;
&lt;li&gt;detection catalog&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Evidence:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;log source inventory&lt;/li&gt;
&lt;li&gt;sensor placement map&lt;/li&gt;
&lt;li&gt;detection catalog&lt;/li&gt;
&lt;li&gt;ATT&amp;amp;CK for ICS mapping&lt;/li&gt;
&lt;li&gt;alert tuning record&lt;/li&gt;
&lt;li&gt;detection test result&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Failure mode:&lt;/p&gt;

&lt;p&gt;Monitoring generates noise but misses process-relevant behavior.&lt;/p&gt;




&lt;h2&gt;
  
  
  Control 9: Vulnerability and patch management
&lt;/h2&gt;

&lt;p&gt;Objective:&lt;/p&gt;

&lt;p&gt;Identify and reduce vulnerabilities based on consequence, exploitability, exposure, and recoverability.&lt;/p&gt;

&lt;p&gt;Enforcement points:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;passive vulnerability assessment&lt;/li&gt;
&lt;li&gt;vendor advisories&lt;/li&gt;
&lt;li&gt;CISA ICS advisories&lt;/li&gt;
&lt;li&gt;change management&lt;/li&gt;
&lt;li&gt;compensating controls&lt;/li&gt;
&lt;li&gt;exception register&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Evidence:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;vulnerability report&lt;/li&gt;
&lt;li&gt;affected asset list&lt;/li&gt;
&lt;li&gt;remediation ticket&lt;/li&gt;
&lt;li&gt;mitigation evidence&lt;/li&gt;
&lt;li&gt;patch test result&lt;/li&gt;
&lt;li&gt;exception approval&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Failure mode:&lt;/p&gt;

&lt;p&gt;The team uses enterprise CVSS-only prioritization and misses high-consequence OT exposure.&lt;/p&gt;




&lt;h2&gt;
  
  
  Control 10: Backup and recovery
&lt;/h2&gt;

&lt;p&gt;Objective:&lt;/p&gt;

&lt;p&gt;Restore critical process-control functions from trusted backups during an incident.&lt;/p&gt;

&lt;p&gt;Enforcement points:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;backup platform&lt;/li&gt;
&lt;li&gt;offline or immutable storage&lt;/li&gt;
&lt;li&gt;vendor backup tools&lt;/li&gt;
&lt;li&gt;spare hardware&lt;/li&gt;
&lt;li&gt;recovery runbook&lt;/li&gt;
&lt;li&gt;restore exercises&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Evidence:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;backup inventory&lt;/li&gt;
&lt;li&gt;restore test report&lt;/li&gt;
&lt;li&gt;firmware and software dependency list&lt;/li&gt;
&lt;li&gt;recovery procedure&lt;/li&gt;
&lt;li&gt;spare hardware record&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Failure mode:&lt;/p&gt;

&lt;p&gt;Backups exist but cannot be restored under incident conditions.&lt;/p&gt;




&lt;h2&gt;
  
  
  Control 11: OT incident response
&lt;/h2&gt;

&lt;p&gt;Objective:&lt;/p&gt;

&lt;p&gt;Contain cyber incidents without creating unsafe physical process behavior.&lt;/p&gt;

&lt;p&gt;Enforcement points:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;OT incident response plan&lt;/li&gt;
&lt;li&gt;severity model&lt;/li&gt;
&lt;li&gt;incident bridge&lt;/li&gt;
&lt;li&gt;safety approval process&lt;/li&gt;
&lt;li&gt;containment playbooks&lt;/li&gt;
&lt;li&gt;forensic evidence procedure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Evidence:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;incident ticket&lt;/li&gt;
&lt;li&gt;decision log&lt;/li&gt;
&lt;li&gt;timeline&lt;/li&gt;
&lt;li&gt;containment approval&lt;/li&gt;
&lt;li&gt;evidence package&lt;/li&gt;
&lt;li&gt;post-incident report&lt;/li&gt;
&lt;li&gt;remediation owners&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Failure mode:&lt;/p&gt;

&lt;p&gt;The SOC applies IT containment actions that destabilize operations.&lt;/p&gt;




&lt;h2&gt;
  
  
  Control 12: AI governance
&lt;/h2&gt;

&lt;p&gt;Objective:&lt;/p&gt;

&lt;p&gt;Use AI to support cybersecurity decisions without allowing unsafe autonomous control actions.&lt;/p&gt;

&lt;p&gt;Enforcement points:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI use case register&lt;/li&gt;
&lt;li&gt;data classification&lt;/li&gt;
&lt;li&gt;approved AI platform&lt;/li&gt;
&lt;li&gt;human approval gates&lt;/li&gt;
&lt;li&gt;prompt and output logging&lt;/li&gt;
&lt;li&gt;model owner&lt;/li&gt;
&lt;li&gt;risk owner&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Evidence:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI policy&lt;/li&gt;
&lt;li&gt;approved use case list&lt;/li&gt;
&lt;li&gt;data handling review&lt;/li&gt;
&lt;li&gt;human approval record&lt;/li&gt;
&lt;li&gt;AI output validation&lt;/li&gt;
&lt;li&gt;periodic review&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Failure mode:&lt;/p&gt;

&lt;p&gt;AI is connected to sensitive OT data or operational actions without governance.&lt;/p&gt;




&lt;h2&gt;
  
  
  Control 13: Secure procurement
&lt;/h2&gt;

&lt;p&gt;Objective:&lt;/p&gt;

&lt;p&gt;Ensure new ICS products and services can be secured, monitored, patched, supported, and recovered.&lt;/p&gt;

&lt;p&gt;Enforcement points:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;procurement policy&lt;/li&gt;
&lt;li&gt;vendor security review&lt;/li&gt;
&lt;li&gt;contract language&lt;/li&gt;
&lt;li&gt;SBOM requirement where applicable&lt;/li&gt;
&lt;li&gt;vulnerability disclosure requirement&lt;/li&gt;
&lt;li&gt;secure configuration baseline&lt;/li&gt;
&lt;li&gt;end-of-life planning&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Evidence:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;vendor security questionnaire&lt;/li&gt;
&lt;li&gt;SBOM or equivalent artifact&lt;/li&gt;
&lt;li&gt;secure configuration guide&lt;/li&gt;
&lt;li&gt;support lifecycle commitment&lt;/li&gt;
&lt;li&gt;incident notification clause&lt;/li&gt;
&lt;li&gt;remote support architecture approval&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Failure mode:&lt;/p&gt;

&lt;p&gt;The organization purchases systems that cannot meet minimum security and recovery expectations.&lt;/p&gt;




&lt;h2&gt;
  
  
  Control 14: Executive metrics
&lt;/h2&gt;

&lt;p&gt;Objective:&lt;/p&gt;

&lt;p&gt;Report cyber risk in terms of national service resilience.&lt;/p&gt;

&lt;p&gt;Enforcement points:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;risk dashboard&lt;/li&gt;
&lt;li&gt;executive committee&lt;/li&gt;
&lt;li&gt;board or ministry reporting&lt;/li&gt;
&lt;li&gt;regulatory evidence pack&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Evidence:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;asset coverage&lt;/li&gt;
&lt;li&gt;segmentation status&lt;/li&gt;
&lt;li&gt;vendor access metrics&lt;/li&gt;
&lt;li&gt;backup restore metrics&lt;/li&gt;
&lt;li&gt;detection test metrics&lt;/li&gt;
&lt;li&gt;vulnerability exceptions&lt;/li&gt;
&lt;li&gt;incident response exercise results&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Failure mode:&lt;/p&gt;

&lt;p&gt;Leadership receives alert counts instead of risk and resilience indicators.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final use
&lt;/h2&gt;

&lt;p&gt;This matrix should be reviewed quarterly.&lt;/p&gt;

&lt;p&gt;Each control should have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;owner&lt;/li&gt;
&lt;li&gt;current maturity score&lt;/li&gt;
&lt;li&gt;target maturity score&lt;/li&gt;
&lt;li&gt;funded remediation&lt;/li&gt;
&lt;li&gt;due date&lt;/li&gt;
&lt;li&gt;exception status&lt;/li&gt;
&lt;li&gt;residual risk&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>cybersecurity</category>
      <category>ics</category>
      <category>controls</category>
      <category>security</category>
    </item>
    <item>
      <title>Securing State-Owned ICS (Part 6): AI, Governance, Procurement, and the 180-Day National Roadmap</title>
      <dc:creator>Mike Anderson</dc:creator>
      <pubDate>Tue, 14 Jul 2026 13:06:22 +0000</pubDate>
      <link>https://dev.to/mike_anderson_d01f52129fb/securing-state-owned-ics-part-6-ai-governance-procurement-and-the-180-day-national-roadmap-2117</link>
      <guid>https://dev.to/mike_anderson_d01f52129fb/securing-state-owned-ics-part-6-ai-governance-procurement-and-the-180-day-national-roadmap-2117</guid>
      <description>&lt;p&gt;&lt;a href="https://dev.to/mike_anderson_d01f52129fb/executive-brief-state-owned-ics-cybersecurity-blueprint-a-five-part-series-journey-part-0-373l"&gt;Previous Series: Part 1: Executive Briefing&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/mike_anderson_d01f52129fb/securing-state-owned-ics-part-1-national-risk-threat-landscape-and-the-first-30-days-4ad3"&gt;Previous Series: Part 2: National Risk, Threat Landscape, and the First 30 Days&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/mike_anderson_d01f52129fb/securing-state-owned-ics-part-3-target-architecture-for-it-ot-cloud-and-power-grid-1mdi"&gt;Previous Series: Part-3: Target Architecture for IT, OT, Cloud, and Power Grid Environments&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/mike_anderson_d01f52129fb/securing-state-owned-ics-part-4-tools-technologies-and-control-implementation-catalog-521f"&gt;Previous Series: Part-4: Tools, Technologies, and Control Implementation Catalog&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/mike_anderson_d01f52129fb/securing-state-owned-ics-part-5-soc-detection-incident-response-resilience-and-exercises-g5"&gt;Previous Series: Part-5: SOC, Detection, Incident Response, Resilience, and Exercises&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/mike_anderson_d01f52129fb/implementation-control-matrixpart-7-state-owned-ics-cybersecurity-blueprint-1kjo"&gt;Jump to Part-7: State-Owned ICS Cybersecurity Blueprint&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;AI can help ICS cybersecurity.&lt;/p&gt;

&lt;p&gt;It can also create new risk.&lt;/p&gt;

&lt;p&gt;For state-owned critical infrastructure, AI must be introduced with discipline.&lt;/p&gt;

&lt;p&gt;The goal is not to make the plant autonomous.&lt;/p&gt;

&lt;p&gt;The goal is to improve visibility, triage, detection, reporting, planning, and decision support without allowing AI to directly manipulate unsafe physical processes.&lt;/p&gt;

&lt;p&gt;The rule is simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;AI can advise.&lt;br&gt;&lt;br&gt;
Humans must approve.&lt;br&gt;&lt;br&gt;
Engineering and safety must govern physical action.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Executive summary for leaders
&lt;/h2&gt;

&lt;p&gt;AI should not be the starting point for ICS cybersecurity.&lt;/p&gt;

&lt;p&gt;Start with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;asset inventory&lt;/li&gt;
&lt;li&gt;segmentation&lt;/li&gt;
&lt;li&gt;remote access control&lt;/li&gt;
&lt;li&gt;identity governance&lt;/li&gt;
&lt;li&gt;backups&lt;/li&gt;
&lt;li&gt;monitoring&lt;/li&gt;
&lt;li&gt;incident response&lt;/li&gt;
&lt;li&gt;vendor governance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then use AI to accelerate human decision-making.&lt;/p&gt;

&lt;p&gt;Good AI use cases:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;summarize advisories&lt;/li&gt;
&lt;li&gt;enrich asset inventory&lt;/li&gt;
&lt;li&gt;assist alert triage&lt;/li&gt;
&lt;li&gt;draft detection logic&lt;/li&gt;
&lt;li&gt;support threat hunting&lt;/li&gt;
&lt;li&gt;summarize incidents&lt;/li&gt;
&lt;li&gt;generate tabletop scenarios&lt;/li&gt;
&lt;li&gt;create executive reports&lt;/li&gt;
&lt;li&gt;review change requests for missing risk information&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Risky AI use cases:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;autonomous controller commands&lt;/li&gt;
&lt;li&gt;unsupervised logic changes&lt;/li&gt;
&lt;li&gt;automatic blocking of critical OT paths&lt;/li&gt;
&lt;li&gt;cloud processing of sensitive national infrastructure data without approval&lt;/li&gt;
&lt;li&gt;AI agents connected directly to control networks&lt;/li&gt;
&lt;li&gt;AI-generated remediation applied without engineering review&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For national ICS, AI governance is mandatory.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. The AI rule for ICS
&lt;/h2&gt;

&lt;p&gt;Approved policy statement:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AI may recommend, summarize, correlate, enrich, detect, and explain.

AI must not independently issue control commands, change controller logic, bypass safety procedures, isolate critical OT assets, or make safety-impacting decisions without approved human authority.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This should be written into national policy, utility policy, SOC procedure, and procurement language.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Practical AI use cases
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Asset inventory enrichment
&lt;/h3&gt;

&lt;p&gt;AI can help normalize messy asset data.&lt;/p&gt;

&lt;p&gt;Inputs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;passive discovery output&lt;/li&gt;
&lt;li&gt;CMDB&lt;/li&gt;
&lt;li&gt;firewall logs&lt;/li&gt;
&lt;li&gt;switch tables&lt;/li&gt;
&lt;li&gt;vendor exports&lt;/li&gt;
&lt;li&gt;engineering documentation&lt;/li&gt;
&lt;li&gt;vulnerability reports&lt;/li&gt;
&lt;li&gt;backup inventories&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Useful outputs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;duplicate asset matching&lt;/li&gt;
&lt;li&gt;vendor and model normalization&lt;/li&gt;
&lt;li&gt;missing owner suggestions&lt;/li&gt;
&lt;li&gt;criticality suggestions&lt;/li&gt;
&lt;li&gt;unsupported software identification&lt;/li&gt;
&lt;li&gt;likely zone or Purdue level&lt;/li&gt;
&lt;li&gt;communication pattern summary&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Human validation remains required.&lt;/p&gt;

&lt;h3&gt;
  
  
  Alert triage assistant
&lt;/h3&gt;

&lt;p&gt;AI can help analysts understand alerts faster.&lt;/p&gt;

&lt;p&gt;Useful outputs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;plain-language alert explanation&lt;/li&gt;
&lt;li&gt;affected process summary&lt;/li&gt;
&lt;li&gt;asset owner&lt;/li&gt;
&lt;li&gt;recent related activity&lt;/li&gt;
&lt;li&gt;approved change window check&lt;/li&gt;
&lt;li&gt;recommended triage questions&lt;/li&gt;
&lt;li&gt;evidence collection checklist&lt;/li&gt;
&lt;li&gt;draft incident notes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Do not allow AI to auto-close high-risk OT alerts.&lt;/p&gt;

&lt;h3&gt;
  
  
  Detection engineering support
&lt;/h3&gt;

&lt;p&gt;AI can draft detection ideas for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;vendor login outside approved window&lt;/li&gt;
&lt;li&gt;unauthorized PLC or relay write&lt;/li&gt;
&lt;li&gt;new engineering protocol source&lt;/li&gt;
&lt;li&gt;RDP bypassing jump host&lt;/li&gt;
&lt;li&gt;logic change outside approved window&lt;/li&gt;
&lt;li&gt;new device in control cell&lt;/li&gt;
&lt;li&gt;suspicious archive creation on engineering workstation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Human validation and test data are mandatory.&lt;/p&gt;

&lt;h3&gt;
  
  
  Threat intelligence summarization
&lt;/h3&gt;

&lt;p&gt;AI can summarize:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;national CERT alerts&lt;/li&gt;
&lt;li&gt;CISA ICS advisories&lt;/li&gt;
&lt;li&gt;vendor advisories&lt;/li&gt;
&lt;li&gt;sector ISAC reports&lt;/li&gt;
&lt;li&gt;known adversary tactics&lt;/li&gt;
&lt;li&gt;affected products&lt;/li&gt;
&lt;li&gt;recommended mitigations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The output should be mapped to actual inventory.&lt;/p&gt;

&lt;p&gt;A generic advisory summary is useful.&lt;/p&gt;

&lt;p&gt;A summary that says "we have 14 affected assets in three sites" is operationally valuable.&lt;/p&gt;

&lt;h3&gt;
  
  
  Incident response support
&lt;/h3&gt;

&lt;p&gt;AI can help by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;building event timelines&lt;/li&gt;
&lt;li&gt;summarizing log evidence&lt;/li&gt;
&lt;li&gt;drafting executive updates&lt;/li&gt;
&lt;li&gt;mapping behavior to MITRE ATT&amp;amp;CK for ICS&lt;/li&gt;
&lt;li&gt;preparing post-incident report drafts&lt;/li&gt;
&lt;li&gt;tracking remediation actions&lt;/li&gt;
&lt;li&gt;generating lessons-learned summaries&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI should not decide containment for safety-impacting assets.&lt;/p&gt;

&lt;h3&gt;
  
  
  Change review support
&lt;/h3&gt;

&lt;p&gt;AI can review change tickets for missing information.&lt;/p&gt;

&lt;p&gt;Questions AI can flag:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is the affected process documented?&lt;/li&gt;
&lt;li&gt;Is rollback included?&lt;/li&gt;
&lt;li&gt;Is backup confirmed?&lt;/li&gt;
&lt;li&gt;Is the maintenance window approved?&lt;/li&gt;
&lt;li&gt;Are safety and operations owners listed?&lt;/li&gt;
&lt;li&gt;Is monitoring required after change?&lt;/li&gt;
&lt;li&gt;Are firewall rules too broad?&lt;/li&gt;
&lt;li&gt;Is the vendor access window time-bound?&lt;/li&gt;
&lt;li&gt;Is evidence required after the change?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is a strong, low-risk AI use case.&lt;/p&gt;

&lt;h3&gt;
  
  
  Training and tabletop simulation
&lt;/h3&gt;

&lt;p&gt;AI can generate exercise scenarios for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;vendor account compromise&lt;/li&gt;
&lt;li&gt;ransomware on HMI&lt;/li&gt;
&lt;li&gt;unauthorized logic change&lt;/li&gt;
&lt;li&gt;relay setting modification&lt;/li&gt;
&lt;li&gt;loss of historian&lt;/li&gt;
&lt;li&gt;substation communication outage&lt;/li&gt;
&lt;li&gt;insider using shared account&lt;/li&gt;
&lt;li&gt;compromise of IT/OT boundary&lt;/li&gt;
&lt;li&gt;cloud analytics disruption&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Use AI to create exercise material, not to replace human evaluation.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. AI use cases to prohibit or tightly restrict
&lt;/h2&gt;

&lt;p&gt;Avoid or prohibit:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI issuing PLC, RTU, IED, or relay commands&lt;/li&gt;
&lt;li&gt;AI modifying ladder logic or controller configuration without engineering review&lt;/li&gt;
&lt;li&gt;AI automatically disabling critical OT network paths&lt;/li&gt;
&lt;li&gt;AI deciding safe state&lt;/li&gt;
&lt;li&gt;AI performing unsupervised active scanning of controllers&lt;/li&gt;
&lt;li&gt;AI using live OT credentials without approval&lt;/li&gt;
&lt;li&gt;AI agents connected directly to control networks&lt;/li&gt;
&lt;li&gt;unmanaged public AI tools processing sensitive OT diagrams&lt;/li&gt;
&lt;li&gt;sensitive incident evidence sent to cloud AI without approval&lt;/li&gt;
&lt;li&gt;AI-generated remediation applied without testing&lt;/li&gt;
&lt;li&gt;AI model training on national infrastructure data without legal review&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Failure mode:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A model can be confident, useful, and wrong at the same time.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In ICS, wrong action can become physical impact.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Safe AI architecture
&lt;/h2&gt;

&lt;p&gt;Use AI as an analysis layer, not a control layer.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;OT sensors, logs, inventory, tickets
        |
        v
SIEM / OT security data lake
        |
        v
AI analysis layer
- summarization
- enrichment
- anomaly explanation
- detection draft
- report generation
        |
        v
Human approval
SOC, OT engineer, safety owner, incident commander
        |
        v
Approved action through existing controls
PAM, firewall, change management, incident response
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The AI layer should not connect directly to controllers.&lt;/p&gt;

&lt;h3&gt;
  
  
  AI governance controls
&lt;/h3&gt;

&lt;p&gt;Minimum controls:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;approved AI use case register&lt;/li&gt;
&lt;li&gt;data classification before AI use&lt;/li&gt;
&lt;li&gt;prohibition on sensitive OT data in unmanaged public AI tools&lt;/li&gt;
&lt;li&gt;role-based access&lt;/li&gt;
&lt;li&gt;prompt and output logging where legally allowed&lt;/li&gt;
&lt;li&gt;human approval for operational action&lt;/li&gt;
&lt;li&gt;validation of AI output&lt;/li&gt;
&lt;li&gt;prompt injection awareness&lt;/li&gt;
&lt;li&gt;data leakage monitoring&lt;/li&gt;
&lt;li&gt;model owner&lt;/li&gt;
&lt;li&gt;risk owner&lt;/li&gt;
&lt;li&gt;periodic performance review&lt;/li&gt;
&lt;li&gt;incident process for AI failures&lt;/li&gt;
&lt;li&gt;vendor security review&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Local, sovereign, or cloud AI
&lt;/h3&gt;

&lt;p&gt;For national critical infrastructure, use risk-based placement.&lt;/p&gt;

&lt;p&gt;Prefer local or sovereign deployment for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;network diagrams&lt;/li&gt;
&lt;li&gt;controller inventories&lt;/li&gt;
&lt;li&gt;PLC logic&lt;/li&gt;
&lt;li&gt;relay settings&lt;/li&gt;
&lt;li&gt;vulnerability details&lt;/li&gt;
&lt;li&gt;incident evidence&lt;/li&gt;
&lt;li&gt;national grid topology&lt;/li&gt;
&lt;li&gt;facility layouts&lt;/li&gt;
&lt;li&gt;sensitive threat intelligence&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cloud AI may be acceptable for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;public advisory summaries&lt;/li&gt;
&lt;li&gt;generic policy drafts&lt;/li&gt;
&lt;li&gt;training content&lt;/li&gt;
&lt;li&gt;non-sensitive writing assistance&lt;/li&gt;
&lt;li&gt;public research summarization&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Do not send sensitive operational data to public AI systems without approval.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Secure procurement
&lt;/h2&gt;

&lt;p&gt;Procurement is a security control.&lt;/p&gt;

&lt;p&gt;Every new ICS product or service should require:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;secure development lifecycle evidence&lt;/li&gt;
&lt;li&gt;vulnerability disclosure process&lt;/li&gt;
&lt;li&gt;long-term patch support&lt;/li&gt;
&lt;li&gt;SBOM where applicable&lt;/li&gt;
&lt;li&gt;secure configuration guide&lt;/li&gt;
&lt;li&gt;authentication and role-based access support&lt;/li&gt;
&lt;li&gt;logging support&lt;/li&gt;
&lt;li&gt;encrypted management where feasible&lt;/li&gt;
&lt;li&gt;ability to disable unused services&lt;/li&gt;
&lt;li&gt;documented hardening baseline&lt;/li&gt;
&lt;li&gt;backup and restore method&lt;/li&gt;
&lt;li&gt;default credential removal at commissioning&lt;/li&gt;
&lt;li&gt;remote support model review&lt;/li&gt;
&lt;li&gt;country-of-origin and supply chain review where required&lt;/li&gt;
&lt;li&gt;contractual incident notification timeline&lt;/li&gt;
&lt;li&gt;right to audit security controls&lt;/li&gt;
&lt;li&gt;end-of-life notification period&lt;/li&gt;
&lt;li&gt;data sovereignty statement&lt;/li&gt;
&lt;li&gt;AI feature disclosure if AI is embedded&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Do not buy systems that cannot be secured, monitored, patched, or recovered.&lt;/p&gt;

&lt;p&gt;Cheap procurement can become expensive national risk.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. National policy actions
&lt;/h2&gt;

&lt;p&gt;A national ICS cybersecurity strategy should include the following.&lt;/p&gt;

&lt;h3&gt;
  
  
  Critical infrastructure classification
&lt;/h3&gt;

&lt;p&gt;Classify assets based on consequence.&lt;/p&gt;

&lt;p&gt;Do not treat all systems equally.&lt;/p&gt;

&lt;p&gt;A national grid control center requires stronger obligations than a low-impact office system.&lt;/p&gt;

&lt;h3&gt;
  
  
  Minimum OT cybersecurity baseline
&lt;/h3&gt;

&lt;p&gt;Mandate controls for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;asset inventory&lt;/li&gt;
&lt;li&gt;network segmentation&lt;/li&gt;
&lt;li&gt;MFA for remote access&lt;/li&gt;
&lt;li&gt;vendor governance&lt;/li&gt;
&lt;li&gt;logging and monitoring&lt;/li&gt;
&lt;li&gt;backup and recovery&lt;/li&gt;
&lt;li&gt;vulnerability management&lt;/li&gt;
&lt;li&gt;secure procurement&lt;/li&gt;
&lt;li&gt;incident reporting&lt;/li&gt;
&lt;li&gt;OT-specific incident response&lt;/li&gt;
&lt;li&gt;annual exercises&lt;/li&gt;
&lt;li&gt;AI governance where AI is used&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  National OT-CERT capability
&lt;/h3&gt;

&lt;p&gt;Create or strengthen a specialist OT incident response function.&lt;/p&gt;

&lt;p&gt;It should support:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;incident coordination&lt;/li&gt;
&lt;li&gt;malware and forensic analysis&lt;/li&gt;
&lt;li&gt;threat intelligence&lt;/li&gt;
&lt;li&gt;emergency advisory publication&lt;/li&gt;
&lt;li&gt;sector coordination&lt;/li&gt;
&lt;li&gt;recovery support&lt;/li&gt;
&lt;li&gt;lessons-learned sharing&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Sector threat intelligence
&lt;/h3&gt;

&lt;p&gt;Build trusted sharing across:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;energy&lt;/li&gt;
&lt;li&gt;water&lt;/li&gt;
&lt;li&gt;transport&lt;/li&gt;
&lt;li&gt;telecom&lt;/li&gt;
&lt;li&gt;health&lt;/li&gt;
&lt;li&gt;finance&lt;/li&gt;
&lt;li&gt;ports&lt;/li&gt;
&lt;li&gt;aviation&lt;/li&gt;
&lt;li&gt;defense-linked infrastructure&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  National exercises
&lt;/h3&gt;

&lt;p&gt;Run exercises that test:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;power disruption&lt;/li&gt;
&lt;li&gt;water disruption&lt;/li&gt;
&lt;li&gt;coordinated cyber and physical activity&lt;/li&gt;
&lt;li&gt;cross-border dependency&lt;/li&gt;
&lt;li&gt;public communication&lt;/li&gt;
&lt;li&gt;incident reporting&lt;/li&gt;
&lt;li&gt;recovery sequencing&lt;/li&gt;
&lt;li&gt;manual operations&lt;/li&gt;
&lt;li&gt;misinformation and public trust issues&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Workforce development
&lt;/h3&gt;

&lt;p&gt;Invest in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;OT security training&lt;/li&gt;
&lt;li&gt;control engineering cyber training&lt;/li&gt;
&lt;li&gt;SOC analyst OT training&lt;/li&gt;
&lt;li&gt;incident commander training&lt;/li&gt;
&lt;li&gt;university and technical institute programs&lt;/li&gt;
&lt;li&gt;government and utility certification paths&lt;/li&gt;
&lt;li&gt;local language awareness material&lt;/li&gt;
&lt;li&gt;national cyber range and OT lab environments&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  7. South and Southeast Asia implementation note
&lt;/h2&gt;

&lt;p&gt;For many South and Southeast Asian environments, the strategy must account for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;mixed legacy and modern systems&lt;/li&gt;
&lt;li&gt;imported technology dependency&lt;/li&gt;
&lt;li&gt;large geographic coverage&lt;/li&gt;
&lt;li&gt;remote substations or facilities&lt;/li&gt;
&lt;li&gt;uneven local security maturity&lt;/li&gt;
&lt;li&gt;limited OT cybersecurity workforce&lt;/li&gt;
&lt;li&gt;budget pressure&lt;/li&gt;
&lt;li&gt;public-sector procurement constraints&lt;/li&gt;
&lt;li&gt;regional interdependencies&lt;/li&gt;
&lt;li&gt;climate and disaster resilience needs&lt;/li&gt;
&lt;li&gt;national data sovereignty concerns&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The practical response is not to wait for perfect maturity.&lt;/p&gt;

&lt;p&gt;Use a phased model:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;secure the highest-consequence services first&lt;/li&gt;
&lt;li&gt;build national OT asset visibility&lt;/li&gt;
&lt;li&gt;control vendor access&lt;/li&gt;
&lt;li&gt;remove dangerous IT/OT shortcuts&lt;/li&gt;
&lt;li&gt;establish sector SOC or shared monitoring&lt;/li&gt;
&lt;li&gt;build local OT cyber workforce&lt;/li&gt;
&lt;li&gt;require secure procurement for all new projects&lt;/li&gt;
&lt;li&gt;run national exercises&lt;/li&gt;
&lt;li&gt;build cross-border coordination for interconnected infrastructure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The region does not need to copy another country blindly.&lt;/p&gt;

&lt;p&gt;It needs a locally governed, standards-aligned, consequence-driven model.&lt;/p&gt;




&lt;h2&gt;
  
  
  8. 180-day roadmap
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Days 0-30: establish control of the basics
&lt;/h3&gt;

&lt;p&gt;Objectives:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;name accountable owners&lt;/li&gt;
&lt;li&gt;identify critical processes&lt;/li&gt;
&lt;li&gt;build top-level architecture view&lt;/li&gt;
&lt;li&gt;inventory crown-jewel assets&lt;/li&gt;
&lt;li&gt;identify remote access paths&lt;/li&gt;
&lt;li&gt;review vendor accounts&lt;/li&gt;
&lt;li&gt;export firewall rules&lt;/li&gt;
&lt;li&gt;confirm backup existence&lt;/li&gt;
&lt;li&gt;create incident contact roster&lt;/li&gt;
&lt;li&gt;start risk register&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Deliverables:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;critical process list&lt;/li&gt;
&lt;li&gt;initial OT asset inventory&lt;/li&gt;
&lt;li&gt;IT/OT connectivity map&lt;/li&gt;
&lt;li&gt;remote access register&lt;/li&gt;
&lt;li&gt;backup status report&lt;/li&gt;
&lt;li&gt;top 10 unacceptable risks&lt;/li&gt;
&lt;li&gt;executive briefing&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Days 31-60: reduce obvious attack paths
&lt;/h3&gt;

&lt;p&gt;Objectives:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;remove direct enterprise-to-controller access&lt;/li&gt;
&lt;li&gt;disable undocumented vendor access&lt;/li&gt;
&lt;li&gt;place remote access behind MFA and approval&lt;/li&gt;
&lt;li&gt;remove or control dual-homed engineering workstations&lt;/li&gt;
&lt;li&gt;eliminate default credentials on critical assets&lt;/li&gt;
&lt;li&gt;segment highest-criticality process cells&lt;/li&gt;
&lt;li&gt;start passive monitoring&lt;/li&gt;
&lt;li&gt;define OT severity model&lt;/li&gt;
&lt;li&gt;create initial detection use cases&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Deliverables:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;updated network rules&lt;/li&gt;
&lt;li&gt;vendor access governance&lt;/li&gt;
&lt;li&gt;monitoring plan&lt;/li&gt;
&lt;li&gt;detection catalog&lt;/li&gt;
&lt;li&gt;remediation backlog&lt;/li&gt;
&lt;li&gt;exception register&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Days 61-90: operationalize security
&lt;/h3&gt;

&lt;p&gt;Objectives:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;connect high-value logs to SIEM&lt;/li&gt;
&lt;li&gt;build SOC triage playbooks&lt;/li&gt;
&lt;li&gt;define SOAR approval gates&lt;/li&gt;
&lt;li&gt;test backup restore for one critical process&lt;/li&gt;
&lt;li&gt;run tabletop exercise&lt;/li&gt;
&lt;li&gt;review privileged access&lt;/li&gt;
&lt;li&gt;validate firewall rules&lt;/li&gt;
&lt;li&gt;start vulnerability management by consequence&lt;/li&gt;
&lt;li&gt;create leadership metrics&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Deliverables:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SOC runbook&lt;/li&gt;
&lt;li&gt;restore test evidence&lt;/li&gt;
&lt;li&gt;tabletop report&lt;/li&gt;
&lt;li&gt;access review evidence&lt;/li&gt;
&lt;li&gt;vulnerability risk register&lt;/li&gt;
&lt;li&gt;leadership dashboard&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Days 91-120: harden and validate
&lt;/h3&gt;

&lt;p&gt;Objectives:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;expand segmentation&lt;/li&gt;
&lt;li&gt;harden engineering workstations&lt;/li&gt;
&lt;li&gt;implement application allowlisting where feasible&lt;/li&gt;
&lt;li&gt;implement session recording&lt;/li&gt;
&lt;li&gt;tune detections&lt;/li&gt;
&lt;li&gt;build threat model for highest-criticality process&lt;/li&gt;
&lt;li&gt;validate containment decisions&lt;/li&gt;
&lt;li&gt;formalize procurement security requirements&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Deliverables:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;hardened baseline&lt;/li&gt;
&lt;li&gt;threat model&lt;/li&gt;
&lt;li&gt;detection test result&lt;/li&gt;
&lt;li&gt;procurement checklist&lt;/li&gt;
&lt;li&gt;risk treatment plan&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Days 121-180: scale to resilience
&lt;/h3&gt;

&lt;p&gt;Objectives:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;expand monitoring to more sites&lt;/li&gt;
&lt;li&gt;establish sector threat intelligence process&lt;/li&gt;
&lt;li&gt;integrate national CERT reporting&lt;/li&gt;
&lt;li&gt;run purple team exercise&lt;/li&gt;
&lt;li&gt;test emergency isolation process&lt;/li&gt;
&lt;li&gt;formalize AI governance&lt;/li&gt;
&lt;li&gt;build 12-month investment roadmap&lt;/li&gt;
&lt;li&gt;report residual risk&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Deliverables:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;national or enterprise OT security roadmap&lt;/li&gt;
&lt;li&gt;purple team report&lt;/li&gt;
&lt;li&gt;emergency isolation test&lt;/li&gt;
&lt;li&gt;AI use policy&lt;/li&gt;
&lt;li&gt;12-month budget plan&lt;/li&gt;
&lt;li&gt;residual risk statement&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  9. Budget priorities
&lt;/h2&gt;

&lt;p&gt;If funding is limited, prioritize:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;asset inventory and network flow visibility&lt;/li&gt;
&lt;li&gt;remote access control&lt;/li&gt;
&lt;li&gt;IT/OT segmentation&lt;/li&gt;
&lt;li&gt;critical backup and restore capability&lt;/li&gt;
&lt;li&gt;monitoring for unauthorized control activity&lt;/li&gt;
&lt;li&gt;engineering workstation hardening&lt;/li&gt;
&lt;li&gt;vendor access governance&lt;/li&gt;
&lt;li&gt;incident response playbooks and exercises&lt;/li&gt;
&lt;li&gt;vulnerability management and patch process&lt;/li&gt;
&lt;li&gt;AI-assisted triage and reporting&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Do not start with AI if inventory, segmentation, remote access, backups, and monitoring are weak.&lt;/p&gt;

&lt;p&gt;AI improves a mature program.&lt;/p&gt;

&lt;p&gt;It does not replace one.&lt;/p&gt;




&lt;h2&gt;
  
  
  10. Final maturity score
&lt;/h2&gt;

&lt;p&gt;Score each domain from 1 to 5.&lt;/p&gt;

&lt;p&gt;Domains:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;governance and ownership&lt;/li&gt;
&lt;li&gt;asset inventory&lt;/li&gt;
&lt;li&gt;network segmentation&lt;/li&gt;
&lt;li&gt;remote access&lt;/li&gt;
&lt;li&gt;identity and privileged access&lt;/li&gt;
&lt;li&gt;monitoring and detection&lt;/li&gt;
&lt;li&gt;vulnerability and patch management&lt;/li&gt;
&lt;li&gt;incident response&lt;/li&gt;
&lt;li&gt;backup and recovery&lt;/li&gt;
&lt;li&gt;supply chain and procurement&lt;/li&gt;
&lt;li&gt;AI governance&lt;/li&gt;
&lt;li&gt;workforce and exercises&lt;/li&gt;
&lt;li&gt;leadership reporting&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Target scores:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;minimum acceptable: 3.0&lt;/li&gt;
&lt;li&gt;critical national target: 4.0&lt;/li&gt;
&lt;li&gt;strategic national capability: 4.5 or higher&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A realistic first-year goal is to move from 1.5 or 2.0 to 3.0.&lt;/p&gt;

&lt;p&gt;That alone removes many major attack paths.&lt;/p&gt;




&lt;h2&gt;
  
  
  Takeaway
&lt;/h2&gt;

&lt;p&gt;The best national ICS cybersecurity program is not the one with the most advanced AI or the largest tool stack.&lt;/p&gt;

&lt;p&gt;It is the one that knows its assets, controls access, segments critical paths, monitors meaningful behavior, responds safely, recovers quickly, governs suppliers, trains people, and uses AI carefully to improve human decisions.&lt;/p&gt;

&lt;p&gt;Critical infrastructure protection is not only cybersecurity.&lt;/p&gt;

&lt;p&gt;It is national continuity.&lt;/p&gt;




</description>
      <category>cybersecurity</category>
      <category>ai</category>
      <category>ics</category>
      <category>security</category>
    </item>
    <item>
      <title>Securing State-Owned ICS (Part 5): SOC, Detection, Incident Response, Resilience, and Exercises</title>
      <dc:creator>Mike Anderson</dc:creator>
      <pubDate>Tue, 14 Jul 2026 12:58:28 +0000</pubDate>
      <link>https://dev.to/mike_anderson_d01f52129fb/securing-state-owned-ics-part-5-soc-detection-incident-response-resilience-and-exercises-g5</link>
      <guid>https://dev.to/mike_anderson_d01f52129fb/securing-state-owned-ics-part-5-soc-detection-incident-response-resilience-and-exercises-g5</guid>
      <description>&lt;p&gt;&lt;a href="https://dev.to/mike_anderson_d01f52129fb/executive-brief-state-owned-ics-cybersecurity-blueprint-a-five-part-series-journey-part-0-373l"&gt;Previous Series: Part 1: Executive Briefing&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/mike_anderson_d01f52129fb/securing-state-owned-ics-part-1-national-risk-threat-landscape-and-the-first-30-days-4ad3"&gt;Previous Series: Part 2: National Risk, Threat Landscape, and the First 30 Days&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/mike_anderson_d01f52129fb/securing-state-owned-ics-part-3-target-architecture-for-it-ot-cloud-and-power-grid-1mdi"&gt;Previous Series: Part-3: Target Architecture for IT, OT, Cloud, and Power Grid Environments&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/mike_anderson_d01f52129fb/securing-state-owned-ics-part-4-tools-technologies-and-control-implementation-catalog-521f"&gt;Previous Series: Part-4: Tools, Technologies, and Control Implementation Catalog&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/mike_anderson_d01f52129fb/implementation-control-matrixpart-7-state-owned-ics-cybersecurity-blueprint-1kjo"&gt;Jump to Part-7: State-Owned ICS Cybersecurity Blueprint&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A strong ICS architecture reduces attack paths.&lt;/p&gt;

&lt;p&gt;Cyber operations determine whether the organization can detect, respond, and recover when something goes wrong.&lt;/p&gt;

&lt;p&gt;For state-owned critical infrastructure, the SOC mission is not simply alert handling.&lt;/p&gt;

&lt;p&gt;The mission is national service continuity.&lt;/p&gt;

&lt;p&gt;The SOC, OT engineers, safety teams, field operations, vendors, executives, legal, communications, and national response bodies must be able to work together before a crisis.&lt;/p&gt;

&lt;p&gt;The operating rule is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Detect early. Contain safely. Preserve evidence. Recover critical services. Improve controls.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  OT cyber operations model
&lt;/h2&gt;




&lt;h2&gt;
  
  
  Executive summary for leaders
&lt;/h2&gt;

&lt;p&gt;A mature OT cyber operations program should prove that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;critical OT assets are monitored&lt;/li&gt;
&lt;li&gt;remote access is reviewed&lt;/li&gt;
&lt;li&gt;unauthorized control behavior can be detected&lt;/li&gt;
&lt;li&gt;alerts are triaged with process context&lt;/li&gt;
&lt;li&gt;containment actions are approved by the right operational owner&lt;/li&gt;
&lt;li&gt;backups are tested&lt;/li&gt;
&lt;li&gt;incident playbooks are exercised&lt;/li&gt;
&lt;li&gt;lessons learned become funded remediation&lt;/li&gt;
&lt;li&gt;leadership receives risk metrics, not raw alert volume&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If the SOC cannot explain what physical process an alert affects, it is not ready for ICS operations.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. OT SOC operating model
&lt;/h2&gt;

&lt;p&gt;An OT SOC is not just an enterprise SOC watching another dashboard.&lt;/p&gt;

&lt;p&gt;It needs OT-specific context, escalation, and safety approvals.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tier 1: initial triage
&lt;/h3&gt;

&lt;p&gt;Responsibilities:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;validate alert quality&lt;/li&gt;
&lt;li&gt;identify source, destination, user, protocol, and time&lt;/li&gt;
&lt;li&gt;check asset criticality&lt;/li&gt;
&lt;li&gt;check maintenance window&lt;/li&gt;
&lt;li&gt;check vendor approval&lt;/li&gt;
&lt;li&gt;identify whether behavior is read-only, write-capable, or administrative&lt;/li&gt;
&lt;li&gt;escalate high-risk OT behavior immediately&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tier 1 should not independently block critical OT traffic unless a pre-approved action exists.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tier 2: investigation
&lt;/h3&gt;

&lt;p&gt;Responsibilities:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;analyze logs and packet captures&lt;/li&gt;
&lt;li&gt;correlate remote access, identity, firewall, and OT sensor data&lt;/li&gt;
&lt;li&gt;validate whether activity matches approved work&lt;/li&gt;
&lt;li&gt;coordinate with OT engineers&lt;/li&gt;
&lt;li&gt;recommend severity and containment&lt;/li&gt;
&lt;li&gt;preserve evidence&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Tier 3: detection engineering and threat hunting
&lt;/h3&gt;

&lt;p&gt;Responsibilities:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;build MITRE ATT&amp;amp;CK for ICS mapped detections&lt;/li&gt;
&lt;li&gt;tune false positives&lt;/li&gt;
&lt;li&gt;build threat hunts&lt;/li&gt;
&lt;li&gt;validate detections through exercises&lt;/li&gt;
&lt;li&gt;analyze suspicious tooling&lt;/li&gt;
&lt;li&gt;improve telemetry coverage&lt;/li&gt;
&lt;li&gt;support incident response and post-incident review&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  OT engineering
&lt;/h3&gt;

&lt;p&gt;Responsibilities:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;explain physical process impact&lt;/li&gt;
&lt;li&gt;confirm whether engineering activity is legitimate&lt;/li&gt;
&lt;li&gt;approve containment that may affect operations&lt;/li&gt;
&lt;li&gt;validate controller logic and settings&lt;/li&gt;
&lt;li&gt;restore systems from known-good backups&lt;/li&gt;
&lt;li&gt;define safe state and manual operation options&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Incident commander
&lt;/h3&gt;

&lt;p&gt;Responsibilities:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;coordinate incident bridge&lt;/li&gt;
&lt;li&gt;maintain timeline&lt;/li&gt;
&lt;li&gt;approve escalation&lt;/li&gt;
&lt;li&gt;coordinate legal, privacy, communications, safety, operations, and executives&lt;/li&gt;
&lt;li&gt;ensure evidence preservation&lt;/li&gt;
&lt;li&gt;drive post-incident remediation&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  2. Telemetry required
&lt;/h2&gt;

&lt;p&gt;A SOC cannot detect what it cannot see.&lt;/p&gt;

&lt;h3&gt;
  
  
  Critical log sources
&lt;/h3&gt;

&lt;p&gt;Collect from:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;OT firewalls&lt;/li&gt;
&lt;li&gt;industrial switches and routers&lt;/li&gt;
&lt;li&gt;OT IDS sensors&lt;/li&gt;
&lt;li&gt;remote access portal&lt;/li&gt;
&lt;li&gt;VPN&lt;/li&gt;
&lt;li&gt;jump hosts&lt;/li&gt;
&lt;li&gt;PAM platform&lt;/li&gt;
&lt;li&gt;Active Directory or OT identity&lt;/li&gt;
&lt;li&gt;HMIs&lt;/li&gt;
&lt;li&gt;SCADA servers&lt;/li&gt;
&lt;li&gt;historians&lt;/li&gt;
&lt;li&gt;engineering workstations&lt;/li&gt;
&lt;li&gt;Linux servers&lt;/li&gt;
&lt;li&gt;backup systems&lt;/li&gt;
&lt;li&gt;endpoint security tools where safe&lt;/li&gt;
&lt;li&gt;physical access systems&lt;/li&gt;
&lt;li&gt;change management&lt;/li&gt;
&lt;li&gt;ticketing system&lt;/li&gt;
&lt;li&gt;vulnerability platform&lt;/li&gt;
&lt;li&gt;cloud analytics platform where used&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  High-value OT events
&lt;/h3&gt;

&lt;p&gt;Prioritize:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;new device in OT segment&lt;/li&gt;
&lt;li&gt;industrial protocol write&lt;/li&gt;
&lt;li&gt;PLC or relay mode change&lt;/li&gt;
&lt;li&gt;controller logic upload or download&lt;/li&gt;
&lt;li&gt;relay setting change&lt;/li&gt;
&lt;li&gt;engineering workstation connection to controller&lt;/li&gt;
&lt;li&gt;firmware change&lt;/li&gt;
&lt;li&gt;HMI project change&lt;/li&gt;
&lt;li&gt;remote vendor login&lt;/li&gt;
&lt;li&gt;failed privileged login&lt;/li&gt;
&lt;li&gt;jump host session start and end&lt;/li&gt;
&lt;li&gt;firewall rule change&lt;/li&gt;
&lt;li&gt;new route or ACL change&lt;/li&gt;
&lt;li&gt;backup failure for critical asset&lt;/li&gt;
&lt;li&gt;badge access to restricted operational area&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Retention
&lt;/h3&gt;

&lt;p&gt;Critical infrastructure needs enough retention to investigate slow adversary activity.&lt;/p&gt;

&lt;p&gt;Use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;hot logs for active investigation&lt;/li&gt;
&lt;li&gt;warm logs for incident review&lt;/li&gt;
&lt;li&gt;cold archive for legal, regulatory, and historical analysis&lt;/li&gt;
&lt;li&gt;rolling packet capture in the most critical segments where feasible&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Retention must follow national law, privacy obligations, and operational policy.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Detection engineering
&lt;/h2&gt;

&lt;p&gt;Generic malware alerts are not enough.&lt;/p&gt;

&lt;p&gt;OT detections must focus on control behavior, remote access, engineering actions, segmentation failures, and process context.&lt;/p&gt;

&lt;h3&gt;
  
  
  Detection 1: unauthorized PLC or relay write
&lt;/h3&gt;

&lt;p&gt;Logic:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;If source is not an approved engineering workstation
AND destination is a controller, RTU, IED, or relay
AND protocol action is write-capable
THEN create high-severity OT alert.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Triage:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;confirm source asset&lt;/li&gt;
&lt;li&gt;check user and session&lt;/li&gt;
&lt;li&gt;check change window&lt;/li&gt;
&lt;li&gt;check engineering approval&lt;/li&gt;
&lt;li&gt;review packet capture&lt;/li&gt;
&lt;li&gt;ask OT owner if action was expected&lt;/li&gt;
&lt;li&gt;preserve evidence&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Containment options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;block source at cell firewall&lt;/li&gt;
&lt;li&gt;disable suspicious endpoint switch port&lt;/li&gt;
&lt;li&gt;terminate unauthorized vendor session&lt;/li&gt;
&lt;li&gt;disable compromised account&lt;/li&gt;
&lt;li&gt;do not stop controller without OT approval&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Detection 2: vendor access outside approved window
&lt;/h3&gt;

&lt;p&gt;Logic:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;If vendor account logs in
AND no active approved ticket exists
OR session occurs outside approved time window
THEN alert SOC and OT owner.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Triage:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;validate user and source&lt;/li&gt;
&lt;li&gt;review approval system&lt;/li&gt;
&lt;li&gt;review session recording&lt;/li&gt;
&lt;li&gt;confirm target asset&lt;/li&gt;
&lt;li&gt;disable account if unauthorized&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Detection 3: engineering workstation abnormal behavior
&lt;/h3&gt;

&lt;p&gt;Logic:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;If engineering workstation connects to unusual controllers
OR launches unauthorized remote admin tools
OR creates unusual archive files
OR executes new binaries
THEN escalate to Tier 2.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Triage:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;check maintenance activity&lt;/li&gt;
&lt;li&gt;review endpoint telemetry&lt;/li&gt;
&lt;li&gt;review user activity&lt;/li&gt;
&lt;li&gt;verify project file access&lt;/li&gt;
&lt;li&gt;confirm with engineering lead&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Detection 4: logic or setting change outside window
&lt;/h3&gt;

&lt;p&gt;Logic:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;If controller logic, relay setting, or firmware indicator changes
AND no approved change exists
THEN create critical OT alert.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Triage:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;confirm affected process&lt;/li&gt;
&lt;li&gt;engage OT engineer&lt;/li&gt;
&lt;li&gt;compare against known-good backup&lt;/li&gt;
&lt;li&gt;preserve project files and logs&lt;/li&gt;
&lt;li&gt;prepare containment and recovery plan&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Detection 5: IT-to-OT protocol crossing
&lt;/h3&gt;

&lt;p&gt;Logic:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;If source zone is enterprise IT
AND protocol is industrial or engineering-related
AND destination is OT
THEN create high-severity segmentation alert.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Examples of protocols or services to watch:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Modbus&lt;/li&gt;
&lt;li&gt;DNP3&lt;/li&gt;
&lt;li&gt;S7&lt;/li&gt;
&lt;li&gt;EtherNet/IP&lt;/li&gt;
&lt;li&gt;IEC 61850&lt;/li&gt;
&lt;li&gt;OPC Classic&lt;/li&gt;
&lt;li&gt;engineering workstation protocols&lt;/li&gt;
&lt;li&gt;RDP&lt;/li&gt;
&lt;li&gt;VNC&lt;/li&gt;
&lt;li&gt;SSH&lt;/li&gt;
&lt;li&gt;SMB&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  4. Threat hunting
&lt;/h2&gt;

&lt;p&gt;Useful OT hunts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;new assets in control zones&lt;/li&gt;
&lt;li&gt;new external remote access sources&lt;/li&gt;
&lt;li&gt;rare industrial protocol function codes&lt;/li&gt;
&lt;li&gt;RDP from non-jump-host systems&lt;/li&gt;
&lt;li&gt;vendor access outside business process&lt;/li&gt;
&lt;li&gt;engineering tool execution on non-engineering hosts&lt;/li&gt;
&lt;li&gt;abnormal historian queries&lt;/li&gt;
&lt;li&gt;new scheduled tasks on HMIs&lt;/li&gt;
&lt;li&gt;new local administrator accounts&lt;/li&gt;
&lt;li&gt;PLC communication from unexpected subnet&lt;/li&gt;
&lt;li&gt;file archives created on engineering workstations&lt;/li&gt;
&lt;li&gt;DNS queries from OT assets that should not use internet DNS&lt;/li&gt;
&lt;li&gt;relay setting changes outside planned work&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every hunt should produce one of three outcomes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;confirmed incident&lt;/li&gt;
&lt;li&gt;control gap&lt;/li&gt;
&lt;li&gt;detection tuning opportunity&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  5. Vulnerability management in operations
&lt;/h2&gt;

&lt;p&gt;Vulnerability management must be consequence-based.&lt;/p&gt;

&lt;p&gt;Do not rank only by CVSS.&lt;/p&gt;

&lt;p&gt;Prioritize by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;asset criticality&lt;/li&gt;
&lt;li&gt;process impact&lt;/li&gt;
&lt;li&gt;exploitability&lt;/li&gt;
&lt;li&gt;exposure&lt;/li&gt;
&lt;li&gt;known exploitation&lt;/li&gt;
&lt;li&gt;segmentation&lt;/li&gt;
&lt;li&gt;patch availability&lt;/li&gt;
&lt;li&gt;vendor support&lt;/li&gt;
&lt;li&gt;compensating controls&lt;/li&gt;
&lt;li&gt;recovery readiness&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Remediation options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;patch during maintenance window&lt;/li&gt;
&lt;li&gt;upgrade firmware after lab validation&lt;/li&gt;
&lt;li&gt;disable vulnerable service&lt;/li&gt;
&lt;li&gt;restrict source IP&lt;/li&gt;
&lt;li&gt;add cell firewall rule&lt;/li&gt;
&lt;li&gt;move asset to segmented zone&lt;/li&gt;
&lt;li&gt;monitor for exploitation&lt;/li&gt;
&lt;li&gt;remove enterprise reachability&lt;/li&gt;
&lt;li&gt;replace unsupported system&lt;/li&gt;
&lt;li&gt;create time-bound exception with compensating controls&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Evidence:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;vulnerability report&lt;/li&gt;
&lt;li&gt;affected asset list&lt;/li&gt;
&lt;li&gt;risk rating&lt;/li&gt;
&lt;li&gt;remediation ticket&lt;/li&gt;
&lt;li&gt;mitigation proof&lt;/li&gt;
&lt;li&gt;vendor advisory&lt;/li&gt;
&lt;li&gt;exception approval&lt;/li&gt;
&lt;li&gt;retest result&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  6. Patch and change management
&lt;/h2&gt;

&lt;p&gt;OT patching requires planning.&lt;/p&gt;

&lt;p&gt;Process:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Track vendor and national advisories.&lt;/li&gt;
&lt;li&gt;Match advisories to asset inventory.&lt;/li&gt;
&lt;li&gt;Assess process impact.&lt;/li&gt;
&lt;li&gt;Test patch or firmware in lab or spare system.&lt;/li&gt;
&lt;li&gt;Confirm vendor support.&lt;/li&gt;
&lt;li&gt;Schedule maintenance window.&lt;/li&gt;
&lt;li&gt;Confirm backup and rollback.&lt;/li&gt;
&lt;li&gt;Apply change.&lt;/li&gt;
&lt;li&gt;Monitor cyber and process telemetry.&lt;/li&gt;
&lt;li&gt;Record evidence and lessons learned.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Change control applies to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;firewall rules&lt;/li&gt;
&lt;li&gt;remote access&lt;/li&gt;
&lt;li&gt;controller logic&lt;/li&gt;
&lt;li&gt;relay settings&lt;/li&gt;
&lt;li&gt;HMI projects&lt;/li&gt;
&lt;li&gt;SCADA configuration&lt;/li&gt;
&lt;li&gt;historian connectors&lt;/li&gt;
&lt;li&gt;switch and router configuration&lt;/li&gt;
&lt;li&gt;firmware updates&lt;/li&gt;
&lt;li&gt;user and role changes&lt;/li&gt;
&lt;li&gt;cloud data pipelines&lt;/li&gt;
&lt;li&gt;safety system changes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every OT change needs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;owner&lt;/li&gt;
&lt;li&gt;approval&lt;/li&gt;
&lt;li&gt;maintenance window&lt;/li&gt;
&lt;li&gt;rollback plan&lt;/li&gt;
&lt;li&gt;monitoring plan&lt;/li&gt;
&lt;li&gt;stop condition&lt;/li&gt;
&lt;li&gt;post-change validation&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  7. SOAR and automation
&lt;/h2&gt;

&lt;p&gt;Automation helps when it reduces analyst workload without creating operational risk.&lt;/p&gt;

&lt;h3&gt;
  
  
  Generally safe to automate
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;enrich alert with asset criticality&lt;/li&gt;
&lt;li&gt;attach owner and location&lt;/li&gt;
&lt;li&gt;check change ticket&lt;/li&gt;
&lt;li&gt;check vendor access approval&lt;/li&gt;
&lt;li&gt;collect relevant logs&lt;/li&gt;
&lt;li&gt;query threat intelligence&lt;/li&gt;
&lt;li&gt;notify OT owner&lt;/li&gt;
&lt;li&gt;open incident ticket&lt;/li&gt;
&lt;li&gt;create evidence folder&lt;/li&gt;
&lt;li&gt;draft timeline&lt;/li&gt;
&lt;li&gt;recommend containment options&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Must require human approval
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;blocking OT network flows&lt;/li&gt;
&lt;li&gt;disabling vendor access during active maintenance&lt;/li&gt;
&lt;li&gt;isolating HMI or SCADA server&lt;/li&gt;
&lt;li&gt;disabling switch ports&lt;/li&gt;
&lt;li&gt;changing firewall policy&lt;/li&gt;
&lt;li&gt;resetting OT passwords at scale&lt;/li&gt;
&lt;li&gt;restarting services&lt;/li&gt;
&lt;li&gt;reloading controller logic&lt;/li&gt;
&lt;li&gt;disconnecting IT/OT boundary links&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Failure mode
&lt;/h3&gt;

&lt;p&gt;A SOAR playbook that automatically blocks a controller communication path can stop a process.&lt;/p&gt;

&lt;p&gt;The required controls are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;approval gates&lt;/li&gt;
&lt;li&gt;rollback&lt;/li&gt;
&lt;li&gt;audit logging&lt;/li&gt;
&lt;li&gt;simulation testing&lt;/li&gt;
&lt;li&gt;OT owner sign-off&lt;/li&gt;
&lt;li&gt;emergency bypass procedure&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  8. Incident response for OT
&lt;/h2&gt;

&lt;p&gt;OT incident response must be safety-led.&lt;/p&gt;

&lt;h3&gt;
  
  
  Severity model
&lt;/h3&gt;

&lt;p&gt;SEV-1 Critical:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;unauthorized control action&lt;/li&gt;
&lt;li&gt;confirmed logic or relay setting manipulation&lt;/li&gt;
&lt;li&gt;ransomware affecting operations&lt;/li&gt;
&lt;li&gt;safety impact&lt;/li&gt;
&lt;li&gt;loss of control visibility&lt;/li&gt;
&lt;li&gt;major service disruption&lt;/li&gt;
&lt;li&gt;active attacker in critical OT zone&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;SEV-2 High:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;compromised engineering workstation&lt;/li&gt;
&lt;li&gt;unauthorized PLC or relay write attempt&lt;/li&gt;
&lt;li&gt;vendor account compromise&lt;/li&gt;
&lt;li&gt;malware on HMI&lt;/li&gt;
&lt;li&gt;confirmed lateral movement toward OT&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;SEV-3 Medium:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;unauthorized device in OT&lt;/li&gt;
&lt;li&gt;suspicious scan&lt;/li&gt;
&lt;li&gt;failed privileged logins&lt;/li&gt;
&lt;li&gt;policy violation&lt;/li&gt;
&lt;li&gt;unmanaged remote access path&lt;/li&gt;
&lt;li&gt;monitoring gap with significant risk&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;SEV-4 Low:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;false positive&lt;/li&gt;
&lt;li&gt;benign misconfiguration&lt;/li&gt;
&lt;li&gt;informational alert&lt;/li&gt;
&lt;li&gt;low-impact hygiene issue&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Triage questions
&lt;/h3&gt;

&lt;p&gt;Ask:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which asset is affected?&lt;/li&gt;
&lt;li&gt;What physical process does it support?&lt;/li&gt;
&lt;li&gt;Is the process stable?&lt;/li&gt;
&lt;li&gt;Is this read traffic, write traffic, or administrative activity?&lt;/li&gt;
&lt;li&gt;Is this inside an approved change window?&lt;/li&gt;
&lt;li&gt;Is a vendor approved to connect?&lt;/li&gt;
&lt;li&gt;Can containment harm safety or availability?&lt;/li&gt;
&lt;li&gt;What evidence must be preserved?&lt;/li&gt;
&lt;li&gt;Who can approve action?&lt;/li&gt;
&lt;li&gt;What rollback exists?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Containment principles
&lt;/h3&gt;

&lt;p&gt;Good containment:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;disable suspicious endpoint port&lt;/li&gt;
&lt;li&gt;block attacker source at cell firewall&lt;/li&gt;
&lt;li&gt;terminate unauthorized vendor session&lt;/li&gt;
&lt;li&gt;disable compromised account&lt;/li&gt;
&lt;li&gt;move operators to standby HMI&lt;/li&gt;
&lt;li&gt;disconnect enterprise path while keeping local OT running&lt;/li&gt;
&lt;li&gt;preserve packet captures and logs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Avoid without approval:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;stopping controllers&lt;/li&gt;
&lt;li&gt;rebooting HMIs during live operations&lt;/li&gt;
&lt;li&gt;reloading logic without validation&lt;/li&gt;
&lt;li&gt;broad password resets during operational stress&lt;/li&gt;
&lt;li&gt;shutting down switches supporting active process control&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The principle is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Isolate the attacker, not the process.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  9. Backup, recovery, and continuity
&lt;/h2&gt;

&lt;p&gt;Backups are a cyber safety control.&lt;/p&gt;

&lt;p&gt;Critical backups:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HMI images&lt;/li&gt;
&lt;li&gt;engineering workstation images&lt;/li&gt;
&lt;li&gt;SCADA server configuration&lt;/li&gt;
&lt;li&gt;historian configuration&lt;/li&gt;
&lt;li&gt;PLC and RTU logic&lt;/li&gt;
&lt;li&gt;relay settings&lt;/li&gt;
&lt;li&gt;network device configuration&lt;/li&gt;
&lt;li&gt;firewall policy&lt;/li&gt;
&lt;li&gt;remote access configuration&lt;/li&gt;
&lt;li&gt;license keys&lt;/li&gt;
&lt;li&gt;vendor installation media&lt;/li&gt;
&lt;li&gt;recovery procedures&lt;/li&gt;
&lt;li&gt;offline contact lists&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Minimum standard:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;offline or immutable copy&lt;/li&gt;
&lt;li&gt;physically or logically disconnected copy&lt;/li&gt;
&lt;li&gt;restore test for critical systems&lt;/li&gt;
&lt;li&gt;spare hardware for high-criticality assets&lt;/li&gt;
&lt;li&gt;firmware and software version records&lt;/li&gt;
&lt;li&gt;recovery runbook accessible during IT outage&lt;/li&gt;
&lt;li&gt;recovery exercise at least annually for critical services&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Leadership should ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Can we restore the most critical process-control function from known-good backups during a cyber incident?&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  10. Purple team and exercises
&lt;/h2&gt;

&lt;p&gt;Exercises turn plans into capability.&lt;/p&gt;

&lt;p&gt;Run:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;tabletop exercises&lt;/li&gt;
&lt;li&gt;detection validation&lt;/li&gt;
&lt;li&gt;restore drills&lt;/li&gt;
&lt;li&gt;vendor access abuse scenarios&lt;/li&gt;
&lt;li&gt;ransomware-on-HMI scenario&lt;/li&gt;
&lt;li&gt;unauthorized PLC logic change scenario&lt;/li&gt;
&lt;li&gt;relay setting change scenario&lt;/li&gt;
&lt;li&gt;loss of IT/OT boundary scenario&lt;/li&gt;
&lt;li&gt;national crisis communication exercise&lt;/li&gt;
&lt;li&gt;manual operation coordination exercise&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Use MITRE ATT&amp;amp;CK for ICS to build scenarios.&lt;/p&gt;

&lt;p&gt;Example scenario:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;vendor VPN compromise
-&amp;gt; OT network discovery
-&amp;gt; RDP to engineering workstation
-&amp;gt; project file collection
-&amp;gt; unauthorized logic download
-&amp;gt; alarm suppression attempt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For each stage define:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;expected telemetry&lt;/li&gt;
&lt;li&gt;detection rule&lt;/li&gt;
&lt;li&gt;response owner&lt;/li&gt;
&lt;li&gt;containment option&lt;/li&gt;
&lt;li&gt;evidence required&lt;/li&gt;
&lt;li&gt;control gap&lt;/li&gt;
&lt;li&gt;remediation owner&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  11. Metrics that matter
&lt;/h2&gt;

&lt;p&gt;Do not report only alert volume.&lt;/p&gt;

&lt;p&gt;Report operational cyber risk.&lt;/p&gt;

&lt;p&gt;Good metrics:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;percentage of critical OT assets inventoried&lt;/li&gt;
&lt;li&gt;number of direct IT-to-OT flows remaining&lt;/li&gt;
&lt;li&gt;vendor accounts active outside approved windows&lt;/li&gt;
&lt;li&gt;percentage of critical assets with tested backups&lt;/li&gt;
&lt;li&gt;unauthorized write attempts&lt;/li&gt;
&lt;li&gt;critical vulnerabilities past SLA without compensating controls&lt;/li&gt;
&lt;li&gt;percentage of firewall rules reviewed this quarter&lt;/li&gt;
&lt;li&gt;mean time to triage high-severity OT alerts&lt;/li&gt;
&lt;li&gt;restore tests completed&lt;/li&gt;
&lt;li&gt;open exceptions by age and criticality&lt;/li&gt;
&lt;li&gt;OT detections tested in the last quarter&lt;/li&gt;
&lt;li&gt;percentage of remote sessions recorded&lt;/li&gt;
&lt;li&gt;unmanaged devices found in OT&lt;/li&gt;
&lt;li&gt;sites with passive monitoring coverage&lt;/li&gt;
&lt;li&gt;engineering changes with complete evidence&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A strong board statement:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;We have inventoried 94% of critical OT assets, removed direct enterprise-to-controller access, placed vendor access behind MFA and recording, tested restores for the top three process-control functions, and validated detections for unauthorized controller writes. Remaining risk is concentrated in two legacy sites and one vendor remote access path.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is better than:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;We deployed an OT monitoring platform.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  12. Operating rhythm
&lt;/h2&gt;

&lt;p&gt;Daily:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;review high-severity OT alerts&lt;/li&gt;
&lt;li&gt;review remote access anomalies&lt;/li&gt;
&lt;li&gt;confirm critical monitoring health&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Weekly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;review new assets and flows&lt;/li&gt;
&lt;li&gt;review failed privileged logins&lt;/li&gt;
&lt;li&gt;review vendor activity&lt;/li&gt;
&lt;li&gt;tune noisy detections&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Monthly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;review vendor accounts&lt;/li&gt;
&lt;li&gt;review privileged accounts&lt;/li&gt;
&lt;li&gt;validate backup job status&lt;/li&gt;
&lt;li&gt;review open critical vulnerabilities&lt;/li&gt;
&lt;li&gt;review unmanaged devices&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Quarterly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;review firewall rules&lt;/li&gt;
&lt;li&gt;run detection validation&lt;/li&gt;
&lt;li&gt;review exceptions&lt;/li&gt;
&lt;li&gt;update threat model&lt;/li&gt;
&lt;li&gt;report metrics to leadership&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Semiannual:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;run restore test&lt;/li&gt;
&lt;li&gt;run incident response tabletop&lt;/li&gt;
&lt;li&gt;review architecture against current operations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Annual:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;conduct OT security assessment&lt;/li&gt;
&lt;li&gt;run sector or national exercise&lt;/li&gt;
&lt;li&gt;refresh strategy, budget, and risk register&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Takeaway
&lt;/h2&gt;

&lt;p&gt;Cyber operations decide whether architecture becomes real security.&lt;/p&gt;

&lt;p&gt;A mature OT SOC does not chase every alert equally.&lt;/p&gt;

&lt;p&gt;It understands process context, detects meaningful behavior, acts safely, preserves evidence, supports recovery, and improves controls after every event.&lt;/p&gt;

&lt;p&gt;For state-owned ICS, that is not just a security function.&lt;/p&gt;

&lt;p&gt;It is part of national continuity.&lt;/p&gt;

&lt;p&gt;Let's move to Final &lt;a href="https://dev.to/mike_anderson_d01f52129fb/securing-state-owned-ics-part-6-ai-governance-procurement-and-the-180-day-national-roadmap-2117"&gt; Part-6: AI, Governance, Procurement, and the 180-Day National Roadmap &lt;/a&gt;&lt;/p&gt;




</description>
      <category>cybersecurity</category>
      <category>soc</category>
      <category>ics</category>
      <category>security</category>
    </item>
    <item>
      <title>Securing State-Owned ICS (Part 4): Tools, Technologies, and Control Implementation Catalog</title>
      <dc:creator>Mike Anderson</dc:creator>
      <pubDate>Tue, 14 Jul 2026 12:51:06 +0000</pubDate>
      <link>https://dev.to/mike_anderson_d01f52129fb/securing-state-owned-ics-part-4-tools-technologies-and-control-implementation-catalog-521f</link>
      <guid>https://dev.to/mike_anderson_d01f52129fb/securing-state-owned-ics-part-4-tools-technologies-and-control-implementation-catalog-521f</guid>
      <description>&lt;p&gt;Architecture without implementation is just a diagram.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/mike_anderson_d01f52129fb/executive-brief-state-owned-ics-cybersecurity-blueprint-a-five-part-series-journey-part-0-373l"&gt;Previous Series: Part 1: Executive Briefing&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/mike_anderson_d01f52129fb/securing-state-owned-ics-part-1-national-risk-threat-landscape-and-the-first-30-days-4ad3"&gt;Previous Series: Part 2: National Risk, Threat Landscape, and the First 30 Days&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/mike_anderson_d01f52129fb/securing-state-owned-ics-part-3-target-architecture-for-it-ot-cloud-and-power-grid-1mdi"&gt;Previous Series: Part-3: Target Architecture for IT, OT, Cloud, and Power Grid Environments&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/mike_anderson_d01f52129fb/implementation-control-matrixpart-7-state-owned-ics-cybersecurity-blueprint-1kjo"&gt;Jump to Part-7: State-Owned ICS Cybersecurity Blueprint&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is written for CISOs, security architects, procurement teams, SOC managers, OT engineers, and government program owners who need to build a real security capability.&lt;/p&gt;

&lt;p&gt;The message is direct:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Do not buy tools first.&lt;br&gt;&lt;br&gt;
Define the control.&lt;br&gt;&lt;br&gt;
Define the enforcement point.&lt;br&gt;&lt;br&gt;
Define the owner.&lt;br&gt;&lt;br&gt;
Define the evidence.&lt;br&gt;&lt;br&gt;
Then select the tool.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Executive summary for leaders
&lt;/h2&gt;

&lt;p&gt;A national ICS cybersecurity program needs technology, but technology alone will not protect the plant.&lt;/p&gt;

&lt;p&gt;Each tool must answer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What risk does it reduce?&lt;/li&gt;
&lt;li&gt;Where is it enforced?&lt;/li&gt;
&lt;li&gt;Who operates it?&lt;/li&gt;
&lt;li&gt;What evidence proves it works?&lt;/li&gt;
&lt;li&gt;What happens if it fails?&lt;/li&gt;
&lt;li&gt;Can it operate safely in OT?&lt;/li&gt;
&lt;li&gt;Does it support recovery during a crisis?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If the answer is unclear, the tool is not ready for critical infrastructure.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Control architecture model
&lt;/h2&gt;

&lt;p&gt;Every control should be documented using this format.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Control ID:
Control objective:
Risk reduced:
Enforcement point:
Technology examples:
Owner:
Evidence:
Failure mode:
Residual risk:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Control ID: OT-RA-01
Control objective: prevent uncontrolled vendor access to OT
Risk reduced: third-party compromise leading to controller or HMI access
Enforcement point: remote access portal, MFA, PAM, jump host, firewall
Technology examples: CyberArk, BeyondTrust, Delinea, Fortinet, Palo Alto, Duo, Okta
Owner: OT security and vendor manager
Evidence: access ticket, session recording, VPN log, monthly account review
Failure mode: vendor receives broad subnet access or account remains active after contract ends
Residual risk: vendor endpoint compromise may still occur, so session monitoring remains required
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This level of clarity separates real security from policy language.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Asset inventory and visibility
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Control objective
&lt;/h3&gt;

&lt;p&gt;Know every critical OT asset, its owner, location, function, software or firmware version, communication path, and process impact.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tools and technology examples
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Nozomi Networks&lt;/li&gt;
&lt;li&gt;Dragos Platform&lt;/li&gt;
&lt;li&gt;Claroty&lt;/li&gt;
&lt;li&gt;Microsoft Defender for IoT&lt;/li&gt;
&lt;li&gt;Forescout eyeInspect&lt;/li&gt;
&lt;li&gt;Tenable OT&lt;/li&gt;
&lt;li&gt;Security Onion with Zeek for teams that can operate open-source tooling&lt;/li&gt;
&lt;li&gt;industrial network switch exports&lt;/li&gt;
&lt;li&gt;engineering workstation project files&lt;/li&gt;
&lt;li&gt;CMDB or asset database&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Required evidence
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;critical asset inventory&lt;/li&gt;
&lt;li&gt;unknown device list&lt;/li&gt;
&lt;li&gt;firmware and software inventory&lt;/li&gt;
&lt;li&gt;zone assignment&lt;/li&gt;
&lt;li&gt;owner assignment&lt;/li&gt;
&lt;li&gt;criticality rating&lt;/li&gt;
&lt;li&gt;remote access dependency&lt;/li&gt;
&lt;li&gt;backup status&lt;/li&gt;
&lt;li&gt;unsupported asset list&lt;/li&gt;
&lt;li&gt;inventory reconciliation record&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Failure mode
&lt;/h3&gt;

&lt;p&gt;A passive discovery tool identifies networked assets but misses offline controllers, serial devices, spare PLCs, relay settings, or undocumented engineering laptops.&lt;/p&gt;

&lt;h3&gt;
  
  
  Required operating practice
&lt;/h3&gt;

&lt;p&gt;Combine passive discovery with engineering walkdowns and configuration review.&lt;/p&gt;

&lt;p&gt;Do not treat tool discovery as complete truth.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Network segmentation
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Control objective
&lt;/h3&gt;

&lt;p&gt;Prevent compromise in one network zone from spreading into critical control zones.&lt;/p&gt;

&lt;h3&gt;
  
  
  Enforcement points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;IT/OT firewalls&lt;/li&gt;
&lt;li&gt;OT DMZ&lt;/li&gt;
&lt;li&gt;industrial firewalls&lt;/li&gt;
&lt;li&gt;router ACLs&lt;/li&gt;
&lt;li&gt;switch ACLs&lt;/li&gt;
&lt;li&gt;VLANs&lt;/li&gt;
&lt;li&gt;data diode or unidirectional gateway where appropriate&lt;/li&gt;
&lt;li&gt;proxy or broker services&lt;/li&gt;
&lt;li&gt;jump hosts&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Tools and technology examples
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Fortinet FortiGate and FortiSwitch&lt;/li&gt;
&lt;li&gt;Palo Alto Networks NGFW&lt;/li&gt;
&lt;li&gt;Check Point&lt;/li&gt;
&lt;li&gt;Cisco Secure Firewall and industrial networking&lt;/li&gt;
&lt;li&gt;Tofino Xenon&lt;/li&gt;
&lt;li&gt;Belden / Hirschmann&lt;/li&gt;
&lt;li&gt;Siemens Scalance&lt;/li&gt;
&lt;li&gt;Ruggedcom&lt;/li&gt;
&lt;li&gt;Waterfall Security or Owl Cyber Defense for unidirectional use cases&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Required evidence
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;zone and conduit diagram&lt;/li&gt;
&lt;li&gt;firewall rule export&lt;/li&gt;
&lt;li&gt;rule owner&lt;/li&gt;
&lt;li&gt;business justification&lt;/li&gt;
&lt;li&gt;review date&lt;/li&gt;
&lt;li&gt;approved exception list&lt;/li&gt;
&lt;li&gt;blocked direct enterprise-to-controller path evidence&lt;/li&gt;
&lt;li&gt;segmentation test result&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Failure mode
&lt;/h3&gt;

&lt;p&gt;The organization has a firewall between IT and OT but keeps broad rules such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;source: enterprise network
destination: OT network
service: any
purpose: support
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is not segmentation.&lt;/p&gt;

&lt;p&gt;That is an attack path with a firewall in front of it.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Remote access and vendor access
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Control objective
&lt;/h3&gt;

&lt;p&gt;Ensure all remote OT access is authenticated, approved, recorded, limited, and time-bound.&lt;/p&gt;

&lt;h3&gt;
  
  
  Enforcement points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;remote access portal&lt;/li&gt;
&lt;li&gt;MFA&lt;/li&gt;
&lt;li&gt;PAM&lt;/li&gt;
&lt;li&gt;jump host&lt;/li&gt;
&lt;li&gt;firewall&lt;/li&gt;
&lt;li&gt;ticketing workflow&lt;/li&gt;
&lt;li&gt;session recording&lt;/li&gt;
&lt;li&gt;vendor account lifecycle&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Tools and technology examples
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;CyberArk&lt;/li&gt;
&lt;li&gt;BeyondTrust&lt;/li&gt;
&lt;li&gt;Delinea&lt;/li&gt;
&lt;li&gt;Teleport for controlled access where appropriate&lt;/li&gt;
&lt;li&gt;Fortinet ZTNA or VPN&lt;/li&gt;
&lt;li&gt;Palo Alto GlobalProtect&lt;/li&gt;
&lt;li&gt;Cisco Secure Access&lt;/li&gt;
&lt;li&gt;Duo&lt;/li&gt;
&lt;li&gt;Okta&lt;/li&gt;
&lt;li&gt;Microsoft Entra ID&lt;/li&gt;
&lt;li&gt;ServiceNow or Jira for approval workflow&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Required evidence
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;approved access ticket&lt;/li&gt;
&lt;li&gt;MFA log&lt;/li&gt;
&lt;li&gt;session recording&lt;/li&gt;
&lt;li&gt;target asset list&lt;/li&gt;
&lt;li&gt;access start and end time&lt;/li&gt;
&lt;li&gt;vendor account review&lt;/li&gt;
&lt;li&gt;emergency access review&lt;/li&gt;
&lt;li&gt;monthly access attestation&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Failure mode
&lt;/h3&gt;

&lt;p&gt;Vendor VPN provides broad OT subnet access.&lt;/p&gt;

&lt;h3&gt;
  
  
  Required fix
&lt;/h3&gt;

&lt;p&gt;Vendor access should land on a controlled jump host and then only reach named target assets during an approved window.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Identity and privileged access
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Control objective
&lt;/h3&gt;

&lt;p&gt;Prevent credential compromise from becoming OT control.&lt;/p&gt;

&lt;h3&gt;
  
  
  Enforcement points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;separate OT identity boundary&lt;/li&gt;
&lt;li&gt;MFA&lt;/li&gt;
&lt;li&gt;PAM&lt;/li&gt;
&lt;li&gt;group policy&lt;/li&gt;
&lt;li&gt;local account vaulting&lt;/li&gt;
&lt;li&gt;privileged role review&lt;/li&gt;
&lt;li&gt;break-glass process&lt;/li&gt;
&lt;li&gt;service account governance&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Tools and technology examples
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Active Directory with separate OT forest&lt;/li&gt;
&lt;li&gt;Microsoft Entra ID with careful federation design&lt;/li&gt;
&lt;li&gt;CyberArk&lt;/li&gt;
&lt;li&gt;BeyondTrust&lt;/li&gt;
&lt;li&gt;Delinea&lt;/li&gt;
&lt;li&gt;Thycotic/Delinea Secret Server&lt;/li&gt;
&lt;li&gt;Duo&lt;/li&gt;
&lt;li&gt;Okta&lt;/li&gt;
&lt;li&gt;Ping&lt;/li&gt;
&lt;li&gt;Microsoft LAPS or Windows LAPS for local admin management&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Required evidence
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;privileged account list&lt;/li&gt;
&lt;li&gt;access review sign-off&lt;/li&gt;
&lt;li&gt;service account register&lt;/li&gt;
&lt;li&gt;break-glass test record&lt;/li&gt;
&lt;li&gt;MFA enforcement report&lt;/li&gt;
&lt;li&gt;PAM session log&lt;/li&gt;
&lt;li&gt;local admin password management evidence&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Failure mode
&lt;/h3&gt;

&lt;p&gt;Corporate Active Directory compromise provides direct access to OT workstations.&lt;/p&gt;

&lt;h3&gt;
  
  
  Required fix
&lt;/h3&gt;

&lt;p&gt;Create separation, enforce MFA and PAM, remove unnecessary trust, and restrict privileged access to approved administration paths.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. Endpoint and engineering workstation security
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Control objective
&lt;/h3&gt;

&lt;p&gt;Protect HMIs, SCADA servers, historians, and engineering workstations from malware, unauthorized software, credential theft, and unauthorized engineering activity.&lt;/p&gt;

&lt;h3&gt;
  
  
  Enforcement points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;hardened OS baseline&lt;/li&gt;
&lt;li&gt;application allowlisting&lt;/li&gt;
&lt;li&gt;EDR in OT-safe mode&lt;/li&gt;
&lt;li&gt;host firewall&lt;/li&gt;
&lt;li&gt;USB control&lt;/li&gt;
&lt;li&gt;local admin restriction&lt;/li&gt;
&lt;li&gt;log forwarding&lt;/li&gt;
&lt;li&gt;golden image&lt;/li&gt;
&lt;li&gt;backup&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Tools and technology examples
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Microsoft Defender for Endpoint configured for OT compatibility&lt;/li&gt;
&lt;li&gt;CrowdStrike or SentinelOne where validated for OT use&lt;/li&gt;
&lt;li&gt;Windows Defender Application Control&lt;/li&gt;
&lt;li&gt;AppLocker&lt;/li&gt;
&lt;li&gt;Ivanti or Tanium for managed environments&lt;/li&gt;
&lt;li&gt;vendor-approved hardening tools&lt;/li&gt;
&lt;li&gt;Group Policy for Windows OT environments&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Required evidence
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;hardening baseline&lt;/li&gt;
&lt;li&gt;application allowlisting policy&lt;/li&gt;
&lt;li&gt;EDR coverage report&lt;/li&gt;
&lt;li&gt;exclusion list approved by vendor and security&lt;/li&gt;
&lt;li&gt;local admin review&lt;/li&gt;
&lt;li&gt;USB exception list&lt;/li&gt;
&lt;li&gt;golden image record&lt;/li&gt;
&lt;li&gt;restore test evidence&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Failure mode
&lt;/h3&gt;

&lt;p&gt;An endpoint tool blocks a vendor HMI process or overloads a fragile system.&lt;/p&gt;

&lt;h3&gt;
  
  
  Required fix
&lt;/h3&gt;

&lt;p&gt;Validate endpoint controls in a lab, maintenance window, or spare system before broad deployment.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. Controller, PLC, RTU, and relay security
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Control objective
&lt;/h3&gt;

&lt;p&gt;Restrict who can modify control logic, relay settings, firmware, and controller configuration.&lt;/p&gt;

&lt;h3&gt;
  
  
  Enforcement points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;controller access control&lt;/li&gt;
&lt;li&gt;engineering workstation restriction&lt;/li&gt;
&lt;li&gt;cell firewall&lt;/li&gt;
&lt;li&gt;physical cabinet access&lt;/li&gt;
&lt;li&gt;change workflow&lt;/li&gt;
&lt;li&gt;logic backup&lt;/li&gt;
&lt;li&gt;checksum or integrity verification&lt;/li&gt;
&lt;li&gt;vendor secure protocol settings where available&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Tools and technology examples
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;vendor engineering software&lt;/li&gt;
&lt;li&gt;PLC and relay backup tools&lt;/li&gt;
&lt;li&gt;OT monitoring platforms&lt;/li&gt;
&lt;li&gt;industrial firewalls&lt;/li&gt;
&lt;li&gt;configuration management tools&lt;/li&gt;
&lt;li&gt;physical access control&lt;/li&gt;
&lt;li&gt;secure engineering workstations&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Required evidence
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;controller inventory&lt;/li&gt;
&lt;li&gt;approved engineering workstation list&lt;/li&gt;
&lt;li&gt;logic backup&lt;/li&gt;
&lt;li&gt;firmware version&lt;/li&gt;
&lt;li&gt;checksum or vendor integrity evidence&lt;/li&gt;
&lt;li&gt;change approval&lt;/li&gt;
&lt;li&gt;restoration test&lt;/li&gt;
&lt;li&gt;access control configuration&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Failure mode
&lt;/h3&gt;

&lt;p&gt;Anyone on the plant VLAN can reach a PLC programming interface.&lt;/p&gt;

&lt;h3&gt;
  
  
  Required fix
&lt;/h3&gt;

&lt;p&gt;Restrict programming access to approved engineering workstations and monitor write-capable commands.&lt;/p&gt;




&lt;h2&gt;
  
  
  8. OT monitoring and detection
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Control objective
&lt;/h3&gt;

&lt;p&gt;Detect unauthorized access, abnormal protocol behavior, new devices, controller writes, logic changes, and segmentation failures.&lt;/p&gt;

&lt;h3&gt;
  
  
  Enforcement points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;passive OT sensors&lt;/li&gt;
&lt;li&gt;SIEM&lt;/li&gt;
&lt;li&gt;detection rules&lt;/li&gt;
&lt;li&gt;packet capture&lt;/li&gt;
&lt;li&gt;jump host logs&lt;/li&gt;
&lt;li&gt;identity logs&lt;/li&gt;
&lt;li&gt;firewall logs&lt;/li&gt;
&lt;li&gt;change management integration&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Tools and technology examples
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Dragos Platform&lt;/li&gt;
&lt;li&gt;Nozomi Networks&lt;/li&gt;
&lt;li&gt;Claroty&lt;/li&gt;
&lt;li&gt;Microsoft Defender for IoT&lt;/li&gt;
&lt;li&gt;Forescout eyeInspect&lt;/li&gt;
&lt;li&gt;Tenable OT&lt;/li&gt;
&lt;li&gt;Security Onion&lt;/li&gt;
&lt;li&gt;Zeek&lt;/li&gt;
&lt;li&gt;Suricata&lt;/li&gt;
&lt;li&gt;Splunk&lt;/li&gt;
&lt;li&gt;Microsoft Sentinel&lt;/li&gt;
&lt;li&gt;Google SecOps&lt;/li&gt;
&lt;li&gt;Elastic Security&lt;/li&gt;
&lt;li&gt;IBM QRadar&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Required evidence
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;log source inventory&lt;/li&gt;
&lt;li&gt;sensor placement diagram&lt;/li&gt;
&lt;li&gt;detection catalog&lt;/li&gt;
&lt;li&gt;alert tuning record&lt;/li&gt;
&lt;li&gt;test cases&lt;/li&gt;
&lt;li&gt;triage playbooks&lt;/li&gt;
&lt;li&gt;packet capture retention policy&lt;/li&gt;
&lt;li&gt;MITRE ATT&amp;amp;CK for ICS mapping&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Failure mode
&lt;/h3&gt;

&lt;p&gt;The tool alerts on everything, the SOC trusts nothing, and real control activity is missed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Required fix
&lt;/h3&gt;

&lt;p&gt;Build detections around process-relevant behavior and tune with OT engineers.&lt;/p&gt;




&lt;h2&gt;
  
  
  9. Vulnerability management
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Control objective
&lt;/h3&gt;

&lt;p&gt;Identify, prioritize, remediate, or compensate vulnerabilities without destabilizing operations.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tools and technology examples
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Tenable OT&lt;/li&gt;
&lt;li&gt;Claroty&lt;/li&gt;
&lt;li&gt;Nozomi&lt;/li&gt;
&lt;li&gt;Dragos&lt;/li&gt;
&lt;li&gt;CISA ICS advisories&lt;/li&gt;
&lt;li&gt;vendor advisories&lt;/li&gt;
&lt;li&gt;Qualys, Rapid7, or Tenable for IT zones&lt;/li&gt;
&lt;li&gt;SBOM and software inventory tools where available&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Prioritization model
&lt;/h3&gt;

&lt;p&gt;Do not rank only by CVSS.&lt;/p&gt;

&lt;p&gt;Prioritize by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;exploitability&lt;/li&gt;
&lt;li&gt;exposure&lt;/li&gt;
&lt;li&gt;asset criticality&lt;/li&gt;
&lt;li&gt;process consequence&lt;/li&gt;
&lt;li&gt;internet or enterprise reachability&lt;/li&gt;
&lt;li&gt;known exploitation&lt;/li&gt;
&lt;li&gt;compensating controls&lt;/li&gt;
&lt;li&gt;patch availability&lt;/li&gt;
&lt;li&gt;vendor support&lt;/li&gt;
&lt;li&gt;recovery readiness&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Required evidence
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;vulnerability report&lt;/li&gt;
&lt;li&gt;affected asset list&lt;/li&gt;
&lt;li&gt;risk decision&lt;/li&gt;
&lt;li&gt;remediation ticket&lt;/li&gt;
&lt;li&gt;patch or mitigation evidence&lt;/li&gt;
&lt;li&gt;vendor advisory&lt;/li&gt;
&lt;li&gt;exception approval&lt;/li&gt;
&lt;li&gt;compensating control record&lt;/li&gt;
&lt;li&gt;retest result&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Failure mode
&lt;/h3&gt;

&lt;p&gt;The team runs aggressive IT scans against live controllers.&lt;/p&gt;

&lt;h3&gt;
  
  
  Required fix
&lt;/h3&gt;

&lt;p&gt;Use passive assessment first, controlled active scanning only with written OT approval, lab validation, stop conditions, and rollback.&lt;/p&gt;




&lt;h2&gt;
  
  
  10. Backup and recovery
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Control objective
&lt;/h3&gt;

&lt;p&gt;Restore critical control functions from known-good backups during a cyber incident.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tools and technology examples
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Veeam&lt;/li&gt;
&lt;li&gt;Commvault&lt;/li&gt;
&lt;li&gt;Rubrik&lt;/li&gt;
&lt;li&gt;Cohesity&lt;/li&gt;
&lt;li&gt;Acronis&lt;/li&gt;
&lt;li&gt;vendor-specific PLC backup tools&lt;/li&gt;
&lt;li&gt;offline media&lt;/li&gt;
&lt;li&gt;immutable storage&lt;/li&gt;
&lt;li&gt;secure backup vault&lt;/li&gt;
&lt;li&gt;spare PLC, relay, HMI, and workstation hardware&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Required evidence
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;backup inventory&lt;/li&gt;
&lt;li&gt;backup schedule&lt;/li&gt;
&lt;li&gt;offline or immutable copy proof&lt;/li&gt;
&lt;li&gt;restore test result&lt;/li&gt;
&lt;li&gt;firmware and software dependency record&lt;/li&gt;
&lt;li&gt;license key inventory&lt;/li&gt;
&lt;li&gt;recovery runbook&lt;/li&gt;
&lt;li&gt;spare hardware list&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Failure mode
&lt;/h3&gt;

&lt;p&gt;Backups exist but have never been restored.&lt;/p&gt;

&lt;h3&gt;
  
  
  Required fix
&lt;/h3&gt;

&lt;p&gt;Test recovery of the most critical process-control functions, not only backup job completion.&lt;/p&gt;




&lt;h2&gt;
  
  
  11. File transfer, malware inspection, and patch staging
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Control objective
&lt;/h3&gt;

&lt;p&gt;Prevent malware and unapproved files from crossing into OT.&lt;/p&gt;

&lt;h3&gt;
  
  
  Enforcement points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;managed file transfer gateway&lt;/li&gt;
&lt;li&gt;malware sandbox&lt;/li&gt;
&lt;li&gt;content inspection&lt;/li&gt;
&lt;li&gt;hash verification&lt;/li&gt;
&lt;li&gt;signed package validation&lt;/li&gt;
&lt;li&gt;OT DMZ staging server&lt;/li&gt;
&lt;li&gt;removable media procedure&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Tools and technology examples
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;secure file transfer gateway&lt;/li&gt;
&lt;li&gt;sandbox analysis platform&lt;/li&gt;
&lt;li&gt;antivirus scanning station&lt;/li&gt;
&lt;li&gt;content disarm and reconstruction where appropriate&lt;/li&gt;
&lt;li&gt;YARA scanning for mature teams&lt;/li&gt;
&lt;li&gt;vendor package verification tools&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Required evidence
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;file transfer logs&lt;/li&gt;
&lt;li&gt;package approval&lt;/li&gt;
&lt;li&gt;hash verification&lt;/li&gt;
&lt;li&gt;malware scan result&lt;/li&gt;
&lt;li&gt;change ticket&lt;/li&gt;
&lt;li&gt;OT owner approval&lt;/li&gt;
&lt;li&gt;removable media register&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Failure mode
&lt;/h3&gt;

&lt;p&gt;A vendor brings a USB drive directly to an engineering workstation.&lt;/p&gt;

&lt;h3&gt;
  
  
  Required fix
&lt;/h3&gt;

&lt;p&gt;All removable media and vendor packages must pass through controlled inspection before OT use.&lt;/p&gt;




&lt;h2&gt;
  
  
  12. Cloud and IIoT security
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Control objective
&lt;/h3&gt;

&lt;p&gt;Enable analytics and reporting without creating a control path from cloud or enterprise systems into OT.&lt;/p&gt;

&lt;h3&gt;
  
  
  Enforcement points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;data gateway&lt;/li&gt;
&lt;li&gt;brokered API&lt;/li&gt;
&lt;li&gt;private connectivity&lt;/li&gt;
&lt;li&gt;one-way transfer where appropriate&lt;/li&gt;
&lt;li&gt;cloud IAM&lt;/li&gt;
&lt;li&gt;encryption&lt;/li&gt;
&lt;li&gt;logging&lt;/li&gt;
&lt;li&gt;data classification&lt;/li&gt;
&lt;li&gt;egress control&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Tools and technology examples
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;AWS IoT SiteWise or equivalent industrial data services&lt;/li&gt;
&lt;li&gt;Azure IoT Operations / Azure Arc where appropriate&lt;/li&gt;
&lt;li&gt;Google Cloud industrial analytics services&lt;/li&gt;
&lt;li&gt;private connectivity&lt;/li&gt;
&lt;li&gt;cloud SIEM or data lake&lt;/li&gt;
&lt;li&gt;KMS/HSM services&lt;/li&gt;
&lt;li&gt;CSPM or CNAPP for cloud governance&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Required evidence
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;data classification&lt;/li&gt;
&lt;li&gt;approved data flow&lt;/li&gt;
&lt;li&gt;cloud IAM policy&lt;/li&gt;
&lt;li&gt;encryption evidence&lt;/li&gt;
&lt;li&gt;API logs&lt;/li&gt;
&lt;li&gt;egress monitoring&lt;/li&gt;
&lt;li&gt;architecture approval&lt;/li&gt;
&lt;li&gt;local operation fallback evidence&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Failure mode
&lt;/h3&gt;

&lt;p&gt;Cloud analytics becomes a hidden dependency for live operations.&lt;/p&gt;

&lt;h3&gt;
  
  
  Required fix
&lt;/h3&gt;

&lt;p&gt;Local operation must continue safely without cloud availability.&lt;/p&gt;




&lt;h2&gt;
  
  
  13. Physical-cyber integration
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Control objective
&lt;/h3&gt;

&lt;p&gt;Detect and respond to combined cyber and physical activity.&lt;/p&gt;

&lt;h3&gt;
  
  
  Data sources
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;badge access&lt;/li&gt;
&lt;li&gt;CCTV event metadata&lt;/li&gt;
&lt;li&gt;visitor logs&lt;/li&gt;
&lt;li&gt;cabinet access&lt;/li&gt;
&lt;li&gt;field crew dispatch&lt;/li&gt;
&lt;li&gt;maintenance windows&lt;/li&gt;
&lt;li&gt;cyber alerts&lt;/li&gt;
&lt;li&gt;remote access sessions&lt;/li&gt;
&lt;li&gt;engineering changes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Useful correlation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;after-hours badge access to substation
+ vendor remote login
+ relay setting change
= high-priority investigation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Evidence
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;physical access logs&lt;/li&gt;
&lt;li&gt;cyber alert&lt;/li&gt;
&lt;li&gt;maintenance ticket&lt;/li&gt;
&lt;li&gt;investigation notes&lt;/li&gt;
&lt;li&gt;operator confirmation&lt;/li&gt;
&lt;li&gt;incident decision record&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  14. Tool selection principles
&lt;/h2&gt;

&lt;p&gt;Before selecting a tool, ask:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does it support passive deployment?&lt;/li&gt;
&lt;li&gt;Does it understand industrial protocols?&lt;/li&gt;
&lt;li&gt;Can it operate without disrupting process control?&lt;/li&gt;
&lt;li&gt;Can OT engineers interpret the alerts?&lt;/li&gt;
&lt;li&gt;Does it integrate with SIEM and ticketing?&lt;/li&gt;
&lt;li&gt;Does it provide usable evidence?&lt;/li&gt;
&lt;li&gt;Does it support regulated environments?&lt;/li&gt;
&lt;li&gt;Can it scale across national sites?&lt;/li&gt;
&lt;li&gt;Can local teams operate it?&lt;/li&gt;
&lt;li&gt;What happens if the vendor or cloud service is unavailable?&lt;/li&gt;
&lt;li&gt;What data leaves the country?&lt;/li&gt;
&lt;li&gt;What is the total operating cost?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A tool that the organization cannot operate is not a control.&lt;/p&gt;

&lt;p&gt;It is shelfware.&lt;/p&gt;




&lt;h2&gt;
  
  
  Takeaway
&lt;/h2&gt;

&lt;p&gt;A 5 star quality ICS security program is not defined by the number of products deployed.&lt;/p&gt;

&lt;p&gt;It is defined by whether controls are enforced, evidenced, owned, tested, and safe for operations.&lt;/p&gt;

&lt;p&gt;Tools matter.&lt;/p&gt;

&lt;p&gt;Control design matters more.&lt;/p&gt;

&lt;h2&gt;
  
  
  So, let's move to &lt;a href="https://dev.to/mike_anderson_d01f52129fb/securing-state-owned-ics-part-5-soc-detection-incident-response-resilience-and-exercises-g5"&gt;Part-5:SOC, Detection, Incident Response, Resilience, and Exercises&lt;/a&gt;
&lt;/h2&gt;

</description>
      <category>cybersecurity</category>
      <category>ics</category>
      <category>tools</category>
      <category>security</category>
    </item>
    <item>
      <title>Securing State-Owned ICS (Part 3): Target Architecture for IT, OT, Cloud, and Power Grid Environments</title>
      <dc:creator>Mike Anderson</dc:creator>
      <pubDate>Tue, 14 Jul 2026 12:48:30 +0000</pubDate>
      <link>https://dev.to/mike_anderson_d01f52129fb/securing-state-owned-ics-part-3-target-architecture-for-it-ot-cloud-and-power-grid-1mdi</link>
      <guid>https://dev.to/mike_anderson_d01f52129fb/securing-state-owned-ics-part-3-target-architecture-for-it-ot-cloud-and-power-grid-1mdi</guid>
      <description>&lt;p&gt;&lt;a href="https://dev.to/mike_anderson_d01f52129fb/executive-brief-state-owned-ics-cybersecurity-blueprint-a-five-part-series-journey-part-0-373l"&gt;Previous Series: Part 1: Executive briefing&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/mike_anderson_d01f52129fb/securing-state-owned-ics-part-1-national-risk-threat-landscape-and-the-first-30-days-4ad3"&gt;Previous Series: Part 2: National Risk, Threat Landscape, and the First 30 Days&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/mike_anderson_d01f52129fb/implementation-control-matrixpart-7-state-owned-ics-cybersecurity-blueprint-1kjo"&gt;Jump to Part-7: State-Owned ICS Cybersecurity Blueprint&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Part 3 turns that into architecture.&lt;/p&gt;

&lt;p&gt;This is a target architecture for a state-owned ICS environment that also operates regular IT services.&lt;/p&gt;

&lt;p&gt;It applies to power grids, water utilities, transport networks, refineries, ports, national manufacturing, and similar critical infrastructure.&lt;/p&gt;

&lt;p&gt;For a power grid, map the zones to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;corporate IT&lt;/li&gt;
&lt;li&gt;control center&lt;/li&gt;
&lt;li&gt;Energy Management System&lt;/li&gt;
&lt;li&gt;Distribution Management System&lt;/li&gt;
&lt;li&gt;substation automation&lt;/li&gt;
&lt;li&gt;protection relays&lt;/li&gt;
&lt;li&gt;generation plant control&lt;/li&gt;
&lt;li&gt;telecom and SCADA communications&lt;/li&gt;
&lt;li&gt;outage management and dispatch&lt;/li&gt;
&lt;li&gt;market and billing systems&lt;/li&gt;
&lt;li&gt;field crew systems&lt;/li&gt;
&lt;li&gt;national or sector SOC&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The design objective is simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A compromise in one area must not become a national service disruption.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Executive summary for leaders
&lt;/h2&gt;

&lt;p&gt;A strong ICS architecture has no uncontrolled shortcuts.&lt;/p&gt;

&lt;p&gt;The design should ensure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;enterprise IT cannot directly reach controllers&lt;/li&gt;
&lt;li&gt;vendors cannot land directly inside control networks&lt;/li&gt;
&lt;li&gt;cloud systems cannot control critical processes by accident&lt;/li&gt;
&lt;li&gt;identity compromise in IT does not automatically grant OT control&lt;/li&gt;
&lt;li&gt;safety systems are isolated and harder to modify&lt;/li&gt;
&lt;li&gt;every IT/OT flow has a business purpose, owner, approval, and logs&lt;/li&gt;
&lt;li&gt;monitoring observes OT without creating a new control path&lt;/li&gt;
&lt;li&gt;local operations can continue if enterprise IT or cloud services fail&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If the architecture cannot support those outcomes, it is not ready for national critical infrastructure.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Design principles
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Principle 1: safety and control first
&lt;/h3&gt;

&lt;p&gt;Security controls must not create unsafe process behavior.&lt;/p&gt;

&lt;p&gt;Every major architecture decision should be reviewed by cybersecurity, OT engineering, operations, and safety.&lt;/p&gt;

&lt;h3&gt;
  
  
  Principle 2: no direct enterprise-to-controller access
&lt;/h3&gt;

&lt;p&gt;Corporate IT must not directly communicate with PLCs, RTUs, protection relays, safety controllers, or control networks.&lt;/p&gt;

&lt;h3&gt;
  
  
  Principle 3: controlled exchange through OT DMZ
&lt;/h3&gt;

&lt;p&gt;Data exchange between IT and OT should pass through a controlled exchange layer.&lt;/p&gt;

&lt;p&gt;That layer is the OT DMZ.&lt;/p&gt;

&lt;h3&gt;
  
  
  Principle 4: remote access is privileged access
&lt;/h3&gt;

&lt;p&gt;Remote access into OT must be approved, MFA-protected, time-bound, recorded, and limited to named targets.&lt;/p&gt;

&lt;h3&gt;
  
  
  Principle 5: segment by consequence
&lt;/h3&gt;

&lt;p&gt;A substation, turbine control cell, safety system, and office network should not share one flat trust zone.&lt;/p&gt;

&lt;h3&gt;
  
  
  Principle 6: monitor behavior, not just malware
&lt;/h3&gt;

&lt;p&gt;ICS attacks often appear as abnormal control behavior, engineering activity, remote access, or protocol use.&lt;/p&gt;

&lt;h3&gt;
  
  
  Principle 7: local control must survive cloud or IT failure
&lt;/h3&gt;

&lt;p&gt;For critical national services, cloud analytics and enterprise systems must not become dependencies for safe local operation.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Reference architecture
&lt;/h2&gt;

&lt;p&gt;Use this conceptual model.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                         Internet
                            |
                    Public Edge / DDoS / WAF
                            |
             +--------------+--------------+
             |                             |
       Public Services DMZ          Remote Access Portal
       citizen portals, APIs,       MFA, PAM, approval,
       email gateways               device checks, recording
             |                             |
             +--------------+--------------+
                            |
                       Enterprise IT
       identity, email, ERP, HR, finance, billing,
       office endpoints, market systems, reporting
                            |
                      Enterprise SOC
       SIEM, SOAR, threat intelligence, case management
                            |
                       IT/OT Boundary
       firewalls, proxies, brokers, malware inspection,
       approved conduits, optional one-way transfer
                            |
                           OT DMZ
       historian replica, patch staging, file transfer,
       update relay, log relay, jump access mediation
                            |
                      OT Operations Zone
       SCADA, EMS/DMS, local historian, OT identity,
       engineering workstations, operator services
                            |
       +--------------------+--------------------+
       |                    |                    |
 Generation Cell      Substation Cell      Water/Process Cell
 PLCs, turbine        RTUs, IEDs,          PLCs, RTUs,
 controls, HMIs       relays, gateways     HMIs, analyzers
       |                    |                    |
 Physical process     Physical process     Physical process
 turbines, breakers,  breakers, feeders,   pumps, valves,
 transformers         transformers         dosing systems
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Separate supporting zones:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;OT security monitoring zone&lt;/li&gt;
&lt;li&gt;backup and recovery zone&lt;/li&gt;
&lt;li&gt;out-of-band management zone&lt;/li&gt;
&lt;li&gt;physical security integration zone&lt;/li&gt;
&lt;li&gt;national CERT or sector SOC reporting path&lt;/li&gt;
&lt;li&gt;lab and test environment&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Do not collapse these into one flat network.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Security zones and what belongs in each
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Enterprise IT zone
&lt;/h3&gt;

&lt;p&gt;Contains:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;corporate users&lt;/li&gt;
&lt;li&gt;email&lt;/li&gt;
&lt;li&gt;ERP&lt;/li&gt;
&lt;li&gt;HR&lt;/li&gt;
&lt;li&gt;finance&lt;/li&gt;
&lt;li&gt;procurement&lt;/li&gt;
&lt;li&gt;billing&lt;/li&gt;
&lt;li&gt;user endpoints&lt;/li&gt;
&lt;li&gt;enterprise identity&lt;/li&gt;
&lt;li&gt;enterprise applications&lt;/li&gt;
&lt;li&gt;normal internet access&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Allowed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;read replicated operational data through approved reporting systems&lt;/li&gt;
&lt;li&gt;submit work orders and maintenance requests&lt;/li&gt;
&lt;li&gt;receive sanitized reports from OT historian replicas&lt;/li&gt;
&lt;li&gt;send approved logs to the SOC&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Blocked:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;direct access to HMIs&lt;/li&gt;
&lt;li&gt;direct access to SCADA servers&lt;/li&gt;
&lt;li&gt;direct access to engineering workstations&lt;/li&gt;
&lt;li&gt;direct access to PLCs, RTUs, relays, and safety systems&lt;/li&gt;
&lt;li&gt;direct RDP, SMB, SSH, database, or industrial protocol access into OT&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Public services DMZ
&lt;/h3&gt;

&lt;p&gt;Contains public-facing services such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;citizen portals&lt;/li&gt;
&lt;li&gt;external websites&lt;/li&gt;
&lt;li&gt;public APIs&lt;/li&gt;
&lt;li&gt;DNS and email gateways&lt;/li&gt;
&lt;li&gt;WAF and DDoS protection&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Rules:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;no direct trust into OT&lt;/li&gt;
&lt;li&gt;no shared credentials with OT&lt;/li&gt;
&lt;li&gt;no live control data access&lt;/li&gt;
&lt;li&gt;strong monitoring and rate limiting&lt;/li&gt;
&lt;li&gt;clear incident isolation plan&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  OT DMZ
&lt;/h3&gt;

&lt;p&gt;The OT DMZ is the controlled exchange zone.&lt;/p&gt;

&lt;p&gt;Use it for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;historian replication&lt;/li&gt;
&lt;li&gt;patch staging&lt;/li&gt;
&lt;li&gt;antivirus or EDR update relay&lt;/li&gt;
&lt;li&gt;secure file transfer&lt;/li&gt;
&lt;li&gt;vendor package inspection&lt;/li&gt;
&lt;li&gt;jump access mediation&lt;/li&gt;
&lt;li&gt;log relay&lt;/li&gt;
&lt;li&gt;time synchronization relay where appropriate&lt;/li&gt;
&lt;li&gt;controlled data broker services&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Do not use the OT DMZ as a flat bridge.&lt;/p&gt;

&lt;p&gt;Do not place live control systems in the OT DMZ.&lt;/p&gt;

&lt;h3&gt;
  
  
  OT operations zone
&lt;/h3&gt;

&lt;p&gt;Contains:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SCADA servers&lt;/li&gt;
&lt;li&gt;EMS/DMS&lt;/li&gt;
&lt;li&gt;local historian&lt;/li&gt;
&lt;li&gt;operator services&lt;/li&gt;
&lt;li&gt;OT domain services where used&lt;/li&gt;
&lt;li&gt;engineering workstations&lt;/li&gt;
&lt;li&gt;OT management services&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Rules:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;no direct access from enterprise users&lt;/li&gt;
&lt;li&gt;no uncontrolled internet access&lt;/li&gt;
&lt;li&gt;engineering activity logged&lt;/li&gt;
&lt;li&gt;remote access mediated by jump host&lt;/li&gt;
&lt;li&gt;internal segmentation to lower-level control cells&lt;/li&gt;
&lt;li&gt;backup and restore tested&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Control cell zones
&lt;/h3&gt;

&lt;p&gt;Each process cell, substation, plant unit, or control function should be segmented.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;generation unit control cell&lt;/li&gt;
&lt;li&gt;substation automation cell&lt;/li&gt;
&lt;li&gt;protection relay cell&lt;/li&gt;
&lt;li&gt;water treatment dosing cell&lt;/li&gt;
&lt;li&gt;pump station cell&lt;/li&gt;
&lt;li&gt;turbine control cell&lt;/li&gt;
&lt;li&gt;distribution automation cell&lt;/li&gt;
&lt;li&gt;safety system zone&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The purpose is blast-radius reduction.&lt;/p&gt;

&lt;p&gt;A compromise in one control cell should not automatically expose the whole national infrastructure.&lt;/p&gt;

&lt;h3&gt;
  
  
  Safety and protection zones
&lt;/h3&gt;

&lt;p&gt;Safety systems and protection systems require stronger isolation.&lt;/p&gt;

&lt;p&gt;Controls:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;restrict inbound writes&lt;/li&gt;
&lt;li&gt;require approved engineering stations&lt;/li&gt;
&lt;li&gt;use physical separation or one-way transfer where feasible&lt;/li&gt;
&lt;li&gt;require stronger change approval&lt;/li&gt;
&lt;li&gt;monitor logic and setting changes&lt;/li&gt;
&lt;li&gt;keep offline backups&lt;/li&gt;
&lt;li&gt;validate restore procedures&lt;/li&gt;
&lt;li&gt;document safety impact before changes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For power environments, protection relays and substation automation deserve special attention because misconfiguration can affect grid stability.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Conduits and allowed flows
&lt;/h2&gt;

&lt;p&gt;Every zone-to-zone connection is a conduit.&lt;/p&gt;

&lt;p&gt;Every conduit needs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;source&lt;/li&gt;
&lt;li&gt;destination&lt;/li&gt;
&lt;li&gt;protocol&lt;/li&gt;
&lt;li&gt;direction&lt;/li&gt;
&lt;li&gt;business purpose&lt;/li&gt;
&lt;li&gt;owner&lt;/li&gt;
&lt;li&gt;approval record&lt;/li&gt;
&lt;li&gt;logging requirement&lt;/li&gt;
&lt;li&gt;review frequency&lt;/li&gt;
&lt;li&gt;emergency shutdown process&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example: enterprise reporting
&lt;/h3&gt;

&lt;p&gt;Good flow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Corporate analyst
-&amp;gt; enterprise reporting application
-&amp;gt; OT DMZ historian replica
-&amp;gt; read-only replicated data
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bad flow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Corporate analyst
-&amp;gt; live historian
-&amp;gt; SCADA server
-&amp;gt; controller network
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Example: patching
&lt;/h3&gt;

&lt;p&gt;Good flow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;vendor update source
-&amp;gt; enterprise download area
-&amp;gt; malware and integrity inspection
-&amp;gt; OT DMZ patch staging
-&amp;gt; OT patch server pulls approved package
-&amp;gt; lab or spare asset test
-&amp;gt; production maintenance window
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bad flow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;production HMI
-&amp;gt; direct internet update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Example: vendor support
&lt;/h3&gt;

&lt;p&gt;Good flow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;vendor engineer
-&amp;gt; MFA remote access portal
-&amp;gt; approved time-bound ticket
-&amp;gt; recorded OT jump host
-&amp;gt; named engineering workstation
-&amp;gt; named target asset
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bad flow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;vendor VPN
-&amp;gt; broad OT subnet
-&amp;gt; direct Level 2 or Level 1 access
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Example: SOC monitoring
&lt;/h3&gt;

&lt;p&gt;Good flow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;OT sensors and logs
-&amp;gt; OT log relay
-&amp;gt; SIEM or security data lake
-&amp;gt; SOC investigation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bad flow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;enterprise SOC tool
-&amp;gt; interactive management session into controllers
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Monitoring should observe OT.&lt;/p&gt;

&lt;p&gt;It should not accidentally become a control path.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Power grid reference mapping
&lt;/h2&gt;

&lt;p&gt;For power-sector readers, the same architecture maps to common grid functions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Generation
&lt;/h3&gt;

&lt;p&gt;Secure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;turbine control&lt;/li&gt;
&lt;li&gt;boiler or plant control&lt;/li&gt;
&lt;li&gt;excitation systems&lt;/li&gt;
&lt;li&gt;balance-of-plant systems&lt;/li&gt;
&lt;li&gt;safety and protection systems&lt;/li&gt;
&lt;li&gt;generation plant historian&lt;/li&gt;
&lt;li&gt;engineering workstations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Key controls:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;isolate generation control cells&lt;/li&gt;
&lt;li&gt;restrict engineering access&lt;/li&gt;
&lt;li&gt;protect local HMIs&lt;/li&gt;
&lt;li&gt;test restoration of control projects&lt;/li&gt;
&lt;li&gt;monitor controller writes and workstation access&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Transmission control center
&lt;/h3&gt;

&lt;p&gt;Secure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;EMS&lt;/li&gt;
&lt;li&gt;SCADA front-end processors&lt;/li&gt;
&lt;li&gt;ICCP or inter-control-center communication&lt;/li&gt;
&lt;li&gt;telemetry systems&lt;/li&gt;
&lt;li&gt;operator consoles&lt;/li&gt;
&lt;li&gt;historian&lt;/li&gt;
&lt;li&gt;network management systems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Key controls:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;restrict external data exchange&lt;/li&gt;
&lt;li&gt;segment EMS support systems&lt;/li&gt;
&lt;li&gt;monitor operator and engineering access&lt;/li&gt;
&lt;li&gt;protect control center identity&lt;/li&gt;
&lt;li&gt;preserve manual and contingency procedures&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Substations
&lt;/h3&gt;

&lt;p&gt;Secure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;RTUs&lt;/li&gt;
&lt;li&gt;IEDs&lt;/li&gt;
&lt;li&gt;protection relays&lt;/li&gt;
&lt;li&gt;station gateways&lt;/li&gt;
&lt;li&gt;engineering ports&lt;/li&gt;
&lt;li&gt;serial-to-IP converters&lt;/li&gt;
&lt;li&gt;telecom routers&lt;/li&gt;
&lt;li&gt;local HMIs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Key controls:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;segment substations from corporate networks&lt;/li&gt;
&lt;li&gt;restrict relay setting changes&lt;/li&gt;
&lt;li&gt;monitor firmware and setting changes&lt;/li&gt;
&lt;li&gt;remove unmanaged cellular modems&lt;/li&gt;
&lt;li&gt;protect physical access and cabinets&lt;/li&gt;
&lt;li&gt;collect logs where technically feasible&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Distribution
&lt;/h3&gt;

&lt;p&gt;Secure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;DMS&lt;/li&gt;
&lt;li&gt;feeder automation&lt;/li&gt;
&lt;li&gt;reclosers&lt;/li&gt;
&lt;li&gt;capacitor banks&lt;/li&gt;
&lt;li&gt;outage management integration&lt;/li&gt;
&lt;li&gt;field crew access&lt;/li&gt;
&lt;li&gt;AMI/MDMS dependencies where applicable&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Key controls:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;separate operational control from customer/billing systems&lt;/li&gt;
&lt;li&gt;govern field access&lt;/li&gt;
&lt;li&gt;segment AMI-related systems from core control&lt;/li&gt;
&lt;li&gt;monitor remote switching and automation commands&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  6. Identity and privileged access architecture
&lt;/h2&gt;

&lt;p&gt;Identity architecture must prevent enterprise compromise from becoming OT control.&lt;/p&gt;

&lt;p&gt;Recommended model:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;separate OT identity boundary where feasible&lt;/li&gt;
&lt;li&gt;controlled federation only where required&lt;/li&gt;
&lt;li&gt;MFA for remote and privileged access&lt;/li&gt;
&lt;li&gt;named engineer accounts&lt;/li&gt;
&lt;li&gt;named vendor accounts&lt;/li&gt;
&lt;li&gt;PAM for privileged sessions&lt;/li&gt;
&lt;li&gt;break-glass accounts vaulted and monitored&lt;/li&gt;
&lt;li&gt;service accounts documented and reviewed&lt;/li&gt;
&lt;li&gt;local legacy accounts vaulted with compensating controls&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Minimum rules:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;no shared engineering account for routine work&lt;/li&gt;
&lt;li&gt;no shared vendor account&lt;/li&gt;
&lt;li&gt;no standing vendor access without justification&lt;/li&gt;
&lt;li&gt;automatic expiry for vendor sessions&lt;/li&gt;
&lt;li&gt;quarterly privileged access review&lt;/li&gt;
&lt;li&gt;monthly vendor access review&lt;/li&gt;
&lt;li&gt;alert on access outside approved window&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Break-glass design
&lt;/h3&gt;

&lt;p&gt;Break-glass access is necessary, but dangerous if unmanaged.&lt;/p&gt;

&lt;p&gt;Required controls:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;unique account&lt;/li&gt;
&lt;li&gt;strong vaulting&lt;/li&gt;
&lt;li&gt;offline access procedure&lt;/li&gt;
&lt;li&gt;dual approval where feasible&lt;/li&gt;
&lt;li&gt;monitoring and alerting&lt;/li&gt;
&lt;li&gt;post-use review&lt;/li&gt;
&lt;li&gt;password rotation after use&lt;/li&gt;
&lt;li&gt;tabletop exercise to confirm it works&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  7. Remote access architecture
&lt;/h2&gt;

&lt;p&gt;Remote access should follow this pattern.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;user identity verification
-&amp;gt; MFA
-&amp;gt; device posture check where feasible
-&amp;gt; approval ticket
-&amp;gt; time-bound access
-&amp;gt; privileged access broker
-&amp;gt; recorded jump session
-&amp;gt; named OT asset
-&amp;gt; automatic termination
-&amp;gt; review and evidence retention
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Required controls:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;MFA&lt;/li&gt;
&lt;li&gt;named users&lt;/li&gt;
&lt;li&gt;least privilege&lt;/li&gt;
&lt;li&gt;session recording&lt;/li&gt;
&lt;li&gt;file transfer control&lt;/li&gt;
&lt;li&gt;clipboard restriction for high-risk sessions&lt;/li&gt;
&lt;li&gt;no direct internet exposure of RDP, VNC, SSH, HMI, or PLC interfaces&lt;/li&gt;
&lt;li&gt;no unmanaged vendor tools&lt;/li&gt;
&lt;li&gt;source restrictions where feasible&lt;/li&gt;
&lt;li&gt;emergency access procedure&lt;/li&gt;
&lt;li&gt;monthly vendor access review&lt;/li&gt;
&lt;li&gt;alerting outside approved window&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Failure mode to prevent:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;vendor VPN connected
-&amp;gt; broad OT subnet access
-&amp;gt; compromised vendor laptop scans OT
-&amp;gt; attacker reaches engineering workstation
-&amp;gt; attacker reaches controller network
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The fix is narrow, approved, recorded access to specific assets only.&lt;/p&gt;




&lt;h2&gt;
  
  
  8. Network security architecture
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Enterprise to OT boundary
&lt;/h3&gt;

&lt;p&gt;Controls:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;default deny&lt;/li&gt;
&lt;li&gt;explicit allow rules only&lt;/li&gt;
&lt;li&gt;no any-to-any&lt;/li&gt;
&lt;li&gt;no industrial protocols from enterprise&lt;/li&gt;
&lt;li&gt;no direct database access to live OT systems&lt;/li&gt;
&lt;li&gt;proxy or broker for approved services&lt;/li&gt;
&lt;li&gt;malware inspection for file transfer&lt;/li&gt;
&lt;li&gt;logging enabled&lt;/li&gt;
&lt;li&gt;quarterly rule review&lt;/li&gt;
&lt;li&gt;emergency block procedure&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Internal OT segmentation
&lt;/h3&gt;

&lt;p&gt;Controls:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;segment by Purdue level and process cell&lt;/li&gt;
&lt;li&gt;separate safety systems from basic control&lt;/li&gt;
&lt;li&gt;separate engineering workstations from operator HMIs where feasible&lt;/li&gt;
&lt;li&gt;separate remote sites and substations&lt;/li&gt;
&lt;li&gt;use industrial firewalls or switch ACLs&lt;/li&gt;
&lt;li&gt;restrict write-capable protocols&lt;/li&gt;
&lt;li&gt;monitor east-west traffic&lt;/li&gt;
&lt;li&gt;manage broadcast exposure&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Wireless and cellular
&lt;/h3&gt;

&lt;p&gt;Controls:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;inventory all wireless bridges, access points, and modems&lt;/li&gt;
&lt;li&gt;disable unapproved wireless&lt;/li&gt;
&lt;li&gt;use strong authentication and encryption where wireless is required&lt;/li&gt;
&lt;li&gt;segment wireless access&lt;/li&gt;
&lt;li&gt;monitor rogue access points&lt;/li&gt;
&lt;li&gt;remove undocumented 4G or 5G maintenance modems&lt;/li&gt;
&lt;li&gt;include wireless in physical inspections&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Undocumented connectivity is one of the fastest ways to invalidate a good architecture.&lt;/p&gt;




&lt;h2&gt;
  
  
  9. Cloud, IIoT, and analytics
&lt;/h2&gt;

&lt;p&gt;Cloud may be useful for reporting, analytics, predictive maintenance, and fleet visibility.&lt;/p&gt;

&lt;p&gt;Cloud must not become an uncontrolled control path.&lt;/p&gt;

&lt;p&gt;Minimum rules:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;replicate data outward through controlled gateways&lt;/li&gt;
&lt;li&gt;prefer one-way or brokered data flows for high-criticality systems&lt;/li&gt;
&lt;li&gt;do not expose controllers to cloud services&lt;/li&gt;
&lt;li&gt;do not allow cloud identity compromise to control OT&lt;/li&gt;
&lt;li&gt;encrypt data in transit and at rest&lt;/li&gt;
&lt;li&gt;use private connectivity where feasible&lt;/li&gt;
&lt;li&gt;use least-privilege service accounts&lt;/li&gt;
&lt;li&gt;monitor cloud API access&lt;/li&gt;
&lt;li&gt;classify data before export&lt;/li&gt;
&lt;li&gt;respect data sovereignty&lt;/li&gt;
&lt;li&gt;keep local control independent from cloud availability&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Critical national systems must remain operable if cloud services are unavailable.&lt;/p&gt;




&lt;h2&gt;
  
  
  10. Security monitoring architecture
&lt;/h2&gt;

&lt;p&gt;Deploy an OT monitoring zone.&lt;/p&gt;

&lt;p&gt;Collect through:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SPAN ports&lt;/li&gt;
&lt;li&gt;network TAPs&lt;/li&gt;
&lt;li&gt;packet brokers&lt;/li&gt;
&lt;li&gt;OT sensor appliances&lt;/li&gt;
&lt;li&gt;industrial switch mirrors&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Log sources:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;OT firewalls&lt;/li&gt;
&lt;li&gt;remote access portal&lt;/li&gt;
&lt;li&gt;jump hosts&lt;/li&gt;
&lt;li&gt;VPN&lt;/li&gt;
&lt;li&gt;PAM&lt;/li&gt;
&lt;li&gt;OT identity&lt;/li&gt;
&lt;li&gt;Windows HMIs and servers&lt;/li&gt;
&lt;li&gt;engineering workstations&lt;/li&gt;
&lt;li&gt;Linux servers&lt;/li&gt;
&lt;li&gt;OT IDS sensors&lt;/li&gt;
&lt;li&gt;industrial switches&lt;/li&gt;
&lt;li&gt;backup systems&lt;/li&gt;
&lt;li&gt;physical access systems&lt;/li&gt;
&lt;li&gt;change management&lt;/li&gt;
&lt;li&gt;vulnerability platform&lt;/li&gt;
&lt;li&gt;cloud analytics platform&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Correlations that matter:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;vendor login outside window plus engineering protocol traffic&lt;/li&gt;
&lt;li&gt;badge access after hours plus privileged login&lt;/li&gt;
&lt;li&gt;new host in OT VLAN plus PLC discovery&lt;/li&gt;
&lt;li&gt;HMI service restart plus new executable&lt;/li&gt;
&lt;li&gt;firewall rule change plus new IT-to-OT flow&lt;/li&gt;
&lt;li&gt;relay setting change outside approved window&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  11. Evidence required before architecture approval
&lt;/h2&gt;

&lt;p&gt;Do not approve the architecture on a diagram alone.&lt;/p&gt;

&lt;p&gt;Required evidence:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;current network diagrams&lt;/li&gt;
&lt;li&gt;zone and conduit register&lt;/li&gt;
&lt;li&gt;IT/OT flow register&lt;/li&gt;
&lt;li&gt;remote access register&lt;/li&gt;
&lt;li&gt;firewall rule export&lt;/li&gt;
&lt;li&gt;identity architecture&lt;/li&gt;
&lt;li&gt;vendor access procedure&lt;/li&gt;
&lt;li&gt;asset inventory&lt;/li&gt;
&lt;li&gt;backup and restore evidence&lt;/li&gt;
&lt;li&gt;monitoring coverage map&lt;/li&gt;
&lt;li&gt;incident response contact roster&lt;/li&gt;
&lt;li&gt;emergency isolation procedure&lt;/li&gt;
&lt;li&gt;exception register&lt;/li&gt;
&lt;li&gt;business owner approval&lt;/li&gt;
&lt;li&gt;OT engineering approval&lt;/li&gt;
&lt;li&gt;safety owner approval&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The strongest architecture is the one that can be operated, audited, and restored.&lt;/p&gt;




&lt;h2&gt;
  
  
  12. Approval checklist
&lt;/h2&gt;

&lt;p&gt;Approve the design only when these statements are true.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Critical processes are identified.&lt;/li&gt;
&lt;li&gt;IT and OT are segmented.&lt;/li&gt;
&lt;li&gt;OT DMZ exists and is not a flat bridge.&lt;/li&gt;
&lt;li&gt;Enterprise users cannot directly reach controllers.&lt;/li&gt;
&lt;li&gt;Vendor access is MFA-protected, time-bound, recorded, and approved.&lt;/li&gt;
&lt;li&gt;Engineering workstations are controlled.&lt;/li&gt;
&lt;li&gt;Control cells are segmented.&lt;/li&gt;
&lt;li&gt;Safety and protection systems have stronger restrictions.&lt;/li&gt;
&lt;li&gt;Logs flow to monitoring without creating a control path.&lt;/li&gt;
&lt;li&gt;Backups are offline or immutable and tested.&lt;/li&gt;
&lt;li&gt;Cloud flows are controlled and non-critical to local operation.&lt;/li&gt;
&lt;li&gt;IT identity compromise cannot automatically become OT control.&lt;/li&gt;
&lt;li&gt;Emergency isolation mode is designed and tested.&lt;/li&gt;
&lt;li&gt;Firewall rules have owners and review dates.&lt;/li&gt;
&lt;li&gt;Exceptions expire and have compensating controls.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Takeaway
&lt;/h2&gt;

&lt;p&gt;A state-owned ICS architecture should be boring by design.&lt;/p&gt;

&lt;p&gt;No shortcuts.&lt;/p&gt;

&lt;p&gt;No broad routes.&lt;/p&gt;

&lt;p&gt;No unmanaged vendor paths.&lt;/p&gt;

&lt;p&gt;No direct enterprise-to-controller access.&lt;/p&gt;

&lt;p&gt;No undocumented modems.&lt;/p&gt;

&lt;p&gt;No uncontrolled cloud dependency.&lt;/p&gt;

&lt;p&gt;Every sensitive action should pass through an approved, monitored, and reversible path.&lt;/p&gt;

&lt;p&gt;That is how architecture becomes national resilience.&lt;/p&gt;

&lt;h2&gt;
  
  
  Now, let's move to &lt;a href="https://dev.to/mike_anderson_d01f52129fb/securing-state-owned-ics-part-4-tools-technologies-and-control-implementation-catalog-521f"&gt;Part-4: Tools, Technologies, and Control Implementation Catalog"&lt;/a&gt;
&lt;/h2&gt;

</description>
      <category>cybersecurity</category>
      <category>architecture</category>
      <category>ics</category>
      <category>security</category>
    </item>
    <item>
      <title>Securing State-Owned ICS (Part 2): National Risk, Threat Landscape, and the First 30 Days</title>
      <dc:creator>Mike Anderson</dc:creator>
      <pubDate>Tue, 14 Jul 2026 12:34:31 +0000</pubDate>
      <link>https://dev.to/mike_anderson_d01f52129fb/securing-state-owned-ics-part-1-national-risk-threat-landscape-and-the-first-30-days-4ad3</link>
      <guid>https://dev.to/mike_anderson_d01f52129fb/securing-state-owned-ics-part-1-national-risk-threat-landscape-and-the-first-30-days-4ad3</guid>
      <description>&lt;p&gt;&lt;a href="https://dev.to/mike_anderson_d01f52129fb/executive-brief-state-owned-ics-cybersecurity-blueprint-a-five-part-series-journey-part-0-373l"&gt;Previous Series: Part 1: Executive Briefing&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;State-owned Industrial Control Systems are not just technology assets.&lt;/p&gt;

&lt;p&gt;They are national life-support systems.&lt;/p&gt;

&lt;p&gt;A power grid keeps hospitals alive. A water treatment system protects public health. A railway control system keeps people moving. A port supports food, fuel, medicine, and trade. A national refinery, pipeline, telecom facility, or defense-linked manufacturing plant can affect the stability of an entire country.&lt;/p&gt;

&lt;p&gt;That is why ICS cybersecurity must be designed differently from normal enterprise cybersecurity.&lt;/p&gt;

&lt;p&gt;In enterprise IT, a cyber incident can disrupt email, billing, HR, customer portals, or data processing.&lt;/p&gt;

&lt;p&gt;In ICS, the same level of compromise can affect:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;electricity generation and transmission&lt;/li&gt;
&lt;li&gt;water pressure and chemical dosing&lt;/li&gt;
&lt;li&gt;substations and protection systems&lt;/li&gt;
&lt;li&gt;transport signaling&lt;/li&gt;
&lt;li&gt;refinery and pipeline safety&lt;/li&gt;
&lt;li&gt;manufacturing continuity&lt;/li&gt;
&lt;li&gt;environmental controls&lt;/li&gt;
&lt;li&gt;worker safety&lt;/li&gt;
&lt;li&gt;national confidence&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This series is written for CISOs, security architects, SOC teams, OT engineers, regulators, government leaders, and non-technical executives across South Asia, Southeast Asia, and any nation operating critical infrastructure.&lt;/p&gt;

&lt;p&gt;The goal is not to sell fear.&lt;/p&gt;

&lt;p&gt;The goal is to provide a serious, implementable blueprint.&lt;/p&gt;

&lt;p&gt;One important correction before we begin:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;No credible security architect should promise a "hackproof" ICS system.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The realistic target is stronger and more honest:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Consequence-resilient ICS security&lt;/strong&gt;: make compromise difficult, detect abnormal behavior early, prevent cyber activity from becoming unsafe physical impact, and recover essential services under pressure.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is how a nation protects the systems that keep society running.&lt;/p&gt;




&lt;h2&gt;
  
  
  Executive summary for non-technical leaders
&lt;/h2&gt;

&lt;p&gt;A state-owned ICS security program should answer seven questions.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;What national services must never fail?&lt;/li&gt;
&lt;li&gt;Which systems control those services?&lt;/li&gt;
&lt;li&gt;Who can access those systems?&lt;/li&gt;
&lt;li&gt;Which IT, vendor, cloud, and remote paths can reach OT?&lt;/li&gt;
&lt;li&gt;How would we detect unauthorized control activity?&lt;/li&gt;
&lt;li&gt;How would we contain an attack without harming the physical process?&lt;/li&gt;
&lt;li&gt;Can we restore critical control functions from trusted backups?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If leadership cannot get clear answers to those questions, the program is not mature.&lt;/p&gt;

&lt;p&gt;The first objective is not to buy more tools.&lt;/p&gt;

&lt;p&gt;The first objective is to establish ownership, asset truth, safe architecture, controlled access, monitoring, response, and recovery.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Why state-owned ICS is different
&lt;/h2&gt;

&lt;p&gt;Industrial Control Systems include the hardware, software, networks, and procedures used to monitor or control physical processes.&lt;/p&gt;

&lt;p&gt;Examples include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SCADA systems&lt;/li&gt;
&lt;li&gt;Energy Management Systems&lt;/li&gt;
&lt;li&gt;Distribution Management Systems&lt;/li&gt;
&lt;li&gt;substations and protection relays&lt;/li&gt;
&lt;li&gt;PLCs and RTUs&lt;/li&gt;
&lt;li&gt;HMIs and operator stations&lt;/li&gt;
&lt;li&gt;engineering workstations&lt;/li&gt;
&lt;li&gt;historians&lt;/li&gt;
&lt;li&gt;industrial network devices&lt;/li&gt;
&lt;li&gt;safety systems&lt;/li&gt;
&lt;li&gt;field sensors and actuators&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The difference between IT and OT is simple.&lt;/p&gt;

&lt;p&gt;IT protects data, users, and business services.&lt;/p&gt;

&lt;p&gt;OT protects physical processes.&lt;/p&gt;

&lt;p&gt;That changes the security model.&lt;/p&gt;

&lt;h3&gt;
  
  
  In IT
&lt;/h3&gt;

&lt;p&gt;You can often isolate a compromised laptop quickly.&lt;/p&gt;

&lt;p&gt;You can patch aggressively.&lt;/p&gt;

&lt;p&gt;You can force password resets across large groups.&lt;/p&gt;

&lt;p&gt;You can rebuild standard systems from images.&lt;/p&gt;

&lt;p&gt;You can tolerate some business disruption.&lt;/p&gt;

&lt;h3&gt;
  
  
  In OT
&lt;/h3&gt;

&lt;p&gt;You may not be able to isolate a device without understanding what it controls.&lt;/p&gt;

&lt;p&gt;You may not be able to patch without vendor validation and a maintenance window.&lt;/p&gt;

&lt;p&gt;You may not be able to force password changes during a live operational event.&lt;/p&gt;

&lt;p&gt;You may not be able to reboot an HMI that operators need for visibility.&lt;/p&gt;

&lt;p&gt;You may not be able to scan controllers without risk.&lt;/p&gt;

&lt;p&gt;The rule is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Protect safety and control first. Reduce cyber risk through planned, tested, reversible controls.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is not an excuse for weak security.&lt;/p&gt;

&lt;p&gt;It is the engineering discipline required to secure physical infrastructure.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. The national threat landscape
&lt;/h2&gt;

&lt;p&gt;Modern ICS threats are not one-dimensional.&lt;/p&gt;

&lt;p&gt;They combine identity compromise, remote access abuse, supply chain exposure, IT/OT convergence, cloud dependency, insecure legacy protocols, ransomware, and nation-state pre-positioning.&lt;/p&gt;

&lt;h3&gt;
  
  
  Nation-state campaigns
&lt;/h3&gt;

&lt;p&gt;Nation-state actors may seek espionage, strategic access, disruption capability, or coercive leverage.&lt;/p&gt;

&lt;p&gt;For critical infrastructure, the most dangerous behavior is often quiet pre-positioning.&lt;/p&gt;

&lt;p&gt;The attacker may not immediately disrupt anything.&lt;/p&gt;

&lt;p&gt;They may:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;compromise an IT account&lt;/li&gt;
&lt;li&gt;reach a vendor portal&lt;/li&gt;
&lt;li&gt;map the OT environment&lt;/li&gt;
&lt;li&gt;collect engineering project files&lt;/li&gt;
&lt;li&gt;observe operator behavior&lt;/li&gt;
&lt;li&gt;learn backup and recovery processes&lt;/li&gt;
&lt;li&gt;identify weak substations, plants, or remote sites&lt;/li&gt;
&lt;li&gt;prepare access for a future geopolitical crisis&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The danger is not only the initial breach.&lt;/p&gt;

&lt;p&gt;The danger is that the attacker learns how the system operates.&lt;/p&gt;

&lt;h3&gt;
  
  
  Ransomware and criminal groups
&lt;/h3&gt;

&lt;p&gt;Ransomware can create national disruption even if PLCs are not directly encrypted.&lt;/p&gt;

&lt;p&gt;An attacker can affect operations by encrypting or disabling:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;domain controllers&lt;/li&gt;
&lt;li&gt;engineering workstations&lt;/li&gt;
&lt;li&gt;HMI servers&lt;/li&gt;
&lt;li&gt;historians&lt;/li&gt;
&lt;li&gt;file shares&lt;/li&gt;
&lt;li&gt;backup systems&lt;/li&gt;
&lt;li&gt;dispatch systems&lt;/li&gt;
&lt;li&gt;billing and market systems&lt;/li&gt;
&lt;li&gt;remote access infrastructure&lt;/li&gt;
&lt;li&gt;maintenance documentation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a power utility, losing enterprise IT may still affect outage management, crew dispatch, procurement, communications, market settlement, and reporting.&lt;/p&gt;

&lt;p&gt;For a water utility, losing billing may be tolerable for a few days. Losing HMI visibility, chemical dosing records, or engineering backups is a different class of risk.&lt;/p&gt;

&lt;h3&gt;
  
  
  Hacktivists
&lt;/h3&gt;

&lt;p&gt;Hacktivists often seek visibility and political impact.&lt;/p&gt;

&lt;p&gt;Their attacks may include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;DDoS&lt;/li&gt;
&lt;li&gt;website defacement&lt;/li&gt;
&lt;li&gt;credential leaks&lt;/li&gt;
&lt;li&gt;exposed camera or HMI access&lt;/li&gt;
&lt;li&gt;abuse of publicly reachable OT devices&lt;/li&gt;
&lt;li&gt;social media amplification&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Even unsophisticated attacks can create public panic if the target is a national utility.&lt;/p&gt;

&lt;h3&gt;
  
  
  Insider and contractor risk
&lt;/h3&gt;

&lt;p&gt;Insider risk is not always malicious.&lt;/p&gt;

&lt;p&gt;Common real-world patterns include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;an engineer using a shared password because work is urgent&lt;/li&gt;
&lt;li&gt;a vendor leaving a remote support tunnel enabled&lt;/li&gt;
&lt;li&gt;a contractor connecting an unmanaged laptop&lt;/li&gt;
&lt;li&gt;a plant team bypassing change control to restore service quickly&lt;/li&gt;
&lt;li&gt;a temporary firewall rule becoming permanent&lt;/li&gt;
&lt;li&gt;a cellular modem installed for convenience and forgotten&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In ICS, convenience often becomes the attack path.&lt;/p&gt;

&lt;h3&gt;
  
  
  Supply chain compromise
&lt;/h3&gt;

&lt;p&gt;ICS environments depend on vendors and integrators.&lt;/p&gt;

&lt;p&gt;The supply chain includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PLC and RTU vendors&lt;/li&gt;
&lt;li&gt;relay vendors&lt;/li&gt;
&lt;li&gt;SCADA and HMI software providers&lt;/li&gt;
&lt;li&gt;engineering workstation tools&lt;/li&gt;
&lt;li&gt;remote access vendors&lt;/li&gt;
&lt;li&gt;system integrators&lt;/li&gt;
&lt;li&gt;patch sources&lt;/li&gt;
&lt;li&gt;firmware packages&lt;/li&gt;
&lt;li&gt;cloud analytics platforms&lt;/li&gt;
&lt;li&gt;managed service providers&lt;/li&gt;
&lt;li&gt;maintenance contractors&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A weak supplier can become the entry point into a strong facility.&lt;/p&gt;

&lt;p&gt;Secure procurement is therefore not a back-office activity.&lt;/p&gt;

&lt;p&gt;It is a frontline security control.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. The most common national ICS failure modes
&lt;/h2&gt;

&lt;p&gt;Most state-owned ICS environments are not weak because people are careless.&lt;/p&gt;

&lt;p&gt;They are weak because the environment evolved over decades, production stability was prioritized, and cybersecurity was added later.&lt;/p&gt;

&lt;h3&gt;
  
  
  Failure mode 1: the air-gap myth
&lt;/h3&gt;

&lt;p&gt;Many organizations still believe the OT network is isolated.&lt;/p&gt;

&lt;p&gt;In practice, OT often has more connections than leadership realizes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;historian replication to enterprise IT&lt;/li&gt;
&lt;li&gt;vendor VPN&lt;/li&gt;
&lt;li&gt;dual-homed engineering workstation&lt;/li&gt;
&lt;li&gt;cellular modem&lt;/li&gt;
&lt;li&gt;temporary project link&lt;/li&gt;
&lt;li&gt;remote support tool&lt;/li&gt;
&lt;li&gt;shared Active Directory&lt;/li&gt;
&lt;li&gt;cloud reporting connector&lt;/li&gt;
&lt;li&gt;USB transfer process&lt;/li&gt;
&lt;li&gt;contractor laptop&lt;/li&gt;
&lt;li&gt;unmanaged wireless bridge&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A network is only isolated when every data path is known, controlled, monitored, and tested.&lt;/p&gt;

&lt;p&gt;If nobody can prove isolation, assume there is a path.&lt;/p&gt;

&lt;h3&gt;
  
  
  Failure mode 2: flat OT networks
&lt;/h3&gt;

&lt;p&gt;Flat networks allow one compromised device to reach many others.&lt;/p&gt;

&lt;p&gt;A flat OT network can allow an attacker to move from:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;corporate workstation
-&amp;gt; historian
-&amp;gt; HMI
-&amp;gt; engineering workstation
-&amp;gt; PLC or relay network
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That path should not exist.&lt;/p&gt;

&lt;p&gt;Segmentation must reduce blast radius by process, site, function, and consequence.&lt;/p&gt;

&lt;h3&gt;
  
  
  Failure mode 3: unmanaged remote access
&lt;/h3&gt;

&lt;p&gt;Remote access is usually one of the highest-risk OT paths.&lt;/p&gt;

&lt;p&gt;Common weaknesses:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;shared vendor accounts&lt;/li&gt;
&lt;li&gt;no MFA&lt;/li&gt;
&lt;li&gt;VPN landing directly into OT&lt;/li&gt;
&lt;li&gt;no session recording&lt;/li&gt;
&lt;li&gt;no approval window&lt;/li&gt;
&lt;li&gt;no asset-specific targeting&lt;/li&gt;
&lt;li&gt;no source restriction&lt;/li&gt;
&lt;li&gt;access left enabled after support contract ends&lt;/li&gt;
&lt;li&gt;vendor laptop health unknown&lt;/li&gt;
&lt;li&gt;jump host bypass&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Remote access should be treated as a privileged operational event, not a convenience feature.&lt;/p&gt;

&lt;h3&gt;
  
  
  Failure mode 4: weak identity boundaries
&lt;/h3&gt;

&lt;p&gt;If corporate identity compromise gives an attacker OT access, the architecture is too tightly coupled.&lt;/p&gt;

&lt;p&gt;IT and OT identity can integrate, but the integration must be controlled.&lt;/p&gt;

&lt;p&gt;A compromised email account should not become a controller access path.&lt;/p&gt;

&lt;h3&gt;
  
  
  Failure mode 5: no asset truth
&lt;/h3&gt;

&lt;p&gt;If a utility does not know its assets, it cannot manage vulnerability, patching, monitoring, incident response, procurement, or recovery.&lt;/p&gt;

&lt;p&gt;The inventory must cover:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;asset name&lt;/li&gt;
&lt;li&gt;location&lt;/li&gt;
&lt;li&gt;process served&lt;/li&gt;
&lt;li&gt;vendor and model&lt;/li&gt;
&lt;li&gt;firmware or software version&lt;/li&gt;
&lt;li&gt;IP address or communication identity&lt;/li&gt;
&lt;li&gt;Purdue level or security zone&lt;/li&gt;
&lt;li&gt;owner&lt;/li&gt;
&lt;li&gt;support status&lt;/li&gt;
&lt;li&gt;criticality&lt;/li&gt;
&lt;li&gt;backup status&lt;/li&gt;
&lt;li&gt;remote access dependency&lt;/li&gt;
&lt;li&gt;known vulnerabilities&lt;/li&gt;
&lt;li&gt;communication flows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Passive discovery helps, but engineering validation is still required.&lt;/p&gt;

&lt;h3&gt;
  
  
  Failure mode 6: IT incident response applied blindly to OT
&lt;/h3&gt;

&lt;p&gt;Traditional incident response often says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;isolate first.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In OT, that can be unsafe.&lt;/p&gt;

&lt;p&gt;The better rule is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;isolate the attacker without destabilizing the process.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That requires pre-approved containment options, OT engineers on the bridge, process-aware severity, and safety-led decision making.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Where to start: the first 30 days
&lt;/h2&gt;

&lt;p&gt;Do not start with a large transformation program.&lt;/p&gt;

&lt;p&gt;Start with control of the basics.&lt;/p&gt;

&lt;h3&gt;
  
  
  Day 1 decision: appoint the accountable owner
&lt;/h3&gt;

&lt;p&gt;A national ICS security program needs clear ownership.&lt;/p&gt;

&lt;p&gt;At minimum:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;executive sponsor&lt;/li&gt;
&lt;li&gt;CISO or national cyber lead&lt;/li&gt;
&lt;li&gt;OT operations owner&lt;/li&gt;
&lt;li&gt;plant or site owner&lt;/li&gt;
&lt;li&gt;safety owner&lt;/li&gt;
&lt;li&gt;engineering owner&lt;/li&gt;
&lt;li&gt;SOC owner&lt;/li&gt;
&lt;li&gt;vendor management owner&lt;/li&gt;
&lt;li&gt;legal and regulatory contact&lt;/li&gt;
&lt;li&gt;communications owner&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If nobody owns the risk, nobody owns the remediation.&lt;/p&gt;

&lt;h3&gt;
  
  
  Days 1-7: identify critical processes
&lt;/h3&gt;

&lt;p&gt;Start with consequences.&lt;/p&gt;

&lt;p&gt;Ask:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which services must continue during national crisis?&lt;/li&gt;
&lt;li&gt;Which process failures can harm people?&lt;/li&gt;
&lt;li&gt;Which assets support hospitals, defense, telecom, ports, finance, or emergency services?&lt;/li&gt;
&lt;li&gt;Which sites would create national impact if unavailable?&lt;/li&gt;
&lt;li&gt;Which control functions are needed for black-start, safe shutdown, manual operation, or restoration?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Output:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;critical process list&lt;/li&gt;
&lt;li&gt;top national service dependencies&lt;/li&gt;
&lt;li&gt;crown-jewel OT assets&lt;/li&gt;
&lt;li&gt;responsible owners&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Days 7-15: build the first asset truth
&lt;/h3&gt;

&lt;p&gt;Start with the highest-consequence sites.&lt;/p&gt;

&lt;p&gt;Collect:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;network diagrams&lt;/li&gt;
&lt;li&gt;firewall exports&lt;/li&gt;
&lt;li&gt;switch MAC tables&lt;/li&gt;
&lt;li&gt;passive discovery output&lt;/li&gt;
&lt;li&gt;engineering workstation project files&lt;/li&gt;
&lt;li&gt;vendor asset lists&lt;/li&gt;
&lt;li&gt;backup inventories&lt;/li&gt;
&lt;li&gt;controller lists&lt;/li&gt;
&lt;li&gt;historian connection lists&lt;/li&gt;
&lt;li&gt;remote access records&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Validate through plant walkdowns.&lt;/p&gt;

&lt;p&gt;Output:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;critical asset inventory&lt;/li&gt;
&lt;li&gt;unknown asset list&lt;/li&gt;
&lt;li&gt;unsupported asset list&lt;/li&gt;
&lt;li&gt;remote access dependency list&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Days 15-21: map all IT/OT and vendor paths
&lt;/h3&gt;

&lt;p&gt;Document:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;enterprise-to-OT flows&lt;/li&gt;
&lt;li&gt;OT-to-enterprise flows&lt;/li&gt;
&lt;li&gt;vendor access paths&lt;/li&gt;
&lt;li&gt;cloud or analytics connections&lt;/li&gt;
&lt;li&gt;historian replication&lt;/li&gt;
&lt;li&gt;patch flows&lt;/li&gt;
&lt;li&gt;file transfer processes&lt;/li&gt;
&lt;li&gt;logging flows&lt;/li&gt;
&lt;li&gt;backup flows&lt;/li&gt;
&lt;li&gt;identity dependencies&lt;/li&gt;
&lt;li&gt;emergency access paths&lt;/li&gt;
&lt;li&gt;wireless and cellular links&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every flow needs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;source&lt;/li&gt;
&lt;li&gt;destination&lt;/li&gt;
&lt;li&gt;protocol&lt;/li&gt;
&lt;li&gt;direction&lt;/li&gt;
&lt;li&gt;purpose&lt;/li&gt;
&lt;li&gt;owner&lt;/li&gt;
&lt;li&gt;approval&lt;/li&gt;
&lt;li&gt;logging&lt;/li&gt;
&lt;li&gt;review frequency&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Output:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;IT/OT connectivity map&lt;/li&gt;
&lt;li&gt;unauthorized or unexplained path list&lt;/li&gt;
&lt;li&gt;emergency block options&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Days 21-30: remove unacceptable risk
&lt;/h3&gt;

&lt;p&gt;Start with the risks that should never exist.&lt;/p&gt;

&lt;p&gt;Priority removals:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;direct internet access to controllers, HMIs, VNC, RDP, SSH, or engineering services&lt;/li&gt;
&lt;li&gt;direct enterprise access to Level 1 controller networks&lt;/li&gt;
&lt;li&gt;shared vendor accounts&lt;/li&gt;
&lt;li&gt;always-on vendor VPN&lt;/li&gt;
&lt;li&gt;dual-homed engineering workstation bridging IT and OT&lt;/li&gt;
&lt;li&gt;default credentials on critical assets&lt;/li&gt;
&lt;li&gt;broad "any-to-any" firewall rules between IT and OT&lt;/li&gt;
&lt;li&gt;unsupported remote access tools&lt;/li&gt;
&lt;li&gt;unapproved cellular modems&lt;/li&gt;
&lt;li&gt;backups that cannot be restored&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Output:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;first remediation backlog&lt;/li&gt;
&lt;li&gt;emergency exceptions&lt;/li&gt;
&lt;li&gt;named owners&lt;/li&gt;
&lt;li&gt;30-day leadership briefing&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  5. National governance model
&lt;/h2&gt;

&lt;p&gt;State-owned ICS security cannot be solved only at plant level.&lt;/p&gt;

&lt;p&gt;It needs national, enterprise, and facility governance.&lt;/p&gt;

&lt;h3&gt;
  
  
  National or regulator level
&lt;/h3&gt;

&lt;p&gt;Responsibilities:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;classify critical infrastructure&lt;/li&gt;
&lt;li&gt;define minimum OT cybersecurity baseline&lt;/li&gt;
&lt;li&gt;require incident reporting&lt;/li&gt;
&lt;li&gt;create or strengthen national OT-CERT capability&lt;/li&gt;
&lt;li&gt;coordinate sector threat intelligence&lt;/li&gt;
&lt;li&gt;define secure procurement expectations&lt;/li&gt;
&lt;li&gt;run national exercises&lt;/li&gt;
&lt;li&gt;support workforce development&lt;/li&gt;
&lt;li&gt;coordinate cross-border dependencies where relevant&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Enterprise or utility level
&lt;/h3&gt;

&lt;p&gt;Responsibilities:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;fund and operate the ICS security program&lt;/li&gt;
&lt;li&gt;approve architecture&lt;/li&gt;
&lt;li&gt;maintain risk register&lt;/li&gt;
&lt;li&gt;run SOC capability&lt;/li&gt;
&lt;li&gt;manage vendors&lt;/li&gt;
&lt;li&gt;enforce standards&lt;/li&gt;
&lt;li&gt;report to board, ministry, or regulator&lt;/li&gt;
&lt;li&gt;own incident response and recovery&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Facility or plant level
&lt;/h3&gt;

&lt;p&gt;Responsibilities:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;maintain safe operations&lt;/li&gt;
&lt;li&gt;approve operationally sensitive changes&lt;/li&gt;
&lt;li&gt;validate asset inventory&lt;/li&gt;
&lt;li&gt;support monitoring&lt;/li&gt;
&lt;li&gt;own local containment decisions&lt;/li&gt;
&lt;li&gt;maintain backups&lt;/li&gt;
&lt;li&gt;participate in exercises&lt;/li&gt;
&lt;li&gt;report gaps and exceptions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The governance model must respect a simple truth:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Cybersecurity cannot override process safety.&lt;br&gt;&lt;br&gt;
Process safety cannot ignore cybersecurity.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;They must operate together.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. Standards that should anchor the program
&lt;/h2&gt;

&lt;p&gt;Use standards to drive implementation, not paperwork.&lt;/p&gt;

&lt;p&gt;Recommended anchors:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;NIST SP 800-82 Rev. 3 for OT security guidance.&lt;/li&gt;
&lt;li&gt;ISA/IEC 62443 for zones, conduits, security levels, and IACS security lifecycle.&lt;/li&gt;
&lt;li&gt;CISA Cross-Sector Cybersecurity Performance Goals for baseline critical infrastructure practices.&lt;/li&gt;
&lt;li&gt;MITRE ATT&amp;amp;CK for ICS for adversary behavior, threat modeling, detection, and exercises.&lt;/li&gt;
&lt;li&gt;ISO 27001 where a formal information security management system is required.&lt;/li&gt;
&lt;li&gt;National sector regulations where applicable.&lt;/li&gt;
&lt;li&gt;NERC CIP principles for power-sector organizations where relevant or used as a benchmark outside North America.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The key is mapping standards to enforcement points.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Requirement: control remote access
Enforcement: MFA, PAM, jump host, session recording, approval workflow, time-bound access
Evidence: access logs, session recordings, monthly vendor review, approved tickets
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If a standard does not map to an enforcement point and evidence artifact, it becomes paperwork.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. First maturity score
&lt;/h2&gt;

&lt;p&gt;Use this quick maturity view.&lt;/p&gt;

&lt;h3&gt;
  
  
  Level 1: Reactive
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;incomplete asset inventory&lt;/li&gt;
&lt;li&gt;flat network&lt;/li&gt;
&lt;li&gt;always-on vendor access&lt;/li&gt;
&lt;li&gt;weak logging&lt;/li&gt;
&lt;li&gt;no OT-specific incident playbooks&lt;/li&gt;
&lt;li&gt;backups not tested&lt;/li&gt;
&lt;li&gt;change control inconsistent&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Level 2: Basic control
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;critical assets identified&lt;/li&gt;
&lt;li&gt;IT/OT firewall exists&lt;/li&gt;
&lt;li&gt;some remote access control&lt;/li&gt;
&lt;li&gt;basic logging from jump hosts and servers&lt;/li&gt;
&lt;li&gt;backups exist and some restores tested&lt;/li&gt;
&lt;li&gt;vulnerability tracking started&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Level 3: Managed
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;zones and conduits documented&lt;/li&gt;
&lt;li&gt;vendor access MFA-protected and recorded&lt;/li&gt;
&lt;li&gt;passive monitoring in critical zones&lt;/li&gt;
&lt;li&gt;firewall rules reviewed quarterly&lt;/li&gt;
&lt;li&gt;OT incident playbooks exercised&lt;/li&gt;
&lt;li&gt;critical backups tested&lt;/li&gt;
&lt;li&gt;vulnerabilities prioritized by consequence&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Level 4: Resilient
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;critical services have tested recovery plans&lt;/li&gt;
&lt;li&gt;unauthorized control behavior is detectable&lt;/li&gt;
&lt;li&gt;engineering changes require approval and evidence&lt;/li&gt;
&lt;li&gt;threat modeling drives investment&lt;/li&gt;
&lt;li&gt;SOC, OT, engineering, safety, and leadership operate together&lt;/li&gt;
&lt;li&gt;national CERT or sector sharing is integrated&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Level 5: Adaptive
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;detections continuously validated&lt;/li&gt;
&lt;li&gt;purple team exercises test realistic attack paths&lt;/li&gt;
&lt;li&gt;AI assists triage and reporting under governance&lt;/li&gt;
&lt;li&gt;procurement enforces secure-by-design requirements&lt;/li&gt;
&lt;li&gt;resilience metrics are reported to national leadership&lt;/li&gt;
&lt;li&gt;organization can operate safely under degraded cyber conditions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most organizations should target Level 3 first.&lt;/p&gt;

&lt;p&gt;Level 4 is the right ambition for critical national services.&lt;/p&gt;

&lt;p&gt;Level 5 is a strategic national capability.&lt;/p&gt;




&lt;h2&gt;
  
  
  8. What good looks like after 30 days
&lt;/h2&gt;

&lt;p&gt;After 30 days, leadership should be able to say:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;We know our highest-consequence services.
We know the critical assets that support them.
We know the major IT/OT and vendor access paths.
We have removed or contained the most dangerous access paths.
We have a named owner for each major risk.
We have started passive visibility in the highest-criticality environment.
We have an OT incident contact roster.
We know whether critical backups exist and whether they have been tested.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is not the end state.&lt;/p&gt;

&lt;p&gt;It is the first serious control point.&lt;/p&gt;




&lt;h2&gt;
  
  
  Takeaway
&lt;/h2&gt;

&lt;p&gt;State-owned ICS cybersecurity is a national resilience mission.&lt;/p&gt;

&lt;p&gt;Start with consequence.&lt;/p&gt;

&lt;p&gt;Build asset truth.&lt;/p&gt;

&lt;p&gt;Control access.&lt;/p&gt;

&lt;p&gt;Segment critical paths.&lt;/p&gt;

&lt;p&gt;Monitor behavior.&lt;/p&gt;

&lt;p&gt;Prepare safe response.&lt;/p&gt;

&lt;p&gt;Test recovery.&lt;/p&gt;

&lt;p&gt;Govern vendors.&lt;/p&gt;

&lt;p&gt;Measure progress.&lt;/p&gt;

&lt;p&gt;The strongest national infrastructure programs are not the ones claiming to be hackproof.&lt;/p&gt;

&lt;p&gt;They are the ones that can keep essential services running when pressure is highest.&lt;/p&gt;

&lt;p&gt;Now Let's move to Part-3:&lt;a href="https://dev.to/mike_anderson_d01f52129fb/securing-state-owned-ics-part-3-target-architecture-for-it-ot-cloud-and-power-grid-1mdi"&gt;Securing State-Owned ICS: Target Architecture for IT, OT, Cloud, and Power Grid Environments&lt;/a&gt;&lt;/p&gt;




</description>
      <category>cybersecurity</category>
      <category>ics</category>
      <category>security</category>
      <category>infrastructure</category>
    </item>
    <item>
      <title>Executive Brief: State-Owned ICS Cybersecurity Blueprint, a five part series journey, Part-1</title>
      <dc:creator>Mike Anderson</dc:creator>
      <pubDate>Tue, 14 Jul 2026 12:32:21 +0000</pubDate>
      <link>https://dev.to/mike_anderson_d01f52129fb/executive-brief-state-owned-ics-cybersecurity-blueprint-a-five-part-series-journey-part-0-373l</link>
      <guid>https://dev.to/mike_anderson_d01f52129fb/executive-brief-state-owned-ics-cybersecurity-blueprint-a-five-part-series-journey-part-0-373l</guid>
      <description>&lt;p&gt;&lt;a href="https://dev.to/mike_anderson_d01f52129fb/securing-state-owned-ics-part-1-national-risk-threat-landscape-and-the-first-30-days-4ad3"&gt;Part 2: National Risk, Threat Landscape, and the First 30 Days&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/mike_anderson_d01f52129fb/securing-state-owned-ics-part-3-target-architecture-for-it-ot-cloud-and-power-grid-1mdi"&gt;Part-3: Target Architecture for IT, OT, Cloud, and Power Grid Environments&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/mike_anderson_d01f52129fb/securing-state-owned-ics-part-4-tools-technologies-and-control-implementation-catalog-521f"&gt;Part-4: Tools, Technologies, and Control Implementation Catalog&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/mike_anderson_d01f52129fb/securing-state-owned-ics-part-5-soc-detection-incident-response-resilience-and-exercises-g5"&gt;Part-5: SOC, Detection, Incident Response, Resilience, and Exercises&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/mike_anderson_d01f52129fb/securing-state-owned-ics-part-6-ai-governance-procurement-and-the-180-day-national-roadmap-2117"&gt;Part-6: AI, Governance, Procurement, and the 180-Day National Roadmap&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/mike_anderson_d01f52129fb/implementation-control-matrixpart-7-state-owned-ics-cybersecurity-blueprint-1kjo"&gt;Part-7: State-Owned ICS Cybersecurity Blueprint&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Executive Brief: State-Owned ICS Cybersecurity Blueprint
&lt;/h2&gt;

&lt;p&gt;State-owned Industrial Control Systems support national services such as electricity, water, transport, energy, ports, and public-sector process operations.&lt;/p&gt;

&lt;p&gt;A cyber incident in these environments is not only an IT outage.&lt;/p&gt;

&lt;p&gt;It can become a public safety, economic stability, environmental, and national security event.&lt;/p&gt;

&lt;p&gt;The goal is not to claim that critical infrastructure can be made hackproof.&lt;/p&gt;

&lt;p&gt;The correct objective is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Consequence-resilient security&lt;/strong&gt;: prevent likely attacks, detect abnormal behavior early, contain safely, recover essential services, and prove control maturity through evidence.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  The five leadership questions
&lt;/h2&gt;

&lt;p&gt;A national ICS security program should be able to answer five questions clearly.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Which national services are most critical?&lt;/li&gt;
&lt;li&gt;Which assets control those services?&lt;/li&gt;
&lt;li&gt;Who can access those assets, including vendors?&lt;/li&gt;
&lt;li&gt;How would we detect unauthorized control activity?&lt;/li&gt;
&lt;li&gt;Can we restore critical control functions under incident conditions?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If the answer to any of these is unclear, the program has material risk.&lt;/p&gt;




&lt;h2&gt;
  
  
  The highest-risk gaps
&lt;/h2&gt;

&lt;p&gt;The most common critical gaps are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;incomplete OT asset inventory&lt;/li&gt;
&lt;li&gt;flat IT/OT or flat OT networks&lt;/li&gt;
&lt;li&gt;direct enterprise access to OT systems&lt;/li&gt;
&lt;li&gt;always-on vendor VPN&lt;/li&gt;
&lt;li&gt;shared engineering or vendor accounts&lt;/li&gt;
&lt;li&gt;no MFA for remote access&lt;/li&gt;
&lt;li&gt;no tested backups for controllers, HMIs, and engineering workstations&lt;/li&gt;
&lt;li&gt;no OT-specific incident response playbooks&lt;/li&gt;
&lt;li&gt;no monitoring for unauthorized control activity&lt;/li&gt;
&lt;li&gt;procurement of systems that cannot be secured, monitored, patched, or recovered&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are not paperwork issues.&lt;/p&gt;

&lt;p&gt;They are attack paths.&lt;/p&gt;




&lt;h2&gt;
  
  
  The minimum national baseline
&lt;/h2&gt;

&lt;p&gt;Every state-owned critical ICS environment should have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;accountable OT cyber owner&lt;/li&gt;
&lt;li&gt;critical process inventory&lt;/li&gt;
&lt;li&gt;critical asset inventory&lt;/li&gt;
&lt;li&gt;documented IT/OT data flows&lt;/li&gt;
&lt;li&gt;OT DMZ&lt;/li&gt;
&lt;li&gt;segmented control zones&lt;/li&gt;
&lt;li&gt;MFA-protected and recorded remote access&lt;/li&gt;
&lt;li&gt;vendor access approval workflow&lt;/li&gt;
&lt;li&gt;separate or controlled OT identity boundary&lt;/li&gt;
&lt;li&gt;engineering workstation hardening&lt;/li&gt;
&lt;li&gt;controller and relay change control&lt;/li&gt;
&lt;li&gt;passive OT monitoring&lt;/li&gt;
&lt;li&gt;SIEM integration&lt;/li&gt;
&lt;li&gt;tested backups&lt;/li&gt;
&lt;li&gt;OT incident response playbooks&lt;/li&gt;
&lt;li&gt;vulnerability management by consequence&lt;/li&gt;
&lt;li&gt;secure procurement requirements&lt;/li&gt;
&lt;li&gt;annual exercises&lt;/li&gt;
&lt;li&gt;executive risk reporting&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  What leadership should fund first
&lt;/h2&gt;

&lt;p&gt;If the budget is limited, fund in this order:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;asset inventory and network visibility&lt;/li&gt;
&lt;li&gt;remote access control&lt;/li&gt;
&lt;li&gt;IT/OT segmentation&lt;/li&gt;
&lt;li&gt;backups and restore testing&lt;/li&gt;
&lt;li&gt;detection for unauthorized control activity&lt;/li&gt;
&lt;li&gt;engineering workstation hardening&lt;/li&gt;
&lt;li&gt;vendor governance&lt;/li&gt;
&lt;li&gt;OT incident response exercises&lt;/li&gt;
&lt;li&gt;vulnerability management&lt;/li&gt;
&lt;li&gt;AI-assisted triage and reporting after core controls mature&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;AI should not be funded before the basics are controlled.&lt;/p&gt;




&lt;h2&gt;
  
  
  What good looks like
&lt;/h2&gt;

&lt;p&gt;A mature program can say:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;We know our critical services and assets.
Enterprise IT cannot directly reach controllers.
Vendor access is MFA-protected, approved, recorded, and time-bound.
Critical control cells are segmented.
Unauthorized controller writes are detectable.
Backups for priority control functions are tested.
OT incident response has been exercised.
Remaining risk is documented, owned, and funded.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is the leadership outcome.&lt;/p&gt;




&lt;h2&gt;
  
  
  To be continued...
&lt;/h2&gt;

&lt;p&gt;Laet's explore &lt;a href="https://dev.to/mike_anderson_d01f52129fb/securing-state-owned-ics-part-1-national-risk-threat-landscape-and-the-first-30-days-4ad3"&gt;Part-2&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Jump to:
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://dev.to/mike_anderson_d01f52129fb/securing-state-owned-ics-part-1-national-risk-threat-landscape-and-the-first-30-days-4ad3"&gt;Part 2: National Risk, Threat Landscape, and the First 30 Days&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/mike_anderson_d01f52129fb/securing-state-owned-ics-part-3-target-architecture-for-it-ot-cloud-and-power-grid-1mdi"&gt;Part-3:Target Architecture for IT, OT, Cloud, and Power Grid Environments&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/mike_anderson_d01f52129fb/securing-state-owned-ics-part-4-tools-technologies-and-control-implementation-catalog-521f"&gt;Part-4:Tools, Technologies, and Control Implementation Catalog&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/mike_anderson_d01f52129fb/securing-state-owned-ics-part-5-soc-detection-incident-response-resilience-and-exercises-g5"&gt;Part-5:SOC, Detection, Incident Response, Resilience, and Exercises&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/mike_anderson_d01f52129fb/securing-state-owned-ics-part-6-ai-governance-procurement-and-the-180-day-national-roadmap-2117"&gt;Part-6:AI, Governance, Procurement, and the 180-Day National Roadmap&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/mike_anderson_d01f52129fb/implementation-control-matrixpart-7-state-owned-ics-cybersecurity-blueprint-1kjo"&gt;Part-7: State-Owned ICS Cybersecurity Blueprint&lt;/a&gt;&lt;/p&gt;

</description>
      <category>cybersecurity</category>
      <category>ics</category>
      <category>leadership</category>
      <category>security</category>
    </item>
    <item>
      <title>ICS Cybersecurity A–Z (Part 2): Operations, Incident Response, and Threat Modeling</title>
      <dc:creator>Mike Anderson</dc:creator>
      <pubDate>Tue, 14 Jul 2026 08:43:33 +0000</pubDate>
      <link>https://dev.to/mike_anderson_d01f52129fb/ics-cybersecurity-a-z-part-2-operations-incident-response-and-threat-modeling-3fn9</link>
      <guid>https://dev.to/mike_anderson_d01f52129fb/ics-cybersecurity-a-z-part-2-operations-incident-response-and-threat-modeling-3fn9</guid>
      <description>&lt;p&gt;&lt;a href="https://dev.to/mike_anderson_d01f52129fb/ics-cybersecurity-a-z-part-1-architecting-hardening-and-monitoring-scada-safely-2im7"&gt;Part 1&lt;/a&gt; covered the foundation: segmentation, hardening, monitoring, and safe assessment.&lt;/p&gt;

&lt;p&gt;That is where many ICS security programs stop.&lt;/p&gt;

&lt;p&gt;They build a good diagram, deploy a monitoring tool, fix some obvious gaps, and then assume the environment is secure.&lt;/p&gt;

&lt;p&gt;It is not.&lt;/p&gt;

&lt;p&gt;An ICS security program only becomes real when the organization can operate it every day, detect abnormal behavior, respond without harming the process, recover from compromise, and explain risk clearly to leadership.&lt;/p&gt;

&lt;p&gt;Part 2 is about that operating layer.&lt;/p&gt;

&lt;p&gt;We will cover:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Steady-state OT cyber operations&lt;/li&gt;
&lt;li&gt;Patch, change, access, and backup discipline&lt;/li&gt;
&lt;li&gt;Incident response for control environments&lt;/li&gt;
&lt;li&gt;Large-scale or nation-state campaign preparation&lt;/li&gt;
&lt;li&gt;Legal and operational boundaries for active defense&lt;/li&gt;
&lt;li&gt;Threat modeling with MITRE ATT&amp;amp;CK for ICS&lt;/li&gt;
&lt;li&gt;Metrics that matter to leadership&lt;/li&gt;
&lt;li&gt;A practical 30/60/90-day improvement plan&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Keep essential services running while reducing the chance that a cyber event becomes a safety, reliability, or public-impact event.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  1. Steady-state OT cyber operations
&lt;/h2&gt;

&lt;p&gt;Security operations in ICS must be predictable.&lt;/p&gt;

&lt;p&gt;The worst OT security programs are reactive. They patch after a breach, block traffic during an outage, or discover vendor accounts only after suspicious access appears.&lt;/p&gt;

&lt;p&gt;A mature program has an operating rhythm.&lt;/p&gt;

&lt;h3&gt;
  
  
  Operating rhythm
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Daily&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Activity:&lt;/strong&gt; review high-severity OT alerts and remote access activity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Owner:&lt;/strong&gt; SOC / OT security.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Evidence:&lt;/strong&gt; alert notes and triage decisions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Weekly&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Activity:&lt;/strong&gt; review new assets, new network flows, failed logins, and monitoring gaps.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Owner:&lt;/strong&gt; OT security / network team.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Evidence:&lt;/strong&gt; asset deltas and flow review.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Monthly&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Activity:&lt;/strong&gt; review privileged and vendor accounts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Owner:&lt;/strong&gt; IAM / OT owner.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Evidence:&lt;/strong&gt; access review sign-off.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Monthly&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Activity:&lt;/strong&gt; validate backup job status and offline backup inventory.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Owner:&lt;/strong&gt; OT engineering.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Evidence:&lt;/strong&gt; backup report and sample restore evidence.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Quarterly&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Activity:&lt;/strong&gt; review firewall rules and segmentation exceptions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Owner:&lt;/strong&gt; network / OT security.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Evidence:&lt;/strong&gt; rule review export and exception decisions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Quarterly&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Activity:&lt;/strong&gt; patch planning and vendor advisory review.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Owner:&lt;/strong&gt; OT engineering / vendor manager.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Evidence:&lt;/strong&gt; patch plan and risk acceptance.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Semiannual&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Activity:&lt;/strong&gt; restore test for critical HMI, historian, and PLC logic backups.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Owner:&lt;/strong&gt; OT engineering.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Evidence:&lt;/strong&gt; restore test results.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Annual&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Activity:&lt;/strong&gt; OT tabletop exercise and incident response test.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Owner:&lt;/strong&gt; CISO / plant leadership.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Evidence:&lt;/strong&gt; exercise report and improvement plan.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This rhythm matters because ICS risk accumulates quietly.&lt;/p&gt;

&lt;p&gt;A temporary vendor account becomes permanent. A firewall exception created during commissioning is never removed. A spare HMI misses patches for two years. A controller is replaced but never added to inventory.&lt;/p&gt;

&lt;p&gt;The operating model catches these before they become attack paths.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Patch and change management
&lt;/h2&gt;

&lt;p&gt;Patching in OT is not the same as patching laptops.&lt;/p&gt;

&lt;p&gt;You still need vulnerability management, but the process must account for vendor support, process uptime, safety impact, and rollback.&lt;/p&gt;

&lt;p&gt;A practical OT patch process:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Track vendor advisories and CISA ICS advisories for products in your environment.&lt;/li&gt;
&lt;li&gt;Identify affected assets from the OT inventory.&lt;/li&gt;
&lt;li&gt;Classify risk by exploitability, exposure, process criticality, and compensating controls.&lt;/li&gt;
&lt;li&gt;Test patches on a spare, lab system, or non-critical asset first.&lt;/li&gt;
&lt;li&gt;Confirm vendor support for the patch level.&lt;/li&gt;
&lt;li&gt;Schedule the change with operations.&lt;/li&gt;
&lt;li&gt;Confirm backups and rollback.&lt;/li&gt;
&lt;li&gt;Apply during an approved window.&lt;/li&gt;
&lt;li&gt;Monitor the asset and process after the change.&lt;/li&gt;
&lt;li&gt;Retain evidence.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Patch priority should not be based only on CVSS.&lt;/p&gt;

&lt;p&gt;For ICS, prioritize:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Internet-exposed OT services.&lt;/li&gt;
&lt;li&gt;Remote access infrastructure.&lt;/li&gt;
&lt;li&gt;Engineering workstations.&lt;/li&gt;
&lt;li&gt;HMIs with broad process visibility.&lt;/li&gt;
&lt;li&gt;Historians bridging IT and OT.&lt;/li&gt;
&lt;li&gt;Vulnerabilities with known exploitation.&lt;/li&gt;
&lt;li&gt;Vulnerabilities that allow authentication bypass, remote code execution, or unauthorized control modification.&lt;/li&gt;
&lt;li&gt;Assets with weak segmentation or no compensating controls.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A medium CVSS issue on a directly reachable HMI may matter more than a critical issue on an isolated spare asset.&lt;/p&gt;

&lt;h3&gt;
  
  
  Change control is a security control
&lt;/h3&gt;

&lt;p&gt;Every OT change should answer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What is changing?&lt;/li&gt;
&lt;li&gt;Which process could be affected?&lt;/li&gt;
&lt;li&gt;Who approved it?&lt;/li&gt;
&lt;li&gt;What is the rollback plan?&lt;/li&gt;
&lt;li&gt;What evidence will prove the change was successful?&lt;/li&gt;
&lt;li&gt;What monitoring is required after the change?&lt;/li&gt;
&lt;li&gt;What is the stop condition?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This applies to firewall rules, controller logic, HMI software, remote access, patches, sensor changes, and vendor maintenance.&lt;/p&gt;

&lt;p&gt;Poor change control is one of the most common causes of self-inflicted OT incidents.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Account and access hygiene
&lt;/h2&gt;

&lt;p&gt;Identity is often the weak point in OT.&lt;/p&gt;

&lt;p&gt;Many environments still have shared operator accounts, old vendor accounts, unmanaged local administrators, and remote access paths that were created for commissioning and never removed.&lt;/p&gt;

&lt;p&gt;Minimum controls:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;MFA for remote access and privileged access where supported.&lt;/li&gt;
&lt;li&gt;Unique named accounts for engineers and vendors.&lt;/li&gt;
&lt;li&gt;No standing vendor access unless formally justified.&lt;/li&gt;
&lt;li&gt;Monthly vendor account review.&lt;/li&gt;
&lt;li&gt;Quarterly privileged access review.&lt;/li&gt;
&lt;li&gt;Break-glass accounts protected, monitored, and tested.&lt;/li&gt;
&lt;li&gt;Password vaulting for shared emergency credentials.&lt;/li&gt;
&lt;li&gt;Session recording for privileged remote access.&lt;/li&gt;
&lt;li&gt;Disable accounts immediately when engineers, contractors, or vendors leave.&lt;/li&gt;
&lt;li&gt;Restrict engineering tool access to approved workstations.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The real risk is not only credential theft. It is loss of accountability.&lt;/p&gt;

&lt;p&gt;If five people use the same engineering account, you cannot reliably determine who changed a PLC program, acknowledged an alarm, or exported a project file.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Backup and recovery testing
&lt;/h2&gt;

&lt;p&gt;Backups are not a compliance artifact in ICS. They are a control for public safety and service continuity.&lt;/p&gt;

&lt;p&gt;You need backups for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HMI images&lt;/li&gt;
&lt;li&gt;Engineering workstation images&lt;/li&gt;
&lt;li&gt;SCADA server configuration&lt;/li&gt;
&lt;li&gt;Historian configuration&lt;/li&gt;
&lt;li&gt;PLC and RTU logic&lt;/li&gt;
&lt;li&gt;Network device configuration&lt;/li&gt;
&lt;li&gt;Firewall rules&lt;/li&gt;
&lt;li&gt;Switch configuration&lt;/li&gt;
&lt;li&gt;Remote access gateway configuration&lt;/li&gt;
&lt;li&gt;License keys and vendor installation media&lt;/li&gt;
&lt;li&gt;Offline documentation needed for recovery&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The minimum standard is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Keep offline or immutable copies.&lt;/li&gt;
&lt;li&gt;Keep at least one copy physically or logically disconnected.&lt;/li&gt;
&lt;li&gt;Test restores, not only backup completion.&lt;/li&gt;
&lt;li&gt;Validate PLC logic backups on spare hardware where possible.&lt;/li&gt;
&lt;li&gt;Record firmware and software version dependencies.&lt;/li&gt;
&lt;li&gt;Store recovery procedures where they are accessible during an IT outage.&lt;/li&gt;
&lt;li&gt;Include operations in recovery drills.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The question leadership should ask is not:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Do we have backups?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The better question is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Can we restore the most critical process-control function from known-good backups under incident conditions?"&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  5. OT incident response: containment without causing harm
&lt;/h2&gt;

&lt;p&gt;Traditional incident response often says isolate the host quickly.&lt;/p&gt;

&lt;p&gt;That may be right for an office laptop.&lt;/p&gt;

&lt;p&gt;It may be dangerous for a controller, HMI, historian, safety system, or engineering workstation involved in a live process.&lt;/p&gt;

&lt;p&gt;OT incident response must be safety-led.&lt;/p&gt;

&lt;h3&gt;
  
  
  Preparation
&lt;/h3&gt;

&lt;p&gt;Before an incident, create:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;OT incident response plan.&lt;/li&gt;
&lt;li&gt;Plant contact roster.&lt;/li&gt;
&lt;li&gt;OT asset inventory with process criticality.&lt;/li&gt;
&lt;li&gt;Network diagrams and trust boundaries.&lt;/li&gt;
&lt;li&gt;Communication plan if email and VoIP are down.&lt;/li&gt;
&lt;li&gt;Forensic collection procedure.&lt;/li&gt;
&lt;li&gt;Escalation path to safety, legal, privacy, executives, and sector authorities.&lt;/li&gt;
&lt;li&gt;Pre-approved containment options.&lt;/li&gt;
&lt;li&gt;Emergency change process.&lt;/li&gt;
&lt;li&gt;Out-of-band communication method.&lt;/li&gt;
&lt;li&gt;Tabletop exercise schedule.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Triage questions
&lt;/h3&gt;

&lt;p&gt;When an alert fires, ask:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Which asset is affected?&lt;/li&gt;
&lt;li&gt;What physical process does it support?&lt;/li&gt;
&lt;li&gt;Is the process stable?&lt;/li&gt;
&lt;li&gt;Is this read traffic, write traffic, authentication activity, or logic change?&lt;/li&gt;
&lt;li&gt;Is the activity inside an approved change window?&lt;/li&gt;
&lt;li&gt;Is a vendor currently authorized to connect?&lt;/li&gt;
&lt;li&gt;Can containment disrupt safety or availability?&lt;/li&gt;
&lt;li&gt;What evidence must be preserved before action?&lt;/li&gt;
&lt;li&gt;Who has authority to approve containment?&lt;/li&gt;
&lt;li&gt;What rollback is available?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These questions prevent the SOC from making a technically correct but operationally unsafe decision.&lt;/p&gt;

&lt;h3&gt;
  
  
  Severity model
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;SEV-1 Critical&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;OT example:&lt;/strong&gt; active unauthorized control action, ransomware affecting operations, confirmed manipulation of controller logic, or safety impact.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Response expectation:&lt;/strong&gt; activate crisis management, OT IR, legal, executive leadership, and the safety owner.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;SEV-2 High&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;OT example:&lt;/strong&gt; compromised engineering workstation, unauthorized PLC write attempt, vendor account compromise, or malware on HMI.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Response expectation:&lt;/strong&gt; immediate OT/security bridge and containment plan approved by the OT owner.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;SEV-3 Medium&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;OT example:&lt;/strong&gt; suspicious scan, failed logins, unauthorized device detected, or policy violation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Response expectation:&lt;/strong&gt; same-day investigation and corrective action.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;SEV-4 Low&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;OT example:&lt;/strong&gt; false positive, benign misconfiguration, or informational monitoring gap.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Response expectation:&lt;/strong&gt; track and tune through the normal backlog.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Containment options
&lt;/h3&gt;

&lt;p&gt;Containment should be targeted.&lt;/p&gt;

&lt;h3&gt;
  
  
  Containment decision guide
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Suspicious laptop in OT VLAN&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Safer option:&lt;/strong&gt; disable or quarantine the switch port for that endpoint.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Avoid unless approved:&lt;/strong&gt; shutting down the entire switch.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Enterprise-to-OT attack path&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Safer option:&lt;/strong&gt; block the enterprise-side route or disable the jump path.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Avoid unless approved:&lt;/strong&gt; disrupting Level 2 or Level 1 communications.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Compromised vendor account&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Safer option:&lt;/strong&gt; disable the account and terminate the active session.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Avoid unless approved:&lt;/strong&gt; broad password resets during live operations without a plan.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Unauthorized PLC write source&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Safer option:&lt;/strong&gt; block the source IP at the cell firewall or switch ACL.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Avoid unless approved:&lt;/strong&gt; remote stop command to PLC.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Malware on HMI&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Safer option:&lt;/strong&gt; move operator function to standby HMI, then isolate the affected host.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Avoid unless approved:&lt;/strong&gt; killing the HMI process during active operation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Suspected logic change&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Safer option:&lt;/strong&gt; compare logic to known-good backup and involve a controls engineer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Avoid unless approved:&lt;/strong&gt; reloading logic without process validation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The principle is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Isolate the attacker, not the process.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Eradication and recovery
&lt;/h3&gt;

&lt;p&gt;Recovery actions may include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reimage HMIs or engineering workstations from golden images.&lt;/li&gt;
&lt;li&gt;Reload controller logic from known-good backups.&lt;/li&gt;
&lt;li&gt;Validate checksums or vendor integrity indicators.&lt;/li&gt;
&lt;li&gt;Reset credentials in the affected zone.&lt;/li&gt;
&lt;li&gt;Patch the entry point.&lt;/li&gt;
&lt;li&gt;Review firewall and remote access logs.&lt;/li&gt;
&lt;li&gt;Monitor for recurrence.&lt;/li&gt;
&lt;li&gt;Reconnect enterprise paths only after the route of compromise is understood and controlled.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Do not reconnect because "production needs it" without understanding the attack path. That is how reinfection happens.&lt;/p&gt;

&lt;h3&gt;
  
  
  Post-incident review
&lt;/h3&gt;

&lt;p&gt;Within 72 hours for major incidents, document:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Timeline.&lt;/li&gt;
&lt;li&gt;Initial access vector.&lt;/li&gt;
&lt;li&gt;Affected assets.&lt;/li&gt;
&lt;li&gt;Physical process impact.&lt;/li&gt;
&lt;li&gt;Containment decisions and approvals.&lt;/li&gt;
&lt;li&gt;Evidence collected.&lt;/li&gt;
&lt;li&gt;Root cause.&lt;/li&gt;
&lt;li&gt;Controls that worked.&lt;/li&gt;
&lt;li&gt;Controls that failed.&lt;/li&gt;
&lt;li&gt;Detection gaps.&lt;/li&gt;
&lt;li&gt;Remediation owners and due dates.&lt;/li&gt;
&lt;li&gt;Leadership summary.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The best incident reviews are not blame exercises. They are control improvement sessions.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. Preparing for large-scale or nation-state campaigns
&lt;/h2&gt;

&lt;p&gt;Some OT incidents are not isolated.&lt;/p&gt;

&lt;p&gt;Utilities, transportation, energy, manufacturing, and public-sector operators may face coordinated campaigns involving destructive malware, credential attacks, vendor compromise, DDoS, influence operations, and physical security pressure.&lt;/p&gt;

&lt;p&gt;The objective during a large-scale campaign is not perfect investigation.&lt;/p&gt;

&lt;p&gt;The objective is continuity of essential service, safe operation, evidence preservation, and coordinated defense.&lt;/p&gt;

&lt;h3&gt;
  
  
  Before the campaign
&lt;/h3&gt;

&lt;p&gt;Prepare:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sector threat intelligence relationships.&lt;/li&gt;
&lt;li&gt;Membership or contact path with relevant ISAC/ISAO.&lt;/li&gt;
&lt;li&gt;National CERT reporting path.&lt;/li&gt;
&lt;li&gt;Pre-approved emergency firewall rules.&lt;/li&gt;
&lt;li&gt;Pre-approved remote access shutdown procedure.&lt;/li&gt;
&lt;li&gt;Emergency vendor contact list.&lt;/li&gt;
&lt;li&gt;"Island mode" or isolation plan where operationally feasible.&lt;/li&gt;
&lt;li&gt;Manual operation procedures.&lt;/li&gt;
&lt;li&gt;Spare hardware and offline media.&lt;/li&gt;
&lt;li&gt;Out-of-band communications.&lt;/li&gt;
&lt;li&gt;Executive decision matrix.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Emergency isolation must be practiced. A plan that exists only in a PDF is not a plan.&lt;/p&gt;

&lt;h3&gt;
  
  
  During the campaign
&lt;/h3&gt;

&lt;p&gt;Actions may include:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Activate the OT incident response bridge.&lt;/li&gt;
&lt;li&gt;Confirm process stability with operations.&lt;/li&gt;
&lt;li&gt;Increase monitoring on remote access, firewalls, DNS, identity, and OT sensors.&lt;/li&gt;
&lt;li&gt;Disable non-essential vendor access.&lt;/li&gt;
&lt;li&gt;Restrict internet-facing OT DMZ services.&lt;/li&gt;
&lt;li&gt;Apply pre-approved blocks for confirmed malicious infrastructure.&lt;/li&gt;
&lt;li&gt;Validate backups and standby systems.&lt;/li&gt;
&lt;li&gt;Monitor for unauthorized engineering protocol use.&lt;/li&gt;
&lt;li&gt;Share indicators with your ISAC or national CERT.&lt;/li&gt;
&lt;li&gt;Preserve evidence for law enforcement and sector response.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Be careful with blanket actions.&lt;/p&gt;

&lt;p&gt;"Force every privileged password change immediately" may be appropriate in some cases, but in OT it must be planned so you do not lock out operators, break services, or lose access to legacy systems during a crisis.&lt;/p&gt;

&lt;h3&gt;
  
  
  Defensive countermeasures
&lt;/h3&gt;

&lt;p&gt;Private organizations can and should defend their own environment.&lt;/p&gt;

&lt;p&gt;Appropriate defensive actions include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Blocking known malicious IPs and domains at your perimeter.&lt;/li&gt;
&lt;li&gt;Sinkholing malicious domains inside your own DNS environment when properly authorized.&lt;/li&gt;
&lt;li&gt;Null-routing attacker infrastructure at your boundary.&lt;/li&gt;
&lt;li&gt;Disabling compromised accounts.&lt;/li&gt;
&lt;li&gt;Quarantining affected endpoints.&lt;/li&gt;
&lt;li&gt;Deploying honeytokens or decoy shares.&lt;/li&gt;
&lt;li&gt;Increasing detection sensitivity for known TTPs.&lt;/li&gt;
&lt;li&gt;Sharing indicators with trusted sector partners.&lt;/li&gt;
&lt;li&gt;Supporting takedown efforts through proper legal and provider channels.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  No hack back
&lt;/h3&gt;

&lt;p&gt;Private-sector teams should not conduct offensive retaliation.&lt;/p&gt;

&lt;p&gt;Do not access attacker infrastructure, modify external systems, steal data back, or launch counterattacks.&lt;/p&gt;

&lt;p&gt;The right role is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Stop the attack inside your boundary.&lt;/li&gt;
&lt;li&gt;Preserve forensic evidence.&lt;/li&gt;
&lt;li&gt;Share indicators quickly.&lt;/li&gt;
&lt;li&gt;Support law enforcement, CERT, regulators, and sector response bodies.&lt;/li&gt;
&lt;li&gt;Maintain safe operations.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is how private organizations contribute to national defense without creating legal, diplomatic, or operational risk.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. Threat modeling: prioritize what actually reduces risk
&lt;/h2&gt;

&lt;p&gt;Threat modeling prevents random security spending.&lt;/p&gt;

&lt;p&gt;For ICS, use the process and the attack path together.&lt;/p&gt;

&lt;p&gt;A practical model includes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Critical process.&lt;/li&gt;
&lt;li&gt;Assets supporting that process.&lt;/li&gt;
&lt;li&gt;Trust boundaries.&lt;/li&gt;
&lt;li&gt;Possible attacker entry points.&lt;/li&gt;
&lt;li&gt;Attack path from IT or remote access to control impact.&lt;/li&gt;
&lt;li&gt;Existing controls.&lt;/li&gt;
&lt;li&gt;Detection coverage.&lt;/li&gt;
&lt;li&gt;Response options.&lt;/li&gt;
&lt;li&gt;Control gaps.&lt;/li&gt;
&lt;li&gt;Remediation owner.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;MITRE ATT&amp;amp;CK for ICS is useful because it maps adversary behavior to ICS-specific tactics and techniques.&lt;/p&gt;

&lt;p&gt;Example attack path:&lt;/p&gt;

&lt;h3&gt;
  
  
  Example attack path
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Initial access&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Example behavior:&lt;/strong&gt; vendor VPN account compromised.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Expected telemetry:&lt;/strong&gt; VPN login from unusual location and MFA anomaly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Required control:&lt;/strong&gt; MFA, conditional access, and vendor access approval.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Owner:&lt;/strong&gt; IAM / OT security.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Discovery&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Example behavior:&lt;/strong&gt; attacker scans the OT subnet.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Expected telemetry:&lt;/strong&gt; new network flows, protocol discovery, and sensor alert.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Required control:&lt;/strong&gt; segmentation, passive monitoring, and blocked routes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Owner:&lt;/strong&gt; network / SOC.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Lateral movement&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Example behavior:&lt;/strong&gt; RDP to engineering workstation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Expected telemetry:&lt;/strong&gt; jump host logs and Windows logon events.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Required control:&lt;/strong&gt; jump host only, no direct RDP, and named accounts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Owner:&lt;/strong&gt; infrastructure.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Collection&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Example behavior:&lt;/strong&gt; project files copied.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Expected telemetry:&lt;/strong&gt; file access logs and unusual archive creation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Required control:&lt;/strong&gt; least privilege, monitoring, and data access review.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Owner:&lt;/strong&gt; OT engineering.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Control manipulation&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Example behavior:&lt;/strong&gt; unauthorized PLC write or logic change.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Expected telemetry:&lt;/strong&gt; engineering protocol write, controller event, and logic checksum change.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Required control:&lt;/strong&gt; PLC ACL, change workflow, and alerting.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Owner:&lt;/strong&gt; OT engineering.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Inhibit response&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Example behavior:&lt;/strong&gt; alarms suppressed or HMI altered.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Expected telemetry:&lt;/strong&gt; HMI configuration change and alarm state changes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Required control:&lt;/strong&gt; HMI change control, backups, and monitoring.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Owner:&lt;/strong&gt; operations.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This model tells you where to spend money.&lt;/p&gt;

&lt;p&gt;If the highest-risk path is vendor VPN to engineering workstation to PLC logic change, then buying another generic IT scanner is not the first priority.&lt;/p&gt;

&lt;p&gt;Better priorities may be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tighten vendor access.&lt;/li&gt;
&lt;li&gt;Remove direct RDP.&lt;/li&gt;
&lt;li&gt;Add engineering workstation allowlisting.&lt;/li&gt;
&lt;li&gt;Monitor engineering protocol writes.&lt;/li&gt;
&lt;li&gt;Implement PLC logic backup and checksum validation.&lt;/li&gt;
&lt;li&gt;Exercise the containment process.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  8. Metrics leadership should care about
&lt;/h2&gt;

&lt;p&gt;Leadership does not need every alert.&lt;/p&gt;

&lt;p&gt;They need a clear view of operational cyber risk.&lt;/p&gt;

&lt;p&gt;Good OT security metrics:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Percentage of critical OT assets inventoried:&lt;/strong&gt; shows whether the team can defend what matters.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Number of direct IT-to-OT flows:&lt;/strong&gt; measures segmentation risk.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vendor accounts active outside approved windows:&lt;/strong&gt; measures third-party access risk.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Percentage of critical HMIs and engineering workstations with tested backups:&lt;/strong&gt; measures recovery confidence.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Number of unauthorized or unexplained OT protocol write attempts:&lt;/strong&gt; measures control-layer threat activity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Critical OT vulnerabilities past SLA with no compensating control:&lt;/strong&gt; measures unresolved exposure.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Percentage of firewall rules reviewed in the last quarter:&lt;/strong&gt; measures control hygiene.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mean time to triage high-severity OT alerts:&lt;/strong&gt; measures SOC readiness.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Number of successful restore tests:&lt;/strong&gt; measures resilience.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open exceptions by age and criticality:&lt;/strong&gt; measures risk debt.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The best board-level statement is not "we deployed an OT monitoring tool."&lt;/p&gt;

&lt;p&gt;A better statement is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"We have identified 96% of critical OT assets, removed all direct enterprise-to-controller access, reviewed 87% of OT firewall rules this quarter, and validated restore procedures for the three most critical process-control functions. Remaining risk is concentrated in two legacy PLC families and one vendor access path, with remediation owners assigned."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is operationally meaningful.&lt;/p&gt;




&lt;h2&gt;
  
  
  9. 30/60/90-day improvement plan
&lt;/h2&gt;

&lt;p&gt;If you are starting from a messy environment, do not try to fix everything at once.&lt;/p&gt;

&lt;h3&gt;
  
  
  First 30 days: establish visibility and stop obvious risk
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Build critical OT asset inventory.&lt;/li&gt;
&lt;li&gt;Identify direct IT-to-OT paths.&lt;/li&gt;
&lt;li&gt;Review remote vendor access.&lt;/li&gt;
&lt;li&gt;Confirm backups exist for critical HMI, SCADA, and PLC assets.&lt;/li&gt;
&lt;li&gt;Collect firewall rules and network diagrams.&lt;/li&gt;
&lt;li&gt;Start passive monitoring in one critical segment.&lt;/li&gt;
&lt;li&gt;Identify default credentials and shared accounts.&lt;/li&gt;
&lt;li&gt;Define incident contact roster.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Days 31–60: enforce control points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Remove direct enterprise access to controllers.&lt;/li&gt;
&lt;li&gt;Move vendor access behind MFA and jump host.&lt;/li&gt;
&lt;li&gt;Review and reduce broad firewall rules.&lt;/li&gt;
&lt;li&gt;Implement logging for remote access and jump hosts.&lt;/li&gt;
&lt;li&gt;Validate backups through sample restore.&lt;/li&gt;
&lt;li&gt;Create initial OT detection use cases.&lt;/li&gt;
&lt;li&gt;Establish change approval for PLC logic and firewall changes.&lt;/li&gt;
&lt;li&gt;Create exception register.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Days 61–90: operationalize
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Run an OT tabletop exercise.&lt;/li&gt;
&lt;li&gt;Test incident containment decision flow.&lt;/li&gt;
&lt;li&gt;Review privileged access.&lt;/li&gt;
&lt;li&gt;Tune monitoring detections.&lt;/li&gt;
&lt;li&gt;Build threat model for the most critical process.&lt;/li&gt;
&lt;li&gt;Assign remediation backlog by risk.&lt;/li&gt;
&lt;li&gt;Report metrics to leadership.&lt;/li&gt;
&lt;li&gt;Schedule quarterly control reviews.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This sequence creates measurable progress without destabilizing operations.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final takeaway
&lt;/h2&gt;

&lt;p&gt;ICS cybersecurity is not about adding IT controls blindly to plant environments.&lt;/p&gt;

&lt;p&gt;It is about protecting the physical process by controlling access, reducing unsafe paths, monitoring meaningful behavior, and responding with operational discipline.&lt;/p&gt;

&lt;p&gt;The strongest OT programs share a few traits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;They know their assets.&lt;/li&gt;
&lt;li&gt;They respect safety and availability.&lt;/li&gt;
&lt;li&gt;They segment based on process risk.&lt;/li&gt;
&lt;li&gt;They control vendor access.&lt;/li&gt;
&lt;li&gt;They monitor controller-relevant behavior.&lt;/li&gt;
&lt;li&gt;They test backups.&lt;/li&gt;
&lt;li&gt;They practice incident response.&lt;/li&gt;
&lt;li&gt;They use threat modeling to prioritize.&lt;/li&gt;
&lt;li&gt;They can explain residual risk to leadership.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Start there.&lt;/p&gt;

&lt;p&gt;Keep the water flowing, the lights on, and the process under control.&lt;/p&gt;




&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://csrc.nist.gov/pubs/sp/800/82/r3/final" rel="noopener noreferrer"&gt;NIST SP 800-82 Rev. 3 — Guide to Operational Technology (OT) Security&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.cisa.gov/cross-sector-cybersecurity-performance-goals" rel="noopener noreferrer"&gt;CISA Cross-Sector Cybersecurity Performance Goals&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://attack.mitre.org/matrices/ics/" rel="noopener noreferrer"&gt;MITRE ATT&amp;amp;CK for ICS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.isa.org/standards-and-publications/isa-standards/isa-iec-62443-series-of-standards" rel="noopener noreferrer"&gt;ISA/IEC 62443 Series of Standards&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>cybersecurity</category>
      <category>security</category>
      <category>architecture</category>
      <category>iot</category>
    </item>
    <item>
      <title>ICS Cybersecurity A–Z (Part 1): Architecting, Hardening, and Monitoring SCADA Safely</title>
      <dc:creator>Mike Anderson</dc:creator>
      <pubDate>Tue, 14 Jul 2026 08:40:57 +0000</pubDate>
      <link>https://dev.to/mike_anderson_d01f52129fb/ics-cybersecurity-a-z-part-1-architecting-hardening-and-monitoring-scada-safely-2im7</link>
      <guid>https://dev.to/mike_anderson_d01f52129fb/ics-cybersecurity-a-z-part-1-architecting-hardening-and-monitoring-scada-safely-2im7</guid>
      <description>&lt;p&gt;Walk into a water treatment plant control room and the first thing you notice is how calm everything looks.&lt;/p&gt;

&lt;p&gt;The pumps are running. The HMI screens show tank levels, valve states, and chemical dosing. The operators know the process. The environment feels stable.&lt;/p&gt;

&lt;p&gt;Then you look closer.&lt;/p&gt;

&lt;p&gt;An engineering workstation has a shared password taped under the keyboard. A PLC web interface is reachable from the plant VLAN. A vendor VPN lands too close to the control network. The historian talks to business systems through a firewall rule nobody has reviewed in years.&lt;/p&gt;

&lt;p&gt;That is the real world of Industrial Control Systems (ICS) security.&lt;/p&gt;

&lt;p&gt;In enterprise IT, a bad security decision may create downtime, data loss, or account compromise. In OT, the same decision can affect water pressure, power distribution, chemical dosing, worker safety, environmental impact, and public trust.&lt;/p&gt;

&lt;p&gt;This two-part series is written for security engineers, SOC analysts, cloud and infrastructure teams, and IT leaders who need to work with OT teams without breaking the plant.&lt;/p&gt;

&lt;p&gt;Part 1 covers the foundation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SCADA network placement&lt;/li&gt;
&lt;li&gt;Purdue-level segmentation&lt;/li&gt;
&lt;li&gt;Remote access and vendor access&lt;/li&gt;
&lt;li&gt;HMI, server, PLC, and RTU hardening&lt;/li&gt;
&lt;li&gt;OT monitoring and detection&lt;/li&gt;
&lt;li&gt;Safe vulnerability assessment&lt;/li&gt;
&lt;li&gt;Common configuration failures&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Part 2 covers operations, incident response, large-scale attack preparation, threat modeling, and leadership metrics.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Assumption: the environment is a production ICS/SCADA network supporting critical infrastructure such as water, power, manufacturing, utilities, or similar process-control operations. Adjust the details for your sector, vendor stack, safety case, and regulatory obligations.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  The OT security rule that matters most
&lt;/h2&gt;

&lt;p&gt;In OT, the first question is not:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Can we secure this?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The first question is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Can we secure this without creating unsafe process behavior?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That changes the order of operations.&lt;/p&gt;

&lt;p&gt;For normal IT, you may patch aggressively, scan broadly, isolate hosts quickly, or force password resets at scale.&lt;/p&gt;

&lt;p&gt;For ICS, those actions can break HMI-to-PLC communication, trigger a failsafe, overload a fragile controller, lock out an operator, or interrupt a process that must remain stable.&lt;/p&gt;

&lt;p&gt;So the decision rule is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Preserve safety and control first. Reduce cyber risk through planned, tested, reversible controls.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That does not mean OT should remain insecure. It means the controls must be engineered, not blindly applied.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Start with the architecture: where SCADA should live
&lt;/h2&gt;

&lt;p&gt;Before you harden a device or deploy a monitoring tool, you need a network model that defines trust boundaries.&lt;/p&gt;

&lt;p&gt;The common reference model is the Purdue Enterprise Reference Architecture. It is not perfect for every modern environment, especially where cloud historians, remote operations, and IIoT platforms are involved, but it remains useful because it separates business IT from control functions.&lt;/p&gt;

&lt;p&gt;A practical Purdue-style model looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Level 5  Enterprise services
         Email, ERP, internet, business applications

Level 4  Business IT
         User workstations, identity, reporting, corporate applications

Level 3.5 OT DMZ
         Historian replication, patch staging, remote access broker,
         file transfer gateway, jump access mediation

Level 3  Site operations
         SCADA servers, engineering workstations, local historians,
         domain services for OT where used

Level 2  Supervisory control
         HMIs, operator stations, local control rooms

Level 1  Basic control
         PLCs, RTUs, IEDs, controllers, intelligent actuators

Level 0  Physical process
         Sensors, pumps, valves, breakers, motors, field equipment
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The architecture should enforce three principles.&lt;/p&gt;

&lt;h3&gt;
  
  
  Principle 1: Enterprise IT must not directly reach controllers
&lt;/h3&gt;

&lt;p&gt;Nothing from Level 4 or Level 5 should directly communicate with PLCs, RTUs, IEDs, or safety controllers.&lt;/p&gt;

&lt;p&gt;A ransomware infection on a finance laptop should not be able to discover Modbus, DNP3, EtherNet/IP, S7, or IEC 61850 devices.&lt;/p&gt;

&lt;h3&gt;
  
  
  Principle 2: Shared services belong in the OT DMZ
&lt;/h3&gt;

&lt;p&gt;The OT DMZ is the controlled exchange zone.&lt;/p&gt;

&lt;p&gt;Use it for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Historian replication&lt;/li&gt;
&lt;li&gt;Patch staging&lt;/li&gt;
&lt;li&gt;Antivirus or EDR update staging&lt;/li&gt;
&lt;li&gt;Secure file transfer&lt;/li&gt;
&lt;li&gt;Remote access brokering&lt;/li&gt;
&lt;li&gt;Jump host mediation&lt;/li&gt;
&lt;li&gt;Log forwarding&lt;/li&gt;
&lt;li&gt;Time synchronization relay where appropriate&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Do not use it as a flat bridge between IT and OT.&lt;/p&gt;

&lt;h3&gt;
  
  
  Principle 3: Control commands should only come from authorized control paths
&lt;/h3&gt;

&lt;p&gt;Telemetry can move upward when required. Control commands must be restricted downward to approved systems, approved users, approved ports, and approved operating procedures.&lt;/p&gt;

&lt;p&gt;A good design does not only say "firewall between IT and OT." It defines exactly which asset can talk to which asset, on which protocol, for what business reason, with which owner and evidence.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Segmentation that actually reduces risk
&lt;/h2&gt;

&lt;p&gt;Segmentation fails when it exists on a diagram but not in enforcement.&lt;/p&gt;

&lt;p&gt;The minimum practical design is:&lt;/p&gt;

&lt;h3&gt;
  
  
  Minimum segmentation design
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Enterprise to OT DMZ&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Enforcement point:&lt;/strong&gt; firewall, proxy, or remote access broker.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Allowed flow:&lt;/strong&gt; corporate analyst reads replicated historian data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Block:&lt;/strong&gt; direct RDP, SMB, SSH, database, or PLC protocol access into OT.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;OT DMZ to Level 3&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Enforcement point:&lt;/strong&gt; firewall with explicit allow rules.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Allowed flow:&lt;/strong&gt; patch server pulls approved updates from DMZ staging.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Block:&lt;/strong&gt; any inbound enterprise-initiated session to SCADA servers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Level 3 to Level 2&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Enforcement point:&lt;/strong&gt; internal OT firewall or ACL.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Allowed flow:&lt;/strong&gt; SCADA server communicates with HMIs and local services.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Block:&lt;/strong&gt; direct workstation-to-HMI access from unrelated zones.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Level 2 to Level 1&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Enforcement point:&lt;/strong&gt; cell/area firewall or industrial switch ACL.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Allowed flow:&lt;/strong&gt; HMI or SCADA server polls assigned PLCs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Block:&lt;/strong&gt; cross-cell traffic, unauthorized engineering access, and broad broadcast exposure.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Vendor access to OT&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Enforcement point:&lt;/strong&gt; VPN, MFA, jump host, and approval workflow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Allowed flow:&lt;/strong&gt; vendor connects to one approved engineering workstation during a change window.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Block:&lt;/strong&gt; direct VPN landing inside Level 2 or Level 1.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A firewall rule should read like an operational decision, not a convenience setting.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Source:      SCADA-SRV-01
Destination: PLC-WTP-CLARIFIER-01
Protocol:    Modbus TCP/502
Direction:   SCADA to PLC only
Purpose:     Poll clarifier process values
Owner:       OT Operations
Review:      Quarterly
Logging:     Session metadata enabled
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bad rule:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Source:      Any
Destination: OT network
Protocol:    Any
Purpose:     Vendor support
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That second rule is not a firewall exception. It is an attack path.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Remote access and vendor access
&lt;/h2&gt;

&lt;p&gt;Remote access is one of the highest-risk paths into OT because it combines identity risk, unmanaged endpoints, third-party dependencies, and time pressure during outages.&lt;/p&gt;

&lt;p&gt;For production ICS, vendor access should follow this model:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Vendor user
  -&amp;gt; MFA-authenticated remote access portal
  -&amp;gt; Approved time-bound session
  -&amp;gt; Recorded jump host
  -&amp;gt; Named target asset only
  -&amp;gt; OT engineer supervision for high-risk changes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Minimum controls:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;MFA for all remote access.&lt;/li&gt;
&lt;li&gt;No shared vendor accounts.&lt;/li&gt;
&lt;li&gt;Time-bound access approved through a ticket.&lt;/li&gt;
&lt;li&gt;Session recording for privileged remote access.&lt;/li&gt;
&lt;li&gt;Vendor source restrictions where feasible.&lt;/li&gt;
&lt;li&gt;No split tunneling for privileged OT access.&lt;/li&gt;
&lt;li&gt;No direct VPN route to PLC, RTU, or HMI networks.&lt;/li&gt;
&lt;li&gt;Disable access when the support contract ends.&lt;/li&gt;
&lt;li&gt;Review vendor accounts at least monthly.&lt;/li&gt;
&lt;li&gt;Keep emergency break-glass access documented and tested.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The key risk is not only that a vendor account may be compromised. The bigger risk is that the vendor access path may bypass the segmentation you carefully designed.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Harden systems without treating OT like office IT
&lt;/h2&gt;

&lt;p&gt;Hardening should reduce attack surface without breaking vendor support or process stability.&lt;/p&gt;

&lt;p&gt;That requires three things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A tested baseline.&lt;/li&gt;
&lt;li&gt;A rollback plan.&lt;/li&gt;
&lt;li&gt;OT owner approval.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Windows HMIs and engineering workstations
&lt;/h3&gt;

&lt;p&gt;Most SCADA front ends and engineering tools still run on Windows. They should not be managed like standard office laptops.&lt;/p&gt;

&lt;p&gt;Practical controls:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use application allowlisting where possible. AppLocker, Windows Defender Application Control, or a vendor-supported allowlisting tool is better than relying only on antivirus.&lt;/li&gt;
&lt;li&gt;Remove unnecessary local admin access. Operators should not run daily sessions as administrators.&lt;/li&gt;
&lt;li&gt;Use unique local administrator passwords. Microsoft LAPS or a controlled equivalent is preferred where domain-joined management is available.&lt;/li&gt;
&lt;li&gt;Disable unnecessary services after vendor validation. Common review candidates include Print Spooler, Remote Registry, unused file sharing, unused web services, and unmanaged PowerShell remoting.&lt;/li&gt;
&lt;li&gt;Restrict RDP to jump hosts only. Block direct RDP from enterprise networks.&lt;/li&gt;
&lt;li&gt;Control USB usage. Block mass storage by default, allow approved devices only through documented procedure.&lt;/li&gt;
&lt;li&gt;Enable Windows Firewall with explicit inbound rules.&lt;/li&gt;
&lt;li&gt;Forward security logs to a central collector or SIEM.&lt;/li&gt;
&lt;li&gt;Keep golden images for HMI and engineering workstation recovery.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Useful Windows event sources include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Logon/logoff events:&lt;/strong&gt; detect unusual operator, engineer, or vendor access.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Account management events:&lt;/strong&gt; detect new users, group changes, and privilege changes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Service creation events:&lt;/strong&gt; detect persistence and unauthorized tooling.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PowerShell logs, where enabled safely:&lt;/strong&gt; detect script-based administration or abuse.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;RDP session logs:&lt;/strong&gt; validate jump host and remote access policy.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Application installation logs:&lt;/strong&gt; detect unauthorized software on HMIs.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Linux SCADA, historian, or middleware servers
&lt;/h3&gt;

&lt;p&gt;For Linux-based systems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Remove unused packages and services.&lt;/li&gt;
&lt;li&gt;Disable password SSH and root SSH where operationally feasible.&lt;/li&gt;
&lt;li&gt;Restrict SSH to the jump host or management subnet.&lt;/li&gt;
&lt;li&gt;Use host firewall rules to allow only required service ports.&lt;/li&gt;
&lt;li&gt;Mount temporary paths with safer options where compatible with the application.&lt;/li&gt;
&lt;li&gt;Forward authentication and system logs to the central collector.&lt;/li&gt;
&lt;li&gt;Monitor service restarts and unexpected listening ports.&lt;/li&gt;
&lt;li&gt;Keep system backups and configuration exports.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example host firewall intent:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Allow SSH only from OT-JUMP-01.
Allow application port only from approved SCADA/HMI systems.
Deny all other inbound traffic.
Log denied management attempts.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The exact command syntax depends on the distribution and change process. The control intent matters more than copying a command from the internet.&lt;/p&gt;

&lt;h3&gt;
  
  
  PLCs, RTUs, and controllers
&lt;/h3&gt;

&lt;p&gt;Controllers are often the most sensitive assets. Treat changes carefully.&lt;/p&gt;

&lt;p&gt;Minimum hardening actions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Disable unused services such as HTTP, FTP, Telnet, SNMP, or vendor discovery services where not required.&lt;/li&gt;
&lt;li&gt;Restrict programming access to approved engineering workstations.&lt;/li&gt;
&lt;li&gt;Use controller access control lists where supported.&lt;/li&gt;
&lt;li&gt;Change default passwords.&lt;/li&gt;
&lt;li&gt;Use firmware supported by the vendor and validated in a lab or maintenance window.&lt;/li&gt;
&lt;li&gt;Protect physical ports, cabinet access, and serial interfaces.&lt;/li&gt;
&lt;li&gt;Keep offline backups of logic, configuration, and firmware versions.&lt;/li&gt;
&lt;li&gt;Record checksums or vendor-equivalent integrity evidence for controller logic.&lt;/li&gt;
&lt;li&gt;Document which controller owns which physical process.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The most important question for PLC hardening is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Who can change logic, from where, under what approval, and how would we know?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you cannot answer that, you do not have control of the control system.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Monitor what matters in OT
&lt;/h2&gt;

&lt;p&gt;OT monitoring is not only about malware signatures. It is about understanding normal process communication and detecting changes that should not happen.&lt;/p&gt;

&lt;p&gt;You need visibility across four areas.&lt;/p&gt;

&lt;h3&gt;
  
  
  Minimum visibility areas
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Network traffic&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Telemetry:&lt;/strong&gt; NetFlow, PCAP, Zeek logs, and industrial protocol metadata.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why it matters:&lt;/strong&gt; detects new devices, unusual protocol use, and unauthorized writes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Host activity&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Telemetry:&lt;/strong&gt; Windows/Linux logs, OT-safe EDR telemetry, and service changes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why it matters:&lt;/strong&gt; detects compromised HMIs, engineering workstations, and servers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Controller state&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Telemetry:&lt;/strong&gt; logic changes, firmware changes, diagnostic buffers, and mode changes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why it matters:&lt;/strong&gt; detects unauthorized control-layer modification.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Identity and remote access&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Telemetry:&lt;/strong&gt; VPN logs, jump host logs, MFA events, and privileged sessions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why it matters:&lt;/strong&gt; detects compromised accounts and vendor access misuse.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Network monitoring
&lt;/h3&gt;

&lt;p&gt;Passive monitoring is usually the safest starting point.&lt;/p&gt;

&lt;p&gt;Use a SPAN port, network TAP, or packet broker to send traffic to an OT-aware sensor. Tools may include Zeek, Security Onion, Suricata, Nozomi, Dragos, Claroty, Forescout, Microsoft Defender for IoT, or similar platforms.&lt;/p&gt;

&lt;p&gt;The tool is less important than the use cases.&lt;/p&gt;

&lt;p&gt;Good OT detections include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;New device in a control cell:&lt;/strong&gt; unknown MAC/IP communicating on an OT VLAN. This may indicate a rogue laptop, vendor device, or attacker foothold.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unauthorized PLC write:&lt;/strong&gt; write function from a non-engineering source. This may indicate process manipulation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PLC mode change:&lt;/strong&gt; run, stop, or program mode change outside a change window. This may indicate unsafe or unauthorized activity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;New engineering workstation behavior:&lt;/strong&gt; engineering protocol traffic from an unusual host. This may indicate a compromised IT asset or unauthorized tool.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vendor login outside an approved window:&lt;/strong&gt; remote session outside the ticketed time. This may indicate account abuse.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Protocol crossing the wrong boundary:&lt;/strong&gt; Modbus, DNP3, S7, or similar protocol traffic from the DMZ or enterprise network. This indicates segmentation failure.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Firmware or logic change:&lt;/strong&gt; controller reports updated logic or firmware. This is an integrity event requiring validation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A useful detection statement looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Alert when any non-approved engineering workstation sends write-capable industrial protocol traffic to Level 1 devices outside an approved change window.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is stronger than saying "monitor PLCs."&lt;/p&gt;

&lt;p&gt;It defines the source, destination, behavior, and context.&lt;/p&gt;

&lt;h3&gt;
  
  
  Honeypots and deception
&lt;/h3&gt;

&lt;p&gt;A low-risk deception control can work well in OT if it is carefully isolated.&lt;/p&gt;

&lt;p&gt;For example, a Conpot-style ICS honeypot can sit in a monitored network segment where no legitimate device should communicate with it.&lt;/p&gt;

&lt;p&gt;Rules:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Do not connect the honeypot to the live control path.&lt;/li&gt;
&lt;li&gt;Do not emulate a real production controller name that could confuse operators.&lt;/li&gt;
&lt;li&gt;Alert on any connection attempt.&lt;/li&gt;
&lt;li&gt;Treat interaction as high-confidence reconnaissance or lateral movement.&lt;/li&gt;
&lt;li&gt;Document the honeypot in the asset inventory so internal teams do not mistake it for a real controller.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  6. Assess vulnerabilities without creating an outage
&lt;/h2&gt;

&lt;p&gt;Vulnerability assessment in ICS must follow a safety ladder.&lt;/p&gt;

&lt;p&gt;Do not start with aggressive scanning.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Passive assessment
&lt;/h3&gt;

&lt;p&gt;Start by collecting traffic and configuration data without sending packets to controllers.&lt;/p&gt;

&lt;p&gt;Good sources:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SPAN/TAP packet captures&lt;/li&gt;
&lt;li&gt;Firewall rules&lt;/li&gt;
&lt;li&gt;Switch MAC address tables&lt;/li&gt;
&lt;li&gt;Asset inventory&lt;/li&gt;
&lt;li&gt;Engineering workstation project files&lt;/li&gt;
&lt;li&gt;PLC configuration exports&lt;/li&gt;
&lt;li&gt;Vendor firmware inventories&lt;/li&gt;
&lt;li&gt;Remote access logs&lt;/li&gt;
&lt;li&gt;Historian connection lists&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Output:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Asset list&lt;/li&gt;
&lt;li&gt;Protocol map&lt;/li&gt;
&lt;li&gt;Known vendor/model inventory&lt;/li&gt;
&lt;li&gt;Network flows&lt;/li&gt;
&lt;li&gt;Exposed services&lt;/li&gt;
&lt;li&gt;Unsupported firmware&lt;/li&gt;
&lt;li&gt;Default credential candidates&lt;/li&gt;
&lt;li&gt;Unknown devices&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 2: Configuration review
&lt;/h3&gt;

&lt;p&gt;Review device and network configurations offline.&lt;/p&gt;

&lt;p&gt;Look for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Default credentials&lt;/li&gt;
&lt;li&gt;Shared accounts&lt;/li&gt;
&lt;li&gt;Insecure SNMP communities&lt;/li&gt;
&lt;li&gt;PLC web interfaces enabled without need&lt;/li&gt;
&lt;li&gt;Open RDP/VNC/SSH&lt;/li&gt;
&lt;li&gt;Broad firewall rules&lt;/li&gt;
&lt;li&gt;Any-to-any vendor access&lt;/li&gt;
&lt;li&gt;Unused services&lt;/li&gt;
&lt;li&gt;Lack of time synchronization&lt;/li&gt;
&lt;li&gt;Missing backup evidence&lt;/li&gt;
&lt;li&gt;No logic-change approval trail&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 3: Controlled active testing
&lt;/h3&gt;

&lt;p&gt;Active testing requires written OT approval.&lt;/p&gt;

&lt;p&gt;Minimum conditions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Approved maintenance window or lab environment.&lt;/li&gt;
&lt;li&gt;Named target IPs only.&lt;/li&gt;
&lt;li&gt;Low-rate scanning profile.&lt;/li&gt;
&lt;li&gt;OT engineer present or on bridge.&lt;/li&gt;
&lt;li&gt;Backup and rollback confirmed.&lt;/li&gt;
&lt;li&gt;Safety impact reviewed.&lt;/li&gt;
&lt;li&gt;Stop conditions agreed in advance.&lt;/li&gt;
&lt;li&gt;Test evidence retained.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A cautious discovery command for a single approved test asset might look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Example only: use only for an approved test target and approved window.&lt;/span&gt;
nmap &lt;span class="nt"&gt;-sT&lt;/span&gt; &lt;span class="nt"&gt;-Pn&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; &lt;span class="nt"&gt;--scan-delay&lt;/span&gt; 1s &lt;span class="nt"&gt;--max-retries&lt;/span&gt; 1 &lt;span class="nt"&gt;-p&lt;/span&gt; 22,80,443,502,102,44818 &amp;lt;approved-test-ip&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Do not run broad default IT vulnerability scans against live PLCs or controllers.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4: Penetration testing
&lt;/h3&gt;

&lt;p&gt;ICS penetration testing should start in a lab that mirrors the production configuration.&lt;/p&gt;

&lt;p&gt;For production testing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Scope must be narrow.&lt;/li&gt;
&lt;li&gt;Exploit testing must be explicitly approved.&lt;/li&gt;
&lt;li&gt;Denial-of-service testing should remain in the lab unless there is an exceptional, formally accepted reason.&lt;/li&gt;
&lt;li&gt;Safety and operations must own the stop/go decision.&lt;/li&gt;
&lt;li&gt;Engineering backups must be verified before testing.&lt;/li&gt;
&lt;li&gt;Testers must understand the process impact, not only the protocol.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The point of ICS testing is not to "prove we can break it." It is to validate whether a realistic attack path can affect operations and whether the organization can detect, contain, and recover safely.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. Common configuration failures
&lt;/h2&gt;

&lt;p&gt;Here are the issues I see most often in real OT environments.&lt;/p&gt;

&lt;h3&gt;
  
  
  Common failures and required fixes
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Flat IT/OT network&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Real risk:&lt;/strong&gt; malware or attacker movement from enterprise into control systems.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Required fix:&lt;/strong&gt; segment by Purdue level and process cell; enforce firewall rules.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Dual-homed engineering workstation&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Real risk:&lt;/strong&gt; bypasses the IT/OT boundary.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Required fix:&lt;/strong&gt; remove dual-homing or place a controlled firewall/proxy path between networks.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Direct vendor VPN into OT&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Real risk:&lt;/strong&gt; third-party compromise becomes OT compromise.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Required fix:&lt;/strong&gt; use MFA, jump host, time-bound approval, recording, and named destinations.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;PLC web interface left enabled&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Real risk:&lt;/strong&gt; reconnaissance, credential attack, or controller instability.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Required fix:&lt;/strong&gt; disable unless operationally required; restrict source IPs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Default or shared credentials&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Real risk:&lt;/strong&gt; trivial unauthorized access and no accountability.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Required fix:&lt;/strong&gt; use unique accounts, password vaulting, and MFA where supported.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Unauthenticated write-capable protocols&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Real risk:&lt;/strong&gt; unauthorized process change.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Required fix:&lt;/strong&gt; restrict sources, segment, monitor writes, and upgrade to secure variants where possible.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;No controller logic backup&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Real risk:&lt;/strong&gt; slow or impossible recovery after compromise.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Required fix:&lt;/strong&gt; maintain offline, tested backups and version records.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;No time synchronization&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Real risk:&lt;/strong&gt; logs cannot support investigation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Required fix:&lt;/strong&gt; use a local OT time source and validate clock drift.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;No internal segmentation&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Real risk:&lt;/strong&gt; one compromised HMI exposes the whole plant.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Required fix:&lt;/strong&gt; segment by cell/area and apply least-traffic rules.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;No evidence of change approval&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Real risk:&lt;/strong&gt; cannot prove integrity or accountability.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Required fix:&lt;/strong&gt; use formal OT change records and retain exports/checksums.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  8. Evidence pack for audit and operations
&lt;/h2&gt;

&lt;p&gt;Good OT security leaves evidence.&lt;/p&gt;

&lt;p&gt;For Part 1 controls, keep:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Current network diagrams with trust boundaries.&lt;/li&gt;
&lt;li&gt;Firewall rule exports with owners and business justification.&lt;/li&gt;
&lt;li&gt;Asset inventory with owner, location, role, firmware, and criticality.&lt;/li&gt;
&lt;li&gt;Remote access policy and access logs.&lt;/li&gt;
&lt;li&gt;Vendor access approvals and session records.&lt;/li&gt;
&lt;li&gt;HMI/server hardening baseline.&lt;/li&gt;
&lt;li&gt;PLC/RTU configuration and logic backup evidence.&lt;/li&gt;
&lt;li&gt;SIEM or monitoring ingestion proof.&lt;/li&gt;
&lt;li&gt;Detection catalog mapped to OT use cases.&lt;/li&gt;
&lt;li&gt;Vulnerability assessment scope, approval, results, and remediation plan.&lt;/li&gt;
&lt;li&gt;Exception register with expiry dates and compensating controls.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you cannot produce evidence, the control may exist technically but it is not operationally mature.&lt;/p&gt;




&lt;h2&gt;
  
  
  9. What good looks like
&lt;/h2&gt;

&lt;p&gt;A defensible ICS environment does not need to be perfect. It needs to be controlled.&lt;/p&gt;

&lt;p&gt;Good looks like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You know every critical asset and what process it supports.&lt;/li&gt;
&lt;li&gt;Enterprise users cannot directly reach controllers.&lt;/li&gt;
&lt;li&gt;Vendor access is time-bound, monitored, and approved.&lt;/li&gt;
&lt;li&gt;Engineering workstations are controlled and logged.&lt;/li&gt;
&lt;li&gt;PLC logic changes require approval and leave evidence.&lt;/li&gt;
&lt;li&gt;OT traffic is passively monitored.&lt;/li&gt;
&lt;li&gt;Unauthorized write behavior is detectable.&lt;/li&gt;
&lt;li&gt;Backups are offline and tested.&lt;/li&gt;
&lt;li&gt;Active scanning is controlled and approved.&lt;/li&gt;
&lt;li&gt;Exceptions are visible, owned, and temporary.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is a strong foundation.&lt;/p&gt;

&lt;p&gt;In Part 2, we move from architecture to operations: how to run the program, respond to incidents without causing harm, prepare for large-scale campaigns, use MITRE ATT&amp;amp;CK for ICS, and report risk to leadership.&lt;/p&gt;




&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://csrc.nist.gov/pubs/sp/800/82/r3/final" rel="noopener noreferrer"&gt;NIST SP 800-82 Rev. 3 — Guide to Operational Technology (OT) Security&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.cisa.gov/cross-sector-cybersecurity-performance-goals" rel="noopener noreferrer"&gt;CISA Cross-Sector Cybersecurity Performance Goals&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://attack.mitre.org/matrices/ics/" rel="noopener noreferrer"&gt;MITRE ATT&amp;amp;CK for ICS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.isa.org/standards-and-publications/isa-standards/isa-iec-62443-series-of-standards" rel="noopener noreferrer"&gt;ISA/IEC 62443 Series of Standards&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>cybersecurity</category>
      <category>security</category>
      <category>ics</category>
      <category>iot</category>
    </item>
  </channel>
</rss>
