Skip to content
Encyklopedia protokołów | | 8 min czytania

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 TCPport 502ICSSCADA
Modbus TCP - protokół sterowania przemysłowego bez zabezpieczeń

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):

Modbus TCP ADU
012345678910111213141516171819202122232425262728293031
Byte 0Byte 1Byte 2Byte 3
Transaction ID0x000116 bits
Protocol ID0x000016 bits
Length16 bits
Unit ID8 bits
Function Code8 bits
Data (variable)32 bits
header
address
control
data
© SEQRED International
PoleRozmiarOpis
Transaction ID2 bajtyIdentyfikator transakcji (parowanie żądania z odpowiedzią)
Protocol ID2 bajtyZawsze 0x0000 dla Modbus
Length2 bajtyDługość pozostałej części ramki
Unit ID1 bajtAdres urządzenia (1-247), istotny przy bramkach Modbus-serial
Function Code1 bajtKod operacji (1-127)
DatazmiennaDane żą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

ParametrWartość
Port502/TCP
TransportTCP/IP
UwierzytelnianieBrak
SzyfrowanieBrak
Integralność danychCRC (tylko warstwa transportowa TCP)
StandardModbus Application Protocol Specification V1.1b3
OrganizacjaModbus 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 CodeOperacjaRyzykoRekomendacja
FC 01-04Read Coils / Discrete Inputs / Holding Registers / Input RegistersNiskieDozwolone z zaufanych źródeł
FC 05-06Write Single Coil / RegisterWysokieTylko z autoryzowanych stacji inżynierskich
FC 15-16Write Multiple Coils / RegistersWysokieJak wyżej - zmiana wielu wartości jednym poleceniem
FC 08Diagnostics (loopback, restart, reset counters)ŚrednieBlokować z sieci niezaufanych
FC 43 (0x2B)Read Device IdentificationŚrednieUjawnia 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:

TechnikaIDOpis
Point & Tag IdentificationT0861Enumeracja rejestrów i coils urządzenia
Manipulation of ControlT0831Zapis wartości do rejestrów sterujących
Unauthorized Command MessageT0855Wysyłanie poleceń bez autoryzacji
Monitor Process StateT0801Odczyt 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

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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ędzieJęzykOpisLink
pymodbusPythonPełny stack Modbus TCP/RTU/ASCII - klient, serwer, symulatorGitHub
mbtgetPerlProsty klient CLI do odpytywania Modbus TCPGitHub
mbpollCCLI do pollowania slave’ów RTU/TCP (Linux/Windows/macOS)GitHub
QModMasterC++/QtGraficzny klient Modbus z monitorem magistraliSourceForge
Wireshark-Wbudowany dissektor Modbus TCPwireshark.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:

Omówimy zakres, metodykę i harmonogram.