Link-Local Multicast Name Resolution (LLMNR) – protokół, który pozwala komputerom w tej samej sieci lokalnej ustalać nawzajem swoje adresy IP na podstawie nazw, bez udziału serwera DNS. Zamiast odpytywać serwer, komputer rozgłasza pytanie „kto nazywa się X?” do wszystkich maszyn w swoim segmencie sieci i czeka, aż odezwie się ta, która tę nazwę nosi. Opisuje go dokument RFC 4795 ze stycznia 2007 roku, przygotowany przez Bernarda Abobę, Dave’a Thalera i Levona Esibova z Microsoftu. Ma on status informacyjny i nie jest standardem internetowym – pierwotnie kierowano go do zatwierdzenia jako Proposed Standard, jednak IETF nie osiągnęła konsensusu co do przyjętego rozwiązania.

Przeznaczenie LLMNR ma pomagać w sieciach, w których serwera DNS nie ma albo jego uruchamianie nie ma sensu – typowym przykładem jest doraźna sieć bezprzewodowa utworzona przez grupę komputerów. Dzięki protokołowi maszyny w takiej sieci rozpoznają swoje nazwy bez wyznaczania jednej z nich na serwer DNS i konfigurowania pozostałych jego adresem. Podobną rolę pełnił wcześniej NetBIOS rozgłaszający zapytania po IPv4, ale działa on wyłącznie w IPv4 i bywa wyłączany tam, gdzie nazwy rozwiązuje się wyłącznie przez DNS. LLMNR obsługuje zarówno IPv4, jak i IPv6. Protokół nie jest zamiennikiem DNS: obejmuje wyłącznie łącze lokalne, a specyfikacja zaleca używać go dopiero wtedy, gdy rozwiązanie nazwy przez DNS się nie powiedzie, i tylko dla nazw jednoetykietowych, czyli takich bez kropek. Stosowanie LLMNR jako podstawowego mechanizmu rozwiązywania nazw jest w RFC wprost odradzane.

Zasada działania Pytający komputer wysyła zapytanie multicastem: na adres grupowy 224.0.0.252 w sieci IPv4 albo FF02::1:3 w sieci IPv6, w obu przypadkach na port 5355 UDP. Wszystkie hosty z włączonym LLMNR nasłuchują pod tymi adresami, więc pytanie trafia jednocześnie do każdego z nich. Oba adresy mają zasięg ograniczony do łącza, dzięki czemu router nie przekaże zapytania poza segment, w którym je nadano – i właśnie dlatego protokół działa tylko w obrębie jednej sieci lokalnej.

Odpowiada wyłącznie ten komputer, który jest autorytatywny dla pytanej nazwy, czyli po prostu ten, który tę nazwę nosi. Odpowiedź wysyła już bezpośrednio do pytającego, a nie do całej grupy. Pozostałe maszyny milczą – nie odsyłają informacji, że nazwy nie znają, a pytający traktuje brak odpowiedzi tak samo jak odpowiedź serwera DNS o nieistnieniu nazwy.

Same komunikaty mają format pakietów DNS zdefiniowany w RFC 1035, uzupełniony o dwa bity: C, sygnalizujący konflikt nazw w sieci, oraz T, oznaczający nazwę, której unikatowości nadawca jeszcze nie sprawdził. LLMNR korzysta jednak z innego portu niż DNS i z osobnej pamięci podręcznej, tak aby odpowiedzi uzyskane z sieci lokalnej nie mieszały się z danymi z DNS. W odróżnieniu od serwera DNS host odpowiada wyłącznie za własne nazwy, a nie za całą gałąź poniżej – komputer foo.example.com nie odpowiada na pytania o child.foo.example.com.

Implementacje Microsoft zaimplementował LLMNR w systemach Windows Vista i Windows Server 2008. Rozwiązując nazwę jednoetykietową, Vista odpytuje najpierw DNS, następnie wysyła najwyżej dwie serie zapytań LLMNR po IPv6 i IPv4, a na końcu – jeżeli NetBT jest włączony – rozgłasza zapytania NetBIOS. LLMNR jest przy tym używany niezależnie od tego, czy skonfigurowano serwer DNS.

W systemach Linux protokół realizuje usługa systemd-resolved, która potrafi zarówno zadawać pytania, jak i na nie odpowiadać. Steruje tym opcja LLMNR= w pliku resolved.conf, przyjmująca wartość logiczną albo resolve – ta ostatnia włącza samo zadawanie pytań, bez odpowiadania na cudze.

Bezpieczeństwo Słabość protokołu wynika wprost z jego konstrukcji i opisano ją już w samej specyfikacji: skoro pytanie rozgłaszane jest do wszystkich maszyn w segmencie, każda z nich – w tym maszyna napastnika – widzi je i może odpowiedzieć pierwsza, nie musząc niczego zgadywać ani podsłuchiwać. W kwietniu 2011 roku Microsoft opublikował biuletyn MS11-030 dotyczący podatności CVE-2011-0657: błąd w obsłudze spreparowanych zapytań LLMNR przez usługę klienta DNS umożliwiał zdalne wykonanie kodu w kontekście konta NetworkService.

Najczęstszym nadużyciem protokołu jest zatruwanie LLMNR, sklasyfikowane w MITRE ATT&CK jako podtechnika T1557.001. Napastnik odpowiada na cudze zapytania, podając się za poszukiwany komputer; jeżeli ofiara sięgała po zasób wymagający uwierzytelnienia, przesyła mu nazwę użytkownika i skrót NTLMv2, który można potem łamać offline albo przekazać dalej w ataku typu relay. Jako przeciwdziałanie wskazuje się wyłączenie protokołu oraz podpisywanie pakietów SMB, które zatrzymuje ataki typu relay.

Amerykańska CISA opisuje wyłączenie LLMNR jako osobne przeciwdziałanie o identyfikatorze CM0053. W systemach Windows służy do tego zasada grupy „Turn off multicast name resolution” albo ustawienie wartości EnableMulticast na zero w kluczu rejestru HKLM\Software\Policies\Microsoft\Windows NT\DNSClient, w systemach Linux – zmiana LLMNR=yes na LLMNR=no w pliku /etc/systemd/resolved.conf. Zalecane jest też filtrowanie na urządzeniach sieciowych ruchu kierowanego na adres 224.0.0.252.

Zobacz też Domain Name System Multicast DNS NetBIOS

Przypisy

Linki zewnętrzne RFC 4795 – Link-Local Multicast Name Resolution (LLMNR)

Kategoria:Protokoły sieciowe Kategoria:Bezpieczeństwo komputerowe