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

DNP3 - protokół telekomunikacyjny dla energetyki i infrastruktury krytycznej

DNP3 (port 20000) - protokół SCADA dla energetyki i gospodarki wodnej. Secure Authentication v5 (HMAC), IEEE 1815, znane ataki, segmentacja sieci OT.

DNP3port 20000SCADAenergetyka
DNP3 - protokół telekomunikacyjny dla energetyki i infrastruktury krytycznej

DNP3 (Distributed Network Protocol 3) to protokół komunikacyjny zaprojektowany specjalnie dla systemów SCADA w sektorze energetycznym, wodociągowym i gazowym. Opracowany w 1993 roku przez firmę Westronic (obecnie GE Grid Solutions) na bazie standardu IEC 60870-5, stał się dominującym protokołem telekomunikacyjnym w Ameryce Północnej, Australii i części Azji. W Europie jego odpowiednikiem jest IEC 60870-5-104 - oba protokoły pełnią tę samą funkcję (komunikacja SCADA master-outstation), ale DNP3 oferuje bogatszy zestaw funkcji i - co kluczowe - opcjonalny mechanizm uwierzytelniania, którego IEC 104 nie posiada.

Jak działa DNP3

DNP3 realizuje komunikację między centrum dyspozycyjnym (master station) a urządzeniami terenowymi (outstation) - typowo RTU (Remote Terminal Units), sterownikami PLC i inteligentnymi urządzeniami elektronicznymi (IED). Protokół obsługuje:

  • Teledane (monitoring) - RTU raportuje stany binarne (wyłączniki, sygnalizacja), wartości analogowe (napięcie, prąd, temperatura), liczniki (energia) i zdarzenia z timestampem
  • Telekomody (sterowanie) - master wysyła polecenia otwarcia/zamknięcia wyłączników, zmiany nastaw regulatorów, przełączania trybów pracy
  • Transfer plików - przesyłanie plików konfiguracyjnych, logów i firmware do urządzeń terenowych
  • Unsolicited responses - outstation może samodzielnie raportować zdarzenia bez odpytywania (event-driven), co redukuje ruch w sieci i skraca czas reakcji

Architektura warstwowa

DNP3 stosuje model trzywarstwowy (Enhanced Performance Architecture - EPA):

WarstwaFunkcja
Application LayerObiekty danych (Binary Input, Analog Output, Counter…), fragmentacja, kody funkcji
Transport LayerSegmentacja i składanie fragmentów, numeracja sekwencyjna
Data Link LayerAdresowanie (źródło/cel, 16-bit), CRC-16 per blok 16 bajtów, potwierdzenia

W wariancie DNP3-over-TCP (najczęściej stosowanym we współczesnych sieciach) warstwy DNP3 są enkapsulowane w TCP/IP na porcie 20000.

DNP3 Data Link Frame
012345678910111213141516171819202122232425262728293031
Byte 0Byte 1Byte 2Byte 3
Start0x058 bits
Start0x648 bits
Length8 bits
Control8 bits
Destination16 bits
Source16 bits
CRC-1616 bits
Data Block (16 bytes)16 bits
CRC-1616 bits
Data Block...16 bits
header
control
address
checksum
data
© SEQRED International

Sygnatura 0x0564 pozwala na identyfikację DNP3 w ruchu sieciowym. CRC-16 jest obliczany per blok 16 bajtów (nie per ramka) - to unikalna cecha DNP3 zapewniająca integralność na poziomie warstwy łącza.

Kody funkcji Application Layer

Function CodeNazwaRyzykoOpis
0x01ReadNiskieOdczyt obiektów danych (stany, pomiary)
0x02WriteWysokieZapis do obiektów - zmiana nastaw
0x03SelectWysokieWybór polecenia sterującego (SBO - Select Before Operate)
0x04OperateKrytyczneWykonanie wybranego polecenia (otwarcie/zamknięcie wyłącznika)
0x05Direct OperateKrytyczneBezpośrednie wykonanie bez Select (jeśli dozwolone)
0x06Direct Operate No AckKrytyczneJak wyżej, bez potwierdzenia - brak śladu w logach
0x0DCold RestartKrytyczneRestart urządzenia
0x0EWarm RestartWysokieRestart aplikacji bez restartu sprzętu
0x81Response-Odpowiedź outstations na żądanie master
0x82Unsolicited Response-Spontaniczne raportowanie zdarzeń

WARNING

Tryb SBO (Select Before Operate) wymaga dwóch kroków (FC 0x03 + FC 0x04), co daje okno detekcji między wyborem a wykonaniem polecenia. Direct Operate (FC 0x05) i Direct Operate No Ack (FC 0x06) pomijają ten mechanizm. Jeśli konfiguracja urządzenia dopuszcza Direct Operate - atakujący może wydać polecenie sterujące jednym pakietem.

Parametry techniczne

