Pytanie:
Czy wyświetlanie komunikatu, że nazwa użytkownika / konto nie istnieje podczas logowania jest niebezpieczne?
styfle
2017-04-25 17:41:56 UTC
view on stackexchange narkive permalink

Zgodnie z Wytycznymi OWASP Auth, „Aplikacja powinna odpowiadać ogólnym komunikatem o błędzie niezależnie od tego, czy identyfikator użytkownika czy hasło są nieprawidłowe. Nie powinno też wskazywać stanu konto. ”

Jednak stwierdziłem, że wiele popularnych aplikacji internetowych narusza te wytyczne, wyświetlając komunikat, że konto nie istnieje.


google


microsoft


slack


Więc o co tu chodzi? Czy Google, Microsoft i Slack robią coś niezabezpieczonego, czy też wytyczne OWASP są bezużyteczne?

Pamiętaj, że wszystkie z nich wymagają podania danych uwierzytelniających (np. Hasła) * po * wprowadzeniu nazwy użytkownika.
Poprawny.Wygląda na to, że są mili dla użytkownika, który błędnie wpisał swoje konto, aby natychmiast go powiadomić, ale wyraźnie narusza to wytyczne OWASP.
Zadawano różne warianty tego pytania [wiele razy.] (Https://security.stackexchange.com/q/62661/56961) Jest nawet tag dla [tag: user-enumeration]
[„Powiadom użytkownika, gdy jego adres e-mail nie istnieje”] (https://blog.codinghorror.com/the-god-login/)
Oprócz kompromisu między bezpieczeństwem a użytecznością jest też fakt, że każdy i tak ma konto w tych usługach.
Jako użytkownik wielu różnych witryn internetowych z wieloma różnymi nazwami użytkowników i adresami e-mail, z pewnością chcę wiedzieć, czy nazwa użytkownika / adres e-mail, którego próbuję użyć, są rozpoznawane przez Twój system, niezależnie od wprowadzanego przeze mnie hasła.Jako użytkownik, który ma problemy z zalogowaniem się, ważne jest, aby wiedzieć, czy moja nazwa użytkownika lub hasło są nieprawidłowe, w przeciwnym razie będę sfrustrowany.
pamiętaj również, że przynajmniej część z nich (gmail) będzie przechowywać Twój adres e-mail / nazwę użytkownika w pliku cookie w postaci zwykłego tekstu, więc Ty (lub ktokolwiek go otrzyma) nie będziesz musiał nawet zawracać sobie głowy sprawdzaniem - domyślnie będą dokładnie wiedzieć, jaka jest Twoja nazwa użytkownikajest.
Nie warto odpowiadać, ale polecam przeczytanie [tego posta na blogu zespołu mailchimp] (https://blog.mailchimp.com/social-login-buttons-arent-worth-it/).Skupia się na problemach, które napotkali użytkownicy podczas logowania i jak sobie z nimi poradzili.Jedna z kwestii dotyczy samego twojego pytania.Ogólne a określone komunikaty o błędach podczas logowania.** TLDR **: To kosztuje użytkowników.Postanowili, podobnie jak duzi gracze, że dla nich dodatkowe bezpieczeństwo nie jest warte utraty użytkowników.
Jeśli chcesz dowiedzieć się, czy konto istnieje, po prostu spróbuj zarejestrować się przy użyciu tej nazwy użytkownika.
Zwróć uwagę, że „adres URL zespołu” na slacku to _nie_ Twoja nazwa użytkownika.Po wybraniu serwera Slack zostaniesz poproszony o podanie osobistej pary nazwy użytkownika i hasła.
Dzięki dostawcom poczty e-mail możesz po prostu wysłać wiadomość e-mail i czekać na odpowiedź.Jeśli pojawi się błąd dostarczania poczty, oznacza to, że nazwa użytkownika nie jest zarejestrowana.
Pamiętaj, że wszystkie zapewniają 2FA.
Siedem odpowiedzi:
Sjoerd
2017-04-25 18:20:44 UTC
view on stackexchange narkive permalink

Jest to kwestia bezpieczeństwa i użyteczności, dlatego nie ma tutaj właściwej odpowiedzi. Oto moja opinia.

Jeśli możesz zachować nazwy użytkowników w tajemnicy, zrób to. W takim przypadku nie ma sposobu, aby dowiedzieć się, czy nazwa użytkownika istnieje, a login reaguje tak samo, czy użytkownik istnieje, czy nie. Zwróć uwagę, że oznacza to również poświęcenie takiej samej ilości czasu na zwrócenie komunikatu o błędzie.

Takie zachowanie może nie być możliwe. Na przykład, jeśli użytkownicy mogą się zarejestrować i wybrać własną nazwę użytkownika, musisz powiadomić ich, gdy nazwa użytkownika już istnieje w systemie. W takim przypadku należy maksymalnie uprościć logowanie, podając najbardziej szczegółowy komunikat o błędzie. Jeśli ktoś może dowiedzieć się, czy użytkownik istnieje, korzystając z funkcji rejestracji, nie ma sensu ukrywać tego przy logowaniu.

_ „Jeśli ktoś może dowiedzieć się, czy użytkownik istnieje, korzystając z funkcji rejestracji, nie ma sensu ukrywać tego przy logowaniu.” _ - możesz to również zrobić za pomocą funkcji resetowania hasła lub z listy profili publicznych (Twitter),lub przez wysłanie wiadomości e-mail i możliwość otrzymania błędu „niedostarczona wiadomość” z serwera poczty (Gmail)
„Jeśli ktoś może dowiedzieć się, czy użytkownik istnieje, korzystając z funkcji rejestracji, nie ma sensu ukrywać tego przy logowaniu” - chyba że rejestracja jest zabezpieczona captcha, a logowanie nie.
@JanDvorak Zatem jest to osobny i raczej poważny problem z logowaniem na początek.Jeśli nie ma sposobu na ograniczenie prób logowania, to już masz znacznie poważniejsze problemy niż tylko „ustalanie nazw użytkowników”.
Nawet jeśli po prostu założę, że moi użytkownicy mają silne hasła i upewnię się, że faktycznie je mają?To znaczy takiego, którego odgadnięcie zajmuje czterdzieści miliardów lat, dwa razy dłużej niż normalnie generuje KeePass i jest pełen różnych ASCII?Powiedzmy, że moje limity szybkości chronią mnie przed atakami dos, ale niewiele więcej?
@JanDvorak Dlatego większość witryn, które pokazują, czy konto istnieje przy logowaniu, zacznie wykonywać captcha przy logowaniu po kilku nieudanych próbach - więc masz kilka prób, w których możesz zebrać prawidłowe nazwy użytkownika, alepo tym są spowolnione przez captcha.
Akceptuję tę odpowiedź, ponieważ ta linia podsumowuje ją: „Jeśli możesz zachować nazwy użytkownika w tajemnicy, zrób to”.W niektórych systemach korporacyjnych funkcja rejestracji nie jest dostępna publicznie, więc istnieją scenariusze, w których można śledzić OWASP.W przykładach, które podałem powyżej, konta te można było łatwo znaleźć poza stroną logowania.
@user11153, w systemach, w których ekran logowania ukrywa, czy nazwa użytkownika była niepoprawna, czy tylko hasło, robię również funkcję resetowania hasła zawsze mówię, że wysłano e-mail na zarejestrowany adres, nawet jeśli nie ma zarejestrowanego adresu.Nigdy nie budowałem systemów, które obejmowałyby serwery pocztowe, ale jestem pewien, że w takich przypadkach można skonfigurować przynajmniej niektóre serwery pocztowe, aby nie zdradzały, czy nazwy użytkowników istnieją, czy nie (oprócz szarej listy, aby spowolnić ataki wyliczeniowe).
Silver
2017-04-25 18:23:42 UTC
view on stackexchange narkive permalink

To nie jedyne wytyczne OWASP, których nie przestrzegają duzi gracze. OWASP często koncentruje się na bezpieczeństwie i ignoruje użyteczność. Może to być ważny wybór projektu, jeśli połączy się go z przyzwoitą polityką haseł, ochroną brutalnej siły (blokada, captcha, ..), MFA, monitorowaniem nieudanych prób logowania itp.

Weź pod uwagę wyliczenie użytkowników to nie tylko problem z możliwością odgadnięcia kont użytkowników, które można później brutalnie wykorzystać do uwierzytelnienia. Niektóre witryny powinny chronić prywatność swoich użytkowników (osoby dorosłe, partie polityczne, randki itp.). Jeśli chcę sprawdzić, czy mój szef korzysta z witryny dla dorosłych, mogę niewłaściwie wykorzystać lukę w liczbie użytkowników, aby wiedzieć, z jakich witryn korzysta.

+1 dla drugiego akapitu, co jest bardzo dobrym argumentem, gdy znasz czyjś login
Arminius
2017-04-25 20:48:40 UTC
view on stackexchange narkive permalink

Po prostu nie możesz temu zapobiec. (Chyba że jesteś gotów poświęcić znaczną część użyteczności).

Wyliczanie użytkowników może być niepożądane i rzeczywiście istnieje potencjał konsekwencje dla bezpieczeństwa (np. jeśli napastnik odkryje, że istnieje prawidłowe konto o nazwie admin , do którego może próbować uzyskać dostęp). Ale w przypadku dużych witryn nie można tego powstrzymać.

Nawet jeśli nie ujawnisz podczas logowania, że ​​użytkownik nie istnieje, w końcu będziesz musiał ostrzec nowych użytkowników, gdy będą próbowali zarejestruj już zajęte imię lub z już używanym adresem e-mail .

Nie ma przyjaznego dla użytkownika sposobu obejścia tego problemu:

Create your Google Account

Już używany adres e-mail na pewno nie będzie problemem, jeśli po prostu wyślesz na podany adres e-mail z informacją, że ktoś próbował założyć konto i czy istnieje już takie dla tego adresu.Ale to nie powstrzyma ich przed sprawdzeniem, czy nazwa użytkownika jest używana, chociaż e-mail spowolniłby to przyjemnie.Jeśli nie masz nic przeciwko nadaniu im losowych przyrostków liczbowych, które mają być dołączane do ich nazw, nie mogą również sprawdzać istniejących nazw.
Zależy to również od usługi.W portalu typu Ashley Madison nie chcesz potwierdzać, czy adres e-mail jest zalogowany, czy nie.W przypadku nazwy użytkownika „tom” jest to mniejszy problem.
Istnieje sposób na zatrzymanie nawet wyliczania „Utwórz użytkownika”.Możesz zezwolić na zduplikowane nazwy użytkownika.tj. wyliczaj użytkowników za pomocą klucza zastępczego i zezwalaj na tę samą nazwę użytkownika różnym użytkownikom.A potem trzymaj kciuki, żeby dwóch użytkowników nie wybrało tego samego hasła :).Dość okropne rozwiązanie, ale możliwe.
@grochmal Dlatego powiedziałem „nie * przyjazny dla użytkownika * sposób”.Chodzi mi głównie o to, że ten problem nie powinien być priorytetem dla większości aplikacji.Zezwolenie na wyliczanie użytkowników i adresów e-mail w taki czy inny sposób jest akceptowane przez wszystkie znane mi platformy.
@grochmal: To w ogóle nie ma sensu.Jak zamierzasz wysłać wiadomość e-mail do osoby, jeśli ktoś inny może uzyskać dokładnie ten sam adres e-mail?
@user21820 - w ogóle nie wspomniałem o e-mailach.To tylko nazwy użytkowników i identyfikatory użytkowników.Użytkownik może wtedy lub nie może dodać e-maila, na który można się z nim skontaktować w celu zresetowania hasła i podobnych rzeczy.Widziałem to zaimplementowane (i nadal było okropne).
@grochmal: Ach dobrze.Myślałem, że odpowiadasz na odpowiedź, która dotyczy wiadomości e-mail, podobnie jak pytanie.Ponieważ nie jesteś, zgadzam się, że jest to możliwe (choć głupie).
... lub opóźnij komunikat o błędzie do ostatniego możliwego punktu w procesie rejestracji, aby wyliczanie było tak niewygodne, jak to tylko możliwe ... też nie jest przyjazne dla użytkownika ...
Aby być uczciwym, przydatne może być posiadanie fikcyjnego konta o nazwie „admin”, bez jakichkolwiek uprawnień, tak aby witryna mogła śledzić każdego, kto próbuje uzyskać do niej dostęp.
Ben Aveling
2017-04-25 19:07:30 UTC
view on stackexchange narkive permalink

Bezpieczeństwo jest względne. Nieco bezpieczniej jest nie podawać informacji o tym, czy konto istnieje, czy nie. Ale to nie znaczy, że przekazywanie takich informacji jest niebezpieczne. Jest to po prostu mniej bezpieczne i tylko nieznacznie.

Jest to szczególnie prawdziwe w przykładach, które podajesz; istnieją inne sposoby znajdowania nazw kont, więc próba ukrycia, czy konto istnieje, nie przynosi korzyści.

Podobnie jak w przypadku każdej formy zabezpieczenia przez zaciemnienie, ukrywanie konta nazwy to słaba kontrola bezpieczeństwa i potrzebne są inne kontrolki.

Mike Ounsworth
2017-04-25 19:14:41 UTC
view on stackexchange narkive permalink

Zgadzam się z odpowiedzią @ Silver, ale chcę się rozszerzyć. Pamiętaj o kontekście; Wytyczne OWASP mają służyć jako praktyczne zasady dla programistów, którzy nie są ekspertami w dziedzinie bezpieczeństwa. Jeśli firma programistyczna ma zespół utalentowanych architektów bezpieczeństwa, nie musi ślepo przestrzegać praktycznych reguł, o ile rozumieją intencje reguł i ograniczają ryzyko w inny sposób.

Analogia: powinieneś wymieniać olej w samochodzie co 3 miesiące lub co 5000 km, ale mechanicy samochodowi często naciskają dłużej, gdy wiedzą, że ich nawyki jazdy są dobre. I to jest w porządku.


Jeśli chodzi o szczegóły, nie jestem ekspertem w wyliczaniu użytkowników ani nie wiem, dlaczego Google i Microsoft podjęły takie decyzje, ale zakładam, że wprowadzili ograniczenia szybkości i czarną listę, aby zapobiec atakom na dużą skalę polegający na wyliczaniu użytkowników, a poza tym zdecydowali, że wygoda użytkownika jest warta dodatkowego ryzyka.

amonsec
2017-04-25 18:13:09 UTC
view on stackexchange narkive permalink

Prawdopodobnie zbyt trudno jest powiedzieć, że naruszają wytyczne OWASP, ponieważ w przypadku aplikacji i usług takich jak Google czy Microsoft muszą one być maksymalnie „zgodne z wymaganiami użytkownika”.

Ponadto wszystkie mają lub oferuj protokoły 2FA.

Prawdopodobnie zbyt trudno jest mówić o naruszeniu, gdy jest to tylko wskazówka).
Douglas Held
2017-04-27 12:07:03 UTC
view on stackexchange narkive permalink

Celem nieujawniania aktywnego identyfikatora użytkownika jest zapobieżenie wyliczeniu dużej liczby kont.

Ściśle mówiąc, możesz się przed tym chronić, zezwalając na zduplikowane konta, ale to straszny projekt i doprowadzi Cię do wszelkiego rodzaju kłopotów.

Innym sposobem na to jest przypisanie użytkownikom identyfikatora - skonstruowanie takiego, który jest nieużywany. Jest to jednak tak słaba użyteczność, że może nie być tego warta *.

Rozsądnym sposobem zminimalizowania ryzyka jest wdrożenie wszelkich zabezpieczeń - funkcja wyliczania - na przykład dobrej jakości captcha, aby spowolnić każdą próbę wyliczenia. Wtedy projekt jest w miarę bezpieczny.

Ryzyko szczątkowe polega na tym, że pozostawiasz otwartą weryfikację jednego konta o bardzo dużej wartości - na przykład barack .obama @ gmail.com. Następnie zmniejszasz to ryzyko, wdrażając kontrolę przed próbami złamania haseł itp.


* Salzer i Shroeder, Ochrona informacji w systemach komputerowych, sekcja IA3 ) h) Akceptowalność psychologiczna: Istotne jest, aby interfejs ludzki był zaprojektowany tak, aby był łatwy w użyciu, tak aby użytkownicy rutynowo i automatycznie stosowali prawidłowo mechanizmy ochrony. Ponadto, w zakresie, w jakim mentalny obraz użytkownika jego celów ochronnych pasuje do mechanizmów, których musi użyć, błędy zostaną zminimalizowane. Jeśli będzie musiał przetłumaczyć swój obraz swoich potrzeb w zakresie ochrony na radykalnie inny język specyfikacji, popełni błędy.



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...