John the Ripper и Hashcat. Эволюция брутфорса

2wwdp9wtx0tdvtg1dmdgv1xjxrm.jpeg
Шифровальная машина M-209B стала прообразом первой юниксовой утилиты для шифрования паролей crypt

Кража баз паролей из взломанных систем — распространённая проблема. Особенно остро она стояла в первые годы развития Unix, когда пароли хранились в открытом виде. Утечка такой базы означала полную компрометацию системы.

Проблему решила первая в мире утилита для хэширования crypt в 70-е гг. С тех пор пароли перестали храниться в открытом виде, в базе хранились хэши. Согласно официальной документации, утилита crypt(3) до шестой редакции использовала код из эмулятора шифровальной машины M-209, которую американская армия использовала во время Второй мировой войны. В этой системе пароль использовался не в качестве шифротекста, а в качестве ключа, которым шифровалась константа. Кен Томпсон, Деннис Ритчи и другие создатели Unix думали, что это надёжный подход. Оказалось иначе.
Вскоре выяснилось, что сверка зашифрованного пароля со всеми паролями в базе выполняется со скоростью хэширования одного пароля (1,25 мс на PDP 11/70), что было явным архитектурным недостатком системы. Поэтому в конце 70-х начиная с седьмой редакции crypt(3) перевели на одностороннюю криптографическую функцию, основанную на блочном шифре DES.

Также быстро выяснилось, что люди крайне предсказуемы в выборе паролей. И появились различные инструменты, позволяющие угадывать распространённые пароли и сравнивать их с хэшированными значениями в БД. Как правило, эти инструменты используют комбинацию словарных атак, брутфорса и других методов для угадывания потенциальных паролей и их сверки с хранящимися хэшами.

Создатели Unix всячески старались усложнить взлом паролей. Уже в конце 70-х они модифицировали программу ввода паролей таким образом, чтобы стимулировать пользователей выбирать более сложные пароли. Кроме того, при хэшировании впервые начали использовать соль: при первом вводе пароля программа генерировала 12-битное случайное значение и добавляла его к паролю. При последующем вводе пароля это значение извлекалось из базы вместе с паролем и автоматически добавлялось к нему в поле ввода.

lcsmelsb6veqecnpmfj5yfndb9e.png
Фрагмент файла /etc/passwd (1983). Первые два символа — это соль (12-бит), затем 11 символов хэша (64-бит), источник

Тогда же в конце 70-х появились первые микросхемы для аппаратного ускорения DES.

Первый софт для брутфорса


Первые программы для взлома паролей появились сразу после того, как системные администраторы начали их хэшировать вышеупомянутой юниксовой утилитой crypt в 70-е гг. Известно, что уже в 1978 году на компьютерах PDP-11/70 запускали эмуляторы crypt для перебора различных вариантов хэшей со скоростью около 800 паролей (хэшей) в секунду.

Первыми инструментами для информационной безопасности с функцией взлома или проверки паролей стали:

  • COPS (локальный аудит Unix-систем с функцией определения слабых паролей)
  • Crack
  • Cracker Jack
  • goodpass.c и CrackLib (позже их включили в passwd, yppasswd и др.)
  • npasswd


jb2tqzp4ehparc2btksslidxeoq.jpegСо временем инструменты становились более эффективными. Вскоре лидером в области технологических инноваций стал John the Ripper, разработанный компанией Solar Designer. Но с появлением мощных GPU лидерство перехватил Hashcat, который сумел более эффективно использовать возможности графических процессоров. Интересно, что первой в мире брутфорс на GPU реализовала российская компания «Элкомсофт» (Андрей Беленко).

Кроме них, среди популярных инструментов можно назвать ещё L0phtCrack и Hydra.

За тридцать лет методы брутфорса и железо значительно эволюционировали, что привело к существенному повышению производительности, как видно по таблице ниже.

С ростом производительности CPU и GPU стало очевидной важность выбора конкретного алгоритма хэширования, чтобы затруднить (замедлить) брутфорс. Многие веб-разработчики в 90-е годы использовали встроенную в PHP функцию md5() без соли, но с 2007 года там появилась поддержка phpass (bcrypt), так что индустрия постепенно автоматически переходила на более сильные алгоритмы хэширования. Средняя длина паролей тоже постепенно растёт. Если верить статистике, она увеличилась с 4,4 символов в 1989 г до 7,9 символов в 2009 году (см. «The Science of Guessing: Analyzing an Anonymized Corpus of 70 Million Passwords», 2012 IEEE Symposium on Security and Privacy).

sy0rm4lctgkbwnyvg4bb_awdxie.gif

Можно предположить, что с массовым распространением парольных менеджеров во второй половине 2010-х длина паролей ещё увеличилась.

Новые алгоритмы хэширования разрабатываются с учётом максимальной недружественности к CPU, GPU и памяти, чтобы максимально замедлить вычисление на любом устройстве, включая FPGA и ASIC.

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

© Habrahabr.ru