Читать книгу «Старший брат следит за тобой. Как защитить себя в цифровом мире» онлайн полностью📖 — Михаила Райтмана — MyBook.
image


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

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

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

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

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

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

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

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

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

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

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

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

Допустим, когда-то давно на сайте http://site.ru использовалась БД, в которой хранились открытые пароли и их хеши, и она утекла к хакерам. Спустя какое-то время была украдена база данных другого сайта, скажем http://site2.ru, в которой были записаны только хеши паролей (алгоритм хеширования, естественно, тот же). Хакер сканирует базу данных http://site2.ru в поисках хешей, совпадающих с найденными в базе данных http://site.ru. Обнаружив совпадения, хакер может раскрыть соответствующие пароли в базе данных http://site2.ru, несмотря на то что там хранились только хеши (и сложность пароля здесь не играет роли).

Также хакер может формировать собственную базу хешей, даже если их нет ни в одной БД. При этом он обычно учитывает специфику взламываемого сайта. Если формат пароля не требует спецзнаков, значит, пароль состоит только из букв и цифр. Также учитывается регион, где используется сайт, его тематика (например, если пользователи сайта – пенсионеры, то они могут использовать как пароли имена внуков) и т. д. Так хакер может вычислить хеши для наиболее популярных парольных фраз, а затем сравнить со своей базой хешей украденную с сайта БД с хешами реальных пользователей.

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

Поэтому для дополнительной защиты от подбора паролей их хеш-значения «солят», т. е. к значению хеша добавляют некое единое для всех пользователей системы (сайта) или уникальное для каждого пользователя значение, называемое солью[30], и получают второе хеш-значение. Соль снижает вероятность подбора пароля злоумышленником, так как «радужные таблицы», о которых речь пойдет чуть ниже, не позволят сравнить хеш-значения и определить (открыть) пароли. Если соль одинакова для всех пользователей, то и у разных пользователей с одинаковыми паролями будут одинаковые вторые хеш-значения, а если уникальна, то вторые хеш-значения всех пользователей, даже с одинаковыми паролями, будут различны.

Например, если пользователь А и пользователь Б используют пароль «Яблоко», то в первом случае их парольный хеш будет одинаковым (скажем, 422a41… без соли и a5ed85… с солью у обоих пользователей[31]), а во втором – различным (скажем, 422a41… без соли у обоих пользователей и a5ed85… у одного и fc1a95… у второго (с солью)).

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

Еще можно упомянуть о коллизиях – случаях, когда криптографический алгоритм создает одинаковые хеш-значения для разных фрагментов данных. Этим недостатком грешит большинство хеш-функций, одни меньше (SHA-256, SHA-512, whirlpool и др.), другие больше (например, MD5 или SHA-1). Злоумышленники могут использовать и эту особенность, но несколько иначе. Имея один набор данных, они могут подобрать другой (к примеру, файл) с таким же хешем, как у первого. Вектор атаки следующий: злоумышленник подменяет корректный файл своим экземпляром с закладкой, вредоносным макросом или загрузчиком трояна. И этот зловредный файл будет иметь такой же хеш или цифровую подпись[33].

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

«Несоленые» хеши обрабатываются злоумышленником с использованием таблиц ранее сопоставленных друг с другом хешей-паролей. Таблицы бывают разного типа, например «радужными» (они представляют собой перечень соответствий не всех ранее подобранных паролей и их хешей, а только первых элементов таких цепочек)[34]. Подключив таблицы к программе взлома, хакер будет перебирать возможные варианты, пока не расшифрует пароли. Простые и распространенные будут расшифрованы мгновенно; чем пароли длиннее и сложнее, тем больше потребуется времени.

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

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

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

КЕЙС В марте 2013 г. Нэйт Андерсон, заместитель главного редактора журнала Ars Technica, провел эксперимент: скачал со специального сайта базу хешей паролей (т. е. хешей в зашифрованном виде, как они обычно и хранятся в компьютерных системах) и специальный софт для взлома. За пару часов ему удалось взломать около 8000 паролей, притом что Нэйт никогда раньше этим не занимался[35].

Для еще большего усложнения задачи злоумышленника используется такой метод, как «растяжение пароля». Суть его в рекурсивном алгоритме хеширования: раз за разом, десятки тысяч раз вычисляется хеш самого хеша. Количество итераций (вычислений хеша) должно быть таким, чтобы вычисление шло не менее секунды (чем больше, тем дольше взламывать). Для взлома хакеру нужно точно знать количество итераций (иначе получится другой хеш) и ждать не менее секунды после каждой попытки. Таким образом, атака получается очень длительной и поэтому маловероятной – но не невозможной. Чтобы справиться с задержкой, злоумышленнику понадобится более мощный компьютер, чем тот, на котором производилось хеширование[36].

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

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

Обобщая всю информацию, можно выделить несколько основных правил, о которых речь пойдет далее.

1
...
...
8