8

Widziałem różne pytania dotyczące tego problemu, ale jest kilka pytań, które nie zostały zadane. Jeśli użytkownik zapomni hasła, chciałbym, aby mogli zresetować go za pomocą swojego adresu e-mail (np. Nie ma pytania/odpowiedzi bezpieczeństwa). Hasło jest przechowywane jako solony skrót, więc nie ma możliwości odzyskania. Zamiast tego chciałbym, aby użytkownik wprowadził nowe hasło po potwierdzeniu, że zażądał resetu.Resetowanie hasła ASP.NET - problemy bezpieczeństwa?

Powszechną metodą, co zostało wspomniane jest po prostu:

1) Utwórz losową Guid/kryptograficznie silny liczbę losową

2) Napisz unikalny adres URL zawierający liczbę losową do poczty elektronicznej użytkownika zajęcia

3) Po potwierdzeniu, użytkownik jest proszony o zmianę hasła

Jednak czy nie jest to otwarte na atak MITM? Jeśli wysyłanie haseł tymczasowych przez Internet do wiadomości e-mail jest niebezpieczne, jaka jest różnica między tym, a wysłaniem unikalnego adresu URL, do którego osoba atakująca może się dostać? Czy przegapiłem kluczowy krok, który sprawi, że ten system będzie bezpieczniejszy (czy jest lepszy sposób na zresetowanie hasła)?

Dzięki

Odpowiedz

9

Jeśli skonstruować swój hash prawidłowo, URL kliknięcie będzie musiała pochodzić z adresu IP, który zażądał reset. To wymagałoby od MITM sfałszowania IP i/lub fałszowania nagłówków. O ile jest to możliwe, im bardziej unikalny identyfikator można zidentyfikować dla danego systemu, tym trudniejsze staje się "zamknięcie" hasza.

Zaleca się również, aby guid był jednokierunkowym hash o określonych kryteriach. Możliwe jest również szyfrowanie danych systemowych w żądaniu za pomocą klucza publicznego, który odblokowuje klucz prywatny, tak aby po kliknięciu adresu URL te same publiczne szyfrowane dane systemowe musiały towarzyszyć hashowi, a jedynym systemem, który mógłby odszyfrować te wartości, byłby klucz prywatny przechowywany na serwerze. Zasadniczo załącznik PKI-PKI do skrótu.

+0

podoba mi się pomysł z próbą zapewnienia linkiem potwierdzającym kliknięcie pochodzi z tego samego komputera, co początkowy zresetować żądanie. –

+2

Jeśli chodzi o aspekt IP, z pewnością ta część byłaby nieistotna? Jako atakujący, twierdzę, żebym sam zapomniał hasła, dlatego żądanie resetowania hasła pochodzi z mojego komputera (atakującego). Wykonując atak MITM, przechwyciłbym wiadomość e-mail, kliknij na link i zmień hasło, ponieważ nadal widzi mój adres IP. – keyboardP

+0

Prawdopodobnie, ale zakłada to, że atakujący już skompromitował konto e-mail. IP byłby tylko jednym małym podzbiorem informacji identyfikacyjnych. Mogą być stosowane inne parametry, które zwiększą złożoność hasza. Klucz nie polegałby na żadnej metodzie, ponieważ każdy musi być narażony na szwank. Im więcej jest wymaganych, tym trudniej jest przejść. W pewnym momencie staje się to kwestią wysiłku a rezultatu. –

7

Twoje środki uwierzytelniania użytkownika to wspólny sekret (hasło).

Jeśli użytkownik zapomni tę tajemnicę, potrzebny jest sposób ustanowienia nowego wspólnego hasła. Niezależnie od tego, jak to zrobisz, nadal będziesz mieć problem z uwierzytelnieniem użytkownika, aby udostępnić nowy sekret.

Jeśli jedyną rzeczą, którą użytkownik wie o użytkowniku, który mógłby zostać użyty do uwierzytelnienia, jest jego adres e-mail, konieczne będzie potwierdzenie, że użytkownik żądający resetowania kontroluje ten adres e-mail.

Jedynym sposobem, aby to zrobić, jest wysłanie wiadomości e-mail z sekretem na ten adres e-mail i sprawdzenie, czy ją otrzymali.

Co zawsze będzie otwarte na wystarczająco podstępny atak MitM.

Powodem, dla którego nie wysyłasz hasła tymczasowego, jest uniknięcie problemu "użytkownik nie może się przejmować zmianą, dlatego używa niestosownego hasła tymczasowego zamiast własnego bezpiecznego."

+1

Zgadzam się z wszystkimi powyższymi. Wystarczy dodać, że hasło tymczasowe powinno być jednorazowe: po zalogowaniu użytkownika nie można go ponownie użyć, a użytkownik musi je zmienić, w przeciwnym razie użytkownik musiałby poprosić o nowe hasło. W żaden sposób nie ominęła ataku MITM, ale powinna pomóc w pewnym stopniu. – JonoW

+0

Ironia tymczasowego hasła jest taka, że ​​prawdopodobnie byłaby bardziej bezpieczna niż rzeczywiste hasło użytkownika: D Jednak przechodzę w dół trasy "link potwierdzający", która blokuje je, dopóki hasło nie zostanie zmienione. – keyboardP

+0

Z wektorem ataku MITM. Jeśli to zostanie zanegowane, jeśli poprosisz o przesłanie nowego hasła, zostaniesz poproszony o sekret. Następnie, kiedy zostanie wysłany link z wiadomości e-mail i klikniesz na link, musisz ponownie wpisać ten sam sekret? –

1

Aby zminimalizować ryzyko Atak man in the middle używam następujące środki:.

  • Żądanie resetu może być użyty tylko jeden raz
  • Jeżeli wniosek reset nie jest używany, wygasa po jednej godzinie.
  • Wszystkie kasowania żądania są trwale rejestrowane czy została ostatecznie zakończona lub wygasł.
+0

Pozwoliłbym, aby reset wyłączył się znacznie szybciej niż godzina. Intencją zresetowania hasła jest natychmiastowy dostęp. Nie można oczekiwać, że "uczciwy" użytkownik będzie czekał godzinę na zresetowanie. –