Chapter 5 — Keeping an asset register
Lesson map
Lesson 05 published. Map, example, EX017.
flowchart TD
N0["Learning outcomes"]
N1["5.1 What to record"]
N2["5.2 Where the data comes from"]
N3["5.3 Reading the result"]
N4["5.4 Keeping it alive"]
N5["5.5 Spares and retired devices"]
N6["Synthesis"]
N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6
N6 --> EX["Worked example"]
EX --> Q["Exercise EX017"]
Logical drawing
flowchart LR
N0["Learning outcomes"]
N1["5.1 What to record"]
N2["5.2 Where the data comes from"]
N3["5.3 Reading the result"]
N4["5.4 Keeping it alive"]
N5["5.5 Spares and retired devices"]
N6["Synthesis"]
N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> Q["EX017"]
[Learning outcomes]
|
v
[5.1 What to record]
|
v
[5.2 Where the data comes from]
|
v
[5.3 Reading the result]
|
v
[5.4 Keeping it alive]
|
v
[5.5 Spares and retired devices]
|
v
[Synthesis]
|
v
[Worked example] --> [Exercise EX017]
Learning outcomes
You will (1) list the fields a useful OT asset register needs; (2) find gaps in a register with a short script; and (3) explain why an incomplete register delays incident response.
5.1 What to record
For every device: identifier, location, zone or VLAN, owner, make and model, firmware version, network address and what it controls. NIST SP 800-82r3 treats inventory as a foundation because every later activity — patching, monitoring, incident response — depends on knowing what exists.
At HPFL the register covers PLC-FILL, PLC-WRAP, HMI-1, VIS-CAM and ENG-LT, and later the IoT sensors. Each field answers a question someone will ask in a hurry: whom to call, which firmware, which address. A missing field is a finding to fix, not a blank to tolerate.
5.2 Where the data comes from
Purchase records, contractor drawings, cabinet labels, the engineering software project and, carried out by the network owner, passive network monitoring. Each source misses something, so they are compared.
"""Lab 5: check a synthetic HPFL asset register for missing owner or firmware fields (no scanning)."""
reg = [
{"id": "PLC-FILL", "zone": "line", "owner": "maintenance", "fw": "3.2"},
{"id": "PLC-WRAP", "zone": "line", "owner": "maintenance", "fw": ""},
{"id": "HMI-1", "zone": "line", "owner": "", "fw": "n/a"},
{"id": "VIS-CAM", "zone": "line", "owner": "quality", "fw": "1.0.7"},
{"id": "ENG-LT", "zone": "office", "owner": "controls", "fw": "n/a"},
]
for r in reg:
gaps = [k for k in ("owner", "fw") if not r[k]]
print(f"{r['id']:9} zone={r['zone']:7} {'OK' if not gaps else 'MISSING ' + ','.join(gaps)}")
print("complete:", sum(1 for r in reg if r["owner"] and r["fw"]), "of", len(reg))
Run with python3 lab_assets.py. Verified output:
PLC-FILL zone=line OK
PLC-WRAP zone=line MISSING fw
HMI-1 zone=line MISSING owner
VIS-CAM zone=line OK
ENG-LT zone=office OK
complete: 3 of 5
At HPFL Tomás used photographs of cabinet labels to fill the missing firmware version for PLC-WRAP. Where two sources disagree, record both and ask the owner which is right. Never fill gaps by probing devices on the line; monitoring is done only by the network owner, passively.
5.3 Reading the result
The script prints which records are incomplete. PLC-WRAP has no firmware recorded, so nobody can tell whether a new advisory applies. HMI-1 has no owner, so nobody would be called if it misbehaved. Three of five records are complete; that ratio is a simple measure to track each month.
The fix for each gap is a question to the right person. Firmware can come from a cabinet label or from the controls engineer's software; ownership comes from the supervisor. Rerunning the script after each answer shows progress, as Tomás's rerun did when all five records became complete.
5.4 Keeping it alive
A register is only useful if it is updated when things change. Tie updates to change tickets: no device is installed, moved or replaced without the record changing in the same ticket.
Add a register check to the change ticket template so it cannot be skipped. Once a month, compare the register with what the network owner's monitoring sees and with a walk-down of cabinets. Any device seen but not registered is reported and added, or removed if nobody can explain it.
5.5 Spares and retired devices
Spare PLCs on a shelf and devices removed from service belong in the register too, marked as spare or retired. A spare loaded with an old program may be installed in a hurry during a breakdown, and a retired HMI thrown in a skip may still hold passwords and network settings.
Before a spare is installed, check that its program matches the verified backup of the device it replaces. Before a retired device leaves the site, wipe it according to the vendor's instructions and record that it was done. Both steps belong in the register entry for that device.
Worked example (synthetic HPFL)
Tomás uses the cabinet photographs from Chapter 2 to read PLC-WRAP's firmware label: 2.0. He asks the supervisor who owns HMI-1; the answer is "operations", so he records it. A rerun of the script now shows five of five complete.
Synthetic case — HPFL. The register and labels are invented.
Errors and limits
Labels can be out of date after a firmware update; confirm through the engineering software with the controls engineer. A register is sensitive: it is a map for attackers too, so store it with access control.
Exercises
- EX017 — Missing fields. Name two fields PLC-WRAP was missing or could be missing that matter during an advisory. Rubric: 3 = firmware version and model/make; 2 = one; 1 = colour or unrelated; 0 = none.
- EX018 — Ratio after fixes. If HMI-1's owner is filled but PLC-WRAP's firmware is still blank, what does the last line print? Rubric: 3 = "complete: 4 of 5"; 2 = 4 without format; 1 = 5; 0 = none.
- EX019 — Linking to change. Propose a rule that keeps the register current. Rubric: 3 = every install/move/replace ticket must update register before closure; 2 = periodic review only; 1 = "be careful"; 0 = none.
- EX020 — Protecting the register. Give one reason the register should not be on a public share. Rubric: 3 = reveals addresses, versions and targets to attackers; 2 = "confidential"; 1 = it's big; 0 = none.
Synthesis
A complete, current, protected register is the base on which every other OT security task stands.
Continue studying — chapter 05 of 18
← Chapter 04 (draft) · Course chapter index · Chapter 06 (draft) →