Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

Взлом паролей с помощью GPU. Часть II - приступаем к взлому

Оригинал: Hack and / - Password Cracking with GPUs, Part II: Get Cracking
Автор: Кайл Рэнкин (Kyle Rankin)
Дата публикации: 29 мая 2012 г.
Перевод: Алексей Жбанов
Дата перевода: 2 мая 2013 г.

Ваше оборудование готово. Теперь давайте займемся ПО и приступим к взлому.

В первой части статьи я в общих чертах объяснил технологию взлома паролей и описал свое оборудование, применяемое для этого. В этой же части я углублюсь в программную сторону вопроса. Мы обсудим два основных вида атак: по словарю и методом "грубой силы". Описывая каждый из них, я буду приводить примеры того, как я использовал свое ПО для атаки на phpass - алгоритм хеширования, применяемый в системах, основанных на PHP, таких, как WordPress.

Для этой статьи я создал на своем сервере "учебный" блог на базе WordPress и создал несколько учетных записей: часть со слабыми паролями, а остальные - с паролями, сгенерированными случайно. Затем я извлек из базы данных сайта хеши phpass для каждой учетной записи и записал их в файл такого вида:

$P$BpgwVqlfEwuaj.FlM7.YCZ6GQMu15D/
$P$BGMZP8qAHPjTTiTMdSxGhjfQMvkm2D1
$P$BOPzST0vwsR86QfIsQdspt4M5wUGVh.
$P$BjAZ1S3pmcGOC8Op808lOK4l25Q3Ph0
$P$BPlIiO5xdHmThnjjSyJ1jBICfPkpay1
$P$BReStde51ZwKHVtiTgTJpB2zzmGJW91

Приведенные выше хеши - обычные хеши phpass, созданные из шестисимвольных паролей. Я мог бы сообщить вам сами пароли, но это лишило бы вас всей радости от самостоятельного их взлома.

Проприетарные видеодрайверы

Тех из вас, кто как и я, является приверженцем открытого ПО, этот раздел может немного разочаровать. Чтобы обеспечить аппаратную поддержку ПО для взлома, работающего у вас, вам придется установить проприетарные видеодрайверы, и для AMD, и для NVIDIA. Но если, скажем, вы уже использовали свой компьютер для добычи биткоинов, то у вас уже есть все необходимые драйверы и библиотеки, поэтому вы можете сразу переходить к разделу, посвященному Hashcat. Вообще же можно просто обратиться к HOWTO по добыче биткоинов - там описано, как установить эти самые драйверы и библиотеки.

Многие современные дистрибутивы позволяют относительно просто загрузить и установить проприетарные видеодрайверы. Например, Ubuntu подскажет вам, что эти драйверы доступны как для карт AMD, так и для NVIDIA. Многие другие популярные дистрибутивы также предоставляют возможность установки этих драйверов. В худшем случае вам придется скачать их с официальных сайтов AMD или NVIDIA и установить вручную. Существуют ясные инструкции по установке и ПО для Linux.

Кроме проприетарных драйверов вам понадобятся также AMD APP SDK с библиотеками OpenCL или библиотеки NVIDIA CUDA в зависимости от производителя вашей видеокарты.Скорее всего, вам придется загрузить эти библиотеки напрямую с сайтов AMD или NVIDIA. Установка их также не вызывает затруднений. Я, например, скачал с сайта AMD файл AMD-APP-SDK-v2.5-lnx32.tgz, распаковал его и запустил от имени пользователя root находившийся в архиве скрипт Install-AMD-APP.sh.

Hashcat

