Building Automation · ASHRAE

BACnet Security: Building Automation Attack Surface

BACnet (Building Automation and Control Network) is the ASHRAE 135 standard for HVAC, lighting control, fire safety, access control, and energy management systems. It operates primarily as BACnet/IP (UDP port 47808) and BACnet MS/TP (RS-485 serial). Building control systems — often dismissed as low-risk — are increasingly targeted because they share networks with IT infrastructure and can provide physical access to facilities.

BACnet Object Model

BACnet uses an object-oriented data model. Every controllable element is a BACnet object with properties. Key services allow reading and writing these objects:

ServiceDirectionSecurity Risk
ReadPropertyClient → ServerDiscloses device configuration, setpoints, states
WritePropertyClient → ServerModifies setpoints, enables/disables equipment
Who-Is / I-AmBroadcastDevice discovery — maps all BACnet devices on a network
ReinitializeDeviceClient → ServerReboot or factory-reset BACnet devices
WritePropertyMultipleClient → ServerMass configuration change in a single request

A Who-Is broadcast on UDP 47808 returns I-Am responses from every BACnet device on the subnet — a complete device inventory with no authentication required. ReadProperty and WriteProperty services in base BACnet/IP also require no credentials.

Security Vulnerabilities

BACnet/SC (Secure Connect, 2020)

ASHRAE 135-2020 Addendum bj introduced BACnet/SC — a WebSocket-based transport with TLS 1.3 and X.509 certificate authentication. BACnet/SC uses a hub-and-spoke topology with a central BACnet/SC Hub. Every device authenticates with an Operational Certificate before establishing a connection. The Hub validates certificates and maintains routing tables.

Adoption is early. Most deployed BACnet controllers (pre-2022) do not support BACnet/SC and will require hardware replacement. Transition will take a decade or more in most building portfolios.

Defences

ControlSREffect
BACnet/SC with TLS 1.3SR 3.1, SR 4.1Authenticated, encrypted BACnet sessions
VLAN isolation for BASSR 5.1BACnet devices on dedicated VLAN, no IT→BAS path
Block UDP 47808 at perimeterSR 5.2Prevent BACnet broadcasts from reaching IT network
Disable unused servicesSR 7.7Disable ReinitializeDevice, remove default credentials
⚡ Explore BACnet in ICSora Labs

Examine BACnet object model, Who-Is discovery, and WriteProperty attack in the interactive building automation security lab.

Open BACnet Protocol Lab →