Видеоадаптеры AMD можно применять не только по прямому назначению (игры и работа с графикой). Всем известно про возможности OpenCL по ускорению общих вычислений с применением GPU, а сегодня поговорим о вопросах безопасности, связанных с впечатляющей вычислительной мощностью.
Одной из самых популярных видеокарт для 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, позволяющая объединить множество ускорителей, установленных в нескольких компьютеров, в один высокопроизводительный кластер.
VCL доступен бесплатно и работает с любым железом, поддерживающим стандарт OpenCL 1.0 или 1.1, позволяет объединять различные устройства в одну вычислительную сеть и предоставлять её мощности для любых приложений, умеющих работать с OpenCL.
В качестве примера применения такой технологии хочется рассказать о монструозной ферме по перебору паролей, состоящей из 25 GPU AMD.
Взлом пароля грубой силой часто упирается в вычислительную мощность компьютера, который будет осуществлять перебор. Даже если абстрагироваться от всевозможных уровней защиты от атаки 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 «добывали» с помощью видеокарт, любители собирали специальные фермы из большого числа ускорителей:
Пару лет назад примерно такую же железку, разнесённую на несколько серверных корпусов, показывали на конференции компьютерной безопасности в Осло. Вариантов применения этому сундуку в опытных руках можно найти довольно много:
Кластер из 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 тысяч раз 72 раза. Говоря проще, чем длиннее и сложнее у вас пароль, тем сложнее его подобрать методом перебора.
Возможности подобной фермы из GPU действительно впечатляющи, и они показывают неплохие результаты даже на «тяжёлых» алгоритмах хэширования: MD5 (180 млрд. предположений в секунду), SHA1 (63 млрд. предположений в секунду) и LM (20 млрд. предположений в секунду). Для т.н. «медленных» хэш-алгоритмов результаты тоже неплохие: bcrypt (05) и sha512crypt получили 71 000 и 364 000 предположений в секунду соответственно.
Эксперименты с 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 символов — проще простого.
Одной из самых популярных видеокарт для 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 «добывали» с помощью видеокарт, любители собирали специальные фермы из большого числа ускорителей:
Пару лет назад примерно такую же железку, разнесённую на несколько серверных корпусов, показывали на конференции компьютерной безопасности в Осло. Вариантов применения этому сундуку в опытных руках можно найти довольно много:
Кластер из 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. В данном случае один символ увеличивает количество вариантов в
Производительность
Возможности подобной фермы из GPU действительно впечатляющи, и они показывают неплохие результаты даже на «тяжёлых» алгоритмах хэширования: MD5 (180 млрд. предположений в секунду), SHA1 (63 млрд. предположений в секунду) и LM (20 млрд. предположений в секунду). Для т.н. «медленных» хэш-алгоритмов результаты тоже неплохие: bcrypt (05) и sha512crypt получили 71 000 и 364 000 предположений в секунду соответственно.
Оптимизация и масштабируемость
Эксперименты с 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 символов — проще простого.