Есть много разных программ для взлома паролей, использующих как CPU, так и GPU. После всестороннего анализа я остановился на пакете Hashcat (http://hashcat.net ). На сайте есть множество различных инструментов. На первый взгляд это выглядит несколько запутанно и трудно понять, что выбрать: hashcat, oclHashcat, oclHashcat-plus, oclHashcat-lite или вообще программу под названием maskprocessor. Но каждая из этих программ выполняет свою задачу, зависящую от ваших намерений.

hashcat:

  • использует CPU и поэтому работает медленнее;
  • поддерживает самое большое количество алгоритмов хеширования.

oclHashcat:

  • использует GPU;
  • поддерживает умеренное количество алгоритмов хеширования;
  • имеет встроенную поддержку атак по словарю, по маске и методом "грубой силы".

oclHashcat-plus:

  • использует GPU;
  • поддерживает наибольшее количество алгоритмов хеширования из всех программ семейства hashcat, использующих GPU;
  • оптимизирована для атак по словарю на многие хеши;
  • поддерживает ввод словаря через конвейер, тем самым делая возможной атаку методом "грубой силы".

oclHashcat-lite:

  • использует GPU;
  • оптимизирована для атак на одночный хеш;
  • самая быстрая из программ семейства hashcat, но поддерживает минимальное количество алгоритмов хеширования.

maskprocessor:

  • генерирует словари, основанные на предоставленных вами образцах;
  • сама по себе не является программой взлома, но может передавать свой вывод по конвейеру программе oclHashcat-plus для атак методом "грубой силы".

Но даже имея приведенный список не всегда можно ясно понять, какую именно программу следует использовать. Основными критериями выбора будут тип взламываемого пароля и вид атаки. На страницах с описанием каждой программы приводится список поддерживаемых ею алгоритмов хеширования, а также результаты тестирования с указанием количества операций сравнения в секунду на разных типах оборудования. Зная хеш пароля вы можете обратиться к этим страницам и выяснить, какие программы поддерживают работу с вашим хешем и которая из них работает быстрее. Помимо этого советую использовать oclHashcat для атак по маске или методом "грубой силы" на несколько хешей, oclHashcat-lite - для взлома одиночного хеша или oclHashcat-plus (в моем случае это была единственная программа, использующая GPU и поддерживающая работу с имевшимся у меня хешем).

После того, как вы определитесь, какое именно ПО Hashcat будет применяться, нужно будет установить его. Это просто. Скачайте архив .7z с соответствующим программным пакетом и распакуйте с помощью 7za (этот пакет должен быть установлен в вашей системе). В распакованном каталоге находятся 32- и 64-битные версии программы как для Linux, так и для Windows. Если вы используете оборудование NVIDIA, то вам потребуются файлы, имена которых начинаются с "cuda", в противном случае - файлы, имена которых начинаются с "ocl". В каталоге также содержатся несколько примеров хешей, словарей и образцы скриптов, которые помогут вам проверить наличие всех необходимых драйверов и библиотек. Вот пример использования oclHashcat-plus для взлома хеша phpass на 64-битной системе:

cat example.dict | ./oclHashcat-plus64.bin -m 400 example400.hash

А вот как выглядел вывод команды, запущенной на моей 32-битной тестовой системе:

cat example.dict | ./oclHashcat-plus32.bin -m 400 example400.hash
oclHashcat-plus v0.06 by atom starting...

Hashes: 1
Unique salts: 1
Unique digests: 1
Bitmaps: 8 bits, 256 entries, 0x000000ff mask, 1024 bytes
Rules: 1
GPU-Loops: 128
GPU-Accel: 16
Password lengths range: 1 - 15
Platform: AMD compatible platform found
Watchdog: Temperature limit set to 90c  
Device #1: Cayman, 2048MB, 0Mhz, 22MCU
Device #1: Allocating 52MB host-memory
Device #1: Kernel ./kernels/4098/m0400.Cayman.32.kernel (274238 bytes)
                                                                    
Starting attack in wordlist stdin mode...

$H$9y5boZ2wsUlgl2tI6b5PrRoADzYfXD1:hash234
                                    
Status.......: Cracked
Input.Mode...: Piped
Hash.Target..: $H$9y5boZ2wsUlgl2tI6b5PrRoADzYfXD1
Hash.Type....: phpass, MD5(Wordpress), MD5(phpBB3)
Time.Running.: 1 sec
Time.Util....: 1008.2ms/0.0ms Real/CPU, 0.0% idle
Speed........:    65009 c/s Real,   619.7k c/s GPU
Recovered....: 1/1 Digests, 1/1 Salts   
Progress.....: 65543
Rejected.....: 0
HW.Monitor.#1:  0% GPU, 47c Temp

Started: Mon Dec  5 21:12:03 2011
Stopped: Mon Dec  5 21:12:04 2011

В данном случае текст пароля был "hash234". Для работы всех команд hashcat достаточно перейти в каталог, куда вы их распаковали и запустить их оттуда. В начале вывода вы сможете увидеть какие GPU поддерживаются данной программой. Если вы имеете несколько GPU, даже если они не объединены, ПО обнаружит их автоматически. Если же GPU не будут обнаружены, вам придется проверить, правильно ли установлены проприетарные драйверы и дополнительные библиотеки.

Атаки по словарю

Первый вид атаки, который вам следует попробовать - это атака по словарю. В этом случае вы предоставляете программе словарь с паролями, которые следует попробовать, а она перебирает их до тех пор пока не найдет пароль, соответствующий вашему хешу. Так как количество перебираемых комбинаций при атаке по словарю гораздо меньше, чем при атаке методом "грубой силы", атака по словарю завершается гораздо быстрее. Во время подготовки этой статьи я несколько дней проводил атаку методом "грубой силы" на тестовый набор хешей и ни один из них не был взломан. А при атаке по словарю три из пяти хешей были взломаны менее, чем за минуту.

Прежде чем начать атаку по словарю м помощью oclHashcat-plus, запустите программу с ключом "--help". Так вы сможете узнать номер, соответствующий алгоритму хеширования, с помощью которого был создан атакуемый хеш. В случае phpass этот номер равен 400. Затем запустите команду еще раз и укажите номер алгоритма, файл, в который будут выводиться выявленные пароли (с помощью опции "-o"), файл с хешами и файл (или файлы) со словарями. Вот пример атаки по словарю на хеши phpass:

/path/to/oclHashcat-plus32.bin -m 400 -o recovered_hashes example400.hash example.dict

Если имеется несколько словарей, то можно перечислить их все в командной строке или использовать подстановочные символы оболочки. Успех атаки по словарю целиком и полностью зависит от качества словарей, но в Интернете можно найти множество хороших словарей по запросу "password cracking wordlist".

Вычисляем скорость взлома

Перед детальным обсуждением атак методом "грубой силы" важно будет узнать, каким образом оценить примерные затраты времени на взлом. При использовании этого способа не используются никакие словари, а просто перебираются все возможные комбинации символов. При подготовке этой статьи я потратил несколько дней на попытку взломать пароль из восьми символов, прежде чем произвел подсчеты и понял, что это было совершенно неразумно.

Сначала выясним, насколько быстро ваше оборудование справляется с отдельными видами хешей. Как вы увидите, количество сравнений в секунду будет изменяться в широких пределах в зависимости от типа хеша, поэтому запускаем атаку методом "грубой силы" на достаточно долгое время, получаем порцию вывода и нажимаем <Ctrl>+<C>. Я использовал oclHashcat-plus, поэтому мне пришлось скачать с hashcat.net программу maskprocessor для того, чтобы произвести атаку на phpass (пусть вас не смущает синтаксис команды, позже мы обсудим его более подробно):

/path/to/mp32.bin -1 ?d?l?u ?1?1?1?1?1?1 | \
/path/to/oclHashcat-plus32.bin -m 400 \
-o recovered_hashes phpass-hashes

oclHashcat-plus v0.06 by atom starting...

Hashes: 6
Unique salts: 6
Unique digests: 6
Bitmaps: 8 bits, 256 entries, 0x000000ff mask, 1024 bytes
Rules: 1
GPU-Loops: 128
GPU-Accel: 16
Password lengths range: 1 - 15
Platform: AMD compatible platform found
Watchdog: Temperature limit set to 90c  
Device #1: Cayman, 2048MB, 0Mhz, 22MCU  
Device #1: Allocating 264MB host-memory
Device #1: Kernel ./kernels/4098/m0400.Cayman.32.kernel (274238 bytes)

Starting attack in wordlist stdin mode...

Status.......: Running
Input.Mode...: Piped
Hash.Type....: phpass, MD5(Wordpress), MD5(phpBB3)
Time.Running.: 10 secs
Time.Util....: 10001.4ms/180.8ms Real/CPU, 1.8% idle
Speed........:   315.3k c/s Real,   351.4k c/s GPU
Recovered....: 0/6 Digests, 0/6 Salts   
Progress.....: 3153920
Rejected.....: 0
HW.Monitor.#1: 96% GPU, 54c Temp

В потоке вывода необходимо обратить внимание на строку, начинающуюся со слова "Speed". Как видно из примера, мой GPU способен выполнять около 350 000 сравнений в секунду и именно это число я возьму для последующих вычислений.

Я нашел один хороший сайт, помогающий в вычислениях: http://www.lockdown.co.uk/?pg=combi. На нем описаны все разновидности наборов символов и паролей, а также можно получить информацию о том, сколько времени займет атака на разном оборудовании, начиная с одиночного процессора Pentium и заканчивая мифическим правительственным суперкомпьютером. С другой стороны, вычисления эти весьма просты и доступны для самостоятельного выполнения. Берем количество символов в используемом наборе (для латинских букв в нижнем регистре оно равно 26), затем - длину взламываемого пароля и возводим первое число в степень второго.

Например, полное количество символов латинского алфавита и цифр (A-Za-z0-9) равно 62. Если бы было нужно взломать пароль из шести символов, то пришлось бы перебрать 626 = 57 миллиардов комбинаций.

Перебор 57 миллиардов комбинаций на системе, способной выполнять 350 000 сравнений в секунду, занимает приблизительно 45 часов. Неплохо, но давайте теперь произведем те же подсчеты для пароля длиной в восемь символов: 628 = 218 триллионов комбинаций.

Со скоростью 350 000 сравнений в секунду взлом займет приблизительно 7 200 дней или 19 лет. В утешение можно отметить, что еще всего за 250 долларов атака может быть выполнена менее чем за 10 лет! Если же вы добавите еще один символ к длине пароля, то число комбинаций подскочит до 13,5 квадриллионов [в оригинале указано 7,2 квадриллиона - прим. пер.], а время, потребное для взлома - до 652 лет.

Атаки методом "грубой силы"

Итак, вы выяснили, что атака этого типа сможет завершиться еще при вашей жизни, следующим шагом нужно будет запустить maskprocessor и сообщить ему, какой именно список слов сгенерировать:

  • ?d - все цифры (0-9);
  • ?l - буквы в нижнем регистре (a-z);
  • ?u - буквы в верхнем регистре (A-Z);
  • ?s - символы.

Также можно определить собственный набор символов с помощью опции "-1" (или "-2", "-3") и затем использовать "?1" для работы с ним. Например, если необходимо перебрать все пароли, состоящие из трех символов, включающих в себя буквы в нижнем регистре и цифры, нужно выполнить следующую команду:

/path/to/mp32.bin -1 ?d?l ?1?1?1
000
001
. . .
zzy
zzz

Когда я выполнял пробную атаку, мне было нужно перебрать все комбинации букв в обоих регистрах и цифр в шестисимвольных паролях. В результате получилась такая команда:

/path/to/mp32.bin -1 ?d?l?u ?1?1?1?1?1?1

Затем я передал вывод этой команды по конвейеру на ввод oclHashcat-plus:

/path/to/mp32.bin -1 ?d?l?u ?1?1?1?1?1?1 | \
/path/to/oclHashcat-plus32.bin -m 400 \
-o recovered_hashes phpass-hashes

Как и в случае атаки по словарю, опция "-m" указывает, что взламываться будет хеш phpass, "-o" задает файл, в котором будут сохраняться "вскрытые" пароли и наконец, указывается файл, содержащий взламываемые хеши. Моему оборудованию понадобилось около двух дней для выполнения атаки.

Итак, теперь вы готовы приступить к взлому, но это еще не все. В следующей, заключительной статье мы обсудим способы тонкой настройки для достижения более высокой производительности, а также способы объединения воедино атак по словарю и методом "грубой силы".

Ресурсы


Кайл Рэнкин - системный архитектор, в настоящее время - президент "North Bay Linux Users' Group". Автор книг "The Official Ubuntu Server Book", "Knoppix Hacks", "Knoppix Pocket Reference", "Linux Multimedia Hacks", и "Ubuntu Hacks".