OT and Network Forensics

OT and network forensics is where BulletproofSoft’s security engineering meets the operational-technology world our sister practice works in every day. Most security firms can read a packet capture. Far fewer can tell you what a malformed BACnet broadcast storm is doing to a building, or read Modbus, S7comm, and DNP3 alongside TLS and DNS in the same investigation. That overlap is the point of this practice.

Authorized Engagements Only

Everything described on this page is for authorized security assessment, incident response, and network diagnostics on systems you own or are contracted to examine. Capture analysis surfaces credentials, authentication material, and transferred files — which is precisely why it is engagement-scoped work with defined authorization, handling rules, and evidence controls. We do not perform, support, or advise on unauthorized interception.

Passive OT and ICS Analysis

Industrial and building networks are the one environment where the usual security toolkit can cause the incident. Active scanning and packet injection can disrupt controllers that were never designed to tolerate it. So our OT analysis workstation, LUVA Studio, is deliberately passive and offline: it reads stored captures. It does not sniff live traffic, inject packets, actively scan devices, or interact with the plant network in any way.

From a stored capture it produces asset inventories, protocol participation, communication flows, topology maps, findings, and report-ready output — across the protocols that actually run plants and buildings:

  • Building automation — BACnet/IP, MQTT, SNMP
  • Industrial control — Modbus/TCP, S7comm, DNP3, EtherNet/IP, IEC 60870-5-104
  • Vendor protocols — Omron FINS, GE SRTP
  • Process and telemetry — OPC UA

For a plant or facilities team, “we will never touch your control network” is not a limitation — it is the reason the assessment can happen at all.

BACnet and Network Integrity Diagnostics

A building network rarely fails loudly. It degrades — a duplicate device ID here, a misconfigured BBMD there, retries climbing until operators start describing the system as “slow.” Our BACnet and network integrity analysis targets exactly those conditions:

  • Duplicate BACnet device IDs and address conflicts
  • Excessive broadcast traffic and broadcast storms
  • Timeouts, retries, and slow response times
  • Router and BBMD misconfiguration
  • Device instability and intermittent dropouts
  • Segmentation and packet errors
  • Communication loops

Status: working prototype, actively refined. We use it in engagements and continue to develop it; we are not selling it as a finished product.

This is also where the family connection earns its keep. When a diagnosis points at station configuration rather than the network itself, SoftwarePile’s Niagara engineers can act on it — and the protocol integration work that produced the network is the same discipline used to read it.

Packet Forensics and Incident Response Tooling

For IT-side investigation we maintain a set of analyst workspaces built on established open-source forensic engines — BruteShark, PCredz, Scapy, PcapXray, and Wireshark. The engines do the parsing; our contribution is the working environment around them: case persistence, project files, structured reporting, evidence export, and the workflow an analyst actually needs during an investigation.

  • Session and protocol reconstruction — rebuild conversations, carve transferred files, map endpoints.
  • Authentication evidence — credential and hash extraction for authorized review, with sensitive values masked in reporting.
  • Threat indicators — DNS analysis and exfiltration patterns, TLS and SSH fingerprinting (JA3/JA3S), suspicious traffic and potential command-and-control behaviour.
  • Topology and asset mapping — device inventories, communication summaries, and interactive network diagrams from offline captures.
  • Case handling — project workspaces, analyst notes, timelines, statistics, audit logs, and HTML/CSV/JSON evidence export.

One workspace — our Windows forensics suite — also carries BACnet analysis alongside the conventional IT protocols, which is unusual and genuinely useful when an investigation crosses from the corporate network into the building systems attached to it.

Unified Building-Automation Diagnostics

We are consolidating this work into a single diagnostics workstation that combines packet inspection with guided analysis for BACnet, Fox, Modbus, MQTT, and general IP networking — capture import, asset discovery, network-health analysis, duplicate-address and broadcast detection, traffic baselining, conversation maps, protocol-specific issue detection, and case reporting, with AI-assisted interpretation of what the capture is showing.

