Modbus TCP - protokół sterowania przemysłowego bez zabezpieczeń
Modbus TCP (port 502) - opis protokołu, brak uwierzytelniania i szyfrowania, kody funkcji, znane ataki, rekomendacje segmentacji i filtrowania DPI zgodnie z IEC 62443.
Modbus to jeden z najstarszych i najszerzej stosowanych protokołów komunikacyjnych w automatyce przemysłowej. Opracowany w 1979 roku przez firmę Modicon (dziś Schneider Electric) do komunikacji ze sterownikami PLC, przetrwał niemal pół wieku - i nadal działa w milionach instalacji na całym świecie. Wersja TCP/IP, zdefiniowana w specyfikacji Modbus/TCP z 1999 roku, przeniosła ten prosty protokół z łączy szeregowych RS-485 do sieci Ethernet. Wraz z tą migracją pojawiło się fundamentalne zagrożenie: protokół zaprojektowany dla izolowanych sieci szeregowych trafił do środowiska, w którym każdy host w sieci może wysłać do niego polecenie.
Jak działa Modbus TCP
Modbus TCP to protokół typu klient-serwer (master-slave w terminologii szeregowej). Klient (np. system SCADA, HMI) wysyła żądanie do serwera (sterownik PLC, RTU, moduł I/O). Każde żądanie zawiera kod funkcji (Function Code, FC) określający rodzaj operacji i adres danych.
Komunikacja przebiega w modelu request-response: klient wysyła zapytanie, serwer odpowiada danymi lub potwierdzeniem. Nie ma mechanizmu subskrypcji ani powiadomień - klient musi aktywnie odpytywać serwery (polling).
Struktura ramki Modbus TCP (Application Data Unit - ADU):
| Pole | Rozmiar | Opis |
|---|---|---|
| Transaction ID | 2 bajty | Identyfikator transakcji (parowanie żądania z odpowiedzią) |
| Protocol ID | 2 bajty | Zawsze 0x0000 dla Modbus |
| Length | 2 bajty | Długość pozostałej części ramki |
| Unit ID | 1 bajt | Adres urządzenia (1-247), istotny przy bramkach Modbus-serial |
| Function Code | 1 bajt | Kod operacji (1-127) |
| Data | zmienna | Dane żądania/odpowiedzi |
Prostota protokołu to jednocześnie jego największa zaleta (łatwość implementacji, szerokie wsparcie) i największa słabość (brak jakichkolwiek mechanizmów bezpieczeństwa).
Parametry techniczne
| Parametr | Wartość |
|---|---|
| Port | 502/TCP |
| Transport | TCP/IP |
| Uwierzytelnianie | Brak |
| Szyfrowanie | Brak |
| Integralność danych | CRC (tylko warstwa transportowa TCP) |
| Standard | Modbus Application Protocol Specification V1.1b3 |
| Organizacja | Modbus Organization (modbus.org) |
Kody funkcji i ich ryzyko
Każda komenda Modbus zawiera kod funkcji (FC) określający operację. Zrozumienie tych kodów jest kluczowe dla konfiguracji reguł DPI (Deep Packet Inspection) na firewallach OT. Poniższa tabela klasyfikuje najważniejsze kody według poziomu ryzyka - pełna analiza dostępna jest w artykule o zdalnym dostępie do systemów ICS.
| Function Code | Operacja | Ryzyko | Rekomendacja |
|---|---|---|---|
| FC 01-04 | Read Coils / Discrete Inputs / Holding Registers / Input Registers | Niskie | Dozwolone z zaufanych źródeł |
| FC 05-06 | Write Single Coil / Register | Wysokie | Tylko z autoryzowanych stacji inżynierskich |
| FC 15-16 | Write Multiple Coils / Registers | Wysokie | Jak wyżej - zmiana wielu wartości jednym poleceniem |
| FC 08 | Diagnostics (loopback, restart, reset counters) | Średnie | Blokować z sieci niezaufanych |
| FC 43 (0x2B) | Read Device Identification | Średnie | Ujawnia producenta, model, wersję firmware |
Atakujący, który uzyska dostęp do sieci z urządzeniami Modbus, nie potrzebuje żadnych poświadczeń - wystarczy wysłać odpowiedni pakiet TCP na port 502 z prawidłowym kodem funkcji.
Ocena bezpieczeństwa
Brak uwierzytelniania
Modbus TCP nie posiada żadnego mechanizmu uwierzytelniania. Każdy host w sieci, który może nawiązać połączenie TCP na porcie 502, może odczytywać i zapisywać rejestry sterownika. Nie istnieje koncept użytkownika, hasła, certyfikatu ani tokenu. Urządzenie nie ma możliwości odróżnienia legalnego polecenia systemu SCADA od polecenia wysłanego przez atakującego.
Brak szyfrowania
Cała komunikacja odbywa się tekstem jawnym. Narzędzie do przechwytywania ruchu (np. Wireshark z wtyczką Modbus) pozwala odczytać każdy pakiet - w tym wartości rejestrów, stany wyjść cyfrowych i polecenia sterujące. Atakujący w pozycji man-in-the-middle może nie tylko podsłuchiwać, ale też modyfikować pakiety w locie.
Znane ataki i incydenty
Choć Stuxnet - najbardziej znany atak na systemy ICS - nie wykorzystywał Modbus (operował na protokole S7comm Siemensa), to wiele innych ataków i narzędzi ofensywnych bazuje właśnie na Modbusie:
- Sality botnet (2014) - badacze Kyle Wilhoit i Stephen Hilt (Trend Micro) udokumentowali botnet skanujący internet w poszukiwaniu urządzeń Modbus na porcie 502 i aktywnie modyfikujący wartości rejestrów. Atak był w pełni zautomatyzowany.
- CrashOverride/Industroyer (2016) - choć główne moduły operowały na IEC 104 i IEC 61850, architektura modułowa malware pokazała, jak łatwo dodać obsługę kolejnego protokołu OT. Modbus był w zasięgu możliwości atakujących.
- TRITON/TRISIS (2017) - atak na systemy bezpieczeństwa Triconex w instalacji petrochemicznej w Arabii Saudyjskiej. Komunikacja z kontrolerami SIS odbywała się przez protokół TriStation, ale rekonesans w sieci obejmował skanowanie urządzeń Modbus.
- Narzędzia publiczne - Metasploit Framework zawiera moduły do skanowania i eksploitacji Modbus TCP (modbusclient). Narzędzia takie jak smod (Modbus penetration testing framework) czy mbtget umożliwiają odczyt i zapis rejestrów z poziomu wiersza poleceń. Bariera wejścia dla atakującego jest minimalna.
Ekspozycja w internecie
Wyszukiwarki IoT (Shodan, Censys) regularnie identyfikują tysiące urządzeń Modbus dostępnych bezpośrednio z internetu. Według danych Shodan z 2025 roku na porcie 502 odpowiada ponad 9 000 urządzeń - w tym sterowniki PLC, bramki Modbus-serial, systemy BMS i falowniki fotowoltaiczne. Każde z nich jest potencjalnie podatne na nieautoryzowane odczyty i zapisy.
MITRE ATT&CK for ICS
Modbus TCP jest bezpośrednio powiązany z wieloma technikami MITRE ATT&CK for ICS:
| Technika | ID | Opis |
|---|---|---|
| Point & Tag Identification | T0861 | Enumeracja rejestrów i coils urządzenia |
| Manipulation of Control | T0831 | Zapis wartości do rejestrów sterujących |
| Unauthorized Command Message | T0855 | Wysyłanie poleceń bez autoryzacji |
| Monitor Process State | T0801 | Odczyt stanu procesu przez FC 01-04 |
Rekomendacje segmentacji i ochrony
TIP
Segmentacja jest jedynym skutecznym zabezpieczeniem Modbus TCP. Protokół nie oferuje własnych mechanizmów bezpieczeństwa - nie da się go “załatać” ani “zaktualizować do bezpiecznej wersji”. Ochrona musi być realizowana na poziomie architektury sieciowej zgodnie z modelem stref i korytarzy (zones and conduits) IEC 62443. Szczegółowy przewodnik po segmentacji sieci OT znajduje się w artykule Segmentacja sieci OT - strefy i korytarze.
Kluczowe rekomendacje
-
Izolacja segmentu Modbus - urządzenia Modbus TCP powinny znajdować się w dedykowanej strefie sieci OT (VLAN), oddzielonej firewallem przemysłowym od pozostałych segmentów. Port 502 nie powinien być nigdy dostępny z sieci korporacyjnej IT ani z internetu.
-
Filtrowanie DPI na firewallach OT - zastosuj firewalle z inspekcją głęboką pakietów rozumiejące Modbus TCP. Zdefiniuj reguły na poziomie kodów funkcji: zezwalaj na FC 01-04 (odczyt) z systemów SCADA/HMI, blokuj FC 05-06, 15-16 (zapis) z wszystkich źródeł poza autoryzowanymi stacjami inżynierskimi.
-
Monitoring pasywny - wdróż system wykrywania anomalii w sieci OT (np. Nozomi Networks, Claroty, Dragos) pracujący w trybie tap/span port. System powinien alertować na: nietypowe kody funkcji, zapisy do rejestrów z nieznanych adresów IP, skanowanie zakresów rejestrów i zmiany wartości poza ustalonymi progami.
-
Lista dozwolonych połączeń (allowlist) - na firewallu zdefiniuj explicite, które pary adresów IP mogą komunikować się po Modbus TCP. Każde połączenie spoza listy powinno być blokowane i logowane.
-
Rozważ Modbus/TCP Security (RFC draft) - Modbus Organization opublikowała rozszerzenie Modbus/TCP Security, które dodaje TLS do warstwy transportowej (port 802). Wymaga to jednak wsparcia ze strony producenta urządzenia - w praktyce dostępne tylko w najnowszych sterownikach.
-
Eliminuj ekspozycję internetową - regularnie skanuj zewnętrzną powierzchnię ataku organizacji. Port 502 nie powinien być nigdy dostępny z internetu. Dotyczy to również bramek VPN, routerów LTE i urządzeń edge z przekierowaniem portów.
Podsumowanie
Modbus TCP to protokół z 1979 roku, który nigdy nie został zaprojektowany z myślą o bezpieczeństwie. Nie posiada uwierzytelniania, szyfrowania ani mechanizmów integralności. Mimo to pozostaje jednym z najpowszechniejszych protokołów w automatyce przemysłowej - i będzie stosowany jeszcze przez wiele lat. Jedyną skuteczną strategią ochrony jest wielowarstwowa obrona: segmentacja sieci, filtrowanie DPI, monitoring anomalii i ścisła kontrola dostępu na poziomie firewalla. Organizacje planujące modernizację powinny rozważyć migrację krytycznych segmentów do protokołów z wbudowanymi zabezpieczeniami, takich jak OPC UA.
Narzędzia open source
| Narzędzie | Język | Opis | Link |
|---|---|---|---|
| pymodbus | Python | Pełny stack Modbus TCP/RTU/ASCII - klient, serwer, symulator | GitHub |
| mbtget | Perl | Prosty klient CLI do odpytywania Modbus TCP | GitHub |
| mbpoll | C | CLI do pollowania slave’ów RTU/TCP (Linux/Windows/macOS) | GitHub |
| QModMaster | C++/Qt | Graficzny klient Modbus z monitorem magistrali | SourceForge |
| Wireshark | - | Wbudowany dissektor Modbus TCP | wireshark.org |
TIP
Do testów w środowisku laboratoryjnym: pymodbus pozwala na skryptowanie zapytań. Przykład odczytu: client.read_holding_registers(address=0, count=10, slave=1). Do fuzzowania: generuj losowe function codes i adresy, obserwuj reakcję. Nigdy na produkcji.
Źródła:
- Modbus Application Protocol Specification V1.1b3 - Modbus Organization
- NIST SP 800-82 Rev. 3 - Guide to OT Security - NIST, 2023
- IEC 62443 - Industrial communication networks - IT security - IEC
- MITRE ATT&CK for ICS - MITRE Corporation
- Shodan - Industrial Control Systems - dane o ekspozycji urządzeń Modbus
- Modbus/TCP Security Protocol Specification - Modbus Organization, 2018
- Who’s Really Attacking Your ICS Equipment? - Trend Micro, Wilhoit & Hilt, 2014