The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Запуск John the Ripper в MPI-кластере на базе Ubuntu 10.04
Инструкция по превращению нескольких компьютеров в MPI-кластер и последующем
запуске в этом кластере John the Ripper с целью организации эксперимента по
распределенному подбору значений, соответствующих заданному хэшу (например, для
проверки своих паролей на надежность). Руководство носит упрощенный характер и
не охватывает некоторых вопросов по обеспечению высокой надежности и
безопасности, рассматривая процесс создания кластера как проводимый в
академических целях эксперимент.

Для создания кластера нам понадобиться как минимум два компьютера, работающих
под управлением  Ubuntu Linux 10.04. Для соединения машин будет достаточно
любых сетевых карт,  John the Ripper не требует большой пропускной способности.


Настройка сервера.

Для работы кластера нам потребуются следующие пакеты c реализацией MPI Message Passing Interface:

   $ sudo apt-get install libmpich1.0-dev libmpich-mpd1.0-dev libmpich-shmem1.0-dev mpich2 mpich2-doc 

Дополнительно, установим John the Ripper, OpenSSH и комплект для сборки из исходных текстов:

   $ sudo apt-get install john openssh-server build-essentials


Для упрощения настройки заносим IP и имя текущего хоста в /etc/hosts

   127.0.0.1 localhost
   10.0.0.1 server1.test.ru server1

Создаем в системе пользователя "cluster" и создаем каталог bin в домашней
директории этого пользователя:

   $ sudo useradd -m -s /bin/bash cluster
   $ sudo passwd cluster

   $ sudo su - cluster -c "mkdir ~/bin;export PATH=~/bin:$PATH"


Настраиваем MPICH

Создаем в домашней директории пользователя  cluster конфигурационный файл
~/.mpd.conf с настройками аутентификации для MPI-кластера.
Записываем в файл ~/.mpd.conf строку "secretword=пароль", где пароль для
аутентификации всех узлов кластера.


Правим права доступа:
   $ chmod 600 ~/.mpd.conf

Список узлов кластера, включая текущий сервер, перечисляем в файле ~/mpd.hosts.
Формат строки файла "хост:число процессоров", т.е. для четырехядерного сервера
c IP 10.0.0.2 указываем "10.0.0.2:4". Все IP должны быть доступны по сети, т.е.
127.0.0.1 для локального узла указывать нельзя.

Итоговый процесс настройки MPICH выглядит следующим образом:

   $ touch ~/.mpd.conf
   $ chmod 600 ~/.mpd.conf
   $ echo secretword=pass>~/.mpd.conf
   $ /sbin/ifconfig|grep "inet addr" # смотрим IP на хостах

   inet addr:10.0.0.1 Bcast:10.255.255.255 Mask:255.0.0.0
   inet addr:127.0.0.1 Mask:255.0.0.0

   $ cat /proc/cpuinfo|grep processor|wc -l # смотрим число ядер CPU

   1

   $ echo "10.0.0.1:1" >> ~/mpd.hosts

Запускаем кластер:

   $ mpdboot

Просматриваем список узлов кластера:

   $ mpdtrace

Завершаем работу кластера:

   $ mpdallexit


Установка John the Ripper

Исходные тексты версии John the Ripper с дополнительными MPI-патчами можно
загрузить на странице http://www.bindshell.net/tools/johntheripper

Загружаем код:

   $ mkdir source
   $ cd source
   $ wget http://www.bindshell.net/tools/johntheripper/john-1.7.2-bp17-mpi8.tar.gz

Распаковываем архив и выполняем сборку:

   $ tar -zxf john-1.7.2-bp17-mpi8.tar.gz
   $ cd john-1.7.2-bp17-mpi8/src/
   $ make # будет выведен список опций
   $ make linux-x86-sse2

где вместо linux-x86-sse2 можно указать другой тип системы:

   linux-x86-mmx Linux, x86 с MMX
   linux-x86-sse Linux, x86 с SSE2 (лучший выбор)
   linux-x86-any Linux, x86
   linux-x86-64 Linux, AMD x86-64, 64-bit/SSE2 (лучший выбор)
   linux-x86-64-mmx Linux, AMD x86-64, 32-bit с MMX


Проверяем работу собранной программы:

   $ ../run/john -format=DES -test

   Benchmarking: Traditional DES [128/128 BS SSE2]... DONE
   Many salts: 1994K c/s real, 1994K c/s virtual
   Only one salt: 1658 c/s real, 1654K c/s virtual

