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

IEC 60870-5-104 - protokół telesterowania w europejskiej energetyce

IEC 60870-5-104 (port 2404) - protokół SCADA w energetyce, brak uwierzytelniania, ataki Industroyer i COSMICENERGY, rekomendacje segmentacji zgodnie z IEC 62443.

IEC 104port 2404SCADAenergetyka
IEC 60870-5-104 - protokół telesterowania w europejskiej energetyce

17 grudnia 2016 roku malware Industroyer wyłączył jedną piątą Kijowa z sieci elektroenergetycznej, wysyłając polecenia otwarcia wyłączników mocy do urządzeń RTU za pośrednictwem protokołu IEC 60870-5-104. Siedem lat później, w maju 2023 roku, Mandiant odkrył COSMICENERGY - malware zdolny do identycznych operacji, prawdopodobnie opracowany jako narzędzie treningowe rosyjskiej firmy cyberbezpieczeństwa. Oba programy wykorzystały tę samą fundamentalną słabość: IEC 104 nie posiada żadnego mechanizmu uwierzytelniania. Każdy host w sieci, który nawiąże połączenie TCP na porcie 2404, może wysyłać polecenia sterujące do stacji elektroenergetycznej.

Czym jest IEC 60870-5-104

IEC 60870-5-104 (w skrócie IEC 104) to międzynarodowy standard komunikacji telesterowania (telecontrol) opracowany przez Międzynarodową Komisję Elektrotechniczną (IEC). Definiuje zasady przesyłania danych między centrum dyspozycyjnym (stacja nadrzędna, controlling station) a urządzeniami terenowymi (stacja kontrolowana, controlled station) - typowo RTU, sterownikami bramkowymi i inteligentnymi urządzeniami elektronicznymi (IED) w stacjach elektroenergetycznych.

Protokół powstał jako adaptacja wcześniejszego standardu IEC 60870-5-101 (komunikacja po łączach szeregowych) do sieci TCP/IP. Zachowuje warstwę aplikacji z IEC 101, dodając transport TCP na porcie 2404. Jest dominującym protokołem SCADA w europejskim sektorze energetycznym, a także w sieciach energetycznych Bliskiego Wschodu, Azji i Ameryki Łacińskiej. Jego północnoamerykańskim odpowiednikiem jest DNP3.

Architektura protokołu

IEC 104 stosuje model klient-serwer: stacja nadrzędna (controlling station) inicjuje połączenie TCP do stacji kontrolowanej (controlled station). Po ustanowieniu połączenia obie strony wymieniają dane w formacie ASDU (Application Service Data Unit).

Struktura ramki APCI

Każda ramka IEC 104 zaczyna się od nagłówka APCI (Application Protocol Control Information):

IEC 60870-5-104 APDU
012345678910111213141516171819202122232425262728293031
Byte 0Byte 1Byte 2Byte 3
Start0x688 bits
APDU Length8 bits
Control Field 116 bits
Control Field 216 bits
ASDU TypeID8 bits
SQ + Number8 bits
COT (Cause)8 bits
Originator8 bits
CASDU16 bits
IOA + Value32 bits
header
control
data
address
© SEQRED International

Sygnatura 0x68 identyfikuje ramkę IEC 104. Control Fields determinują typ ramki (I/S/U) i zawierają numery sekwencyjne.

Typy ramek

Protokół definiuje trzy formaty ramek na warstwie transportowej:

FormatTypFunkcja
I-frame (Information)Dane aplikacjiPrzesyłanie ASDU z danymi procesowymi i poleceniami
S-frame (Supervisory)NadzorczaPotwierdzanie odbioru I-frame (flow control)
U-frame (Unnumbered)SterującaZarządzanie połączeniem: STARTDT, STOPDT, TESTFR

Kluczowe typy ASDU

ASDU to podstawowa jednostka danych w IEC 104. Każda zawiera identyfikator typu (TypeID), przyczynę transmisji (Cause of Transmission, COT) i adres obiektu informacji (IOA). Najważniejsze typy:

TypeIDOpisKierunekRyzyko
M_SP_NA_1 (1)Single-point information (stan binarny)Monitoring (outstation -> master)Niskie
M_ME_NA_1 (9)Measured value, normalizedMonitoringNiskie
M_SP_TB_1 (30)Single-point information z timestampemMonitoringNiskie
C_SC_NA_1 (45)Single command (ON/OFF)Sterowanie (master -> outstation)Krytyczne
C_DC_NA_1 (46)Double command (ON/OFF z potwierdzeniem)SterowanieKrytyczne
C_SE_NA_1 (48)Set-point command, normalizedSterowanieKrytyczne
C_IC_NA_1 (100)Interrogation commandOdczyt stanuŚrednie
C_CS_NA_1 (103)Clock synchronizationSynchronizacja czasuŚrednie

Typy 45, 46 i 48 to polecenia sterujące - mogą otwierać i zamykać wyłączniki mocy, zmieniać nastawy regulatorów i przełączać tryby pracy urządzeń. To właśnie te typy ASDU wykorzystały Industroyer i COSMICENERGY.