Status: working prototype. It is an active build that will absorb parts of the separate tools above. We would rather describe it accurately now than imply a finished platform.

Who This Is For

Facilities and plant teams who need a security or performance assessment of a control network without anything being probed or disturbed. Systems integrators diagnosing a building network that has become unreliable. Security teams whose incident crosses into OT and who need someone fluent in both BACnet and TLS. And organisations that need the findings written up as evidence, not as a screenshot.

If AI is part of the environment being assessed, our AI and MCP security practice covers that boundary, and prompt injection is the failure mode we test for most often.

Tell us what you need examined — and what must not be touched while we do it. We will scope the engagement, confirm authorization, and tell you honestly what a passive analysis can and cannot determine.

Related services

What a Usable Capture Has to Contain

The capture point decides what exists in the file, and no amount of analysis recovers what was never recorded. A network TAP copies the link itself and is not subject to the switch's forwarding load, although an aggregating TAP that merges both directions of a busy full-duplex link into a single output can still oversubscribe that output. A switch mirror, SPAN, or monitor session is a software function competing with forwarding: mirroring several gigabit ports into one gigabit destination discards frames once the summed load exceeds line rate. Many switches expose mirror drop counters, but those drops leave no trace in the capture file itself, so an analyst reading only the file sees a conversation that looks intact and is not.

What the capture point can see is a separate constraint from whether it keeps up. On a switched network, a mirror of a single access port carries that device's traffic and nothing else. Broadcast and multicast are flooded within the VLAN and turn up almost anywhere in it, which is why BACnet Who-Is and I-Am exchanges survive a poorly chosen capture point while a unicast Modbus/TCP poll between two devices on a different switch is simply absent. Traffic between VLANs exists only where it is routed, so the router or firewall interface is the capture point that sees it.

Two capture settings decide what analysis is possible later. A snaplen truncates each frame to a fixed number of bytes, which is enough for flow, topology, and header-level protocol work and destroys payload decode and file carving; captures configured for long unattended runs are the ones most likely to have it set. Duration works the same way: a fault that occurs twice a day is unlikely to appear in a five minute capture, and the window has to be long enough to contain the event rather than long enough to feel thorough.

  • A mirror session configured in one direction only yields half of every conversation, which reads as unanswered requests rather than as a capture problem.
  • A ring buffer bounds disk use by overwriting the oldest files, so an unattended capture waiting on an intermittent fault needs enough total space that the event is still on disk when someone goes looking for it.
  • Capture-time BPF filters are irreversible. Where disk allows, capture unfiltered and filter during analysis.
  • Some NIC drivers strip 802.1Q tags before the capture library sees them. If VLAN membership is part of the question, a short test capture confirms whether tags are present.
  • Promiscuous mode has to actually be in effect. Virtualized capture hosts and vSwitch port groups commonly reject it by default, and the resulting file contains only traffic addressed to the capture host plus broadcast.
  • Which switch and port the file came from, and what was connected to it, are worth recording at capture time, because nothing in the file identifies the capture point.

Ports, Filters, and What They Quietly Exclude

A capture taken "for BACnet" is often taken with a filter naming one port, and that filter settles the investigation before anyone opens the file. Most of these protocols occupy more ports than their headline number, and several of the conditions worth finding live on the ports that got excluded.

The opposite failure is the correct port with the wrong assumption about what a port identifies. A dissector decodes traffic on a well-known port as that protocol by default, so a device configured on a nonstandard port is not decoded at all until an analyst forces it with Wireshark's Decode As, and unrelated traffic that happens to use a reserved port gets decoded as the protocol and produces malformed-packet noise that reads convincingly like a device fault.

