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

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

Вкратце о хешировании

Хеш-сумма – это значение пароля, зашифрованное по специальному криптографическому алгоритму (существует много разных алгоритмов различной степени криптостойкости – MD5, SHA-1, SHA-3 и др.). Постоянно разрабатываются новые алгоритмы с целью повышения их стойкости. В качестве примера рассмотрим принцип работы алгоритма SHA-1 (в настоящее время считается устаревшим и постепенно выходит из обращения). Если зашифровать по алгоритму SHA-1 слово «взлом», получится хеш-значение 94d6ad7efefe1b647da47625e75712f87405c3c1 (и это значение всегда будет соответствовать слову «взлом»). Не важно, какой длины данные шифруются, будь то слово из 5 букв, как в примере, или 100 специальных символов: в итоге вы получите хеш-значение фиксированной длины из 40 случайных символов (у других алгоритмов длина строки может быть иной). Даже слово «Взлом», написанное с прописной буквы, будет зашифровано в абсолютно другой хеш (9281eea3837f94218b04024d23c9d20a71811b4a). Вы можете поэкспериментировать с хешированием паролей на сайте https://www.hashemall.com и с их расшифровкой на сайте https://crackstation.net. На большинстве сайтов, в программах и системах пароли в открытом виде, как правило, не хранятся, а используются их хеш-значения. Процесс регистрации/авторизации на защищенном сайте происходит по описанному ниже сценарию.

При регистрации:

■ пользователь пересылает логин и пароль на сайт, где

■ к паролю присоединяется соль (термин поясняется ниже), сгенерированная с помощью криптографически стойкого генератора псевдослучайных чисел,

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

■ Соль и хеш-значение сохраняются в базе данных пользователей.

При аутентификации/авторизации:

■ пользователь пересылает логин и пароль (в открытом виде по защищенному каналу/протоколу, в зашифрованном виде или в виде хеш-значения) на сайт, где

■ соль и хеш-значение пользователя извлекаются из базы данных,

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

■ Хеш-значение введенного пароля сравнивается с хеш-значением, сохраненном в базе данных. Если они совпадают – пароль верен, тогда пользователь аутентифицируется и допускается в систему. В противном случае пользователю сообщают о неправильном пароле.

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