Parametry techniczne

ParametrWartość
Port2404/TCP
TransportTCP/IP
UwierzytelnianieBrak
SzyfrowanieBrak
IntegralnośćBrak (poza TCP checksum)
StandardIEC 60870-5-104:2006 + Amendment 1:2016
OrganizacjaIEC TC 57

Ocena bezpieczeństwa

Brak jakichkolwiek mechanizmów bezpieczeństwa

IEC 104 nie posiada uwierzytelniania, szyfrowania ani mechanizmów integralności na poziomie aplikacji. Protokół został zaprojektowany w latach 90. z założeniem, że sieć telekomunikacyjna łącząca centrum dyspozycyjne ze stacjami jest fizycznie odizolowana i zaufana. Dziś, gdy większość komunikacji IEC 104 przechodzi przez sieci IP (często współdzielone z innymi usługami), to założenie jest fałszywe.

Konsekwencje:

  • Każdy host w sieci może nawiązać połączenie TCP na porcie 2404 i wysyłać polecenia sterujące
  • Komunikacja jest przesyłana tekstem jawnym - atakujący w pozycji man-in-the-middle widzi wszystkie dane procesowe i polecenia
  • Brak mechanizmów integralności oznacza, że pakiety mogą być modyfikowane w locie
  • Protokół nie loguje zdarzeń bezpieczeństwa - nie ma mechanizmu wykrywania nieautoryzowanych połączeń

IEC 62351 - zabezpieczenia jako nakładka

Standard IEC 62351 (Security for Power System Communication) definiuje mechanizmy bezpieczeństwa dla protokołów sektora energetycznego, w tym IEC 104. IEC 62351-3 specyfikuje użycie TLS do szyfrowania transportu, a IEC 62351-5 dodaje uwierzytelnianie komunikatów na warstwie aplikacji (Authentication Value w ASDU). W praktyce jednak adopcja IEC 62351 jest minimalna - ze względu na brak wsparcia w starszych RTU/IED, koszty wdrożenia PKI w rozproszonych sieciach energetycznych i obawy operatorów przed wpływem na niezawodność komunikacji.

Ataki wykorzystujące IEC 104

Industroyer/CrashOverride (grudzień 2016) - najbardziej zaawansowany atak na sieć energetyczną w historii. Moduł IEC 104 malware Industroyer działał jako fałszywy klient SCADA:

  1. Nawiązywał połączenie TCP na port 2404 do RTU w stacji “Pivnichna” w Kijowie
  2. Wysyłał prawidłowe sekwencje STARTDT (aktywacja transmisji danych)
  3. Przeprowadzał interrogation command (C_IC_NA_1, TypeID 100) - odczytywał aktualny stan wszystkich obiektów w RTU
  4. Wysyłał polecenia Single Command (C_SC_NA_1, TypeID 45) z wartością OFF do adresów IOA odpowiadających wyłącznikom mocy
  5. Cyklicznie powtarzał polecenia, utrudniając operatorom ręczne przywrócenie zasilania

Z perspektywy RTU polecenia Industroyera były nieodróżnialne od legalnych komend operatora dyspozytorni - protokół IEC 104 nie oferuje mechanizmu weryfikacji źródła komunikatu.

COSMICENERGY (2023) - malware odkryty przez Mandiant, prawdopodobnie opracowany w kontekście rosyjskich ćwiczeń red team. Komponent PIEHOP (napisany w Pythonie) łączył się z serwerem MSSQL pełniącym rolę pośrednika, a komponent LIGHTWORK (C++) wysyłał polecenia IEC 104 do RTU - konkretnie ON/OFF commands (TypeID 45) do zmiany stanu wyłączników. Analiza COSMICENERGY potwierdza, że bariera wejścia dla tworzenia narzędzi atakujących IEC 104 jest niska - wystarczy zrozumienie publicznie dostępnej specyfikacji protokołu.

Industroyer2 (kwiecień 2022) - uproszczona, ale bardziej ukierunkowana wersja Industroyera, wykryta przez CERT-UA i ESET tuż przed planowanym atakiem na ukraińską infrastrukturę energetyczną. Zawierała hardkodowane adresy IP i parametry IEC 104 specyficzne dla atakowanej stacji. Atak został powstrzymany przed fazą wykonania.

MITRE ATT&CK for ICS

TechnikaIDKontekst IEC 104
Unauthorized Command MessageT0855Wysyłanie C_SC_NA_1 / C_DC_NA_1 bez autoryzacji
Manipulation of ControlT0831Otwieranie/zamykanie wyłączników mocy
Point & Tag IdentificationT0861Interrogation command (C_IC_NA_1) do enumeracji IOA
Spoof Reporting MessageT0856Fałszowanie teledanych (M_SP_NA_1) do oszukania operatora
Monitor Process StateT0801Pasywne podsłuchiwanie danych procesowych

Industroyer jest skatalogowany jako S0604, a COSMICENERGY jako S1099 w MITRE ATT&CK for ICS.

Rekomendacje segmentacji i ochrony