Address identity is a related trap. An IP address is not a device identity in several of these protocols: a Modbus/TCP gateway fronting serial devices presents one IP for many devices, and the MBAP unit identifier is the field that separates them. In BACnet, devices are identified by network number and device instance, and an MS/TP device behind a BACnet router never appears with an IP address of its own. Asset inventories built from IP addresses alone undercount exactly the sites that lean hardest on gateways.

  • BACnet/IP: UDP 47808 (0xBAC0), with additional networks commonly configured on 47809 through 47823. BBMD traffic arrives on those same ports as Forwarded-NPDU rather than as a plain broadcast.
  • Modbus/TCP: TCP 502.
  • S7comm: TCP 102, carried over ISO-on-TCP (RFC 1006) with TPKT and COTP beneath it. S7comm-plus on newer controllers uses the same port with a different protocol above it.
  • DNP3: TCP or UDP 20000.
  • IEC 60870-5-104: TCP 2404.
  • EtherNet/IP: explicit messaging on TCP 44818, implicit Class 1 I/O on UDP 2222, multicast or unicast at a fixed requested packet interval. A filter that keeps only 44818 removes the control traffic and keeps the configuration chatter.
  • OPC UA: TCP 4840 for the opc.tcp binary transport, with HTTPS-based transports on other ports.
  • MQTT: TCP 1883 in the clear, 8883 over TLS.
  • SNMP: UDP 161 for polling and 162 for traps. Traps are the unsolicited ones, and the ones a polling-shaped filter drops.
  • Omron FINS: UDP 9600, with the TCP variant on the same number.
  • GE SRTP: TCP 18245.

What a Passive Capture Cannot Tell You

Encryption bounds what a capture yields, and the bound is not uniform. OPC UA offers three security modes: None leaves the payload readable, SignAndEncrypt hides it, and Sign signs each message without encrypting it, so the payload remains readable and only integrity is guaranteed. MQTT on 8883 and HTTPS management interfaces hide payload outright. What survives encryption is metadata: which endpoints talk, when, how often, in what volume, and which certificates and cipher suites were offered during the handshake. That is enough to build topology and notice a new talker, and not enough to reconstruct a transaction.

A capture contains only what crossed the wire during the window. Changes made at a controller's front panel, over a serial console, from a USB stick, or from an engineering laptop plugged into a service port leave nothing in a network capture. Modbus RTU and BACnet MS/TP traffic on RS-485 is invisible for the same reason; only the gateway's IP-side conversations exist as packets.

Some things look measurable from the file and are not. A packet's timestamp is the capture host's timestamp, so latency read from a capture is the round trip as observed at the capture point, and delay added downstream of the mirror gets attributed to a controller that did not cause it. Devices that were powered off, unplugged, or simply idle during the window do not appear at all, which makes an inventory built from a capture a lower bound on what is on the network rather than a census.

Handling a Capture as Evidence

A capture is an ordinary file, and almost everything that makes one hold up as evidence is procedural rather than technical. Standard forensic practice is to hash each file as received, keep the received copy untouched, and work from copies, so that the file examined can be shown to be the file that was handed over. Rotated captures are hashed per file rather than only after a merge, because merging produces different bytes than the set it came from.

Format matters more than it appears to. Classic pcap stores one link type for the whole file, microsecond or nanosecond timestamps depending on the magic number, and no place for interface or capture-host metadata. pcapng stores multiple interfaces in a single file, per-interface link types and timestamp resolution, comments attached to individual packets, and a section header block recording the capture host and application. Converting pcapng to pcap discards all of that permanently, which is why the conversion done for a tool that cannot read pcapng is done on a copy.

Packet timestamps are stored as an offset from the Unix epoch, which is UTC; the local time shown is the reading program's interpretation using its own time zone. Two captures taken at different sites and lined up by wall clock are off by whatever the two capture hosts' clocks were off by, and nothing in either file discloses that offset. Any timeline built from packets is therefore anchored to a clock whose synchronization is known, or stated with the uncertainty attached.

Choosing This or an Adjacent Engagement

