Неверное имя пользователя или пароль: почему бы не указать какой? [закрыто]

2

При входе на веб-сайты или в мобильные приложения, если введено неправильное имя пользователя / адрес электронной почты или пароль, вы почти всегда получаете уведомление только о том, что «неверное имя пользователя или пароль». Почему это обычно делается вместо того, чтобы конкретно указывать пользователю, является ли это неправильное имя пользователя / адрес электронной почты или пароль?

Я предполагаю, что это в некоторой степени обусловлено безопасностью, но если это так, то насколько велика разница в защите от угроз, неоднозначно сообщая пользователю, что некоторая часть предоставленных учетных данных была неверной?

У меня было много примеров - особенно со старыми или реже посещаемыми веб-сайтами - где я понятия не имею, является ли неправильная часть моей электронной почтой, моим паролем или обоими.

Тревор Д
источник
К сожалению, в системах на базе Windows легко узнать, какие: попробуйте одно и то же имя пользователя 3 или 4 раза, и если вы заблокированы, имя пользователя является действительным; если нет, то это недействительно (возможно, это изменилось за последние пару лет; я не исследовал).
Карл Виттхофт

Ответы:

7

Это было решено на сайте биржи IT Security Stack .

Злоумышленнику намного сложнее угадать правильные комбинации имени пользователя и пароля, чем просто пароли. После подтверждения существования аккаунта на него можно нацелить (возможно, с помощью какого-либо внешнего исследования таких сайтов, как Facebook).

Веб-сайтам также намного удобнее возвращать общий сбой аутентификации, если они запрашивают базу данных для обеих частей учетных данных пользователя (хэш имени пользователя и пароля) одновременно, или если слой аутентификации непрозрачен и просто возвращает ли пользователь законный

В общем, не стоит раскрывать больше информации, чем необходимо. Некоторые злоумышленники могут захотеть получить список («перечислить») пользователей, возможно, для фишинга.

Кроме того, что если пользователь неправильно набирает имя пользователя для создания имени другого пользователя, но получает свой собственный пароль (не пароль другого пользователя) правильно? Тогда в сообщении будет указано «неправильный пароль», даже если ошибка действительно была в имени пользователя.

Бен Н
источник
Как " если они запрашивают базу данных для обеих частей учетных данных пользователя одновременно ", должен быть прочитан? Для меня это звучит так, как будто вы предполагаете, что пароль хранится в открытом виде.
kasperd
@kasperd Если сервер сделал что-то подобное select * from users where username='USERNAME HERE' and passhash='COMPUTED HASH HERE', он либо получит ноль, либо один результат, и он не узнает, что было не так, если он не получил ничего. (Пример из одного из ответов на этот вопрос Sec.SE.)
Бен Н
1
Это было бы лучше, чем хранить пароль в открытом виде. Но хеш безопасного пароля включает в себя соль, которая будет отличаться для каждого пользователя. Таким образом, хэш пароля не может быть вычислен без предварительного поиска соли в базе данных.
Касперд
10

Ваше предположение верно. Указание неверного имени пользователя является формой утечки информации . Используя только форму входа в систему, злоумышленник может определить, есть ли у определенного адреса электронной почты / имени пользователя учетная запись на сайте.

heavyd
источник
Правильный. Если атака, от которой вы хотите защититься, является случайной пробой и ошибкой как пароля, так и имени пользователя, это усложняет взлом / угадывание двойных значений.
Ян Догген
2
Мне кажется, что-то не хватает, почему злоумышленник не может просто проверить, существует ли учетная запись, пытаясь создать учетную запись с таким же именем на странице регистрации?
Эндрю Сан
@AndrewSun, это также распространенный вектор для использования этой уязвимости, и есть способы уменьшить ее. Смотрите здесь
Heavyyd
3

Он основан исключительно на безопасности и конфиденциальности ... Аспект конфиденциальности заключается в том, что большинство людей используют общие имена пользователей на нескольких сайтах, и подтверждение того, что имя пользователя существует, выдает, что человек имеет учетную запись в этой системе, что может быть или не быть значительным в зависимости от сайт или пользователь, но все же выдает некоторую личную информацию. Аспект безопасности довольно прост: если вы попытаетесь аутентифицировать случайные имена пользователей и пароли, сообщив им, что имя пользователя правильное, вырежете возможные комбинации для взлома, значительно сократив время и увеличив шансы на взлом. Есть и другие последствия, но они являются наиболее значительными.

acejavelin
источник
1
Знание имени пользователя не просто сокращает пространство поиска пополам. Предположим, есть 10 ^ 8 возможных имен пользователей и 10 ^ 20 возможных паролей. Если злоумышленник так и не узнает, существует ли пользователь, нужно попробовать 10 ^ 28 пар. Как только злоумышленник узнает, что пользователь существует, остается только 10 ^ 20 пар - сокращение на восемь порядков. (Вероятность немного сложнее, потому что в большом пространстве поиска будет более одного попадания, но вы поняли.)
Бен Н
1
Правда, моя математика может быть неправильной, но в целом я
придерживаюсь