3,000 permits were derived from plant-floor flows and no integrator will state intent - how do you find owners before you bless an intruder's path?
answer
- 'do you still need this' always returns yes
- ask what only an owner can answer
- own assets, and flows inherit owners
- cluster 3,000 lines into a few patterns
- three buckets, and the residue gets a named owner
basics
~20 sStop asking whether a flow is needed - the answer is always yes. Attribute assets rather than flows, collapse permits into repeated patterns, spend effort on boundary-crossing ones, and register the unattributable residue with a named owner.
solid answer
~50 sThree moves make this tractable. First, change the question: "do you still need this?" gets a defensive yes from everyone, so ask what only a real owner can answer - which application produces it, in which direction, what stops if it stops, what change introduced it. Second, attribute assets, not flows: get an owner per endpoint from the asset register, the maintenance contract or the switch port, and flows inherit a candidate owner. Third, cluster: 3,000 permits usually collapse to a few dozen patterns - historian polling, MES queries, workstation to controller, backups, name and time services - so you attribute a pattern once. Then rank by boundary, spending the campaign on what enters the control zone and what traverses remote-access paths. The residue is neither deleted blind nor permitted blind: narrow it to one host pair, port and direction, and register it with an accountable owner.
go deeper
Know that a derived allow-list is not finished when it is generated - each permit still needs a person who can say what it is for, and most will not have one.
Explain why yes/no questions fail here and what a question only a true owner can answer looks like, plus how clustering reduces the workload.
Demonstrate the whole campaign: asset-level ownership, clustering, boundary-based ranking, and a three-bucket residue process that narrows rather than deletes.
Frame the finite budget and the escalation: attribution effort is bought, it will not reach full coverage, and the unattributable residue must be a named, accepted risk in the plant's own register.
## Why the naive campaign fails The engineer running this is not short of data - they have 3,000 derived permits. They are short of *people who will make a statement*. The default approach, mailing each team a list and asking "is this still needed?", fails for a structural reason: the recipient bears all the downside of a wrong "no" (a stopped production line, a shouting production manager) and none of the downside of a wrong "yes" (an unexplained permit, which harms nobody visibly). Everyone rationally answers yes to everything. On an industrial estate it is worse still: the integrator who commissioned the line has moved on, the contract never required an interface specification, and the support agreement obliges nobody to explain a flow. ## Ask a question only an owner can answer Replace the yes/no with questions that cannot be bluffed: - Which application or function produces this? - Which side initiates, and how often? - What stops working if it stops - and how would you notice? - What change or commissioning activity introduced it? A real owner answers in a sentence. A non-owner cannot answer at all, and that silence is itself the data you needed: it tells you the flow is unattributable and should be routed to the residue process rather than left in limbo. ## Attribute assets first, flows second A flow has two ends and no owner. An asset can have exactly one. Build ownership at the endpoint level from whatever the plant actually has - asset register, maintenance contract, purchase order, the switch port and the cabinet it lands in, the person whose name is on the panel. Once each endpoint has a candidate owner, every flow has two candidate owners and the campaign has an addressee instead of a mailing list. It also gives you an escalation path that works: the production owner, not the security engineer, is the one who can weigh outage risk against permit risk. ## Collapse before you canvass Do not attribute 3,000 lines. Cluster them by role and shape and you typically find a few dozen repeated patterns: historian polling controllers on a fieldbus-over-TCP port, MES querying the historian, engineering workstations reaching controllers, backup and file transfer, name and time services, remote-access paths in from outside the zone. Attribute the *pattern* once with the person who owns the function, and the member lines inherit that intent. What remains after clustering is the interesting part: the flows that fit no pattern, which is exactly the set worth an hour each. ## Rank by boundary, not by count Attribution is expensive human time and it is finite. Spend it where a learned intruder path would be: - flows entering the control zone from anywhere else, - flows on remote-access and vendor-support paths, - flows leaving the plant zone toward general IT or outward, - flows between hosts that have no functional reason to share a pattern. Intra-zone chatter between two controllers on the same line is the cheapest thing in the building to leave broad. The permit that matters is the one that crosses the line you drew. ## Handle the residue honestly - three buckets, not two 1. **Attributed and intended.** Keep, with the owner recorded against it. This is the only category that has actually been checked. 2. **Attributed and unintended.** An owner said "that should not exist". Remove it with their sign-off - and note that this is the only place a derived list ever shrinks. 3. **Unattributable.** Nobody will state intent. Do not delete it blind (you will stop production and lose the mandate for the whole programme) and do not keep it silently (that is how the intruder's line became permanent). Narrow it instead: one host pair rather than a subnet, one port rather than a range, one direction rather than both, and where the flow is genuinely periodic, restricted to the maintenance window it actually runs in. Then record it on a register whose entry reads honestly - *this permit exists because it was observed and nobody can say why* - with a named accountable person who is the asset owner, not you. That register is the deliverable that makes the project defensible. It converts a silent assumption into a listed, owned risk, and it is what a later reviewer needs in order to act. ## What you tell the sponsor about cost Say it in advance: this is weeks of engineer and plant-team time, and it will not reach 100%. A campaign that attributes the boundary-crossing flows and honestly registers the rest is a success. A campaign that promises full attribution will stall, and the derived list will be enforced unread - which is the outcome the whole exercise existed to prevent.
- A plant team refuses to sign anything at all. What do you do with their flows?Escalate to the accountable production owner rather than the team, because the decision is outage risk against permit risk and that is their trade to make, not the team's. Meanwhile narrow the flows to the tightest form that still works - single host pair, single port, one direction - and register them as accepted with the production owner's name on the entry. Silence from a team is a finding to record, not a reason to keep a broad permit.
- How do you avoid the campaign being read as the security team trying to break the plant?Lead with narrowing rather than deletion, agree that nothing changes without the production owner's approval, and show the clustering work so teams see a few dozen questions rather than 3,000. It also helps to name what you will not touch - intra-line chatter stays broad - so the effort visibly concentrates on paths in and out of the zone.
saying these in an interview costs you the question
- Mails teams a raw list and asks if flows are still needed
- Deletes unexplained permits to force discovery on a production line
- Attributes every one of the three thousand lines individually
- Leaves unattributable flows permitted with no register entry
- Takes the security engineer as the owner of the residual risk