Pytanie:
„Nieprawidłowa nazwa użytkownika i / lub hasło” - dlaczego strony internetowe wyświetlają tego rodzaju komunikaty zamiast informować użytkownika, który z nich jest nieprawidłowy?
bobble14988
2012-07-30 13:40:00 UTC
view on stackexchange narkive permalink

Powiedzmy, że użytkownik loguje się do typowej witryny, wpisując swoją nazwę użytkownika i hasło, i błędnie wpisuje jedno ze swoich danych wejściowych. Zauważyłem, że większość witryn, jeśli nie wszystkie, wyświetla ten sam komunikat (coś w rodzaju „Nieprawidłowa nazwa użytkownika lub hasło”), mimo że tylko jedno wpisane jest błędne.

Wydaje mi się to dość łatwe aby powiadomić użytkownika o błędnych danych wejściowych i zastanawiałem się, dlaczego strony tego nie robią. Więc czy jest to powód bezpieczeństwa, czy jest to po prostu coś, co stało się normą?

For websites which offer a different way to see if a user exists, there is no security gain. They're just being annoying.
Powód niezwiązany z bezpieczeństwem: Jeśli baza danych zawiera zaszyfrowane i zaszyfrowane hasła, ustalenie, że hasło pasuje do istniejącego, wymagałoby zaszyfrowania hasła dostarczanego z każdą solą (mamy nadzieję, że po jednym na użytkownika) w bazie danych.
Jednym z powodów całkowicie niezwiązanych z bezpieczeństwem jest to, że możliwe jest, że dostawca nie wie, co było nie tak. Na przykład. jeśli bob1@provider.com błędnie wpisuje swoją nazwę użytkownika jako bob2@provider.com i naprawdę istnieje inny użytkownik bob2@provider.com.
@MarkBeadles ... jednostka logowania nie będzie wiedzieć, czy nazwa użytkownika jest prawidłowa? Być może będziesz musiał to jeszcze wyjaśnić ...
1. BOB1@PROVIDER.COM błędnie wpisuje identyfikator jako „BOB2@PROVIDER.COM” i poprawnie wpisuje swoje (własne) hasło2. Użytkownik BOB2 istnieje w magazynie użytkowników3. podmiot logujący uważa, że ​​BOB2 błędnie wpisuje swoje hasło, podczas gdy w rzeczywistości BOB1 błędnie wpisał swoją nazwę użytkownika.
Zgodziłbym się, że to ze względów bezpieczeństwa. ** Nie znam żadnej witryny internetowej, w której nazwa użytkownika powinna być tajna. ** Na przykład: Google wykonuje operację „Nieprawidłowa nazwa użytkownika i / lub hasło”, ale nadal możesz sprawdzić, czy nazwa użytkownika istnieje (próbując zarejestruj go).
@JoãoPortela, ale ekran tworzenia jest chroniony przez captcha. To jest różnica.
Occam's Razor mówi: Programiści są leniwi. :)
@JoãoPortela nie wszystkie systemy umożliwiają automatyczną rejestrację.
Because hackers can easily hack the accounts if they know any one thing correctly
@user606723 uczciwy punkt (zapomniałem o tym). Mimo to: Twoja nazwa użytkownika to Twój adres e-mail, co sprawia, że ​​jest on bardzo publiczny.
@Affe tak, ale nadal widzisz to zachowanie w systemach z publicznymi nazwami użytkowników, gdzie nie ma zastosowania uzasadnienie „to dla bezpieczeństwa”. W związku z tym musi istnieć inny powód ... Może dlatego, że wszyscy to robią.
Even if system allows to check if account exists in some other way, this would still slow down bruteforcing by amount of those requests.
@JoãoPortela, zastanów się nad tym: jeśli Gmail pozwoli ci dowiedzieć się, czy identyfikator użytkownika istnieje bez captcha, umożliwiłby spamerom przechwytywanie legalnych kont e-mail. I masz rację, jeśli są przypadki, w których identyfikatory użytkowników są całkowicie publiczne, prawdopodobnie jest to zgodne z konwencją. Dlaczego kod Twojej witryny nie miałby obsługiwać obu wystąpień?
@user606723 W międzyczasie czytałem [ExpectoPatronum] (http://security.stackexchange.com/a/17857/2304) i podobne i ma to o wiele więcej sensu. Po prostu nie kupowałem całości: „po tym, jak znają nazwę użytkownika, muszą tylko odgadnąć hasło”.
AilidrxdcjCMT In the case of Google, the captcha is there for signing up (like submitting the form), the validation is done via AJAX. You can see the URL, and the POST parameters, and the headers, so the hidden usernames are not the issue.
@MarkBeadles Możliwość błędnego wpisania nazwy użytkownika i przesłania przez użytkownika jest niezwykle rzadka. Podziel go przez miliard i uzyskaj możliwość, że błędnie wpisana nazwa użytkownika będzie pasować do innego użytkownika. Jednak gdy baza użytkowników jest ogromna (jak Google czy Yahoo), prawdopodobieństwo takiego zdarzenia jest większe. Ale nawet wtedy, gdy bob1 pomyli się bob2, nie wiedząc, że faktycznie jest bob1, witryna może powiedzieć „Hasło jest nieprawidłowe dla bob2”, a użytkownik napotka problem.
Some sites will tell you if the email address you've given already exists in their system when registering (sometimes pointing you towards the password reset function). Can anyone shed some light on how this isn't giving a malicious user another way to discover valid usernames? (I'm not talking about informative JavaScript prompts, etc. solely here)
Po prostu dodając więcej do ognia: facebook faktycznie mówi ci, kiedy nazwa użytkownika nie istnieje. :)
Microsoft również: „* To konto Microsoft nie istnieje. Wprowadź inny adres e-mail lub załóż nowe konto. *„ / ”* To hasło jest nieprawidłowe. Upewnij się, że używasz hasła do konta Microsoft. *”
Jedenaście odpowiedzi:
user10211
2012-07-30 13:44:08 UTC
view on stackexchange narkive permalink

Jeśli złośliwy użytkownik zacznie atakować witrynę, odgadując typowe kombinacje nazwy użytkownika i hasła, takie jak admin / admin, atakujący będzie wiedział, że nazwa użytkownika jest prawidłowa, jeśli zwraca komunikat „Hasło nieprawidłowe” zamiast „Nazwa użytkownika lub hasło nieprawidłowe” .

Jeśli atakujący wie, że nazwa użytkownika jest prawidłowa, może skoncentrować swoje wysiłki na tym konkretnym koncie, używając technik takich jak wstrzyknięcia SQL lub brutalne forsowanie hasła.

Czy to nie zakłada, że ​​ustalenie nazwy użytkownika innymi sposobami jest tak trudne, jak odgadnięcie hasła? Jak wskazuje @CodesInChaos, jeśli możesz zweryfikować nazwę użytkownika w inny sposób, to naprawdę bezcelowe jest zaciemnianie jej w tym jednym interfejsie.
@kojiro Tak, zakłada to. Ale to nie jest złe założenie.
AiliqcqyfaCMT I think it's not uncommon that accounts that can be used to administer the website are not published in any publicly viewable username list.
AilidsiwopCMT I disagree, for most widely known websites (gmail, facebook, twitter...) the username is very much public.
Czy nie miałoby sensu, aby witryna informowała, że ​​każdy możliwy identyfikator użytkownika jest ważny i oferuje również zmyślony pomocniczy adres e-mail? Czy pomogłoby to w zapobieganiu złośliwemu zachowaniu, pozwalając hakerom marnować czas na identyfikatory użytkowników, które w rzeczywistości nie istnieją i nie mają haseł do złamania?
@lazfish, ale wtedy możesz po prostu wyświetlić zwykłą wiadomość „nazwa użytkownika lub hasło jest niepoprawna” i nazwać ją dniem, to prawie to samo.
@lazfish, nie, ponieważ każdy inteligentny użytkownik byłby w stanie powiedzieć, że to fałszywa wiadomość. Zgadzam się z Mahn.
W rzeczywistości byłoby to to samo, ale działałoby również w środowiskach z walidacją każdego elementu.
AiligkjbaaCMTãoPortela I did not say that it is a valid assumption for all cases, I said that it is not a bad assumption. Of course some sites have very public usernames, and in that case, if you know a valid username, all you need to do is to guess the password, but as a general case for a designer, it is better to assume that the username is not known.
He can just attack the sign up page, silly.
Wystarczy spojrzeć na to z innej perspektywy, powiedzmy, że haker brutalnie wymusza tylko hasła, ponieważ są ludzie, którzy mają dość słabe hasła. Znalazłby prawidłowe hasło, system ma np. 1000 użytkowników, pisze prosty skrypt, który usuwa nazwy użytkowników ze strony internetowej, a następnie musi tylko wypróbować wszystkie nazwy użytkownika, czyli w tym przypadku 1000 prób. Ta metoda jest szybsza, ponieważ osoba atakująca używa * najłatwiejszego * hasła.
Szkodliwy użytkownik może dowiedzieć się, czy nazwa użytkownika jest brana podczas rejestracji. Nie pozwolisz dwóm użytkownikom zarejestrować się przy użyciu tej samej nazwy użytkownika. Dlatego ukrywanie komunikatu o błędzie logowania jest bez znaczenia.
@Gajus nie wszystkie strony internetowe oferują formularze rejestracyjne.W niektórych witrynach SaaS administrator musi dodać użytkowników.
ROFLwTIME
2012-07-30 18:12:28 UTC
view on stackexchange narkive permalink

Jak wspominali inni, nie chcemy, abyś wiedział, czy to nazwa użytkownika lub hasło były błędne, abyśmy nie byli tak podatni na brutalną siłę lub słownikowe ataki ..

Jeśli niektóre witryny chciałyby poinformować swoich użytkowników, która z nich się nie powiodła, mimo że nadal są na zielono pod względem bezpieczeństwa, mogliby zaimplementować „ honeypot” nazwy użytkownika (takie jak Administrator, admin itp.), które ostrzegałyby administratorów witryn, że ktoś węszy w ich witrynie. Mógłbyś nawet ustawić logikę blokowania ich adresów IP, gdyby próbowali zalogować się przy użyciu jednej z tych nazw użytkowników „honeypot”. Znam jedną osobę, która faktycznie miała stronę internetową i umieściła w swoim kodzie źródłowym komentarz HTML, taki jak „Odkąd ciągle zapominasz Richarda: Nazwa użytkownika: cheese Hasło: Burger123” w pobliżu pola logowania z zamiarem monitorowania każdego adresu IP, który próbował użyć ta nazwa użytkownika / hasło. Dodanie takiej logiki monitorowania to świetna zabawa podczas tworzenia strony internetowej.

Oczywiście rejestrowanie nieprawidłowych prób logowania i dodawanie odpowiedniej logiki do obsługi tych adresów IP również działa. Wiem, że niektórzy by się ze mną nie zgodzili, ale w zależności od rodzaju witryny internetowej nie wydaje mi się, aby powiadomienie użytkownika było zbyt skomplikowane, o ile dodasz dodatkowe środki bezpieczeństwa w celu zapobiegania różnego rodzaju atakom.

Uwielbiam pomysł zakodowanej fałszywej nazwy użytkownika / hasła w celu szybszej identyfikacji hakerskich adresów IP.
+1 for the mention of honeypot usernames, though you should make absolutely sure legitimate users cannot create accounts with the same name as the honeypots!
Ech; niektórzy uprawnieni użytkownicy mogą przeglądać kod HTML z uzasadnionych powodów (jak zaimplementowano formularz; czy to jest obraz?); i bądź poważny; na stronie jest hasło i po prostu je wypróbuj.
Nie widzę wartości drugiego i trzeciego akapitu w odniesieniu do zadanego pytania.
dr jimbob
2012-07-31 00:48:25 UTC
view on stackexchange narkive permalink

Moja ulubiona bezpieczna implementacja jest wykonywana przez bank, z którego korzystam. Jeśli poprawnie wpiszę swoją nazwę użytkownika, powie: „Witaj Jimbob!” a następnie wyświetla monit o udzielenie odpowiedzi na pytania zabezpieczające (jeśli nigdy nie logowałem się z tej przeglądarki na tym komputerze), poczekaj, aż odpowiem poprawnie na pytania zabezpieczające, a następnie pokaże mi mój obraz / podpis zabezpieczający i wprowadzę hasło. Jeśli wpiszę niewłaściwą nazwę użytkownika, zobaczę coś w stylu „Witaj Bessie / Kareem / Randal!” gdzie wyświetlana nazwa jest bardzo rzadka - chociaż zawsze będziesz mieć tę samą nazwę dla tej samej nazwy użytkownika (zwykle nie mam pewności co do jednej lub dwóch nazw użytkownika; a niewłaściwa nazwa konsekwentnie nazywa mnie Frenshelia). Zakładam, że został zaimplementowany jako jakiś rodzaj niekryptograficznego skrótu zastosowanego do dowolnej wprowadzonej nazwy użytkownika, która w unikalny sposób mapuje jedną nazwę użytkownika na długiej liście dość nietypowych nazw. Dzięki temu uprawnieni użytkownicy wiedzą, czy wpisali niewłaściwą nazwę użytkownika (na przykład, jeśli masz niezwykłą nazwę, taką jak Bessie; jest bardzo mało prawdopodobne, że zła nazwa użytkownika, którą przypadkowo odgadłeś, odwzorowuje z powrotem na Twoje konkretne, niezwykłe imię), nie czyniąc tego oczywistym dla osób próbujących aby znaleźć losowe konta, których nazwa użytkownika nie istnieje.

Na marginesie: nie przepadam za kwestiami bezpieczeństwa / obrazami bezpieczeństwa, które wydają się graniczyć z teatrem bezpieczeństwa. Zaawansowany napastnik przeprowadzający atak typu man-in-the-middle (MITM) (np. Po zainstalowaniu fałszywych certyfikatów w Twojej przeglądarce internetowej i spoofingu DNS / ARP w celu wskazania twojemu bankowi.com adresu IP) może poczekać, aż spróbujesz się zalogować do witryny, a następnie zautomatyzowany skrypt zaloguj się na swoim komputerze do prawdziwej witryny, otrzymaj pytania zabezpieczające, wyświetl wybrane pytania bezpieczeństwa z powrotem, odeślij odpowiedzi do witryny samodzielnie z przeglądarki, poczekaj na zabezpieczenie image, podaj z powrotem obraz bezpieczeństwa, a następnie poczekaj, aż wprowadzisz hasło od ich końca, w którym to momencie używają hasła, aby zalogować się jako Ty i robić złośliwe rzeczy. Przyznanie pytań + obraz sprawia, że ​​proces jest trudniejszy niż cały czas na świecie, aby zebrać wszystkie obrazy bezpieczeństwa dla różnych zaatakowanych nazw użytkowników, zamieniając je w atak, który należy wykonać w czasie rzeczywistym i prawdopodobnie pozostawia podejrzany podpis .

Tak, ale jeśli tego nie zrobią, w jaki sposób hakerzy mają dostać się na inne konta ludzi bez konieczności podawania hasła? (Te pytania bezpieczeństwa też mnie niepokoją - zwłaszcza, gdy są obowiązkowe, z listy zestawów, a odpowiadanie na nie nie powoduje wysłania tylko linku. Osoba, która nie znała ulubionej książki użytkownika w trzeciej klasie, teraz wie, a ponieważ niektórzy administratorzy są idiotami, ta informacja jest o wiele bardziej przydatna niż doskonale bezpieczne hasło ...)
Czasami hasła są mieszane przez sieć. Serwer wysyła sól, łączysz swoje hasło z solą, a następnie haszujesz, a następnie wysyłasz swój hash na serwer. Osoba atakująca może uzyskać dostęp do tej konkretnej sesji, ale nie pozna Twojego hasła na przyszłe sesje. Jeśli istnieje sprytniejszy plan, chciałbym go usłyszeć.
Dyppl
2012-07-31 00:54:17 UTC
view on stackexchange narkive permalink

Inne odpowiedzi zapewniają dobry wgląd w przyczyny bezpieczeństwa stojące za tym zachowaniem. Chociaż są poprawne, jestem prawie pewien, że przynajmniej niektóre strony internetowe mają zaprogramowaną procedurę autoryzacji w taki sposób, że nie można stwierdzić, co było nie tak - login lub hasło.

Przykład zapytanie:

  SELECT COUNT (*) FROM users WHERE login = 'john' AND hash = '2bbfcdf3f09ae8d700402f36913515cd'  

Zwróci to 1 po udanej próbie logowania i 0 jeśli nie ma użytkownika o takiej nazwie lub ten użytkownik ma inne hasło. Nie ma sposobu, aby stwierdzić, która część warunku zawiodła. Więc jeśli chodzi o wyświetlanie komunikatów o błędach, programista szczerze mówi ci, że coś jest nie tak i nie jest do końca pewien, co to jest.

Osobiście widziałem podobne zapytania na kilku stronach opartych na PHP, więc Jestem prawie pewien, że część tego powodu pochodzi ze sposobu kodowania procesu uwierzytelniania, tak naprawdę.

I have made login prompts that responded with the phrase for this exact reason!
@monoceres W takim przypadku najprawdopodobniej robisz to źle. Albo twoje hasła nie są solone, albo wszystkie mają tę samą wartość.
Kontynuując punkt kba, używanie tej samej soli do wszystkich wartości, czasami nazywanej pieprzem, jest w zasadzie równoważne z całkowitym brakiem soli; ponieważ wszystkie konta mogą być atakowane równolegle. Ponadto należy zawsze uważać na ciągłe porównywanie łańcuchów w czasie, czego SQL nie wykona; nawet jeśli są hashowane (zwłaszcza jeśli haszowanie jest wykonywane po stronie klienta). W przeciwnym razie można użyć ataków czasowych.
Tak, ale było to w projektach szkolnych i projektach hobbystycznych, więc nie musisz się martwić :)
Żeby było jasne, mówię, że taka praktyka istnieje. Oczywiście, że jest zły.
AilijsimxqCMT What if your query is something like: "SELECT COUNT(*) FROM users WHERE username = '_USER_' AND hash = HASHFUNC(_PEPPER_ + _PASSWORD_ + salt);". Wouldn't this be a perfectly legitimate query which wouldn't let you know which was wrong?
@ZetaTwo: by tak, ale wymaga zbudowania funkcji mieszania w określonym dialekcie SQL
Myślę, że nastąpiło to * po * uświadomieniu sobie / uzgodnieniu niejednoznacznego błędu logowania. Nie sądzę, żeby to jajko było przed tym kurczakiem. Niektórzy programiści idą na skróty, ponieważ wiedzą, że nie muszą (i nie powinni) mówić użytkownikowi, czy to e-mail lub hasło były nieprawidłowe.
Charlie Rudenstål
2012-07-31 04:36:44 UTC
view on stackexchange narkive permalink

