Czytałem niektóre uwagi na temat nowej publicznej usługi DNS Google :
W sekcji dotyczącej bezpieczeństwa zauważyłem ten akapit:
Do czasu powszechnego wdrożenia standardowego ogólnosystemowego rozwiązania dotyczącego luk w systemie DNS, takiego jak protokół DNSSEC2, otwarte programy tłumaczące DNS muszą samodzielnie podjąć pewne działania w celu ograniczenia znanych zagrożeń. Zaproponowano wiele technik; patrz IETF RFC 4542: Środki mające na celu zwiększenie odporności DNS na fałszywe odpowiedzi, aby uzyskać przegląd większości z nich. W Google Public DNS wdrożyliśmy i zalecamy następujące podejścia:
- Przeszacowanie zasobów maszyny w celu ochrony przed bezpośrednimi atakami DoS na same resolwery. Ponieważ adresy IP są łatwe do sfałszowania dla atakujących, niemożliwe jest blokowanie zapytań opartych na adresie IP lub podsieci; jedynym skutecznym sposobem radzenia sobie z takimi atakami jest po prostu wchłonięcie ładunku.
To przygnębiające zrozumienie; nawet w przypadku przepełnienia stosu / błędu serwera / superużytkownika często używamy adresów IP jako podstawy do wszelkiego rodzaju zakazów i bloków.
Myślenie, że „utalentowany” atakujący może w prosty sposób użyć dowolnego adresu IP, jakiego chcą, i zsyntetyzować tyle unikalnych fałszywych adresów IP, ile chcą, jest naprawdę przerażające!
Więc moje pytanie (pytania):
- Czy to naprawdę , że łatwo intruzowi fałszować adres IP w środowisku naturalnym?
- Jeśli tak, jakie środki łagodzące są możliwe?
źródło
Odpowiedzi:
Jak twierdzi wiele innych, tworzenie nagłówków IP jest banalne, o ile nie zależy na otrzymaniu odpowiedzi. Dlatego jest to najczęściej widoczne w UDP, ponieważ TCP wymaga 3-kierunkowego uzgadniania. Jednym godnym uwagi wyjątkiem jest powódź SYN , która wykorzystuje TCP i próbuje powiązać zasoby na hoście odbierającym; ponownie, ponieważ odpowiedzi są odrzucane, adres źródłowy nie ma znaczenia.
Szczególnie nieprzyjemnym efektem ubocznym zdolności atakujących do fałszowania adresów źródłowych jest atak rozproszenia wstecznego . Jest tutaj doskonały opis , ale w skrócie jest to odwrotność tradycyjnego ataku DDoS:
W obu przypadkach wymienionych w (3) wiele hostów odpowie komunikatem ICMP nieosiągalnym lub resetem TCP, ukierunkowanym na adres źródłowy złośliwego pakietu . Atakujący ma teraz potencjalnie tysiące bezkompromisowych maszyn w sieci, które przeprowadzają atak DDoS na wybraną przez siebie ofiarę, wszystko przy użyciu sfałszowanego źródłowego adresu IP.
Jeśli chodzi o łagodzenie, to ryzyko jest tak naprawdę takie, że tylko dostawcy usług internetowych (a szczególnie dostawcy usług zapewniający dostęp klientom, a nie tranzyt) mogą się zająć. Istnieją dwie główne metody:
Filtrowanie Ingress - zapewniające, że pakiety przychodzące do twojej sieci są pozyskiwane z zakresów adresów, które znajdują się po drugiej stronie interfejsu przychodzącego. Wielu dostawców routerów implementuje takie funkcje, jak przekazywanie zwrotne w trybie emisji pojedynczej , które korzysta z tabel routingu i przekazywania routera w celu sprawdzenia, czy następnym skokiem adresu źródłowego pakietu przychodzącego jest interfejs przychodzący. Najlepiej jest to wykonać przy pierwszym przeskoku 3 warstwy w sieci (tj. Domyślnej bramie).
Filtrowanie wyjść - upewniając się, że pakiety wychodzące z Twojej sieci pochodzą tylko z posiadanych zakresów adresów. Jest to naturalne uzupełnienie filtrowania wejścia i jest zasadniczo częścią „dobrego sąsiada”; upewniając się, że nawet jeśli twoja sieć jest narażona na szkodliwy ruch, ruch ten nie jest przekazywany do sieci, z którymi współpracujesz.
Obie te techniki są najskuteczniejsze i najłatwiejsze do wdrożenia, gdy są wykonywane w sieciach „brzegowych” lub „dostępowych”, w których klienci łączą się z dostawcą. Wdrożenie filtrowania wejścia / wyjścia powyżej warstwy dostępu staje się trudniejsze ze względu na złożoność wielu ścieżek i routingu asymetrycznego.
Widziałem te techniki (szczególnie filtrowanie wejścia) stosowane z wielką skutecznością w sieci korporacyjnej. Być może ktoś z większym doświadczeniem usługodawcy może dać większy wgląd w wyzwania związane z wdrażaniem filtrowania wejścia / wyjścia w Internecie. Uważam, że obsługa sprzętu / oprogramowania układowego jest dużym wyzwaniem, a także niemożnością zmuszenia dostawców usług w innych krajach do wdrożenia podobnych zasad ...
źródło
Jasne, jeśli nie obchodzi mnie faktyczne otrzymywanie odpowiedzi, mogę bardzo łatwo wysyłać pakiety przy użyciu dowolnego adresu źródłowego, który mi się podoba. Ponieważ wielu dostawców usług internetowych tak naprawdę nie ma dobrych zasad dotyczących wychodzenia, wszystko, co sfałszuję, generalnie zostanie dostarczone.
Jeśli atakujący rzeczywiście potrzebuje dwukierunkowej komunikacji, staje się bardzo trudny. Jeśli potrzebują komunikacji dwukierunkowej, łatwiej jest po prostu użyć jakiegoś proxy. Co jest bardzo łatwe do skonfigurowania, jeśli wiesz, co robisz.
Banowanie ludzi według adresu IP jest umiarkowanie skuteczne na SF / SO / SU, ponieważ strona używa http / https, co wymaga dwukierunkowej komunikacji.
źródło
Mały dowód koncepcji dla odpowiedzi Zordeche'a (z ubuntu):
Następnie w innej konsoli:
Tak, trywialne, ale wtedy nie otrzymujesz odpowiedzi, jak wcześniej wspomniano, chyba że masz dostęp do 11.10.10.20 lub masz sniffera gdzieś pomiędzy www.google.com a 11.10.10.20 (I musiałby być tuż przed z obu końców, ponieważ nie można przewidzieć trasy pakietów). Ponadto bramka spoofera (ISP) może nie wypuścić tego pakietu za drzwi, jeśli trwa jakaś kontrola ip i widzi, że źródło brzydko pachnie.
źródło
Adresy IP są łatwe do wytworzenia dla jednokierunkowego ruchu UDP . W przypadku pakietów TCP można tylko fałszować, aby uzyskać połowę otwarte połączenia TCP z pakietami SYN. Jest to także podstawa pewnego rodzaju ataku na DOS. Ale nie można nawiązać połączenia HTTP ze sfałszowanym adresem (na przykład, jeśli filtrujesz sesje, aby użyć tego samego adresu IP). Chociaż tak, możesz sfałszować adres IP w pakietach, jest on użyteczny tylko w przypadku niektórych rodzajów ataków typu „odmowa usługi”.
źródło
Artykuł w GOOG wyraźnie omawiał DNS. DNS używa zarówno pakietów UDP, jak i TCP. Te UDP można sfałszować, ale nie TCP. TCP wymaga uzgadniania w 3 kierunkach . Jeśli adres IP pakietu TCP zostanie sfałszowany, komputer fałszujący nie otrzyma odpowiedzi i połączenie się nie powiedzie. UDP, jak wspomniano w innych odpowiedziach, to „odpal i zapomnij” i nie wymaga komunikacji w odpowiedzi. Z tego powodu ataki DoS występują prawie wyłącznie w postaci pakietów UDP.
W kontekście przepełnienia stosu i witryn rodzinnych problem podniesiony przez Takaun Daikon jest bardzo ważny. Istnieje wiele sposobów uzyskania nowego adresu IP od usługodawcy internetowego. Zmiana adresu MAC jest oczywiście najłatwiejsza i działa dla wielu dostawców usług internetowych. Ponadto wielu ludzi, którzy są głupie, może korzystać z publicznego proxy lub TOR. Wyraźne zablokowanie źródłowego adresu IP dla tych pakietów po prostu zablokowałoby serwer proxy lub węzeł terminacji TOR.
Czy blokowanie adresów IP jest prawidłowe? Do diabła, tak jest. Ale skończysz z błędami. Zablokujesz niektóre adresy IP, które tak naprawdę nie są źródłem problemu (np. Serwery proxy), a także będziesz mieć ludzi unikających twoich bloków poprzez zmianę adresów IP. Osoba, która ma pecha, by później uzyskać zablokowane IP, nie będzie mogła uzyskać dostępu do rodziny witryn SO. Ale błąd stawka powinna być niewielka. Chyba że blokujesz ogromne zestawy adresów IP. Ale jeśli blokujesz jeden lub dwa dziennie, wszystko powinno być w porządku.
Możesz wprowadzić nieco bardziej wyrafinowany schemat, w którym blokujesz, ale tylko na pewien okres, na przykład rok. Jeśli twoja sieć jest zdolna do ograniczania przepustowości lub ograniczania połączeń, możesz również rozważyć schemat, w którym torby douche, które uruchamiają testy porównawcze Apache w Twojej witrynie, po prostu umieszczane są w klatce o bardzo ograniczonej przepustowości.
źródło
Fałszowanie adresów IP będzie kontynuowane, ponieważ dostawcy usług internetowych są leniwi.
Mój cholerny dostawca usług internetowych dobrze wie, że jestem pod określonym adresem lub przynajmniej podsiecią, w której jestem. Ale mogę użyć dowolnego adresu źródłowego. Dlaczego? Po prostu koszt.
Jeśli sfałszuję kilka adresów tu i tam, mój dostawca usług internetowych nic nie kosztuje. Gdyby każdy użytkownik mojego ISP sfałszował jeden pakiet między 1:00 a 2:00, nadal nie byłoby to zbyt duże załamanie radaru. Jednak gdy botnet wysyła wiele sfałszowanych pakietów z wielu hostów na wielu ISP, komputer docelowy lub sieć przewraca się.
Rzeczywistość finansowa jest taka, że jeśli nie jesteś atakowany, fałszowanie nic nie kosztuje. Wdrożenie filtrowania w pobliżu klienta kosztuje, a ten, kto wydaje pieniądze, osiąga bardzo niewielki zwrot poza wiedzą, że są dobrymi obywatelami sieci.
UDP i ICMP są najłatwiejsze do sfałszowania, ale TCP jest również możliwy. Wymaga niepewnego zdalnego systemu operacyjnego, który wykorzystuje przewidywalne numery sekwencji do wykorzystania. Czasami to maszyny do równoważenia obciążenia zmieniają numery sekwencyjne i czynią je przewidywalnymi. Tak więc TCP jest możliwy - ale trudniejszy.
Ochrona przed podszywaniem się DNS skupia się głównie na bezpieczeństwie polegającym na zapobieganiu przesyłania fałszywych odpowiedzi do rekurencyjnego programu tłumaczącego. Aspekty zalewania UDP nie są specyficzne dla DNS, poza pojedynczym małym zapytaniem (powiedzmy dla „.”) Spowoduje dość dużą odpowiedź. W ten sposób tworzy ładny wektor wzmocnienia. Istnieje wiele innych protokołów UDP, które działają, ale DNS jest używany wszędzie i łatwo jest znaleźć maszyny do wzmocnienia ataków.
DNSSEC czyni to jeszcze gorszym dzięki pakietom UDP, które mogą osiągnąć rozmiar 4k.
źródło
Adresy IP są trywialne w przypadku ataków DOS opartych na DNS (D), ponieważ zazwyczaj są to przypadki pakietów UDP typu fire-and-zapomnij. W przypadku ruchu HTTP tak nie jest, więc musisz być w tej samej sieci lokalnej, co serwer sieciowy (całkowicie możliwe, oczywiście w zależności od miejsca hostowania witryny) lub kontrolować routery pośrednie.
źródło
Możesz wysłać list do każdego, a jeśli nie umieścisz adresu zwrotnego na kopercie (lub nie umieścisz niewłaściwego), mogą oni zatrudnić wszystkich filtrujących wiadomości-śmieci na świecie i nie odfiltrować twojej wiadomości bez otwierania (przetwarzanie) ) to.
Jeśli jednak nadawca chce odpowiedzi, adres zwrotny powinien być poprawny lub w celu uzyskania poprawnego adresu musiałby istnieć mechanizm warstwy aplikacji. Mogę sprawić, że pomyślisz, że otwierasz list od Nany, ale nawet jeśli oszukam cię zawartością listu, nie wyślesz Nanie czeku wystawionego do GOTÓWKI na jakiś adres w Nigerii (chyba że Nana jest Nigeryjczykiem ). Wyzwanie / reakcja jest więc skuteczną obroną, o ile nie jesteś również Człowiekiem w Średnim Wieku.
źródło
Mogę ustawić dowolny źródłowy adres IP w datagramie.
To, czy mój dostawca usług internetowych wypuściłby taki pakiet na wolność, to kolejne pytanie.
źródło
Chociaż jest to z pewnością rzeczywistość, z którą należy się uporać, podstawowy problem jest naprawdę nietechniczny: ludzie ze złośliwymi zamiarami próbują robić złośliwe rzeczy. Dlatego prawdziwe rozwiązanie musi być nietechniczne.
Myślę, że to, co zrobił Stackoverflow, jest DOKŁADNIE właściwym rozwiązaniem do obsługi drugiej linii obrony: Techniki ograniczania potencjalnych użytkowników spamu poprzez różne sposoby ograniczania ich możliwości interakcji z platformą przed osiągnięciem pewnego poziomu „wiarygodności”.
Techniki te nie tylko pomagają poprawić ogólną jakość witryny, ale także zachęcają użytkowników do większego zaangażowania i dostarczania bardziej wiarygodnych / wiarygodnych odpowiedzi.
Z technicznego punktu widzenia najlepiej byłoby zrobić, jak sugeruje Google: po prostu być skutecznym w absorpcji / radzeniu sobie z dodatkowym obciążeniem.
Świetna robota i ulepszaj się!
źródło
UDP jest główną częścią tego, dlaczego jest to łatwe - w rzeczywistości Skype i Slingbox wykorzystują możliwość łatwego fałszowania adresów IP w UDP w celu „ przebijania ” się przez NAT i umożliwiania łatwego peer-to-peer.
Protokół TCP jest trudniejszy, ponieważ wymaga pełnego cyklu SYN / ACK, ale nadal można zalać serwer wiszącymi pakietami SYN, które przechodzą na adresy IP z dala od komputera i zasadniczo wiążą ogromną liczbę routerów.
źródło
Jak wspomniano powyżej, korzystanie z serwerów proxy jest trywialne i dostępna jest bardzo duża liczba otwartych anonimowych serwerów proxy.
Nawet bez użycia proxy mogę ustawić adres MAC w mojej zaporze sieciowej na dowolną nową dowolną wartość, zresetować modem kablowy, a mój dostawca usług internetowych przydzieli mi zupełnie nowy błyszczący adres IP.
I to tylko na początek. Istnieje wiele innych sposobów obejścia zakazów IP.
źródło
Niewiele możesz zrobić po stronie odbierającej.
ISP fałszerza powinien filtrować ruch wychodzący, aby jego klienci nie mogli sfałszować adresów IP z różnych sieci.
To tylko kilka linii w konfiguracji routera, więc nie ma dobrej wymówki, aby tego nie robić.
Istnieje sposób na śledzenie osoby atakującej, ale wymaga współpracy dostawców usług nadrzędnych: http://www.cymru.com/Documents/dos-and-vip.html
źródło
Jak zauważyli inni, UDP jest dość trywialne, a TCP nie tyle.
Preferowaną obroną, ale niestety nie wszędzie stosowaną, są filtry wyjściowe.
W przypadku dostawców usług internetowych korzystających z usług DSL itp. Każda linia wirtualna powinna być skonfigurowana z
ip verify unicast reverse-path
(lub czymkolwiek innym niż Cisco), który blokuje każdy pakiet, którego źródłowy adres IP nie znajduje się w zakresie, o którym wiadomo, że jest kierowany tą linią.źródło
Pamiętam, jak programowałem gniazda pod koniec lat 90. przy pomocy prawdopodobnie Visual Basic i mogliśmy ustawić źródłowy adres IP na naszym połączeniu. Pamiętam niejasno, że kiedy próbowaliśmy, netstat -an pokazał rzeczywiste źródłowe IP, ale logi Apache pokazały fałszywe IP; i myślę, że Apache przekazał sfałszowane IP do modułów perla i tak dalej.
źródło