Грубая сила против паролей

Видеоадаптеры AMD можно применять не только по прямому назначению (игры и работа с графикой). Всем известно про возможности OpenCL по ускорению общих вычислений с применением GPU, а сегодня поговорим о вопросах безопасности, связанных с впечатляющей вычислительной мощностью.
3da661f0dfa740d8a22feace60d34c38.jpeg
Одной из самых популярных видеокарт для GPGPU является AMD R9 280X. При скромной цене в ~220–230 долларов она готова поделиться тремя гигабайтами памяти и 2048 потоковыми процессорами на базе архитектуры GCN v1.0, суммарно выдающих около 3.4 TFlops для вычислений одинарной точности и порядка 870 GFlops для вычислений двойной точности. Показатели производительности могут незначительно отличаться в зависимости от вендорской версии и «зашитых» в BIOS тактовых частот.

Для сравнения, у одной скандально известной видеокарты (той, что с »3.5 ГБ памяти из 4 заявленных») цена на сто долларов больше, при этом она показывает внушительные 3.8–4 TFlops для 32-битных чисел с плавающей точкой, но для FP64 — смешные ~120–130 GFlops.

Вернёмся к GPGPU. Возможно, для вашей задачи вам будет мало возможностей одной видеокарты, и вы поставите две, три, или даже четыре, благо материнские платы и блоки питания нынче могут такое позволить. Что, если и этого будет мало? На сцену выходит киллер-фича технологии OpenCL — Virtual OpenCL, позволяющая объединить множество ускорителей, установленных в нескольких компьютеров, в один высокопроизводительный кластер.

Virtual OpenCL


VCL доступен бесплатно и работает с любым железом, поддерживающим стандарт OpenCL 1.0 или 1.1, позволяет объединять различные устройства в одну вычислительную сеть и предоставлять её мощности для любых приложений, умеющих работать с OpenCL.

В качестве примера применения такой технологии хочется рассказать о монструозной ферме по перебору паролей, состоящей из 25 GPU AMD.

Password Cracker


Взлом пароля грубой силой часто упирается в вычислительную мощность компьютера, который будет осуществлять перебор. Даже если абстрагироваться от всевозможных уровней защиты от атаки bruteforce«ом (вроде каптчи или удаления/шифрования информации после n-ной попытки войти с неправильным паролем), стандартный пароль из 8 символов перебирать достаточно долго. При использовании только букв нижнего регистра латинского алфавита вам придётся перебрать 268 (208 827 064 576) вариантов, а если использовать цифры, спецсимволы и различный регистр, то число возможных сочетаний перевалит за 728 (722 204 136 308 736). Быть может, сгенерировать 720 триллионов паролей не так уж и сложно, но сами пароли в открытом виде, само собой, никто не хранит, вместо этого используют их хэши.

Вычисление хэш-коллизий (поиск значений, чей хэш совпадёт с искомым) — куда более ресурсоёмкая задача, чем может показаться на первый взгляд — именно её частный случай решают участники сети BitCoin. Хабрапользователь mark_ablov написал потрясающую статью на тему майнинга биткоинов с помощью ручки и бумаги, в которой подробно рассмотрел все стадии вычислений и показал, насколько «уязвим» BitCoin к аппаратным возможностям производительных кластеров.

Современные пароли хранятся в таком виде, который нельзя легко «решить», собрав специальную микросхему, так что на сцену выходят железки, способные играть грубо и эффективно: предоставляя огромное количество FP32 / FP64 операций в секунду, и здесь-то технологии AMD, возможности OpenCL и VCL-фермы придутся как нельзя кстати.

Когда BitCoin «добывали» с помощью видеокарт, любители собирали специальные фермы из большого числа ускорителей:

a17c05e44f862b29d42b525f1254e889.png


Пару лет назад примерно такую же железку, разнесённую на несколько серверных корпусов, показывали на конференции компьютерной безопасности в Осло. Вариантов применения этому сундуку в опытных руках можно найти довольно много:

adf7c5807cb0e731d3e8bf0903b5b3d8.png


Кластер из GPU работает под управлением Linux, видеокарты объединены системой VCL, которая предоставляет хост-системе все видеокарты как одну большую систему исполнения OpenCL-заказов.

Ферма может делать до 350 миллиардов предполагаемых хэшей паролей в секунду, используя алгоритм NTLM. Он используется в Microsoft Windows со времён Windows Server 2003. Для перебора восьмисимвольного пароля (самого популярного по длине как среди обычных пользователей, так и в корпоративном сегменте), содержащего все символы латинского алфавита в различных регистрах, цифры и спецсимволы, данному монстру достаточно пяти с половиной часов.

Как вы уже догадались, основную сложность для взлома предоставляет показатель степени, то есть длина пароля. Увеличение пароля на один символ приводит к увеличению сложности на 2 порядка:

729 = 51 998 697 814 228 992 против 728 = 722 204 136 308 736. В данном случае один символ увеличивает количество вариантов в 80 тысяч раз. Говоря проще, чем длиннее и сложнее у вас пароль, тем сложнее его подобрать методом перебора.

Производительность


Возможности подобной фермы из GPU действительно впечатляющи, и они показывают неплохие результаты даже на «тяжёлых» алгоритмах хэширования: MD5 (180 млрд. предположений в секунду), SHA1 (63 млрд. предположений в секунду) и LM (20 млрд. предположений в секунду). Для т.н. «медленных» хэш-алгоритмов результаты тоже неплохие: bcrypt (05) и sha512crypt получили 71 000 и 364 000 предположений в секунду соответственно.

761d963e6ac4a0f0cb5380b841480947.png


Оптимизация и масштабируемость


Эксперименты с Password Cracker«ом проводились достаточно давно, когда VCL был достаточно «сырым» продуктом. Совместная работа автора этой мега-фермы с создателями VCL привела к улучшению балансировщика нагрузки. Специальный скрипт позволил улучшить работу Hashcat на VCL, благодаря чему сегодня можно запустить код не на 25, а как минимум на 128 GPU с сохранением линейного роста производительности.

В июне 2012 года Поул-Хеннинг Камп, автор функции md5crypt (), которая широко используется в FreeBSD и Linux, попросил сообщество перестать пользоваться его функцией. Об этом даже материал на Хабре выходил. Автор опасался ситуации, когда атакующий сможет получить больше 1 миллиона проверок в секунду на доступном в обычных магазинах компьютерном железе. Password Cracker на 25 GPU превзошёл опасения Поула-Хеннигна Кампа в 77 раз, а возможность смасштабировать его в 5 и более раз делает перебор хэшей ещё более уязвимым к коллизиям: если сейчас «стандартный» восьмисимвольный пароль перебирается за 6–8 часов, то на 128 GPU такой перебор может сократиться до часа.

Меня это не коснётся


Быть может, вашу фирму никто никогда не будет взламывать, а дома вы не храните ничего ценного / компрометирующего / важного. Никто не застрахован от утечек в крупнейших фирмах: сравнительно недавно соцсеть LinkedIn «потеряла» шесть с половиной миллионов хэшей паролей. Если «разгадывать» пароли фермой на видеоускорителях AMD (а не на профессиональном железе), то около 90% паролей можно было бы обработать за разумное время.

Длинный и сложный пароль (при условии того, что его применяют надлежащим образом, не хранят в открытой форме и всё такое) — половина защиты от таких мощных вычислительных систем. Разумеется, есть и другие подходы (вроде «солёных» хэшей), но не всегда есть возможность внести изменения в действующий алгоритм или рабочий продукт, а удлинить минимальный пароль до 13 или 20 символов — проще простого.

© Geektimes