Istnieje jednak inna interesująca technika, którą można zastosować do wykonania ataku na wyliczenie użytkowników (i nie tylko). Nazywa się to atakiem czasowym . Atakujący po prostu mierzy czas odpowiedzi na żądanie uwierzytelnienia i różnicę między prawidłowym a nieprawidłowym loginem.

  1. Zdalne ataki czasowe w skali nanosekundowej na aplikacje PHP: czas potraktować je poważnie ?
    http://blog.astrumfutura.com/2010/10/nanosecond-scale-remote-timing-attacks-on-php-applications-time-to-take-them-seriously/

  2. Lekcja synchronizacji ataków
    http://codahale.com/a-lesson-in-timing-attacks/

  3. Stałe porównywanie ciągów czasowych w PHP w celu zapobiegania atakom czasowym
    https://codereview.stackexchange.com/questions/13512/constant-time-string- porównanie-w-php-do-zapobiegania-atakom-czasowym

Chodzi mi o to, że taka wiadomość nie wystarczy, jeśli chcesz zabezpieczyć swoją aplikację przed tego rodzaju zagrożenie.

Lucas Kauffman
2012-07-30 13:42:53 UTC
view on stackexchange narkive permalink

Powód związany z bezpieczeństwem jest taki, że w przeciwnym razie znacznie łatwiej będzie znaleźć prawidłowe nazwy użytkownika.

