Почему проверка неправильного пароля должна занимать больше времени, чем проверка правильного?

84

Этот вопрос меня всегда волновал.

В Linux при запросе пароля, если вы введете правильный пароль, он проверяет сразу, почти без задержки. Но, с другой стороны, если вы введете неправильный пароль, проверка займет больше времени. Это почему?

Я наблюдал это во всех дистрибутивах Linux, которые когда-либо пробовал.

Флавио Амиейро
источник
Вы обнаружите, что это справедливо и для Windows. Кроме того, изменение Заголовка на что-то вроде «Почему неправильные пароли занимают больше времени, чем правильные». Сделал бы это больше связанным с программированием.
he_the_great
Я просто зашел в свою систему Ubuntu, ввел неправильный пароль и задал себе тот же вопрос. :-)
johngreen

Ответы:

107

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

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

Последнее особенно важно. Это означает, что никаких полезных сообщений вроде:

Your user name is correct but your password is wrong, please try again

или же:

Sorry, password wasn't long enough

Нет даже разницы во времени в ответе между причинами отказа «неверный пользователь и пароль» и «действительный пользователь, но неверный пароль».

Каждый сбой должен предоставлять точно такую ​​же информацию, текстовую или другую.

Некоторые системы идут еще дальше, увеличивая задержку при каждом сбое или допуская только три сбоя, а затем с большой задержкой перед разрешением повторной попытки.

Paxdiablo
источник
1
Как это предотвратить разветвление приложения, попытки ввода пароля, и если оно не вернет успех в течение некоторого времени, убить -9 потомка и снова выполнить fork. Да, это работает, только если вы можете войти в систему как пользователь, но когда это кого-то остановило?
BCS
2
Это никого не останавливает, но вы все равно должны отложить это «какое-то время». Даже маленькая задержка делает проверку миллионов паролей бесполезных, и вы будете обнаружить , если вы делаете это, зарегистрировавшись на - Как вы думаете , ничего не регистрируетесь для неудачных попыток входа?
paxdiablo
5
BCS: если у вас уже есть действующий логин с достаточными привилегиями, чтобы делать то, что вы предлагаете, скорее всего, вам больше не нужны атаки грубой силой (потому что вам доступны другие векторы атак). Задержка наиболее полезна против внешних злоумышленников.
Эрих Китцмюллер
14

Это заставляет угадывать пароли дольше.

Росс
источник
12

Я не уверен, но довольно часто можно интегрировать задержку после ввода неправильного пароля, чтобы усложнить атаки. Это делает атаку практически невозможной, потому что вам потребуется много времени, чтобы проверить всего несколько паролей.

Даже попытка ввести несколько паролей - даты рождения, имя кота и тому подобное - превращается в никуда.

Даниэль Брюкнер
источник
И часто тайм-аут при втором сбое больше, чем при первом, что тоже хорошо.
Джонатан Леффлер,
Вы видели новость о наиболее вероятных паролях? 123456 очень популярен!
Spence
@Spence, я действительно видел эти предметы, но, по памяти, это не так плохо, как думали люди, они (как обычно делают СМИ) раздували их до непомерно. Пароли были взяты из списков скомпрометированных учетных записей, найденных в Интернете, а это означает, что они с гораздо большей вероятностью будут небезопасными (потому что они были скомпрометированы). 123456может также составлять 30% (например) скомпрометированных счетов , но вряд ли где - нибудь рядом , что значительные по всем счетам.
paxdiablo
Нет, эти списки взяты из взлома базы данных паролей, и большинство из них представляют собой образцы наборов в миллионы. Результаты этих взломов были подтверждены множеством онлайн-наборов данных и хорошо репрезентативны для «среднего» потребителя. Единственный способ получить лучшие пароли - это принудительно применить их при создании или, еще лучше, использовать двухфакторную аутентификацию, которая в любом случае намного полезнее.
Spence
12

В основном для защиты от грубой силы и словарных атак.

Из Руководства разработчика приложений Linux-PAM :

Планирование задержек

extern int pam_fail_delay(pam_handle_t *pamh, unsigned int micro_sec);

Эта функция предлагается Linux-PAM для облегчения задержек по времени после неудачного вызова pam_authenticate () и до того, как управление будет возвращено приложению. При использовании этой функции прикладной программист должен проверить, доступна ли она с помощью,