ParametrWartość
Port20000/TCP (DNP3-over-TCP), 20000/UDP (opcjonalnie)
TransportTCP/IP lub łącza szeregowe (RS-232, RS-485)
UwierzytelnianieBrak (standardowy DNP3), HMAC-SHA-256 (Secure Authentication v5)
SzyfrowanieBrak (natywnie), TLS jako warstwa transportowa (DNP3-SA v5 rekomenduje)
IntegralnośćCRC-16 na warstwie Data Link, HMAC na warstwie aplikacji (SA v5)
StandardIEEE 1815-2012
OrganizacjaDNP Users Group (dnp.org)

Secure Authentication - ewolucja zabezpieczeń

Wersje 1-4 (2007-2010)

Świadomość zagrożeń cybernetycznych w sektorze energetycznym rosła od początku XXI wieku. DNP Users Group rozpoczęło prace nad mechanizmem uwierzytelniania - Secure Authentication (SA). Wersje 1-4 wprowadzały:

  • Challenge-response z kluczem współdzielonym (pre-shared key)
  • HMAC-SHA-1 do weryfikacji integralności krytycznych komunikatów (żądań sterowania, zmian konfiguracji)
  • Uwierzytelnianie agresywne (Aggressive Mode) - po jednym udanym challenge-response kolejne komunikaty w sesji mogą pomijać pełny handshake

Wersje te miały jednak istotne ograniczenia: brak mechanizmu wymiany i rotacji kluczy, konieczność ręcznej dystrybucji kluczy do każdego urządzenia terenowego (co w sieciach energetycznych z tysiącami RTU było logistycznym koszmarem), brak ochrony przed atakami replay w niektórych scenariuszach.

Secure Authentication v5 (IEEE 1815-2012)

Wersja 5, włączona do standardu IEEE 1815-2012, rozwiązała większość problemów:

  • HMAC-SHA-256 jako domyślny mechanizm integralności
  • Asymetryczna wymiana kluczy - IEC 62351 Part 8 Certificate-based key agreement pozwala na automatyczną rotację kluczy sesyjnych
  • Update Key Change Protocol - bezpieczna aktualizacja kluczy uwierzytelniania bez fizycznej wizyty przy urządzeniu
  • Error/Attack detection - mechanizm wykrywania i raportowania prób nieautoryzowanego dostępu

SA v5 jest rekomendowany przez NERC CIP (North American Electric Reliability Corporation - Critical Infrastructure Protection) jako standard zabezpieczenia komunikacji DNP3 w sieciach energetycznych Ameryki Północnej.

Ocena bezpieczeństwa

Standardowy DNP3 (bez SA)

Większość instalacji DNP3 na świecie nadal pracuje bez Secure Authentication. Standardowy DNP3 nie posiada uwierzytelniania - każdy host zdolny nawiązać połączenie TCP na porcie 20000 może wysłać polecenia sterujące do outstation. Protokół nie szyfruje danych - wartości procesowe, polecenia sterujące i informacje konfiguracyjne przesyłane są tekstem jawnym.

Znane ataki i badania

  • Aurora Generator Test (2007) - w Idaho National Laboratory badacze DOE (Department of Energy) zademonstrowali możliwość fizycznego zniszczenia generatora o mocy 2,25 MW przez wysyłanie poleceń otwarcia i zamknięcia wyłącznika z dużą częstotliwością. Test wykorzystywał protokół DNP3 do komunikacji z przekaźnikiem ochronnym. Film z eksperymentu, na którym generator się trzęsie i zaczyna dymić, stał się jednym z najczęściej cytowanych dowodów na fizyczne konsekwencje cyberataków na OT.
  • BlackEnergy 2 (2014) - wariant malware BlackEnergy zawierał moduł parsujący ruch DNP3 (plugin “dstr”), umożliwiający rozpoznanie topologii sieci SCADA przez analizę adresów DNP3 i typów obiektów.
  • Adam Crain & Chris Sistrunk - Project Robus (2013-2014) - badacze zidentyfikowali ponad 30 podatności w implementacjach DNP3 różnych producentów (GE, SEL, Cooper, ABB, Siemens) przy użyciu fuzzingu. Wiele z nich umożliwiało DoS (zawieszenie lub restart urządzenia) przez wysłanie specjalnie spreparowanych pakietów DNP3. Badania doprowadziły do wydania kilkudziesięciu alertów ICS-CERT.
  • Industroyer/CrashOverride (2016) - malware Industroyer posiadał dedykowany moduł do komunikacji IEC 61850 i IEC 104, ale jego modułowa architektura demonstruje, jak łatwo dodać obsługę kolejnych protokołów SCADA, w tym DNP3.

MITRE ATT&CK for ICS

TechnikaIDKontekst DNP3
Unauthorized Command MessageT0855Wysyłanie poleceń sterujących bez uwierzytelniania
Manipulation of ControlT0831Zmiana stanu wyłączników, nastaw regulatorów
Point & Tag IdentificationT0861Enumeracja obiektów DNP3 (Binary Input, Analog Output)
Denial of ServiceT0814Fuzzing implementacji DNP3, zalewanie pakietami
Monitor Process StateT0801Odczyt teledanych z outstation