TIP

IEC 104 nie oferuje żadnych natywnych mechanizmów bezpieczeństwa - ochrona musi być w 100% realizowana na poziomie architektury sieciowej. W praktyce oznacza to: firewall z DPI między każdą strefą komunikacji IEC 104, szyfrowany transport (TLS/IPsec), pasywny monitoring anomalii i ścisła kontrola dostępu do portu 2404. Organizacje z sektora energetycznego muszą traktować segmentację jako fundament, a nie uzupełnienie bezpieczeństwa. Kompletny przewodnik po modelu stref i korytarzy IEC 62443 znajduje się w artykule Segmentacja sieci OT - strefy i korytarze.

Kluczowe rekomendacje

  1. Szyfruj transport - TLS lub IPsec - każde połączenie IEC 104 między centrum dyspozycyjnym a stacją terenową powinno przechodzić przez szyfrowany tunel. Standard IEC 62351-3 definiuje profil TLS dla IEC 104. Jeśli urządzenia końcowe nie obsługują TLS, zastosuj bramki szyfrujące (crypto gateways) lub tunele IPsec site-to-site.

  2. Filtrowanie DPI na firewallach OT - zastosuj firewalle z inspekcją głęboką pakietów rozumiejące IEC 104. Zdefiniuj reguły na poziomie TypeID: zezwalaj na polecenia sterujące (TypeID 45-48) wyłącznie z autoryzowanych adresów IP stacji nadrzędnej. Blokuj i loguj wszystkie inne próby wysyłania poleceń sterujących. Firewalle z obsługą IEC 104 DPI: Fortinet FortiGate, Palo Alto NGFW (App-ID), StormShield SNi40, RAD SecFlow.

  3. Dedykowana sieć telekomunikacyjna - komunikacja IEC 104 między centrum dyspozycyjnym a stacjami powinna przechodzić przez dedykowaną sieć WAN (MPLS, SDH/SONET) lub - jeśli korzystasz z sieci publicznej - przez szyfrowany overlay (VPN). Nigdy nie eksponuj portu 2404 do internetu.

  4. Monitoring pasywny - wdróż system wykrywania anomalii w ruchu IEC 104 (Dragos, Claroty, Nozomi Networks, Rhebo). System powinien alertować na: polecenia sterujące z nieznanych adresów IP, nietypowe sekwencje TypeID, połączenia z nowych źródeł, zmianę wzorców komunikacji (baseline deviation).

  5. Allowlista połączeń - na firewallu zdefiniuj explicite, które pary adresów IP mogą komunikować się po IEC 104. Każda stacja kontrolowana powinna akceptować połączenia wyłącznie ze swojej stacji nadrzędnej. Redundancja (backup master) wymaga dodania drugiego autoryzowanego adresu - nie otwierania portu dla całej sieci.

  6. Plan migracji do IEC 62351 - dla nowych inwestycji i modernizacji wymagaj od dostawców RTU/IED obsługi IEC 62351 (TLS + uwierzytelnianie komunikatów). Uwzględnij wymagania bezpieczeństwa IEC 104 w specyfikacjach przetargowych - nie jako opcję, lecz jako warunek konieczny.

  7. Synchronizacja czasu - IEC 104 używa timestampów w teledanych (TypeID 30-40). Manipulacja zegarem RTU (przez fałszywy C_CS_NA_1 lub atak na NTP) może zaburzyć kolejność zdarzeń w systemie SCADA i utrudnić analizę incydentów. Stosuj uwierzytelnione źródło czasu (NTP z uwierzytelnianiem lub PTP z profilem IEC 61850-9-3).

Podsumowanie

IEC 60870-5-104 to fundament komunikacji SCADA w europejskiej energetyce - i jednocześnie protokół bez jakichkolwiek natywnych mechanizmów bezpieczeństwa. Industroyer, Industroyer2 i COSMICENERGY udowodniły, że brak uwierzytelniania w IEC 104 to nie teoretyczne ryzyko, lecz aktywnie eksploatowana ścieżka ataku. Ochrona wymaga wielowarstwowego podejścia: segmentacja sieci, szyfrowanie transportu, filtrowanie DPI, pasywny monitoring i docelowo migracja do IEC 62351. Dla organizacji z sektora energetycznego zabezpieczenie komunikacji IEC 104 powinno być absolutnym priorytetem programu cyberbezpieczeństwa OT.

Narzędzia open source

NarzędzieJęzykOpisLink
lib60870CKompletna implementacja IEC 60870-5-101/104 (master i slave) z przykladamiGitHub
c104PythonBiblioteka Pythonowa do komunikacji IEC 60870-5-104PyPI
WiresharkCWbudowany dissektor IEC 104 - analiza ramek I/S/U i typow ASDUWireshark

TIP

lib60870 zawiera gotowe przyklady master i slave - idealne do budowy srodowiska laboratoryjnego, w ktorym mozna testowac reguly firewalla DPI i detekcje anomalii dla polecen IEC 104 (TypeID 45-48).


Źródła:

Omówimy zakres, metodykę i harmonogram.