#ifdef PAM_FAIL_DELAY
    ....
#endif /* PAM_FAIL_DELAY */

Как правило, приложение запрашивает аутентификацию пользователя с помощью Linux-PAM посредством вызова pam_authenticate () или pam_chauthtok (). Эти функции вызывают каждый из составных модулей аутентификации, перечисленных в соответствующем файле конфигурации Linux-PAM. В соответствии с указаниями этого файла один или несколько модулей могут выйти из строя, в результате чего вызов pam _... () вернет ошибку. Желательно, чтобы также была пауза перед продолжением приложения. Основная причина такой задержки - безопасность: задержка в первую очередь препятствует атакам по словарю методом грубой силы, но также помогает предотвратить атаки по таймеру (по скрытому каналу).

user32542
источник
8

Это очень простой, практически не требующий усилий способ значительно повысить безопасность. Рассматривать:

  1. Система Aне имеет задержки. У злоумышленника есть программа, которая создает комбинации имени пользователя и пароля. При скорости тысяч попыток в минуту требуется всего несколько часов, чтобы попробовать каждую комбинацию и записать все успешные входы в систему.

  2. Система Bгенерирует 5-секундную задержку после каждого неверного предположения. Эффективность атакующего была снижена до 12 попыток в минуту, что эффективно препятствует атаке методом грубой силы. Чтобы найти действительный логин, вместо часов могут потребоваться месяцы. Если бы хакеры были такими терпеливыми, они бы стали законными. :-)

Адам Лисс
источник
4

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

Вам также может быть интересно узнать, что в зависимости от того, что вы используете в качестве оболочки входа в систему, обычно есть способ настроить эту задержку.

В GDM задержка устанавливается в файле gdm.conf (обычно в /etc/gdm/gdm.conf). вам нужно установить RetryDelay = x, где x - значение в секундах.

Большинство дистрибутивов Linux в наши дни также поддерживают определение FAIL_DELAY в /etc/login.defs, что позволяет вам установить время ожидания после неудачной попытки входа в систему.

Наконец, PAM также позволяет вам установить атрибут nodelay в вашей строке auth, чтобы обойти задержку сбоя. ( Вот статья о PAM и Linux )

Пьер-Люк Симар
источник
1

Я не думаю, что это может быть так просто, как предполагают ответы.

Если ответ на правильный пароль (какое-то значение) происходит немедленно, разве вам не нужно просто ждать дольше этого значения, чтобы узнать, что пароль неправильный? (по крайней мере, вероятностно знать, что подходит для взлома) И в любом случае вы бы запускали эту атаку параллельно ... это все один большой приветственный коврик DoS?


источник
они имели в виду не это. существует очевидная разница между неправильным и правильным паролем. они имели в виду, что не должно быть разницы между неправильным именем пользователя и неправильным паролем. и вы имеете в виду запуск этой атаки параллельно? как можно запустить его параллельно?
mpen 03
@Mark, работающий параллельно, вероятно, повлечет за собой открытие нескольких соединений и попытку входа в систему. По-прежнему отнимает много времени и не очень практично.
he_the_great
Если вы можете запускать миллион проверок в секунду на не замедленном соединении, а затем к соединению добавляется 1-секундная задержка для неудачных попыток, вам понадобится миллион клиентов атаки, чтобы получить тот же эффект. Я сомневаюсь, что сервер позволит создать такое количество сеансов Telnet.
paxdiablo
Дело в том, что вам не нужно ждать задержки, прежде чем вы попробуете следующий пароль, так что толку?
@Greg, вам нужно повторно подключиться к хосту, и, если необходимо, следующим шагом будет проверка IP-адресов, чтобы также это уловить.
paxdiablo
1

То, что я пробовал раньше, казалось, сработало, но на самом деле нет; если вам не все равно, вы должны просмотреть историю редактирования вики ...

Что делает работу (для меня) в том, чтобы как снизить значение задержки pam_faildelay.so = Х в файле /etc/pam.d/login (я опустил его на 500000, половина второго), а также добавить NODELAY (а предшествует пробел) до конца строки в common-auth , как описано Габриэлем в его ответе.

auth [success=1 default=ignore] pam_unix.so nullok_secure nodelay

По крайней мере, для меня (debian sid), только одно из этих изменений не сократит задержку значительно ниже 3 секунд по умолчанию, хотя можно увеличить задержку, изменив только значение в /etc/pam.d/login.