Копируем исполняемый файл в директорию ~/bin

   $ mv ../run/* ~/bin

Проверяем, что John the Ripper собран с поддержкой MPI:

   $ john|grep mpi

   John the Ripper password cracker, version 1.7.2_bp17_mpi


Повторяем все ранее описанные шаги на всех узлах кластера.

Настраиваем беспарольный вход по SSH для пользователя cluster для всех узлов кластера.

Генерируем rsa-ключ:

   $ ssh-keygen -t rsa

Копируем ключ на другие узлы кластера:

   $ ssh [email protected] mkdir -p .ssh
   $ cat .ssh/id_rsa.pub | ssh [email protected] 'cat>>.ssh/authorized_keys'

Добавляем параметры узла в ~/mpd.hosts и создаем ~/.mpd.conf и ~/mpd.hosts на удаленных узлах:

   $ ssh [email protected] 'cat /proc/cpuinfo|grep processor|wc -l'
   2
   $ echo 10.0.0.2:2 >> ~/mpd.hosts
   $ for i in `cut --delimiter=: -f1 ~/mpd.hosts`;do scp ~/.mpd.conf cluster@$i:~; scp ~/mpd.hosts cluster@$i:~; done

Добавляем в /etc/hosts имя дополнительного узла:

   10.0.0.2 node1

Синхронизируем содержимое /etc/hosts на всех узлах.
Если этого не сделать возникнет ошибка:

   mpdboot_server (handle_mpd_output 407): failed to handshake with mpd on 10.0.0.2; recvd

Запускаем кластер:

   $ mpdboot --verbose --ncpus=1 -n 2

   running mpdallexit on server
   LAUNCHED mpd on server via
   RUNNING: mpd on server
   LAUCNHED mpd on 10.0.0.2 via server
   RUNNING: mpd on 10.0.0.2

где, --verbose - вывод расширенной информации, а "--ncpus=1" - задаем число CPU
для текущего сервера, "-n 2" - указываем, что в кластере 2 узла (текущий сервер
10.0.0.1 + внешний узел 10.0.0.2).

На втором узле 10.0.0.2 MPICH будет запущен автоматически.

Смотрим список активных узлов:

   $ mpdtrace
   server
   node1


Для тестирования, запустим команду hostname на всех узлах:

   $ mpiexec -np 3 hostname

   server
   node1
   node1

node1 - вывелось два раза так как к узлу привязано 2 CPU и задача была выполнена два раза.

Завершаем работу кластера:

   $ mpdallexit
   Using the MPI cluster to crack passwords.

Попробуем подобрать значение для MD5-хэша:

   $ echo fb7852f240efac3c0bdce8cf9dcb2e50 > crackme1.md5

Запускаем кластер:

   $ mpdboot --ncpus=2 -n 2

Копируем файл crackme1.md5 на все узлы:

   $ for i in `cut --delimiter=: -f1 ~/mpd.hosts`;do scp ~/crackme1.mp5
cluster@$1:~;done

Чтобы упросить процесс копирования на все узлы кластера напишем простой скрипт  distributer.sh:

   #!/bin/bash

   # usage: ./distributer.sh filename

   for x in `cut --delimiter=: -f1 ~/mpd.hosts`;do scp $1 cluster@$i:~;done

Запускаем John the Ripper на 3 CPU:

   $ mpiexec -np 3 john --format:raw-MD5 crackme1.md5

   Loaded 1 password hash (Raw MD5 [raw-md5 SSE2])
   Loaded 1 password hash (Raw MD5 [raw-md5 SSE2])
   Loaded 1 password hash (Raw MD5 [raw-md5 SSE2])

   test1 (user)

Process 2 completed loop.

Threat: 2 guesses: 1 time 0:00:00:02 (3) c/s: 5616K trying: 12345 - 56778

После завершения подбора завершаем работу кластера:

   $ mpdallexit
 
10.03.2011 , Источник: http://www.petur.eu/blog/?p=59...
Ключи: mpi, cluster, johntheripper, mpich, ubuntu, hash, ubuntu / Лицензия: CC-BY
Раздел:    Корень / Администратору / Система / Кластерные технологии

Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, Игорь (??), 17:31, 10/03/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Забавно
     
  • 1.2, free (??), 21:28, 10/03/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    man ssh-copy-id
    не удержался
     
     
  • 2.7, sn00p (?), 10:01, 11/03/2011 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Какая разница то, как ключи копировать, по времени одно и тоже.
     

  • 1.3, fyjybvec (?), 23:33, 10/03/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Поднимал на слаке. Достаточно пакета mpich2.
     
  • 1.4, Андрей (??), 04:05, 11/03/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    mpich (вместо openmpi) был выбран просто так или есть причины?
     
     
  • 2.8, Аноним (-), 10:43, 11/03/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > mpich (вместо openmpi) был выбран просто так или есть причины?

    Авторы патчей для John the Ripper рекомендуют использовать mpich: "This has currently been tested on Linux/AMD64, MacOSX/Intel and Linux/x86 using mpich2-1.0.2"

    Для OpenMPI вылязят мелкие глюки:  "If you use OpenMPI instead of mpich2, the SIGHUP signal doesn't get passed to john. It is necessary to send a SIGUSR1 instead."

     

  • 1.6, anoni (?), 10:01, 11/03/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    MPI для John the Ripper?!
    Тогда еще обязательно нужно torque использовать!
     
     
  • 2.11, nuclight (ok), 17:22, 11/03/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > MPI для John the Ripper?!
    > Тогда еще обязательно нужно torque использовать!

    И Infiniband-карточки купить!

     

  • 1.9, крендель (?), 16:46, 11/03/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    John the Ripper умеет использовать GPU (видео карты) для перебора паролей? Или только CPU проц системы?
     
     
  • 2.13, solardiz (ok), 21:26, 11/03/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Пока только CPU. Вернее, есть патчи, добавляющие поддержку OpenCL для некоторых типов хешей, но их эффективность очень низкая. Мое мнение, что авторы этих изменений не с того начали - для медленнех типов хешей им было бы проще достичь хорошей эффективности не внося изменений в основной код John'а. См. "OpenCL support for cracking NT, raw-MD4, raw-MD5 and raw-SHA1 hashes" тут: http://openwall.info/wiki/john/patches
     
  • 2.15, solardiz (ok), 00:49, 19/03/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Openwall приняли в Google Summer of Code 2011. Среди наших "идей" - в том числе поддержка GPU в JtR (две отдельных под-задачи). Студенты - шлите заявки. :-) Начать лучше с подписки на john-dev и постинга туда, не дожидаясь начала приема заявок Google'ом (будет с 28-го марта).

    http://openwall.info/wiki/ideas#John-the-Ripper
    http://www.openwall.com/lists/announce/2011/03/18/1
    http://www.openwall.com/lists/
    http://www.google-melange.com/gsoc/program/accepted_orgs/google/gsoc2011

     
     
  • 3.16, крендель (?), 00:06, 22/03/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Спасибо, отличная новость! Ждем развития!
     

  • 1.12, JL2001 (ok), 18:11, 11/03/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    зачем устанавливается это ?
    sudo apt-get install john
    мы же отдельно качаем сырцы и компилим, закидываем в директорию ~/bin юзера cluster
     
  • 1.14, ffsdmad (ok), 11:30, 17/03/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    восстановите мне пароль
    user21:$6$QQidrD8G$hZ4ll/2g5t.aZjGNr5b4v2.tnTNR9Jnx/Y2sR8cr6QS.npXSBge8gTHpfm6nupCBmpW2143Xf/A6ISXRmZNFp0:14863:0:99999:7:::
     
     
  • 2.18, dq0s4y71 (??), 17:23, 23/03/2011 [^] [^^] [^^^] [ответить]  
  • +/
    JtR не умеет SHA-512.
     
     
  • 3.19, solardiz (ok), 01:41, 24/03/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > JtR не умеет SHA-512.

    Начиная с 1.7.6 (вышла прошлым летом), в JtR есть поддержка "generic crypt(3)", благодаря которой SHA-crypt хеши поддерживаются при условии их поддержки системой - т.е. на Linux с glibc 2.7 или новее, а также на свежих версиях Solaris. И на Linux и на Solaris реализована также OpenMP-параллелизация этого режима (включается раскомментариванием строчки в Makefile), благодаря crypt_r(3) на glibc и thread-safe crypt(3C) на Solaris. Автораспознавание хешей этого типа работает (т.е., например, просто "john /etc/shadow" без всяких опций сработает как надо, хотя лучше сначала применить "unshadow", чтобы использовать информацию из полей GECOS и имена домашних каталогов).

     

  • 1.17, dq0s4y71 (??), 16:56, 23/03/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    В JtR есть такая константа PLAINTEXT_LENGTH. Для MD5, например, она равна 15. Сделайте ваш пароль длиной больше 15 символов и хоть на кластере его ломай хоть на суперкомпьютере - JtR его ни в жисть не возьмет. А произвольно увеличить PLAINTEXT_LENGTH и перекомпилить нельзя :(
     
     
  • 2.20, solardiz (ok), 02:10, 24/03/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > В JtR есть такая константа PLAINTEXT_LENGTH. Для MD5, например, она равна 15.
    > Сделайте ваш пароль длиной больше 15 символов и хоть на кластере
    > его ломай хоть на суперкомпьютере - JtR его ни в жисть
    > не возьмет. А произвольно увеличить PLAINTEXT_LENGTH и перекомпилить нельзя :(

    Да, для MD5-based crypt(3) действительно есть ограничение в 15 символов, которое связано с оптимизацией алгоритма под типичный случай (для выявления слабых паролей, длины до 15 актуальнее, чем бОльшие). Число 15 выбрано не случайно: начиная с 16-ти потребовался бы другой алгоритм, более медленный.

    Тем не менее, это ограничение можно обойти воспользовавшись поддержкой "generic crypt(3)", опция "--format=crypt". Заодно там есть поддержка OpenMP. Правда, скорость проверки каждого пароля будет в несколько раз ниже (в расчете на одно ядро процессора), чем при специализированном коде.

    Если уж выбирать сложный пароль, то следует уделить внимание не только длине. А длина может быть и меньше. Особенности поддержки конкретно в JtR не так важны, как сложность подбора в предположении наличия поддержки.

    Спасибо за дельный комментарий!

     
     
  • 3.21, dq0s4y71 (??), 13:33, 24/03/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > solardiz

    Упс! Так вы и есть Solar Designer? Никогда бы не подумал, что вы русскоязычный :) Ну, тогда позвольте лично выразить вам свое восхищение качеством вашего ПО и пожелать дальнейших успехов вашему проекту! :)

     


     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру