...

вторник, 23 сентября 2014 г.

[Из песочницы] Что делать с пыльным GPU, если ты — пентестер. Часть 1: Legacy ATI/AMD RADEON

Привет, хабр! Закончилось лето, деревья роняют свои листья на холодную землю, в Новосибирске идет первый снег, а я в это время хочу рассказать небольшую историю о настройке платформы для перебора паролей WPA/WPA2 на базе устаревшей на сегодняшний день видеокарты RADEON HD4890.



Введение




Прошли времена, когда видеокарта была просто видеокартой. Вычисления на базе GPGPU (http://ift.tt/1x4SRjS) набирают популярность и в десятки, а иногда и в сотни раз, производительнее, чем вычисления на 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://ift.tt/1wIpyAI.

Поехали!




Что нам понадобится?

  1. Пропиетарный драйвер видеокарты, который можно найти на официальном сайте AMD. В моем случае это legacy-amd-driver-catalyst-13.1, скачанный тут: http://ift.tt/1x4SRka.

  2. AMD APP SDK — инструменты для компиляции второго модуля pyrit. Скачиваются здесь: http://ift.tt/1x4SOVr.

  3. CAL++ — еще одна библиотека для компиляции. http://ift.tt/1x4SRAy.

  4. Патч для APP SDK — http://ift.tt/1x4SRAB.

  5. Исходники 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 http://ift.tt/1x4SRAE 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://ift.tt/1neBy6r 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://ift.tt/1eFRArG
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://ift.tt/1eFRArG
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://ift.tt/1eFRArG
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)




Ну вот и все. Теперь можно оставить машину на ночь, а самому пойти спать, согреваясь ее теплом.

Заключение




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

This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Комментариев нет:

Отправить комментарий