A PLC on a bottling line drops off the network mid-shift. A hospital infusion pump reboots into a safe-mode screen during a routine credentialed scan. A twelve-year-old label printer stops responding to anything except a power cycle. None of these devices were attacked. They were scanned, with default settings, by a tool that assumes every host on the network has a modern TCP/IP stack and spare CPU cycles to handle it. Fragile devices do not have either, and a vulnerability program that treats them like a rack of Linux servers will eventually take one down.
Why legacy PLCs, printers and embedded hosts crash under normal scan traffic
Most vulnerability scanners were built around assumptions that hold for general-purpose servers: TCP stacks with generous connection tables, enough RAM to buffer malformed packets, and firmware that gets patched often enough to fix parsing bugs. Embedded and OT devices frequently violate all three.
A few concrete failure modes show up over and over in scan post-mortems:
- Connection table exhaustion. Many embedded TCP/IP stacks (lwIP, uIP, vendor-forked variants) ship with a fixed, small number of concurrent connection slots, sometimes fewer than 16. A scanner opening dozens of parallel SYN probes against one host can fill that table and lock out legitimate traffic, including the PLC’s own control-loop communication.
- Malformed-packet parsing bugs. Fuzzing-style plugins and aggressive service-detection probes send packets a real client never would. Devices with minimal input validation on their network stack can panic, reboot, or enter a fault state that a safety PLC is designed to fail into deliberately, stopping the process it controls.
- No spare compute for out-of-band handling. A managed printer’s controller board is sized for print jobs and SNMP polling, not for a full port sweep plus banner grabbing plus vulnerability plugin logic running against it simultaneously. CPU-bound firmware can miss its own watchdog reset window and hang.
- Protocol-specific fragility. Modbus/TCP (port 502), on many older PLCs, has no authentication and limited error handling. A malformed function code or an unexpected exception response can leave the device in an undefined state until it is power-cycled.
- Firmware nobody patches. Medical devices and industrial controllers often run for a decade or more on the firmware version they shipped with, because updates require vendor validation, downtime windows, or biomedical engineering sign-off. Known parsing bugs from years ago are still live.
The failure is rarely dramatic. It is usually a quiet drop from the network, discovered an hour later when someone notices the device is not responding to its own management system.
Safe-check profiles: what actually gets disabled
Every major scanner ships a “safe checks” or equivalent mode, and it is worth knowing exactly what it turns off rather than trusting the label.
- Denial-of-service plugins. Checks that intentionally try to crash a service to confirm a vulnerability (buffer overflow triggers, malformed packet replay) are excluded. These are the plugins most likely to take down an embedded stack, and safe-check mode should remove them entirely, not just flag them as high-risk.
- Aggressive fuzzing and brute-force auth checks. Repeated login attempts against embedded management interfaces can trigger account lockouts or, on devices with a small session table, exhaust available login slots for legitimate operators.
- Full port sweeps. A default 1-65535 TCP scan against a fragile host multiplies the connection-table risk described above. Restrict the port list to what the asset inventory says the device actually exposes (for a PLC: typically 502 for Modbus, 44818 for EtherNet/IP, 102 for S7comm, plus whatever web UI port the vendor uses) rather than scanning the full range.
- Version-detection intensity. Nmap’s
-sVwith a high--version-intensitysends increasingly exotic probes to identify a service. Dropping to intensity 0-2, or skipping version detection on identified OT protocol ports altogether, avoids most of the unusual packets that trip up minimal stacks.
Safe-check mode is not a guarantee. It removes the checks known to be destructive; it does not make every remaining check harmless on every device. Treat it as a floor, not a certification.
Passive and low-touch alternatives for zones you must not probe
Some segments should not be actively scanned at all: legacy safety instrumented systems, life-support equipment, or a production line where the vendor’s warranty explicitly voids on unauthorized network probing. For those, passive and low-touch techniques replace active scanning rather than supplementing it.
- Passive network monitoring. A span port or network tap feeding traffic to a passive fingerprinting tool identifies device types, protocol versions, and sometimes firmware banners purely from traffic already on the wire, no packets sent to the device. This works well on OT protocols like Modbus, DNP3, and BACnet, which reveal function codes and device identification responses in normal operational chatter.
- SNMP read-only polling at low frequency. Many printers, UPS units, and network appliances expose enough via SNMP GET on public community strings (or better, SNMPv3 read-only credentials) to inventory firmware version and model without touching the service ports that cause crashes. Poll intervals of once per day, not once per minute, keep load negligible.
- Vendor asset databases and CMDB cross-reference. For devices with a known asset tag, checking the vendor’s published firmware version against CVE feeds gives a vulnerability picture without any network interaction with the device at all. This is slower to update and misses configuration-specific issues, but it is zero-risk.
- ARP and DHCP lease observation. Simply watching what talks on a VLAN, and correlating MAC OUI prefixes against known OT and IoT vendor ranges, builds a reliable inventory of what is present without a single scan packet.
None of this replaces active testing. It reduces the population of devices that need it and gives an evidence base for deciding which ones are worth the risk of a direct probe.
Rate limiting and serialized scanning for sensitive VLANs
Where active scanning is approved, the settings that matter most are concurrency and timing, not the plugin set.
- Serialize instead of parallelize. Scan sensitive VLANs one host at a time, or in small batches of two to three, rather than the dozens of concurrent hosts a scanner defaults to on a flat corporate network. This keeps aggregate packet volume on the segment low enough that a single switch port or the segment’s own firewall does not become a bottleneck that amplifies latency for control traffic.
- Cap packets per second. Nmap’s
--max-rateand-T2(or the fully manual--scan-delay) throttle probe rate. A useful starting point for a sensitive OT VLAN is 10-20 packets per second per host, well below what would matter to a modern network but well within what a constrained embedded stack can absorb. - Limit parallel connections per host. Most scanners expose a per-host connection cap separately from the overall scan concurrency. Setting this to 1-2 avoids the connection-table exhaustion problem directly, independent of how fast the rest of the scan runs.
- Schedule around the process, not the calendar. A manufacturing line’s low-risk window is a planned changeover or maintenance shutdown, not “after business hours,” because these devices often run continuously regardless of office hours. Align the scan window with the operational calendar, confirmed by the line’s own supervisor, not IT’s default maintenance window.
Scan orchestration that supports per-segment concurrency and timing policy, rather than one global profile for the whole environment, is what makes serialized OT scanning practical at scale. When a platform’s scan scheduling lets a security team pin a specific safe-check profile and rate limit to one VLAN while running full-speed scans everywhere else, the fragile zone stops being the reason the whole program moves slowly.
Pre-scan agreement with OT owners: scope, rollback, and an abort signal
The technical controls above reduce risk. They do not replace an explicit agreement with whoever owns the device, because that person knows failure modes the scanning team cannot see from a network diagram.
A workable pre-scan agreement covers four things in writing, ideally as a short signed form rather than an email thread:
- Exact scope. IP addresses or address ranges, not a subnet description. “The bottling line VLAN” is not scope; “10.40.12.10 through 10.40.12.34, excluding .20 and .21” is.
- Approved check set and rate. Name the specific safe-check profile, port list, and rate limit that will run, and get the owner to confirm they understand what is and is not included. This is also where reduced coverage gets agreed to up front, not discovered afterward.
- Rollback and recovery plan. Who has physical access to power-cycle the device, how long a reboot takes, and what downstream process stops while it is down. If the device is a safety controller, confirm what state it fails into and whether that state is itself safe to sit in for the scan window.
- An abort signal both sides recognize. A phone number that is answered during the scan window, and a clear instruction: if anything looks wrong, call and the scan stops immediately, no debate about whether the scan caused it. Investigating causation happens after the device is confirmed stable, not during.
Getting this agreement signed is slower than just running the scan. It is also the difference between a documented, defensible process and an incident report that starts with “the vulnerability team scanned a live production line without telling anyone.”
Documenting reduced coverage honestly instead of pretending the zone is clean
The temptation after all of this is to let the exclusion quietly disappear from reporting: the OT VLAN was scanned with safe checks, it came back with fewer findings than the corporate network, and nobody asks why. That gap becomes a blind spot exactly where risk is often highest, because these are the devices least likely to be patched.
Honest documentation means recording, per asset or per segment, what was actually tested: which checks ran, which were excluded and why, whether the assessment was active, passive, or firmware-version-only, and the date of the last full active test if one has ever happened. A compliance mapping that shows “PLC-14: passive inventory only, last active scan 14 months ago, DoS and fuzzing checks permanently excluded per OT owner agreement” is a defensible risk statement. A dashboard that shows a green checkmark identical to a fully scanned web server is not, and it will not hold up when an auditor or an incident responder asks what “scanned” meant for that device. Platforms that track per-asset coverage state alongside findings, rather than just findings, make this distinction visible instead of burying it in a scan log nobody rereads.
Reduced coverage is often the correct engineering decision. Pretending it is full coverage is the part that causes damage later.
Putting it together across a mixed environment
A realistic environment has all of this layered: a corporate network that takes full aggressive scans without issue, an OT VLAN that gets serialized safe-check scans during planned windows, and a handful of legacy or medical devices that never get an active probe at all and rely entirely on passive monitoring and firmware-version tracking. Each of these needs a different policy, not one setting applied everywhere. Discovery tooling that can classify a host by type and automatically apply the matching profile, rather than relying on an analyst to remember which subnet is fragile, reduces the chance that a new PLC gets added to a VLAN and picked up by the next unrestricted scan. SITEY’s discovery phase, for example, fingerprints hosts before deciding which checks to run against them, so a newly connected embedded device inherits a conservative profile by default instead of the aggressive one meant for patched servers. That default-to-conservative behavior, applied consistently as the network changes, matters more over a year than any single scan configuration decision made on day one.
About SITEY
SITEY is an autonomous vulnerability management platform. It discovers, validates, prioritizes, remediates and re-tests vulnerabilities through an eight-phase automated pipeline, unifying output from 17 integrated scanners. SITEY is self-hosted: it runs in your own infrastructure and your findings are stored there. Outbound connections are limited to licence activation and the optional services you enable, such as an AI provider, CVE enrichment and patch catalogues. Pricing is 599 USD per month or 5,999 USD for a perpetual lifetime license. See pricing or how the platform works.