John the Ripper и Hashcat. Эволюция брутфорса
Шифровальная машина M-209B стала прообразом первой юниксовой утилиты для шифрования паролей crypt
Кража баз паролей из взломанных систем — распространённая проблема. Особенно остро она стояла в первые годы развития Unix, когда пароли хранились в открытом виде. Утечка такой базы означала полную компрометацию системы.
Проблему решила первая в мире утилита для хэширования crypt в 70-е гг. С тех пор пароли перестали храниться в открытом виде, в базе хранились хэши. Согласно официальной документации, утилита crypt(3)
до шестой редакции использовала код из эмулятора шифровальной машины M-209, которую американская армия использовала во время Второй мировой войны. В этой системе пароль использовался не в качестве шифротекста, а в качестве ключа, которым шифровалась константа. Кен Томпсон, Деннис Ритчи и другие создатели Unix думали, что это надёжный подход. Оказалось иначе.
Вскоре выяснилось, что сверка зашифрованного пароля со всеми паролями в базе выполняется со скоростью хэширования одного пароля (1,25 мс на PDP 11/70), что было явным архитектурным недостатком системы. Поэтому в конце 70-х начиная с седьмой редакции crypt(3)
перевели на одностороннюю криптографическую функцию, основанную на блочном шифре DES.
Также быстро выяснилось, что люди крайне предсказуемы в выборе паролей. И появились различные инструменты, позволяющие угадывать распространённые пароли и сравнивать их с хэшированными значениями в БД. Как правило, эти инструменты используют комбинацию словарных атак, брутфорса и других методов для угадывания потенциальных паролей и их сверки с хранящимися хэшами.
Создатели Unix всячески старались усложнить взлом паролей. Уже в конце 70-х они модифицировали программу ввода паролей таким образом, чтобы стимулировать пользователей выбирать более сложные пароли. Кроме того, при хэшировании впервые начали использовать соль: при первом вводе пароля программа генерировала 12-битное случайное значение и добавляла его к паролю. При последующем вводе пароля это значение извлекалось из базы вместе с паролем и автоматически добавлялось к нему в поле ввода.
Фрагмент файла /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
Со временем инструменты становились более эффективными. Вскоре лидером в области технологических инноваций стал 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).
Можно предположить, что с массовым распространением парольных менеджеров во второй половине 2010-х длина паролей ещё увеличилась.
Новые алгоритмы хэширования разрабатываются с учётом максимальной недружественности к CPU, GPU и памяти, чтобы максимально замедлить вычисление на любом устройстве, включая FPGA и ASIC.
Впрочем, программы для подбора паролей тоже не останавливаются в развитии и внедряют новые методы для повышения эффективности своей работы. Большим подспорьем стали облачные платформы с возможностью масштабировать нагрузку практически до бесконечности, в рамках дата-центра. Некоторые организации, которые специализируются на брутфорсе, даже построили собственные дата-центры, чтобы не полагаться на сторонние облака.