2010-06-03 7 views
13

Mam zamiar zaimplementować RESTful API na naszej stronie internetowej (w oparciu o usługi danych WCF, ale to prawdopodobnie nie ma znaczenia).W jaki sposób zapobiec atakom typu brute force na usługi danych RESTful

Wszystkie dane oferowane za pośrednictwem tego interfejsu API należą do niektórych użytkowników mojego serwera, więc muszę się upewnić, że tylko ci użytkownicy mają dostęp do moich zasobów. Z tego powodu wszystkie żądania muszą zostać wykonane przy użyciu kombinacji login/hasło w ramach żądania.

Jakie jest zalecane podejście do zapobiegania ataki typu brute force w tym scenariuszu?

Miałem na myśli rejestrowanie nieudanych żądań odrzuconych z powodu błędnych poświadczeń i ignorowanie żądań pochodzących z tego samego adresu IP po przekroczeniu pewnego progu nieudanych żądań. Czy to jest standardowe podejście, czy też brakuje mi czegoś ważnego?

Odpowiedz

8

Blokowanie oparte na protokole IP jest ryzykowne ze względu na liczbę bramek NAT.

Możesz spowolnić działanie klienta (tar pit), jeśli szybko wykona zbyt wiele żądań; to znaczy celowo wstawić opóźnienie o kilka sekund przed odpowiedzią. Ludzie prawdopodobnie nie będą narzekać, ale spowolniłeś roboty.

+7

Hm, jak chcesz umieścić CAPTCHA w API RESTfull? AFAIU wszyscy klienci nie powinni być istotami ludzkimi. – SergGr

+0

Dobra rada, musiałem zamrugać nad RESTful bit. Zdradliwy. – crazyscot

+0

Captcha jest tym, czego używam teraz na mojej zwykłej stronie internetowej. Ale jak zauważył początkujący Iphone, nie jest to opcja dla spokojnego api. Tarpitting może być jednak dobrym pomysłem. –

3

Używałbym tego samego podejścia, co w przypadku strony internetowej. Śledź liczbę nieudanych prób logowania w określonym oknie - powiedzmy 3 (lub 5 lub 15) w rozsądnym zakresie, powiedzmy 15 minut. Jeśli próg zostanie przekroczony, zablokuj konto i oznacz czas, w którym nastąpiło zablokowanie. Możesz również zarejestrować to zdarzenie. Po upływie kolejnego odpowiedniego okresu, powiedz godzinę, odblokuj konto (przy następnej próbie logowania). Pomyślne logowania resetują liczniki i ostatni czas blokady. Zauważ, że nigdy nie próbujesz zalogować się na zablokowanym koncie, po prostu wracasz do logowania.

To skutecznie ograniczy wszelki atak brutalnej siły, powodując, że atak na uzasadnione hasło będzie mało prawdopodobne. Osoba atakująca, używając powyższych numerów, będzie mogła spróbować tylko 3 (lub 5 lub 15) razy na 1,25 godziny. Korzystając z dzienników, można było wykryć, kiedy taki atak miał miejsce, po prostu szukając wielu blokad z tego samego konta w tym samym dniu. Ponieważ twoja usługa ma być używana przez programy, kiedy program uzyskujący dostęp do usługi ma ustawione swoje poświadczenia, nigdy nie dozna logowania, chyba że trwa atak. To byłaby kolejna wskazówka, że ​​może nastąpić atak. Kiedy wiesz, że atak jest w toku, możesz podjąć dalsze kroki w celu ograniczenia dostępu do przestępczych adresów IP lub w razie potrzeby włączyć władze i zatrzymać atak.

+2

Czy nie ułatwiłoby to uruchamiania ataków DOS na konta użytkowników? Na przykład złośliwy konkurent naszej witryny może celowo blokować użytkowników, publikując nieprawidłowe hasła. Nie uzyskałby dostępu do swoich kont, ale udało mu się sprawić, by nasza strona wyglądała niewiarygodnie. Dlatego rozważałem podejście oparte na protokole IP - osoba atakująca musiałaby podrobić adres IP prawdziwego użytkownika, aby go zablokować. –

+0

@Adrian - tak, ale to inny problem. Użycie rozwiązania opartego na IP w celu rozwiązania problemu może sprawić, że twoja usługa będzie rzeczywiście niewiarygodna, ponieważ może to być po prostu zapomnienie o aktualizacji skryptu po zmianie hasła.W takim przypadku użytkownik może po prostu poczekać, aż upłynie limit czasu, i spróbować ponownie bez udziału użytkownika. Korzystając z rejestrowania, nadal będziesz w stanie wykryć atak DOS i umieścić blok IP z wrogiej strony, aw takim przypadku zadzwoń do władz na pewno. – tvanfosson

Powiązane problemy