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.
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):
| Warstwa | Funkcja |
|---|---|
| Application Layer | Obiekty danych (Binary Input, Analog Output, Counter…), fragmentacja, kody funkcji |
| Transport Layer | Segmentacja i składanie fragmentów, numeracja sekwencyjna |
| Data Link Layer | Adresowanie (ź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.
Struktura ramki Data Link
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 Code | Nazwa | Ryzyko | Opis |
|---|---|---|---|
| 0x01 | Read | Niskie | Odczyt obiektów danych (stany, pomiary) |
| 0x02 | Write | Wysokie | Zapis do obiektów - zmiana nastaw |
| 0x03 | Select | Wysokie | Wybór polecenia sterującego (SBO - Select Before Operate) |
| 0x04 | Operate | Krytyczne | Wykonanie wybranego polecenia (otwarcie/zamknięcie wyłącznika) |
| 0x05 | Direct Operate | Krytyczne | Bezpośrednie wykonanie bez Select (jeśli dozwolone) |
| 0x06 | Direct Operate No Ack | Krytyczne | Jak wyżej, bez potwierdzenia - brak śladu w logach |
| 0x0D | Cold Restart | Krytyczne | Restart urządzenia |
| 0x0E | Warm Restart | Wysokie | Restart aplikacji bez restartu sprzętu |
| 0x81 | Response | - | Odpowiedź outstations na żądanie master |
| 0x82 | Unsolicited 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
| Parametr | Wartość |
|---|---|
| Port | 20000/TCP (DNP3-over-TCP), 20000/UDP (opcjonalnie) |
| Transport | TCP/IP lub łącza szeregowe (RS-232, RS-485) |
| Uwierzytelnianie | Brak (standardowy DNP3), HMAC-SHA-256 (Secure Authentication v5) |
| Szyfrowanie | Brak (natywnie), TLS jako warstwa transportowa (DNP3-SA v5 rekomenduje) |
| Integralność | CRC-16 na warstwie Data Link, HMAC na warstwie aplikacji (SA v5) |
| Standard | IEEE 1815-2012 |
| Organizacja | DNP 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
| Technika | ID | Kontekst DNP3 |
|---|---|---|
| Unauthorized Command Message | T0855 | Wysyłanie poleceń sterujących bez uwierzytelniania |
| Manipulation of Control | T0831 | Zmiana stanu wyłączników, nastaw regulatorów |
| Point & Tag Identification | T0861 | Enumeracja obiektów DNP3 (Binary Input, Analog Output) |
| Denial of Service | T0814 | Fuzzing implementacji DNP3, zalewanie pakietami |
| Monitor Process State | T0801 | Odczyt 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
-
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.
-
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.
-
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.
-
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.
-
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).
-
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
| Cecha | DNP3 | IEC 60870-5-104 |
|---|---|---|
| Dominujący region | Ameryka Północna, Australia | Europa, Azja, Bliski Wschód |
| Port | 20000/TCP | 2404/TCP |
| Uwierzytelnianie | Secure Authentication v5 (HMAC) | Brak (natywnie) |
| Unsolicited responses | Tak | Tak (spontaneous) |
| Transfer plików | Tak | Nie |
| Standard | IEEE 1815-2012 | IEC 60870-5-104:2006 |
| Ataki referencyjne | Aurora Test, BlackEnergy 2 | Industroyer, 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ędzie | Język | Opis | Link |
|---|---|---|---|
| opendnp3 | C++14 | Referencyjna implementacja DNP3 (master i outstation) z obsługą Secure Authentication | GitHub |
| pydnp3 | Python | Bindingi Pythonowe dla opendnp3 - skryptowanie sekwencji DNP3 | GitHub |
| Wireshark | C | Wbudowany dissektor DNP3 - analiza ruchu na porcie 20000 | Wireshark |
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:
- IEEE 1815-2012 - Standard for Electric Power Systems Communications - DNP3 - IEEE
- DNP3 Secure Authentication v5 Specification - DNP Users Group
- Aurora Generator Test - Idaho National Laboratory - DOE/CISA
- BlackEnergy by the SSHBearDoor - ESET, 2016
- Project Robus - DNP3 Fuzzing - Adam Crain, Chris Sistrunk, 2014
- NERC CIP Standards - NERC
- MITRE ATT&CK for ICS - MITRE Corporation
- NIST SP 800-82 Rev. 3 - Guide to OT Security - NIST, 2023