Rekomendacje segmentacji i ochrony

TIP

DNP3 Secure Authentication v5 to jedyny mechanizm bezpieczeństwa na poziomie protokołu dostępny dla komunikacji SCADA w energetyce. Jeśli Twoje urządzenia go obsługują - włącz go. Jeśli nie - segmentacja sieci i szyfrowany tunel (TLS lub IPsec) to jedyne alternatywy. Pamiętaj, że SA chroni integralność poleceń sterujących, ale nie szyfruje danych procesowych. Zasady projektowania stref i korytarzy zgodnie z IEC 62443 opisujemy w artykule Segmentacja sieci OT - strefy i korytarze.

Kluczowe rekomendacje

  1. Wdróż Secure Authentication v5 - jeśli producent RTU/IED obsługuje DNP3-SA v5 (GE, SEL, ABB, Honeywell - większość współczesnych urządzeń), skonfiguruj uwierzytelnianie HMAC-SHA-256 dla poleceń sterujących i zmian konfiguracji. Zaplanuj procedurę dystrybucji i rotacji kluczy.

  2. Szyfruj transport - DNP3-SA chroni integralność, ale nie poufność. Dla segmentów, w których poufność danych procesowych jest wymagana, zastosuj TLS (DNP3-over-TLS) lub tunele IPsec między master station a outstation. Standard IEEE 1815-2012 Annex A zawiera wytyczne implementacji TLS.

  3. Segmentacja sieci WAN - komunikacja DNP3 między centrum dyspozycyjnym a stacjami terenowymi często przechodzi przez sieci WAN (MPLS, LTE, satelita). Zastosuj VPN site-to-site z silnym szyfrowaniem. Nigdy nie eksponuj portu 20000 bezpośrednio do internetu.

  4. Filtrowanie na firewallu - na firewallu OT między siecią SCADA a segmentem RTU/IED skonfiguruj reguły zezwalające na DNP3 wyłącznie między autoryzowanymi parami master-outstation. Firewalle z DPI dla DNP3 (Fortinet, Palo Alto, SEL-3620) mogą filtrować komunikaty na poziomie kodów funkcji - blokując np. polecenia sterujące z nieautoryzowanych źródeł przy jednoczesnym przepuszczaniu odczytów.

  5. Monitoring i anomalie - wdróż pasywny monitoring ruchu DNP3 (Dragos, Claroty, Nozomi Networks). Alertuj na: polecenia sterujące z nieznanych adresów IP, nietypowe obiekty DNP3, unsolicited responses z nieoczekiwanych outstation, próby fuzzing (malformowane pakiety).

  6. Zgodność z NERC CIP - w Ameryce Północnej komunikacja DNP3 w sieciach BES (Bulk Electric System) podlega regulacjom NERC CIP-005 (Electronic Security Perimeters) i CIP-012 (Communication Networks and Data). W Europie analogiczne wymagania wynikają z dyrektywy NIS2 i krajowych regulacji sektora energetycznego.

Porównanie DNP3 z IEC 60870-5-104

CechaDNP3IEC 60870-5-104
Dominujący regionAmeryka Północna, AustraliaEuropa, Azja, Bliski Wschód
Port20000/TCP2404/TCP
UwierzytelnianieSecure Authentication v5 (HMAC)Brak (natywnie)
Unsolicited responsesTakTak (spontaneous)
Transfer plikówTakNie
StandardIEEE 1815-2012IEC 60870-5-104:2006
Ataki referencyjneAurora Test, BlackEnergy 2Industroyer, COSMICENERGY

Podsumowanie

DNP3 to protokół, który - w odróżnieniu od wielu innych standardów OT - posiada opcjonalny mechanizm bezpieczeństwa (Secure Authentication v5) zapewniający integralność komunikacji. Niestety, większość istniejących instalacji go nie wykorzystuje, a wiele starszych urządzeń terenowych go nie obsługuje. Dla organizacji z sektora energetycznego i wodociągowego priorytetem powinno być: wdrożenie SA v5 gdzie to możliwe, szyfrowanie transportu (TLS/IPsec) i ścisła segmentacja sieciowa dla wszystkich pozostałych instalacji. DNP3 bez Secure Authentication oferuje taki sam poziom bezpieczeństwa jak Modbus TCP - czyli żaden.

Narzędzia open source

NarzędzieJęzykOpisLink
opendnp3C++14Referencyjna implementacja DNP3 (master i outstation) z obsługą Secure AuthenticationGitHub
pydnp3PythonBindingi Pythonowe dla opendnp3 - skryptowanie sekwencji DNP3GitHub
WiresharkCWbudowany dissektor DNP3 - analiza ruchu na porcie 20000Wireshark

TIP

pydnp3 umozliwia skryptowanie niestandardowych sekwencji DNP3, w tym testowanie mechanizmu Secure Authentication v5 - przydatne do weryfikacji, czy outstation prawidlowo odrzuca nieuwierzytelnione polecenia sterujące.


Źródła:

Omówimy zakres, metodykę i harmonogram.