BACnet - protokół automatyki budynkowej i jego bezpieczeństwo
BACnet (Building Automation and Control Networks) - architektura protokołu, BACnet/IP vs BACnet/SC, podatności bezpieczeństwa i zasady segmentacji sieci BMS. Encyklopedia protokołów OT.
BACnet (Building Automation and Control Networks) to otwarty protokół komunikacyjny zdefiniowany w normie ASHRAE 135 i ISO 16484-5, stosowany do sterowania i monitorowania systemów automatyki budynkowej - HVAC, oświetlenia, kontroli dostępu, systemów przeciwpożarowych i zarządzania energią. Opracowany w 1995 roku, stał się de facto standardem w inteligentnych budynkach, kampusach korporacyjnych, szpitalach i centrach danych na całym świecie.
Przez dekady automatyka budynkowa funkcjonowała w izolacji od sieci IT. Dziś systemy BMS (Building Management Systems) łączą się z chmurą, dostarczają dane do platform analitycznych i integrują się z systemami zarządzania energią. Ta konwergencja sprawia, że bezpieczeństwo protokołu BACnet staje się realnym wyzwaniem operacyjnym.
Architektura i warianty protokołu
BACnet definiuje model obiektowy - każde urządzenie (sterownik DDC, czujnik, siłownik) eksponuje obiekty (Analog Input, Binary Output, Schedule) z właściwościami, które można odczytywać i zapisywać. Protokół obsługuje kilka warstw transportowych:
| Parametr | BACnet/IP | BACnet/SC | BACnet MS/TP |
|---|---|---|---|
| Warstwa transportowa | UDP/IP | TLS 1.3 over WebSocket | RS-485 (master-slave) |
| Port | UDP 47808 (0xBAC0) | TCP 443 (konfigurowalny) | Brak - warstwa fizyczna |
| Uwierzytelnianie | Brak natywnego | Certyfikaty X.509 | Brak |
| Szyfrowanie | Brak | AES-256-GCM (TLS 1.3) | Brak |
| Zasięg typowy | Sieć kampusowa / WAN | WAN / chmura | Segment lokalny (do 1200 m) |
| Standard od | 1995 (Addendum A) | 2020 (Addendum bj) | 1995 |
BACnet/SC (Secure Connect), wprowadzony jako Addendum bj w 2020 roku, to odpowiedź na brak bezpieczeństwa w klasycznym BACnet/IP. Zamiast broadcastowego UDP, BACnet/SC wykorzystuje połączenia punkt-punkt przez WebSocket z obowiązkowym TLS 1.3 i uwierzytelnianiem certyfikatami X.509. To fundamentalna zmiana - z protokołu otwartego na protokół z kryptograficznym rdzeniem.
Struktura ramki BACnet/IP
Każdy pakiet BACnet/IP składa się z nagłówka BVLC (BACnet Virtual Link Control) i jednostki danych NPDU/APDU:
BVLC Function - typ komunikatu na poziomie transportowym:
| BVLC Function | Wartość | Opis |
|---|---|---|
| Original-Unicast-NPDU | 0x0A | Punkt-punkt - standardowa komunikacja |
| Original-Broadcast-NPDU | 0x0B | Broadcast - discovery (Who-Is) |
| Forwarded-NPDU | 0x04 | Przekazanie przez BBMD (BACnet Broadcast Management Device) |
| Register-Foreign-Device | 0x05 | Rejestracja urządzenia zdalnego |
| Distribute-Broadcast | 0x09 | Dystrybucja broadcastu przez BBMD |
APDU Service Choice - usługi aplikacyjne (najważniejsze z perspektywy bezpieczeństwa):
| Usługa | Typ | Ryzyko | Opis |
|---|---|---|---|
| Who-Is / I-Am | Unconfirmed | Niskie (rekonesans) | Discovery - mapowanie sieci BMS |
| ReadProperty | Confirmed | Niskie | Odczyt wartości obiektu (temperatura, stan) |
| ReadPropertyMultiple | Confirmed | Niskie | Masowy odczyt wielu właściwości |
| WriteProperty | Confirmed | Wysokie | Zmiana wartości nastawy (setpoint), harmonogramu |
| WritePropertyMultiple | Confirmed | Wysokie | Masowa zmiana wielu wartości |
| SubscribeCOV | Confirmed | Niskie | Subskrypcja zmian wartości (Change of Value) |
| ReinitializeDevice | Confirmed | Krytyczne | Restart urządzenia - możliwość DoS |
| DeviceCommunicationControl | Confirmed | Krytyczne | Wyłączenie komunikacji urządzenia |
| CreateObject / DeleteObject | Confirmed | Wysokie | Tworzenie/usuwanie obiektów w konfiguracji |
WARNING
Usługi WriteProperty, ReinitializeDevice i DeviceCommunicationControl w BACnet/IP nie wymagają żadnego uwierzytelniania. Atak polega na wysłaniu jednego pakietu UDP na port 47808. Firewall z DPI powinien blokować te usługi z nieautoryzowanych źródeł i dopuszczać je wyłącznie ze stacji operatorskiej BMS.
Zastosowania w praktyce
Typowa instalacja BACnet obejmuje:
- Sterowniki DDC (Direct Digital Control) - zarządzanie HVAC, oświetleniem, roletami
- Stacje operatorskie BMS - wizualizacja i sterowanie z poziomu GUI
- Bramki integracyjne - BACnet/IP do Modbus, KNX, LonWorks
- Systemy nadrzędne - integracja z platformami IoT, EMS, CAFM
W szpitalach BACnet steruje klimatyzacją sal operacyjnych z precyzyjną kontrolą ciśnienia i temperatury. W centrach danych zarządza chłodzeniem serwerowni, gdzie awaria HVAC może doprowadzić do wyłączenia infrastruktury IT w ciągu minut.
TIP
Jeśli Twoja instalacja BACnet/IP jest dostępna z poziomu sieci korporacyjnej lub - co gorsza - z internetu, traktuj to jako krytyczną podatność. Skanery Shodan regularnie identyfikują tysiące urządzeń BACnet odpowiadających na zapytania Who-Is bez żadnej autoryzacji.
Ocena bezpieczeństwa
BACnet/IP i MS/TP nie oferują żadnych natywnych mechanizmów bezpieczeństwa:
- Brak uwierzytelniania - dowolny host w sieci może wysyłać polecenia WriteProperty do sterowników DDC
- Brak szyfrowania - cała komunikacja przesyłana jest jawnie, w tym wartości nastaw (setpoints) i harmonogramy
- Broadcast discovery - usługa Who-Is/I-Am działa broadcastowo, umożliwiając mapowanie całej infrastruktury BMS
- Brak integralności - pakiety mogą być modyfikowane w locie (man-in-the-middle)
Atakujący, który uzyska dostęp do segmentu sieciowego z BACnet/IP, może zmienić nastawy temperatur w serwerowni, wyłączyć wentylację w budynku lub manipulować harmonogramami systemów przeciwpożarowych - bez żadnego uwierzytelnienia.
BACnet/SC eliminuje większość tych problemów dzięki TLS 1.3 i certyfikatom X.509. Jednak adopcja jest wciąż niska - wymaga wymiany lub aktualizacji firmware kontrolerów, wdrożenia infrastruktury PKI i rekonfiguracji całej instalacji.
Segmentacja i ochrona
Ponieważ większość istniejących instalacji działa na BACnet/IP bez migracji do BACnet/SC w najbliższej przyszłości, segmentacja sieciowa pozostaje podstawowym mechanizmem ochrony.
Zasady segmentacji dla BACnet:
- Izolacja sieci BMS od IT - dedykowany VLAN lub fizycznie oddzielna sieć dla automatyki budynkowej, z firewallem na granicy
- Segmentacja wewnętrzna - osobne podsieci dla HVAC, oświetlenia, kontroli dostępu i systemów przeciwpożarowych
- Kontrola ruchu BACnet/IP - firewall z inspekcją protokołu BACnet (DPI) na granicy stref, zezwalający wyłącznie na niezbędne usługi (Read-Property, Subscribe-COV) i blokujący Write-Property z nieautoryzowanych źródeł
- Ograniczenie broadcastu - filtrowanie pakietów Who-Is na granicach segmentów, aby uniemożliwić mapowanie infrastruktury z sieci IT
- Dostęp zdalny przez jump host - nigdy bezpośredni VPN do segmentu BMS
Szczegółowe wytyczne dotyczące projektowania stref i korytarzy dla sieci OT i BMS opisujemy w artykule o segmentacji sieci OT.
TIP
Przy planowaniu migracji do BACnet/SC pamiętaj, że protokół obsługuje tryb hybrydowy - hub BACnet/SC może komunikować się zarówno z urządzeniami SC, jak i starszymi BACnet/IP w tym samym segmencie. To pozwala na stopniową migrację bez wymiany całej infrastruktury jednocześnie.
Więcej o cyberbezpieczeństwie systemów automatyki budynkowej znajdziesz w naszym artykule o bezpieczeństwie smart building.
Narzędzia open source
| Narzędzie | Język | Opis | Link |
|---|---|---|---|
| BACpypes3 | Python | Kompletna implementacja BACnet/IP w Pythonie - skryptowanie odkrywania i sterowania | GitHub |
| bacnet-stack | C | Biblioteka C z narzędziami CLI: bacwi (Who-Is), bacrp (ReadProperty), bacwp (WriteProperty) | GitHub |
| YABE | C# | Graficzny klient BACnet - przegladanie obiektow, odczyt/zapis wlasciwosci | GitHub |
TIP
bacnet-stack dostarcza gotowe narzędzia CLI do testowania segmentacji: bacwi wysyla broadcast Who-Is (czy firewall blokuje discovery?), bacrp odczytuje wlasciwosci obiektu, a bacwp probuje zapis - pozwala to szybko zweryfikowac, czy reguly DPI blokuja WriteProperty z nieautoryzowanych zrodel.
Źródła
- ASHRAE 135-2020 - BACnet Standard - oficjalna specyfikacja protokołu
- BACnet/SC - Addendum bj - specyfikacja BACnet Secure Connect
- CISA ICS Advisory - BACnet vulnerabilities - doradztwa bezpieczeństwa dla urządzeń BACnet
- NIST SP 800-82 Rev. 3 - Guide to OT Security, w tym segmentacja sieci BMS
- IEC 62443-3-3 - wymagania bezpieczeństwa systemów przemysłowych i budynkowych