StasM
2012-07-31 04:41:44 UTC
view on stackexchange narkive permalink

Oprócz wszystkich wspaniałych odpowiedzi, które już zostały udzielone, istnieje ogólna zasada bezpieczeństwa, która mówi, że nie należy podawać niechcianych informacji nieautoryzowanym użytkownikom. To znaczy. jeśli masz możliwość wyboru odpowiedzi „Twoje dane uwierzytelniające są nieprawidłowe” lub wyjaśnienia, która część jest nieważna - zawsze powinieneś wybrać tę pierwszą. Niektóre bardzo nieprzyjemne ataki kryptograficzne opierają się na najmniejszej ilości informacji o błędach dostarczonych przez implementację, która stara się być „pomocna” - patrz Atak Padding oracle. Dlatego dobrym pomysłem jest zawsze wybieranie możliwie najmniejszej ilości informacji ujawnianej nieautoryzowanemu podmiotowi - tj. Jeśli jego kombinacja nazwy użytkownika / hasła nie jest dobra, zawsze odpowiadasz „nazwa użytkownika / hasło nie jest dobre” i nigdy więcej nie ujawniaj dane. Nawet jeśli w konkretnym przypadku (np. W Gmailu, gdzie nazwa użytkownika jest publiczna) nie jest to ważne, dobrze jest przyjąć ją domyślnie.

