Вы перебираете доступ (для доступа a) и изменяете значение b на каждой итерации (b = a.id). После этого вы проверяете, если б не в правах. Вы проверяете только последний элемент последовательности доступа. Это то, что вы хотите сделать?
Это должно на самом деле препятствовать тому, чтобы атаки перебором пробовали миллионы паролей в секунду. Идея состоит в том, чтобы ограничить, как быстрые пароли могут быть проверены и существует много правил, которые должны сопровождаться.
Тот последний особенно важен. Это не означает полезных сообщений как:
Your user name is correct but your password is wrong, please try again
или:
Sorry, password wasn't long enough
Даже разница во времени в ответ между "недействительным пользователем и паролем" и "действительным пользователем, но неверным паролем" причины отказа.
Каждый отказ должен передать точно ту же информацию, текстовую и иначе.
Некоторые системы используют его еще больше, увеличивая задержку с каждым отказом, или только позволяя три отказа, затем имеющие крупную задержку прежде, чем позволить повторную попытку.
Это заставляет его занять больше времени для предположения паролей.
Я не уверен, но довольно распространено интегрировать задержку после ввода неправильного пароля для создания нападений тяжелее. Это делает нападение практически неосуществимым, потому что Вам потребуется долгое время для проверки только нескольких паролей.
Даже пробование нескольких паролей - дат рождения, имени кошки, и подобных вещей - не превращено ни в какую забаву.
В основном смягчать против атак перебором и атак с подбором по словарю.
От руководства разработчика приложений 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_... () звонят для возврата ошибки. Желательно для там также быть паузой, прежде чем приложение продолжится. Основной причиной такой задержки является безопасность: задержка действует для воспрепятствования атак с подбором по словарю грубой силы, прежде всего, но также и помогает препятствовать синхронизированный (скрытый канал) нападения.
Это - очень простой, фактически легкий способ значительно увеличить безопасность. Рассмотрите:
Система A
не имеет никакой задержки. У взломщика есть программа, которая создает комбинации имени пользователя/пароля. На уровне тысяч попыток в минуту требуется только несколько часов, чтобы попробовать каждую комбинацию и записать все успешные логины.
Система B
генерирует 5-секундную задержку после каждого неправильного предположения. Эффективность взломщика была уменьшена до 12 попыток в минуту, эффективно нанеся вред атаке перебором. Вместо часов могут потребоваться месяцы для нахождения допустимого входа в систему. Если бы хакеры были то, что пациент, они пошли бы законные.:-)
Неудавшиеся задержки аутентификации там для сокращения уровня попытки входа в систему. Идея, что, если кто-то пробует словарь или атаку перебором против одной или может пользовательские учетные записи, что взломщик будет обязан ожидать задержка сбоя и таким образом то, чтобы вынуждать его занять больше времени и предоставления Вам больше шанса обнаружить его.
Вы могли бы также интересоваться знанием, что, в зависимости от того, что Вы используете, поскольку оболочка входа в систему там обычно является способом настроить эту задержку.
В GDM задержка установлена в gdm.conf файле (обычно в/etc/gdm/gdm.conf). необходимо установить RetryDelay=x, где x является значением в секундах.
Большая часть дистрибутива Linux они день также поддерживает наличие FAIL_DELAY, определенный в/etc/login.defs разрешение Вам установить время ожидания после неудавшейся попытки входа в систему.
Наконец, PAM также позволяет Вам устанавливать атрибут nodelay на своей подлинной строке для обхода задержки сбоя. (Вот статья о PAM и Linux),
Я не вижу, что это может быть столь просто, как ответы предлагают.
Если ответ на правильный пароль (некоторое значение) непосредственен, необходимо ли не только ожидать, до дольше, чем то значение для знания пароля является неправильным? (по крайней мере, знайте вероятностно, который хорошо для взламывания целей), И так или иначе Вы работали бы, это нападение параллельно... является этим всем большая приветственная заставка DoS?
В Ubuntu 9.10, и я думаю, в новых версиях файл, который вы ищете, находится в
/etc/pam.d/login
отредактируйте строку:
auth optional pam_faildelay.so delay = 3000000
замените число 3 на другое, которое вы можете захотеть.
Обратите внимание, что для аутентификации «nodelay», Я ДУМАЮ, вам следует также отредактировать файл
/etc/pam.d/common-auth
. В строке:
auth [success = 1 default = ignore] pam_unix.so nullok_secure
добавить «nodelay» в финал (без кавычек). Но я думаю, что это последнее объяснение по поводу «нодлея».
Я хотел бы добавить примечание с точки зрения разработчиков. Хотя это не было бы очевидно невооруженным глазом, умный разработчик вырвется из запроса соответствия, когда совпадение будет найдено. В удостоверении успешный матч завершится быстрее, чем неудачный. Потому что функция сопоставления будет сравнивать учетные данные со всеми известными учетными записями, пока не найдет правильное соответствие. Другими словами, предположим, что существует 1 000 000 учетных записей пользователей в порядке идентификаторов; 001, 002, 003 и так далее. Ваш идентификатор 43 001. Таким образом, когда вы вставите правильное имя пользователя и пароль, сканирование останавливается на 43 001 и регистрирует вас. Если ваши учетные данные неверны, он сканирует все 1 000 000 записей. Разница во времени обработки на двухъядерном сервере может составлять миллисекунды. В Windows Vista с 5 учетными записями пользователей это будет в наносекундах.
То, что я пробовал раньше, казалось, сработало, но на самом деле нет; если вам не все равно, вы должны просмотреть историю редактирования вики ...
Что работает (для меня), так это оба понизить значение pam_faildelay.so delay = X в /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.
Такой чуши достаточно, чтобы заставить плакать взрослого мужчину!