What separates capture analysis from an assessment is the object of study, not the timing. An OT and ICS security assessment examines architecture, segmentation, remote access paths, and device and firewall configuration, which are facts about how the network is built and remain true whether or not any traffic was ever recorded. Capture analysis examines one recorded window and can report only what was observable inside it. A site asking whether its remote access is exposed is asking a configuration question; a site asking what was actually talking last Tuesday afternoon is asking a capture question.

Continuous detection is a third category. A site that wants an alert when a new device appears or a controller is written to needs a monitoring system deployed on the network and evaluating traffic as it arrives; capture analysis is a bounded look at a recorded window and does not become continuous by being repeated.

Some problems are cheaper to settle without forensics at all. When a symptom is reproducible on demand, a controller's own diagnostics, a switch's interface error counters, and the vendor's engineering tool usually identify it faster than a capture will. Capture analysis earns its place when the problem is intermittent, when the question is what happened rather than what is happening, or when the answer has to survive being disputed.

Frequently Asked Questions

Who actually takes the capture?

Whoever holds administrative access to the switching, or can put a TAP on the link, is the only party able to produce the file, which at most sites is the network team or the integrator who maintains the switches. The decisions worth settling before anyone touches a switch are which link, which direction, how long, and what may be collected. That last one is a scope question rather than a technical one: a mirror on a shared uplink records everything crossing it, including systems, tenants, and third-party equipment outside the engagement, so the choice of capture point determines whose traffic ends up in the file.

What do we have to provide?

The capture file and the question it is meant to answer, stated as something checkable, such as whether a named controller loses communication with a specific supervisory device and on which side the timeouts originate. Whatever record exists of when the problem was observed helps more than most site documentation does. A device list, a network diagram, or the switch configuration narrow the work but are not prerequisites, since an inventory can be built from the capture and compared against the site's own list; the disagreements between the two are usually the part worth reading. Authorization has to come from whoever owns the systems whose traffic is on the link, which at a multi-tenant or vendor-shared site is more than one party.

Does anything get installed on our systems?

No. There is no agent, collector, or appliance that goes onto controllers, servers, or workstations, and the change-control item is the capture itself rather than a software deployment. A mirror session is a switch configuration change that does not interrupt the link being mirrored, though it consumes switch resources and many platforms allow only a small number of concurrent sessions. Inserting a TAP does break the link briefly unless the cabling is already broken out, so it is normally scheduled into a window.

How large does a capture get, and what limits the length of the window?

Volume follows average throughput directly: a link averaging 10 Mbit/s writes roughly 4.5 GB per hour, a bit over 100 GB per day, while a quieter segment averaging 1 Mbit/s writes about 450 MB per hour. The practical ceiling on window length is disk at the capture host, not the analysis side. On the analysis side, operations that hold state across the whole file, such as TCP reassembly, conversation tracking, and file carving, consume memory in proportion to the number of concurrent conversations rather than to file size, so a large but repetitive industrial capture is often easier to work than a smaller and busier IT one.

What does an asset inventory built from a capture actually identify?

Reliably: MAC address and the vendor implied by its OUI, IP address, the protocols each device spoke, and the role it played in them, such as Modbus client versus server or DNP3 master versus outstation. Model, firmware revision, and serial number appear only if some device asked for them during the window and got an answer, through a BACnet ReadProperty of Object_Name or Vendor_Identifier, an EtherNet/IP Identity Object response, or an SNMP sysDescr read. A device that only listens, or that nobody interrogated while the capture ran, is identified by little more than its addresses and its traffic pattern.

How do you tell whether traffic was absent or the capture point could not see it?

By checking what should have been visible regardless. Broadcast traffic is flooded through the VLAN, so if a device's ARP requests or BACnet I-Am announcements are in the file but no unicast conversation with it is, the capture point sits on the wrong side of the switch fabric and the conversation exists somewhere the capture did not reach. If neither the broadcasts nor the unicast traffic appear, the device was silent, off, or on another VLAN. That distinction matters because absence in a capture is not evidence of absence on the network, and when the capture point missed the traffic the honest output is a second capture with a different point or a longer window, not an interpretation of the first.