aayush anand
2012-07-30 19:20:02 UTC
view on stackexchange narkive permalink

Załóżmy, że wpisujesz losową nazwę użytkownika i równie losowe hasło (pamiętaj tylko, jakie hasło wprowadzasz). Teraz hasła mogą być wspólne dla n użytkowników. Tak więc, jeśli witryna mówi, że hasło jest poprawne ... to wiesz, co nastąpi dalej ... chaos wśród prawdziwych użytkowników, ponieważ uzyskanie nazw logowania jest dość łatwe.

Jakub Šturc
2012-07-31 00:02:37 UTC
view on stackexchange narkive permalink

Podanie niejednoznacznej odpowiedzi jest przydatne, aby zapobiec atakowi wyliczenia użytkowników.

W niektórych przypadkach osoba atakująca nie musi włamać się na konto użytkownika. Informacje, że użytkownik ma konto, są wystarczające bez żadnych innych działań. Na przykład cenną informacją dla handlu jest to, że ich klient ma konto w konkurencyjnym sklepie internetowym.

Niks
2012-07-31 04:31:25 UTC
view on stackexchange narkive permalink

Doceniam różne odpowiedzi powyżej, ponieważ mówią one najbardziej, ale czasami aplikacje nie wiedzą, co jest błędną nazwą użytkownika lub hasłem. W przypadku uwierzytelniania opartego na tokenach specjalnie do implementacji SSO (Single Sign On) np. IBM Tivoli Access Manager aplikacja otrzyma pomyślny token lub zwraca błąd.

Verena Haunschmid
2012-07-31 00:22:43 UTC
view on stackexchange narkive permalink

jeśli login jest adresem e-mail, łatwo jest stwierdzić, że dana osoba jest zarejestrowana na stronie internetowej - mogę tego nie chcieć >> Czasami ludzie używają prawdziwego hasła konta e-mail do witryn, które rejestrują, gdy używają identyfikatora e-mail jako loginu id :)



To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 3.0, w ramach której jest rozpowszechniana.
Loading...