Такой хрени хватит, чтобы взрослый мужчина плакал!

user383869
источник
0

В Ubuntu 9.10 и, я думаю, в новых версиях файл, который вы ищете, находится в

/etc/pam.d/login

отредактируйте строку:

auth необязательный pam_faildelay.so delay = 3000000

замените число 3 на другое, которое вы можете захотеть.

Обратите внимание, что для аутентификации 'nodelay', Я ДУМАЮ, вы должны отредактировать файл

/etc/pam.d/common-auth

тоже. На линии:

auth [успех = 1 по умолчанию = игнорировать] pam_unix.so nullok_secure

в финал добавить 'nodelay' (без кавычек). Но это последнее объяснение по поводу «нодлея» - вот что я думаю.

Габриэль Л. Оливейра
источник
0

Я хотел бы добавить примечание с точки зрения разработчиков. Хотя это не будет очевидно невооруженным глазом, умный разработчик прервет запрос на совпадение, когда совпадение будет найдено. По сути, успешный матч завершится быстрее, чем неудачный. Потому что функция сопоставления будет сравнивать учетные данные со всеми известными учетными записями, пока не найдет правильное совпадение. Другими словами, предположим, что имеется 1 000 000 учетных записей пользователей, упорядоченных по идентификаторам; 001, 002, 003 и так далее. Ваш идентификатор - 43 001. Итак, когда вы вводите правильное имя пользователя и пароль, сканирование останавливается на 43 001 и выполняет вход в систему. Если ваши учетные данные неверны, сканирование выполняется для всех 1 000 000 записей. Разница во времени обработки на двухъядерном сервере может составлять миллисекунды. В Windows Vista с 5 учетными записями пользователей это будет в наносекундах.

user368580
источник
Думаю, 99% постеров здесь - это разработчики того или иного уровня. Перестань звучать так напыщенно.
Я использую Ubuntu, и есть только один пользователь. Однако, когда я отправляю неправильный пароль, мне требуется 3 секунды, чтобы получить ответ. Итак, вы ошибаетесь :)
Халил Билгин
0

Я согласен. Это произвольное программное решение. Установка задержки на одну секунду вместо трех на самом деле не повредит взлому пароля, но сделает его более удобным для пользователя.

Джим
источник
0

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

Чтобы проиллюстрировать атаку, рассмотрим программу (без этой преднамеренной задержки), которая проверяет введенный серийный номер, чтобы увидеть, соответствует ли он правильному серийному номеру , которым в данном случае оказывается « xyba » . Для эффективности программист решил проверять по одному символу за раз и выйти, как только будет обнаружен неправильный символ, перед началом также проверяется длина.

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

  • Таким образом, злоумышленник может выбрать строку из четырех символов , причем строка, начинающаяся с x, занимает больше всего времени. (по предположениям)
  • Затем злоумышленник может зафиксировать символ как x и изменить второй символ, и в этом случае он обнаружит, что y занимает больше всего времени.
  • Затем злоумышленник может исправить первые два символа как xy и изменить третий символ, и в этом случае он обнаружит, что b занимает больше всего времени.
  • Затем злоумышленник может исправить первые три символа как xyb и изменить четвертый символ, и в этом случае они обнаружат, что a занимает больше всего времени.

Следовательно, злоумышленники могут восстановить серийный номер по одному символу за раз.

Linearization.java.

Linearization.docx, пример вывода

Серийный номер состоит из четырех символов, и каждый символ имеет 128 возможных значений. Тогда существует 128 4 = 2 28 = 268 435 456 возможных серийных номеров . Если злоумышленник должен случайным образом угадать полные серийные номера, он угадывает серийный номер примерно за 2 27 = 134 217 728 попыток, что является огромным объемом работы . С другой стороны, с помощью линеаризации атаки выше, в средней только 128/2 = 64 догадок требуется для каждой буквы, на общую ожидаемую работу около 4 * 64 = 2 8 = 256 догадок, который представляет собой тривиальное количество работы.

Большая часть письменного боевого искусства адаптирована из этого (взято из книги Марка Стэмпа «Информационная безопасность: принципы и практика»). Кроме того, приведенные выше расчеты не учитывают количество предположений, необходимых для определения правильной серийной длины.

Ашеш Кумар Сингх
источник