Na komputerach z systemem Linux obsługujemy rekurencyjne serwery DNS z dostępem publicznym. Byliśmy wykorzystywani do ataków polegających na wzmocnieniu DNS. Czy są jakieś zalecane iptables
reguły, które pomogłyby złagodzić te ataki?
Oczywistym rozwiązaniem jest po prostu ograniczenie wychodzących pakietów DNS do określonego poziomu ruchu. Miałem jednak nadzieję znaleźć coś bardziej sprytnego, aby atak po prostu zablokował ruch do adresu IP ofiary.
Szukałem porad i sugestii, ale wszystkie wydają się „nie uruchamiać publicznych serwerów rekurencyjnych”. Niestety powróciliśmy do sytuacji, w której rzeczy, które nie są łatwe do zmiany, ulegną zniszczeniu, jeśli tego nie zrobimy, a to z powodu decyzji podjętych ponad dziesięć lat temu, zanim te ataki były problemem.
źródło
Odpowiedzi:
Całe to cuchnie scenariuszem „nie mój problem”, który tak naprawdę nie jest twoją winą i powinien / powinien zostać rozwiązany w 100% przez podjęcie odpowiednich działań, niezależnie od tego, jak „trudne” lub „trudne”, i to kończy twoje otwórz serwer rekurencyjny .
Wycofaj to: powiedz klientom, że ten serwer odchodzi od X dnia. Po tym czasie muszą zainstalować łatkę (zakładając, że ją masz), aby uniemożliwić jej korzystanie z serwera DNS. Robi się to cały czas. Administratorzy, administratorzy sieci, pracownicy działu pomocy technicznej, programiści? My się go; ta rzecz związana z końcem życia zdarza się cały czas, ponieważ jest to standardowa procedura dla dostawcy / usługodawcy / partnera, która mówi nam, abyśmy przestali używać czegoś po dacie X. Nie zawsze nam się to podoba, ale to fakt życia w IT.
Mówisz, że nie masz tego problemu na bieżących urządzeniach, więc zakładam, że rozwiązałeś ten problem za pomocą aktualizacji oprogramowania układowego lub poprawki. Wiem, że powiedziałeś, że nie możesz dotknąć urządzenia, ale na pewno mogą? Chodzi mi o to, że jeśli zezwalają na to, aby te skrzynki zasadniczo dzwoniły do ciebie, nie mogą być aż tak analne, jeśli chodzi o to, kto robi to z ich urządzeniami; możesz mieć odwrotną konfigurację proxy dla wszystkich, którzy wiedzą, więc dlaczego nie mieliby zainstalować łatki, która to naprawia, lub nakazać im korzystanie z własnych serwerów DNS . Z pewnością twoje urządzenie obsługuje DHCP; Nie mogę myśleć o urządzeniu sieciowym (nie ważne ile lat / wątły / nieparzysty) nie ma .
Jeśli nie możesz tego zrobić, następną rzeczą do zrobienia jest kontrolowanie, kto może uzyskać dostęp do twojego serwera rekurencyjnego : mówisz, że „trudno jest powiedzieć”, kto go używa i jak, ale nadszedł czas, aby się upewnić i zacząć ograniczać ruch, który niezgodne z prawem.
To są organizacje „quasi-wojskowe / rządowe”, prawda? Cóż, prawdopodobnie są częścią legalnego bloku sieciowego, którego są właścicielami; urządzenia te nie są routerami domowymi za dynamicznymi adresami IP. Dowiedzieć się. Skontaktuj się z nimi, wyjaśnij problem i zaoszczędź dużo pieniędzy, nie zmuszając do wymiany oprogramowania układowego lub produktu, jeśli tylko mogą potwierdzić adres blokady sieci / adres IP, którego urządzenie będzie używać do uzyskania dostępu do serwera DNS.
Odbywa się to cały czas: mam kilku klientów, którzy w ten sposób ograniczają dostęp do ekstranetu lub słuchaczy HL7 partnerom opieki zdrowotnej; to nie jest takie trudneaby zmusić ich do wypełnienia formularza i podania adresu IP i / lub blokady sieci, powinienem oczekiwać ruchu z: jeśli chcą uzyskać dostęp do ekstranetu, muszą podać adres IP lub podsieć. I rzadko jest to ruchomy cel, więc nie jest tak, że będziesz codziennie zalewany setkami żądań zmiany adresu IP: duże sieci szpitali kampusowych, które posiadają własne bloki sieciowe z setkami podsieci i tysiącami adresów IP hosta rutynowo dają mi garść adresów IP lub podsieci, których powinienem się spodziewać; znowu, nie są to użytkownicy laptopów błąkający się po całym kampusie, więc dlaczego miałbym oczekiwać pakietów źródłowych UDP z ciągle zmieniającego się adresu IP? Oczywiście zakładam, że jestem tutaj założeniem, ale założę się, że nie jest tak dużo, jak myślisz dla <100 urządzeń. Tak, będzie to długa lista ACL i tak,
Jeśli z jakiegoś powodu kanały komunikacji nie są otwarte (lub ktoś zbyt się boi lub nie może mieć trudności z skontaktowaniem się z tymi starszymi właścicielami urządzeń i zrobieniem tego poprawnie), musisz ustalić linię odniesienia normalnego użytkowania / aktywności, abyś mógł sformułować inna strategia, która pomoże (ale nie uniemożliwi) udział w atakach polegających na wzmocnieniu DNS.
Długotrwały
tcpdump
powinien działać filtrowanie przychodzącego UDP 53 i pełne logowanie do aplikacji serwera DNS. Chciałbym również zacząć zbierać źródłowe adresy IP / bloki sieciowe / informacje geoIP (czy wszyscy twoi klienci w USA? Blokują wszystko inne), ponieważ, jak mówisz, nie dodajesz żadnych nowych urządzeń, po prostu przekazujesz dziedzictwo obsługa istniejących instalacji.Pomoże to również zrozumieć, jakie typy rekordów są wymagane i dla jakich domen, przez kogo i jak często : aby wzmocnienie DNS działało zgodnie z przeznaczeniem, osoba atakująca musi mieć możliwość żądania dużego typu rekordu (1) do działająca domena (2).
„duży typ rekordu”: czy twoje urządzenia potrzebują nawet rekordów TXT lub SOA, aby móc je rozwiązać za pomocą rekurencyjnego serwera DNS? Możesz określić, które typy rekordów są prawidłowe na serwerze DNS; Wierzę, że jest to możliwe dzięki BIND i być może Windows DNS, ale trzeba by było trochę kopać. Jeśli Twój serwer DNS odpowiada
SERVFAIL
na dowolne rekordy TXT lub SOA, a przynajmniej ta odpowiedź jest rzędu wielkości (lub dwóch) mniejsza niż zamierzony ładunek. Oczywiście nadal jesteś „częścią problemu”, ponieważ sfałszowana ofiara nadal otrzymywałaby teSERVFAIL
odpowiedzi z twojego serwera, ale przynajmniej nie hamujesz ich i być może twój serwer DNS zostaje „usunięty” z zebranych list (y) z upływem czasu boty używają do „nie współpracowania”.„działająca domena”: możesz dodać do białej listy tylko te domeny, które są prawidłowe. Robię to w moich hartowanych konfiguracjach centrum danych, w których serwery potrzebują tylko Windows Update, Symantec itp. Do działania. Jednak łagodzisz tylko szkody, które wyrządzasz w tym momencie: ofiara nadal byłaby bombardowana przez serwer
NXDOMAIN
lubSERVFAIL
odpowiadałaby na niego, ponieważ serwer nadal reagowałby na fałszywe źródłowe IP. Ponownie skrypt Bot może również automatycznie aktualizować swoją otwartą listę serwerów na podstawie wyników, więc może to spowodować usunięcie twojego serwera.Użyłbym także pewnego rodzaju ograniczenia prędkości, jak sugerowali inni, albo na poziomie aplikacji (tj. Rozmiar wiadomości, żądania na klienta) albo na poziomie zapory ogniowej (zobacz inne odpowiedzi), ale znowu, masz zamiar musisz przeprowadzić analizę, aby upewnić się, że nie zabijasz legalnego ruchu.
System wykrywania włamań, który został dostrojony i / lub przeszkolony (ponownie, tutaj potrzebny jest poziom podstawowy), powinien również być w stanie wykrywać nienormalny ruch w czasie według źródła lub głośności, ale prawdopodobnie wymagałby regularnej opieki nad dziećmi / strojenia / monitorowania, aby zapobiec fałszywym pozytywom i / lub sprawdź, czy faktycznie zapobiega atakom.
Pod koniec dnia musisz się zastanowić, czy cały ten wysiłek jest tego wart, czy też powinieneś po prostu nalegać, aby zrobić właściwą rzecz, a to przede wszystkim eliminuje problem.
źródło
To zależy od rodzaju ograniczenia stawki, które chcesz zrobić.
Ograniczanie
iptables
prędkości za pomocą jest bardziej przeznaczone do ograniczania przychodzących pakietów, ponieważ pakiety do limitu będą pasować do filtra i zostaną zastosowane określony cel (npACCEPT
.). Prawdopodobnie miałbyś kolejny cel naDROP
pakiety, które nie są dopasowane przez filtr. I choćiptables
maQUEUE
cel, po prostu przekazuje pakiet do przestrzeni użytkownika, gdzie należy dostarczyć własną aplikację kolejkującą. Możesz również oceniać limit pakietów wychodzących, ale niewiele osób naprawdę chce zacząć zmniejszać ruch wychodzący.iptables
obniżenie limitu stawki:Użycie
hashlimit
zamiastlimit
daje ograniczenie stawki dla docelowego adresu IP. To znaczy, pięć pakietów do wersjihashlimit
8.8.8.8, które osiągną limit, zapobiegną wysyłaniu pakietów do wersji 8.8.4.4, natomiast jeśli maksymalna wersja 8.8.8.8 jest maksymalna, nadal możesz osiągnąć wersję 8.8.4.4, co brzmi bardziej jak chcesz.Jeśli nie chcesz, aby pakiety przekraczające limit były usuwane, to tak naprawdę chcesz
tc
.tc
będzie regulować przepływ, aby uzyskać przyjemny, stały strumień, a nie dużo dużego ruchu. Po stronie przychodzącej pakiety są dostarczane do aplikacji wolniej, ale wszystkie zostaną dostarczone w odpowiedniej kolejności. Na wychodzących pakietach opuści twoją aplikację tak szybko, jak to możliwe, ale zostanie umieszczony na przewodzie w spójnym strumieniu.Nie korzystałem
tc
dużo, ale oto przykład ograniczenia ICMP, które prawdopodobnie można łatwo dostosować do DNS.źródło
Oto jedna z rzeczy, które możesz zrobić, aby potencjalnie ograniczyć odpowiedzi na sfałszowane zapytania, ale zajmuje to trochę pracy:
Najpierw spójrz na swój dziennik kanału bezpieczeństwa i znajdź adres IP, który się fałszuje.
Następnie uruchom tcpdump używając tego źródłowego adresu IP (10.11.12.13) w następujący sposób:
tcpdump -n src 10.11.12.13 and udp dst port 53 -v -X -S
Otrzymasz coś takiego:
Teraz część zabawy! Otwórz rfc1035 na http://tools.ietf.org/html/rfc1035 i przejdź do sekcji 4.1.1.
Czas przetłumaczyć wyniki tcpdump i wymyślić wzorzec, którego możemy użyć do stworzenia filtru poziomu pakietów.
Identyfikator nagłówka zaczyna się od 0x1C, więc mamy kilka flag w 0x1E, QDCOUNT w 0x20, ANCOUNT w 0x22, NSCOUNT w 0x24 i ARCOUNT w 0x26.
To pozostawia rzeczywiste pytanie o wartości 0x28, która w tym przypadku jest pusta (ROOT) dla NAZWY, 0xFF dla QTYPE = DOWOLNY i 0x01 dla QCLASS = IN.
Krótko mówiąc, stwierdziłem, że dodanie następujących reguł iptables blokuje ponad 95% sfałszowanych zapytań, które żądają DOWOLNYCH rekordów W ROOT:
iptables -A INPUT -p udp --dport domain -m u32 --u32 "0x28=0x0000ff00" -j DROP
Twój przebieg może się różnić ... mam nadzieję, że to pomoże.
źródło
Stosowanie
tc
i kolejkowanie dyscyplin w systemie Linux dla portu wychodzącego 53 UDP:disc
Ustawi Cię z ograniczeniem do 10 Mb dla dowolnego pakietu ze znakiem zapory ogniowej „1”. Oznaczenia zapory są wewnętrzne tylko dla zapory i nie modyfikują pakietu. Po prostu obsługa pakietu przez dyscyplinę kolejkowania. Oto jak używaćiptables
oznaczeń zapory ogniowej:Zmień według własnych upodobań, aby wykluczyć zaufane podsieci i / lub miejsca docelowe.
-o eth0
Ogranicza tylko do kształtowania pakietów wychodzących. Mam nadzieję że to pomoże.źródło
Spróbuję stworzyć listę wszystkich klientów, którzy polegają na twoich zewnętrznie zwróconych resolverach. Zacznij od około jednego dnia śladów pakietów na polach DNS. Następnie zacznij tworzyć reguły iptables, aby zezwolić na rozpoznawany i autoryzowany ruch. Domyślnie będzie to ostatecznie spadek ruchu do 53 / tcp i 53 / udp. Jeśli to coś zepsuje, dostosuj swoje zasady.
źródło
w zależności od „pozycji” sieci, w której się znajdujesz [mając wiele kanałów bgp lub będąc na „końcu” Internetu - jako sieć pośrednicząca] możesz wypróbować coś takiego jak uRPF, aby zapobiec fałszowaniu adresu źródłowego.
inne źródło informacji.
źródło
Czy te urządzenia są nadal objęte umową serwisową? Jeśli tak, skontaktuj się z klientami. Poinformuj ich, że w ostatnim dziesięcioleciu Internet ewoluował nieco, a aby nadal rozpoznawać nazwy tych urządzeń, musisz znać adres IP SRC, aby oczekiwać zapytań. Ustaw datę ~ 6 miesięcy w przyszłości, kiedy nie będziesz już w stanie obsługiwać nieznanych klientów i trzymaj się tego. Jest to dość powszechne w branży. Jeśli te urządzenia nie są już objęte umową serwisową ... brzmi jak decyzja biznesowa. Jak długo Twoja firma zamierza wydawać zasoby na starożytny produkt, który nie generuje już przychodów?
Brzmią jak wyspecjalizowane urządzenia, czy są one tak wyspecjalizowane, że można rozsądnie przewidzieć, w których domenach można spodziewać się wiarygodnych zapytań? bind obsługuje widoki, utwórz widok publiczny, który rekursuje tylko dla tych domen.
Wykorzystaj to jako okazję do nauki, jeśli jeszcze tego nie zrobiłeś, przestań wypuszczać produkty tam, gdzie nie masz możliwości naprawienia błędów. To jest właśnie błąd. Taki, który z pewnością sprawi EOL temu urządzeniu przedwcześnie, wcześniej czy później.
źródło
Gdzieś z nanog, to:
To nie jest idealne. Lepiej byłoby pozwolić na mniejszą liczbę pakietów na sekundę i mieć większy impuls.
źródło
Oto rozwiązanie, którego użyłem kilka razy przeciwko atakom DDOS, nie jest idealne, ale pomogło mi. Rozwiązanie polega na tym, że cron wywołuje skrypt, który jest wywoływany co N minut (np. 1,2,3 itd.) I blokuje adresy IP, które tworzą liczbę połączeń większych niż podane w skrypcie:
źródło