Привет! Закончилось лето, деревья роняют свои листья на холодную землю, в Новосибирске идет первый снег, а я в это время хочу рассказать небольшую историю о настройке платформы для перебора паролей WPA/WPA2 на базе устаревшей на сегодняшний день видеокарты RADEON HD4890.
Введение
Прошли времена, когда видеокарта была просто видеокартой. Вычисления на базе GPGPU (https://ru.wikipedia.org/wiki/GPGPU) набирают популярность и в десятки, а иногда и в сотни раз, производительнее, чем вычисления на CPU. Ни для кого не секрет, что дела у видеокарт AMD RADEON в этом плане значительно лучше, чем у эквивалентных видеоадаптеров NVIDIA. Для осуществления данных вычислений существуют следующие реализации:
- NVIDIA CUDA — технология, позволяющая реализовать алгоритмы, выполняемые исключительно на графических процессорах GeForce, Quadro и Tesla;
- OpenCL — фреймворк для написания программ, связанных с параллельными вычислениями на различных графических (GPU, включая NVIDIA и AMD RADEON) и центральных процессорах (CPU), а также FPGA. Входит в состав OpenGL и является конкурентом CUDA;
- CAL++ — простая библиотека для реализации выполнения алгоритмов на видеоадаптере с похожим на OpenCL синтаксисом.
Как известно, pyrit состоит из двух частей: ядра и модуля, необходимого для поддержки дополнительного оборудования. Причем данный модуль можно скомпилировать для поддержки одной из трех вышеописанных технологий вычислений на GPGPU. CUDA отпадает сразу, так-как реализована только для «зеленых» видеокарт. Остановимся на CAL++.
Предыстория
Все началось с желания сделать из старого разобранного компьютера что-нибудь полезное, just for fun. Буквально «на коленках» все было собрано воедино, машина была готова. Первым в голову пришел брутфорс паролей, естественно, в мирных целях. Итак, что мы имеем:
- CPU Intel Core 2 Duo с частотой 1.86GHz;
- 4Gb RAM в режиме Dual-Channel;
- GPU ATI RADEON HD4890, 1024Mb GDDR5, 975 MHz.
В качестве системы была выбрана Ubuntu версии 14.04, что и послужило источником проблем. Для полноценного аппаратного ускорения необходим пропиетарный драйвер, скачиваемый с сайта AMD, который отказался устанавливаться. Загуглив сообщение об ошибке, было найдено несколько причин: версии ядра и иксов были слишком новыми для Legacy-версии драйвера. Пришлось скачать (отсюда) более старую версию Ubuntu 12.04 с версией xorg 1.11.3 и ядром 3.2. Дальнейшие руководства были найдены тут: http://www.blackmoreops.com/2013/11/22/install-pyrit-in-kali-linux/.
Поехали!
Что нам понадобится?
- Пропиетарный драйвер видеокарты, который можно найти на официальном сайте AMD. В моем случае это legacy-amd-driver-catalyst-13.1, скачанный тут: http://support.amd.com/ru-ru/download/desktop/legacy?product=Legacy2&os=Linux%20x86_64.
- AMD APP SDK — инструменты для компиляции второго модуля pyrit. Скачиваются здесь: http://developer.amd.com/tools-and-sdks/opencl-zone/amd-accelerated-parallel-processing-app-sdk/.
- CAL++ — еще одна библиотека для компиляции. http://sourceforge.net/projects/calpp/.
- Патч для APP SDK — https://github.com/clockfort/amd-app-sdk-fixes.
- Исходники pyrit, которые лучше всего взять из SVN.
Удобнее всего скачивать это богатство в отдельную папку и уже там работать из консоли. Начнем с драйвера:
$ unzip amd-driver-installer-catalyst-13.1-legacy-linux-x86.x86_64.zip
$ chmod +x amd-driver-installer-catalyst-13.1-legacy-linux-x86.x86_64.run
$ sudo ./amd-driver-installer-catalyst-13.1-legacy-linux-x86.x86_64.run
Запустится графическая версия установщика, с которой теперь не должно возникнуть проблем. После установки перезагружаемся и проверяем, все ли работает:
$ sudo reboot
# После загрузки
$ lsmod | grep fglrx
fglrx 3273643 124
# Модуль загружен, числа могут быть другими
$ fglrxinfo
display: :0.0 screen: 0
OpenGL vendor string: Advanced Micro Devices, Inc.
OpenGL renderer string: ATI Radeon HD 4800 Series
OpenGL version string: 3.3.11672 Compatibility Profile Context
# Теперь немного магии :)
$ fgl_glxgears
Using GLX_SGIX_pbuffer
7919 frames in 5.0 seconds = 1583.800 FPS
Появится окошко с вращающимся кубиком, FPS не должен быть низким. Если все ок, жмем CTRL-C — установка драйвера успешна. Далее установим AMD APP SDK:
$ tar -xvf AMD-APP-SDK-linux-v2.9-1.599.381-GA-x64.tar.bz2
$ chmod +x AMD-APP-SDK-v2.9-1.599.381-GA-linux64.sh
$ sudo ./AMD-APP-SDK-v2.9-1.599.381-GA-linux64.sh
# Принимаем лицензию, ставим в /opt
$ sudo gedit /root/.bashrc
В конец открывшегося файла нужно добавить следующее:
# AMD APPSDK
export AMDAPPSDKROOT=/opt/AMDAPPSDK-2.9-1
export AMDAPPSDKSAMPLESROOT=/opt/AMDAPPSDK-2.9-1
export LD_LIBRARY_PATH=${AMDAPPSDKROOT}/lib/x86_64:${LD_LIBRARY_PATH}
export ATISTREAMSDKROOT=$AMDAPPSDKROOT
А затем применить изменения:
$ source /root/.bashrc
Эти переменные помогут компилятору найти нужные папки. Теперь нужно добавить несколько недостающих компонентов APP SDK:
$ sudo apt-get install subversion
$ svn checkout https://github.com/clockfort/amd-app-sdk-fixes/ app-sdk-fix
# Создадим новый пароль администратора, если его еще нет
$ sudo passwd root
$ su root
# Копируем отсутствующие компоненты
$ cp app-sdk-fix/include/CAL $AMDAPPSDKROOT/include/
Собираем CAL++:
$ tar -xvf calpp-0.90.tar.gz
$ cd calpp-0.90/
$ gedit CMakeLists.txt
В этом файле нужно изменить
# Эту строку:
FIND_PATH( LIB_ATICAL_INCLUDE NAMES cal.h calcl.h PATHS "$ENV{ATISTREAMSDKROOT}/include" )
# На вот эту:
FIND_PATH( LIB_ATICAL_INCLUDE NAMES cal.h calcl.h PATHS "$ENV{ATISTREAMSDKROOT}/include/CAL" )
И скомпилировать библиотеку:
$ cmake .
$ make
$ make install
Если ошибок не возникнет, идем дальше, в противном случае нужно проверить все пути к файлам в CMakeLists.txt, особенно содержащие версии. Наконец, последний шаг — собираем pyrit:
$ cd ..
$ sudo apt-get install libpcap-dev
$ sudo svn checkout http://pyrit.googlecode.com/svn/trunk/ pyrit_svn
# Сборка и установка основного модуля
$ cd pyrit_svn/pyrit
$ sudo ./setup.py build install
# Сборка модуля calpp
cd ../cpyrit_calpp/
sudo gedit setup.py
# Заменяем:
# VERSION = '0.4.0-dev' на VERSION = '0.4.1-dev'
# CALPP_INC_DIRS.append(os.path.join(CALPP_INC_DIR, 'include')) на CALPP_INC_DIRS.append(os.path.join(CALPP_INC_DIR, 'include/CAL'))
# Собираем
$ sudo ./setup.py build install
Ура! Теперь проверяем, видит ли pyrit наш GPU:
$ pyrit list_cores
Pyrit 0.4.1-dev (C) 2008-2011 Lukas Lueg http://pyrit.googlecode.com
This code is distributed under the GNU General Public License v3+
The following cores seem available...
#1: 'CAL++ Device #1 'ATI RV770''
#2: 'CPU-Core (SSE2)'
$ pyrit selftest
Pyrit 0.4.1-dev (C) 2008-2011 Lukas Lueg http://pyrit.googlecode.com
This code is distributed under the GNU General Public License v3+
Cores incorporated in the test:
#1: 'CAL++ Device #1 'ATI RV770''
#2: 'CPU-Core (SSE2)'
All results verified. Your installation seems OK
И бенчмарк:
$ pyrit benchmark
Pyrit 0.4.1-dev (C) 2008-2011 Lukas Lueg http://pyrit.googlecode.com
This code is distributed under the GNU General Public License v3+
Running benchmark (26285.9 PMKs/s)... /
Computed 26285.86 PMKs/s total.
#1: 'CAL++ Device #1 'ATI RV770'': 26369.6 PMKs/s (RTT 1.2)
#2: 'CPU-Core (SSE2)': 525.0 PMKs/s (RTT 3.0)
Ну вот и все. Теперь можно оставить машину на ночь, а самому пойти спать, согреваясь ее теплом.
Заключение
Надеюсь, кому-нибудь пригодится материал данной статьи, и еще в одном доме оживет сердце старой забытой видеокарты. В следующих частях постараюсь рассказать про объединение нескольких видеоадаптеров для совместной работы, а также про объединение нескольких машин в кластер. Всем успехов!
Автор: axilirator