W tym artykule przyjrzymy się protokołowi SNMP, jego budowie, zasadzie działania i przykładach wykorzystywania. Rozważymy również, jak korzystać z niego w sieci z uwzględnieniem dobrych praktyk cyberbezpieczeństwa.
Spis treści
Czym jest SNMP?
SNMP (ang. Simple Network Management Protocol) to protokół działający w warstwie aplikacji modelu ISO/OSI. Używany jest do zarządzania i monitorowania urządzeń sieciowych w sieciach IP, takich jak: routery, przełączniki, firewalle, serwery portów szeregowych, sterowniki PLC, urządzenia bezprzewodowe itp.
Zazwyczaj, protokół SNMP jest implementowany przy użyciu protokołu UDP
Dzięki SNMP możliwe jest, w jednym miejscu sieci – na przykład na stacji roboczej administratora – zbieranie informacji z kilkunastu różnych urządzeń. Możemy monitorować praktycznie każde parametry urządzenia sieciowego – aktualne obciążenie procesora, ilość wolnego miejsca na dysku twardym, fizyczny stan portów na przełączniku itp. Dodatkowo, wykorzystując protokół SNMP, możemy zmieniać konfigurację urządzeń zdalnie.
Komponenty SNMP
Model SNMP został zbudowany o architekturę manager-agent (odpowiednik znanego modelu client-server).
System SNMP składa się z następujących elementów:
- Urządzenia z SNMP – są to urządzenia sieciowe, na których zainstalowany jest agent SNMP
- Agent SNMP – to oprogramowanie, które zainstalowane jest na urządzeniach sieciowych lub usługach. Jego zadaniem jest zbieranie różnych danych z urządzenia – np. zużycie CPU. Zadaniem Agenta SNMP jest odpowiadanie na zapytania wysyłane przez Managera SNMP.
Rolę agenta SNMP może pełnić np. switch zarządzalny – usługę SNMP należy włączyć w konfiguracji.
- Manager SNMP – zamiennie nazywany SNMP Server – działa jako scentralizowana stacja monitorująca i zbierająca dane z agentów SNMP w zdefiniowanych interwałach czasu.
Rolę Managera SNMP pełni najczęściej dedykowane narzędzie NMS (network management system). Do monitorowania urządzeń sieciowych można wykorzystać oprogramowanie Moxa MXview – do 20 urządzeń jest ono zupełnie darmowe. MXView umożliwia centrale monitorowanie urządzeń sieciowych – do tego celu wykorzystywany jest protokół SNMP.
- Baza MIB - definiuje parametry (obiekty opisujące właściwości danego urządzenia nazywane są OID Object Identifier), które można odczytać z urządzenia, a także parametry, które mogą być konfigurowane w urządzeniu.
Bazy MIB można podzielić na dwa typy
- Zdefiniowane przez organy normalizujące np. RFC1213
- Prywatne bazy jako uzupełnienie RFC1213, zdefiniowane przez poszczególnych dostawców: Moxa, Cisco itp. Ten typ MIB wykorzystywany jest do gromadzenia OID – właściwości urządzeń typowych dla danego producenta. Dobrym wyznacznikiem są własne protokołu producentów – np. Moxa ma swój protokół Turbo Ring do budowania topologii pierścienia. Obiektów do monitorowania statusu protokołu Turbo Ring nie znajdziemy w ustandaryzowanym RFC1213. Do tego celu należy wykorzystać udostępnioną przez producenta bazę MIB.
- SNMP Trap – SNMP przewiduje tryb pracy o nazwie „pułapka” (ang. Trap). SNMP Trap należy porównać do alarmu skonfigurowanego na agencie. Jeżeli jedna z monitorowanych wartości zmieni przekroczy zdefiniowany wcześniej próg (np. temperatura modułu SFP) lub zmieni się nagle – np. stan portu ethernetowego, agent bezzwłocznie powiadomi o tym managera wysyłając powiadomienie SNMP trap.
Na poniższym rysunku możemy zobaczyć dwa przykładowe powiadomienia SNMP trap – informujące o nieudanej i udanej próbie zalogowania do urządzenia. Jest to bardzo szybka informacja dla administratora o potencjalnych próbach naruszenia zabezpieczeń. Narzędzia typu NMS (np. MXview) umożliwiają konfigurację powiadomień – np. mailowych, czy do MS Teams w przypadku wystąpienia interesującego nas alarmu. Dzięki temu nie jest konieczne ciągłe monitorowanie przychodzących zdarzeń.
Polecania SNMP
SNMP to protokół relatywnie prosty w działaniu i wykorzystuje kilka komunikatów i zdarzeń wymienianych między managerem a agentem.
- Get Request — żądanie wysłane przez managera odczytania wartości obiektu z bazy MIB agenta
- Set Request — żądanie wysłane przez managera o zmianę w bazie MIB agenta
- GetNext Request — żądanie podania kolejnego obiektu (w stosunku do ostatnio pobieranego) z bazy MIB agenta
- GetBulk Request — manager prosi jednocześnie o kilka wartości z bazy MIB agenta
- SNMP Response — agent odpowiada na żądanie zarządcy. Datagram zawiera odczytaną wartość lub potwierdzenie wykonania zmiany w bazie w przypadku odpowiedzi na żądanie SetRequest.
- SNMP Trap/Inform — asynchroniczne powiadomienie wysłane przez agenta o wystąpieniu istotnego zdarzenia (np. próba nieudanego zalogowania, wyłączenie portu). Komunikacja SNMP TRAP zachodzi w starszych wersjach SNMP na porcie UDP 162 co bywa problematyczne z uwagi na naturę działania UDP – istnieje ryzyko, że TRAP nie dotrze do NMS. SNMPv3 naprawia to niedopatrzenie wprowadzając nową wersję komunikatu TRAP, która została nazwana INFORM i używa portu TCP 162.
Wersje SNMP
W przypadku SNMP mamy do czynienia z trzeba wersjami
SNMPv1
Jest to pierwsza implementacja opisana w RFC 1157. Wymiana informacji między managerem a agentem odbywa się za pomocą tzw. community strings. Community string jest to ciąg znaków. W SNMP obiekty mają jeden z trzech rodzajów praw dostępu:
- read-only (RO) – tylko do odczytu,
- write-only (WO)- tylko do zapisu,
- read-write (RW) – do odczytu i zapisu.
Dostęp do obiektów wymaga znajomości community string. Community string przybiera różne wartości dla dostępu RO, RW. Domyślne ustawienia to odpowiednio wartości public oraz private. Community strings przesyłane są w postaci jawnej. W SNMPv1 nie mamy możliwości również szyfrowania pakietów. Dlatego, ze względów cyberbezpieczeństwa nie jest rekomendowane stosowanie tej wersji SNMP.
Jak widać na poniższym zdjęciu, bez problemu możemy odczytać community string oraz zawartość wiadomości wysłanej od agenta do managera. W tym przypadku udało nam się przechwycić wersję firmware zainstalowaną na urządzeniu.
SNMPv2c
Jest to nieco zmodyfikowana wersja SNMPv1 (opisana w RFC 1441). SNMPv2 wprowadziła dwie dodatkowe funkcje do SNMP – GetBulk oraz Inform. Dzięki czemu możliwe jest odczytanie większej liczby parametrów jednocześnie. Natomiast z punktu widzenia cyberbezpieczeństwa, do transmisji wykorzystywane są dalej community strings.
SNMPv3
SNMP w wersji 3 zapewnia bezpieczny dostęp do urządzeń poprzez uwierzytelnianie i szyfrowanie pakietów danych. SNMPv3 został opisany w standardach od RFCs 3413 do 3415.
SNMPv3 wprowadza następujące mechanizmy:
- uwierzytelnianie przy pomocy pary: nazwa użytkownika i hasło
- hasło nie jest wysyłane w postaci jawnej, ale może być hashowane funkcją MD5 lub SHA1
- treść wiadomości SNMPv3 może być zaszyfrowana algorytmem DES/3DES lub AES.
SNMPv3 wprowadza dodatkowo trzy poziomy bezpieczeństwa. Porównanie zostało zawarte w poniższej tabelce.
Poziom |
Uwierzytelnianie |
Szyfrowanie |
Wpływ |
noAuthNoPriv |
użytkownik |
brak |
wykorzystywane jest dopasowanie tylko nazwy użytkownika. idea jest bardzo podobna do SNMPv1 z community strings. |
authNoPriv |
para użytkownik/hasło dodatkowo hashowana przy pomocy MD5 lub SHA |
brak |
na tym poziomie nadal nie mamy szyfrowanej wiadomości SNMP, natomiast mamy włączone uwierzytelnianie |
authPriv |
para użytkownik/hasło dodatkowo hashowana przy pomocy MD5 lub SHA |
DES/3DES/AES |
najbezpieczniejszy model, w którym wiadomość SNMP jest szyfrowana, a użytkownicy są uwierzytelniani parą użytkownik/hasło |
Którą wersję SNMP wybrać? Z punktu widzenia cyberbezpieczeństwa najlepszym wyborem będzie SNMPv3. Czasami, niektóre urządzenia mogą nie wspierać SNMPv3 i konieczne jest stosowanie SNMPv1 lub SNMP2c. W tym przypadku należy pamiętać, aby zmienić domyślne community strings na mocniejsze stringi oraz zabezpieczyć dostęp do urządzeń sieciowych np. przez ACL lub firewall.
SNMP, a cyberbezpieczeństwo
Protokół SNMP może być jednym z wektorów ataku. Sam mechanizm działania SNMPv1/v2c jest bardzo trywialny i łatwy do obejścia. Przypominając – wykorzystujemy w tych wersjach community strings do wymiany żądań między manageren, a agentem. Często community strings nie są zmieniane podczas instalacji. Zmiana SNMP community strings nie do końca rozwiązuje problem. Można podsłuchać w ruchu sieciowym jakie community strings są wykorzystywane.
Co można zrobić znając community string i adres IP urządzenia?
Można na przykład zresetować switch Moxa do ustawień fabrycznych znając domyślne community strings oraz adres IP. Polecenie SET oraz wartość 1 przywróci urządzenie do ustawień fabrycznych.
Można w ten sposób de facto zresetować wszystkie urządzenia na obiekcie bardzo prostym skryptem. Nie trzeba do tego celu specjalistycznej wiedzy hakerskiej.
Implementacja protokołu SNMP na urządzeniach końcowych często jest źródłem podatności. Pod tym linkiem można znaleźć listę znanych podatności w protokole SNMP. Warto ją prześledzić i przefiltrować pod kątem urządzeń, które wykorzystywane są w naszej sieci OT. Podatność w protokole SNMP może spowodować zawieszenie działania urządzenia lub eskalację uprawnień.
Jak zatem się zabezpieczyć? Przedstawiamy kilka dobrych praktyk, gdy korzystamy z SNMP.
Dobre praktyki cyberbezpieczeństwa, gdy korzystamy z SNMP
Wyłącz SNMP na urządzeniach których nie monitorujesz
Wydaje się, że bardzo prosta rada… ale w rzeczywistości istotna. Jeżeli SNMP nie jest wykorzystywane, najlepiej jest wyłączyć usługę SNMP na urządzeniu. Często SNMP jest włączone domyślnie na urządzeniu, aby uprościć integrację nowych urządzeń z systemami NMS. Wyłączony protokół SNMP nie zostawia otwartej furtki dla atakującego.
Zmień domyślne community strings
Wiele urządzeń przemysłowych posiada domyślne włączone SNMP oraz domyśle community strings (public do odczytu oraz private do zapisu). Również w tym przypadku producenci chcieli maksymalnie uprościć proces wdrożenia urządzenia. Systemy NMS wykorzystują protokół SNMP do rozpoznania typu urządzenia wykrytego w sieci.
Community strings należy traktować na równi z hasłem do urządzenia. Znając community string do zapisu możliwe jest konfigurowanie urządzenia. Community strings powinny być zatem złożonym ciągiem znaków, najlepiej unikalnym dla każdego urządzenia.
Należy pamiętać, że community strings przesyłane są w postaci jawnej, więc silne community strings nie zabezpiecza nas w pełni. Najwyższy poziom bezpieczeństwa można osiągnąć korzystając z SNMP w wersji 3.
Zablokuj ruch SNMP na portach 161 oraz 162
SNMP wykorzystuje do transmisji porty UDP 161 oraz 162. Dobrą praktyką jest zablokowanie tych portów na firewallu dla dostępu z zewnątrz lub z niezaufanego segmentu sieci. Dostęp do urządzeń i portów SNMP powinien być zezwolony tylko dla zaufanych adresów IP. Z tym wiąże się również nasza kolejna wskazówka.
Ogranicz uprawnienia SNMP do read-only
Ogranicz dostęp do urządzeń wykorzystujących SNMP poprzez ograniczenie liczby hostów, które mogą wykorzystywać uprawnienia tylko read-write, a tym samym wpływać na konfigurację.
Jeżeli to możliwe w konfiguracji danego urządzenia, to przypisuj uprawnienia tylko do odczytu (read-only). Skonfigurowanie urządzeń w trybie read-only ograniczy możliwość zmiany parametrów urządzenia przez użytkowników.
Utwórz reguł ACL
Nie zawsze na obiektach mamy możliwość filtrowania ruchu na firewallu. Jako alternatywę warto wykorzystać listy kontroli dostępu (ACL) na przełącznikach zarządzalnych. Poprawna konfiguracja powinna zezwalać na ruch SNMP tylko od zaufanych węzłów w sieci.
Regularnie aktualizuj oprogramowanie na urządzeniach końcowych z SNMP
Regularne aktualizowanie urządzeń sieciowych na których uruchomiony jest agent SNMP zmniejszy ryzyko wykorzystania niezałatanych luk bezpieczeństwa, które atakujący mógłby wykorzystać do naruszenia zabezpieczeń urządzenia. Generalnie, aktualizowanie urządzeń jest zalecane nie tylko ze względu na luki w implementacji protokołu SNMP, ale zawsze jest dobrą praktyką, aby utrzymywać, jeżeli to tylko możliwe, najbardziej aktualne oprogramowanie. Co w przypadku, gdy moje urządzenie nie jest już aktualizowane przez producenta? W takiej sytuacji można rozważyć zastosowanie systemów IPS, które na bazie sygnatur będą mogły rozpoznać w ruchu sieciowym ruch, który tożsamy jest z wykorzystaniem znanej podatności. Więcej o systemach IPS można poczytać na tej stronie: https://www.elmark.com.pl/blog/ethercatch-systemy-ids-ips
Używaj SNMPv3 w trybie authPriv
Korzystaj, jeżeli to tylko możliwe na urządzeniach końcowych) z wersji SNMPv3. SNMPv3 umożliwia konfigurację w trzech modelach: noAuthNoPriv, AuthNoPriv AuthPriv. AuthPriv gwarantuje najwyższy stopień bezpieczeństwa poprzez hashowanie danych do uwierzytelniania (para użytkownik/hasło) oraz szyfrowanie danych SNMP.
Podsumowanie
SNMP jest cennym protokołem monitorowania sieci dla administratorów i dostarcza wiele istotnych informacji o aktualnym stanie sieci. Ważne jest, aby mieć świadomość jakie są zagrożenia powiązane z tym protokołem.
Korzystając z SNMP musisz mieć pewność, że korzystać z niego bezpiecznie. Idealnie, należy korzystać z wersji SNMPv3 (trzeba pamiętać, że ta wersja też może być podatna na luki bezpieczeństwa wynikające np. ze złej implementacji przez producenta). Nie zawsze urządzenia, które mamy zainstalowane w sieci wspierają SNMPv3 – w przypadku wersji SNMPv1/v2 również można poczynić pewne kroki konfiguracyjne, aby zabezpieczyć urządzenia i zminimalizować ryzyko ataku.
Skontaktuj się ze specjalistą Elmark
Masz pytania? Potrzebujesz porady? Zadzwoń lub napisz do nas!