Pull to refresh

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

Reading time5 min
Views42K
image

Привет, хабр! Закончилось лето, деревья роняют свои листья на холодную землю, в Новосибирске идет первый снег, а я в это время хочу рассказать небольшую историю о настройке платформы для перебора паролей 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/.

Поехали!


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

  1. Пропиетарный драйвер видеокарты, который можно найти на официальном сайте AMD. В моем случае это legacy-amd-driver-catalyst-13.1, скачанный тут: http://support.amd.com/ru-ru/download/desktop/legacy?product=Legacy2&os=Linux%20x86_64.
  2. AMD APP SDK — инструменты для компиляции второго модуля pyrit. Скачиваются здесь: http://developer.amd.com/tools-and-sdks/opencl-zone/amd-accelerated-parallel-processing-app-sdk/.
  3. CAL++ — еще одна библиотека для компиляции. http://sourceforge.net/projects/calpp/.
  4. Патч для APP SDK — https://github.com/clockfort/amd-app-sdk-fixes.
  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 update
$ sudo apt-get install subversion

# Создадим новый пароль администратора, если его еще нет
$ sudo passwd root
$ su root

# Копируем отсутствующие компоненты
$ svn checkout https://github.com/clockfort/amd-app-sdk-fixes/trunk/include/CAL $AMDAPPSDKROOT/include/CAL

Собираем CAL++:
$ apt-get install cmake libboost-all-dev
$ 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 ..

# Пакеты, необходимые для работы pyrit
$ sudo apt-get install libpcap-dev libssl-dev zlib1g-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)

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

Заключение


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

P.S. Благодарен товарищу Dimones за предоставленное оборудование.
Tags:
Hubs:
Total votes 28: ↑27 and ↓1+26
Comments12

Articles