You are here: Home » Беспроводные атаки » Pyrit

Pyrit

Взломщик ключей WPA/WPA2-PSK с использованием GPGPU (видеокарт).

Pyrit позволяет создавать массивные базы данных предварительно вычисленных данных. Эти данные рассчитываются для перехваченной в фазе аутентификации WPA/WPA2-PSK информации от конкретной точки доступа. В конечном счёте, этит базы данных используются для взлома пароля WPA/WPA2. При этом достигается хороший компромисс между занимаемым пространством и временем. Использование вычислительных мощностей многоядерных платформ, таких как ATI-Stream, Nvidia CUDA, OpenCL и VIA Padlock — это, несомненно, самая мощная атака в отношении самых популярных протоколов безопасности в мире.

Установленный пакет имеет базовую версию Pyrit, которая поддерживает MMX, SSE2 и VIA PADLOCK, которые обнаруживаются во время выполнения. Использование несвободных технологий Nvidia CUDA, ATI-Stream и OpenCL могут быть добавлены через расширения. Вы можете попробовать поискать их в репозитории по «pyrit-*».

Домашняя страница: https://code.google.com/p/pyrit/

Автор: Lukas Lueg

Лицензия: GPLv3+

Справка по Pyrit

Использование:

pyrit [опции] комманда
Распознаваемые опции:
  -b               : Фильтрует Точки Доступа по BSSID
  -e               : Фильтрует Точки Доступа по ESSID
  -h               : Печатает помощь по конкретной команде
  -i               : Имя файла для ввода ('-' это стандартный ввод)
  -o               : Имя файла для вывода ('-' это стандартный вывод)
  -r               : Источник захвата пакетов в формате pcap
  -u               : URL системы хранения для использования
  --all-handshakes : Использовать все рукопожатия вместо самого лучшего

Распознаваемые команды:
  analyze                 : Анализировать файл с захваченными пакетами
  attack_batch            : Атаковать рукопожатие PMKs/паролями из БД
  attack_cowpatty         : Атаковать рукопожатие PMKs из файла cowpatty
  attack_db               : Атаковать рукопожатие PMKs из БД
  attack_passthrough      : Атаковать рукопожатие паролями из файла
  batch                   : Пакетная обработка базы данных
  benchmark               : Определить производительность доступных ядер
  benchmark_long          : Более длительная и более аккуратная версия бенчмарка (~10 минут)
  check_db                : Проверить базу данных на ошибки
  create_essid            : Создать новую ESSID
  delete_essid            : Удалить ESSID из базы данных
  eval                    : Подсчитать доступные пароли и соответствующие результаты
  export_cowpatty         : Экспортировать результаты в новый файл cowpatty 
  export_hashdb           : Экспортировать результаты в базу данных airolib 
  export_passwords        : Экспортировать пароли в файл
  help                    : Вывести общую справку
  import_passwords        : Импортировать пароли из файлоподобного источника
  import_unique_passwords : Импортировать уникальные пароли из файлоподобного источника
  list_cores              : Список доступных ядер
  list_essids             : Список всех ESSIDs, но не подсчитывать соответствующие результаты
  passthrough             : Расчитать PMKs и записать результаты в файл
  relay                   : Передавать URL хранилища черзе RPC
  selftest                : Тестировать железо, чтобы убедиться, что оно считает корректные результаты
  serve                   : Превратить локально железо в сервер для других клиетов Pyrit 
  strip                   : Очистить файлы захваченных пакетов до релевантных пакетов
  stripLive               : Захватить релевантные пакеты из живого источника захвата
  verify                  : Верифицировать 10% результата путём повторных вычислений

Руководство по Pyrit

ИМЯ

pyrit — взломщик WPA/WPA2-PSK ключей с использованием GPGPU

СИНОПСИС

pyrit [опции] команда

ОПИСАНИЕ

Pyrit использует вычислительную мощь многоядерных и GPGPU платформ для создания массивных баз данных с предварительно расчитанной частью фазы аутентификации WPA/WPA2-PSK с хорошим компромиссом потраченного места и времени. Это мощная атака к самому используемому протоколу безопасности.

ОПЦИИ

Pyrit распознаёт следующие опции:

-b BSSID

Указать BSSID. Можно использовать для ограничения действия команды на конкретную Точку Доступа.

-e ESSID

Указать ESSID. Команды обычно работают по всем ESSID в базе данных, если эта опция пропущена.

-i infile

Указать имя файла из которого читать; можно указать специальное имя "-" для использования стандартного ввода. Файл может быть сжат в gzip, в этом случае его имя должно оканчиваться на .gz для очевидности декомпрессии.

-o outfile

Указать имя файла для записи; если указана "-" можно указать специальное имя "-" для использования стандартного ввода. Имя файла, которое оканчивается на .gz, приведёт к тому, что pyrit на лету сожмёт этот файл в gzip.

-r capture-file

Указать файл с захваченными пакетами в формате pcap (можно сжатый в gzip) или устройство (например "wlan0") из которого захвачивать.

-u URL

Указать URL хранилища устройства в форме

driver://username:password@host:port/database

Pyrit в качестве хранилища может использовать файловую систему, удалённый Pyrit-Relay-Server и, если установлен пакет python-sqlalchemy, базу данных SQL. Драйвер file:// отправляет в собственную файловую систему Pyrit, которая размещена на диске, http:// связывает с Pyrit-Relay-Server и все другие URL идут напрямую к python-sqlalchemy, если доступен. Устройство-URL по умолчанию могут быть также указаны ключём defaultstorage в конфигурационном файле pyrit (смотри ниже секцию ФАЙЛЫ).

--all-handshakes

Команды attack_batch, attack_db, attack_cowpatty и attack_passthrough автоматически используют только одно рукопожатие самого высокого качества. В некоторых случаях даже это рукопожатие может быть реконструировано неправильно из захваченных данных, это сведёт атаку на нет. В случае, если более чем одно EAPOL-рукопожатие реконструировано из файла захвата, опция --all-handshakes может использоваться для атаки на все реконструированные рукопожатия из захваченных данных. Точное поведение команд, которые затронуты этой опцией, описано ниже.

КОМАНДЫ

analyze

Парсить один или более файлов с захваченными пакетами (в формате pcap, возможна работа с сжатыми в gzip) переданными с опцией -r и попытаться определить Точку Доступа, Станции и EAPOL-хендшейки. Пример:

pyrit -r "test*.pcap" analyze

Pyrit показывает список Точек Доступа, связанных Станций и EAPOL-рукопожатия, которые удаётся идентифицировать из захваченных данных. Рукопожатия показываются в порядке их «качества»:

  • Good (хорошее): Это рукопожатие включает вызов от Точки доступа, ответ от Станции и подтверждение от Точки доступа.
  • Workable (рабочее): Рукопожатие включает ответ от станции и подтверждение от Точки доступа. Вызов не захвачен.
  • Bad (плохое): Это рукопожатие включает вызов от Точки Доступа и ответ от Станции. Подтверждение не было захвачено.

Рукопожатия одинакового качества сортируются в порядке как близки пакеты, которые составляют рукопожатие, друг другу.

attack_batch

Атаковать EAPOL-рукопожатие, найденное в файле(файлах) с захваченными пакетами, которые передаются с опцией -r, используя Pairwise Master Keys (главные парные ключи) и пароли, сохранённые в базе данных. Могут использоваться опции -b и -e для указания Точки Доступа, которую атаковать; она выбирается автоматически, если пропущены обе опции. Пароль записывается в файл, который указан после опции -o, если она есть. Например:

pyrit -r test.pcap -e MyNetwork -b 00:de:ad:c0:de:00 -o MyNetworkPassword.txt attack_batch

Pairwise Master Keys, которые были перед этим рассчитаны и сохранены в базу данных, берутся оттуда; все другие пароли переводятся в их соответствующие Pairwise Master Keys и добавляются в эту базу данных для последующего повторного использования. Если нужно, ESSID создаются автоматически в базе данных.

Если используется опция --all-handshakes, Pyrit работает вниз по списку реконструированных EAPOL-рукопожатий.

attack_cowpatty

Атаковать EAPOL-рукопожатия в файле(файлах) захваченных пакетов, данных с опцией -r, используя Pairwise Master Keys из cowpatty-подобного файла (например, сгенерированного программой «genpmk» из пакета cowpatty или полученного с помощью команды export_cowpatty, которая описана ниже), данного с опцией -f. Могут использоваться опции -b и -e для указания Точки Доступа для атаки; она выбирается автоматически, если обе опции пропущены. Пароль записывается в файл, который указан после опции -o (если она есть). Файл cowpatty может быть сжат в архив gzip и должен соответствовать выбранной ESSID. Например:

pyrit -r test.pcap -e MyOwnNetwork -i MyOwnNetwork.cow.gz -o - attack_cowpatty

Собственная база данынх Pyrit при attack_cowpatt не затрагивается.

Pyrit атакует все EAPOL-рукопожатия, если указана опция --all-handshakes. Это уменьшит пропускную способность (например, она будет составлять 33% от возможной в случае трёх рукопожатий).

attack_db

Атаковать EAPOL-рукопожатия, найденные в файле(файлах) захваченных пакетов, которые переданы опцией -r, используя при этом Pairwise Master Keys сохранённые в базе данных. Для указания конкретной Точки Доступа, которую нужно атаковать, можно использовать опции -b и -e; если опции пропущены, то она будет выбрана автоматически. Если указана опция -o, то в файл, имя которого следует после неё, будет записан пароль. Пример:

pyrit -r test.pcap -e MyOtherNetwork attack_db

При attack_db используются только Pairwise Master Keys, которые были предварительно просчитаны и сохранены в базе данных.

Если указана опция --all-handshakes, то Pyrit работает вниз по списку реконструированных EAPOL-рукопожатий.

attack_passthrough

Атаковать EAPOL-рукопожатия, найденные в файле(файлах) захваченных пакетов, которые переданы опцией -r, используя пароли, прочитанные из файла следующего за опцией -i. Для указания конкретной Точки Доступа, которую нужно атаковать, можно использовать опции -b и -e; если опции пропущены, то она будет выбрана автоматически. Если указана опция -o, то в файл, имя которого следует после неё, будет записан пароль. Пример:

pyrit -r test.pcap -b 00:de:ad:be:ef:00 -i words.txt attack_passthrough

Эта команда обходит базу данных Pyrit и должна использоваться только если имеются проблемы с местом в хранилище (например, на LiveCD). Вместо неё используйте attack_batch.

Если указана опция --all-handshakes, то Pyrit работает вниз по списку реконструированных EAPOL-рукопожатий.

batch

Запускает перевод всех паролей в базе данных в их соответствующие Pairwise Master Keys (парные главные ключи) и сохраняет результаты в базу данных. Можно использовать опцию -e для ограничения применения этой команды только к одной ESSID; если эта опция пропущена, будут обработаны все ESSID одна за одной в неопределённом порядке. Например:

pyrit -e NETGEAR batch

Можно использовать опцию -o для указания имени файла, в который дополнительно должны быть записаны результаты в формате cowpatty. Опция -e становится обязательной и если требуется автоматически создаётся ESSID в базе данных. Предварительно посчитанные Pairwise Master Keys и сохранённые в базе данных экспортируются оттуда без дальнейшей обработки.

Pyrit останавливается и выходит если возникает ошибка IOError при записи в конкретный файл. Это делает очень удобно передавать результат по трубе (|) в другие программы и при этом сохранять его для дальнейшего использования. Пример:

pyrit -e NETGEAR -o -batch | cowpatty -d - -r wpatestcapture.cap -s NETGEAR

benchmark

Определяет пиковую производительность доступного железа путём вычисления фиктивных результатов. Например:

pyrit benchmark

check_db

Распаковывает всю базу данных и проверяет на ошибки вроде искажения или ссылочные ошибки. Эта функция не проверяет значения посчитанных данных (смотри верификацию). Например:

pyrit check_db

create_essid

Добавляет новую ESSID в базу данных. Единичная ESSID может быть задана опцией -e. Множество ESSID могут быть созданы передачей файла (одна на строку) опцией -i. Повторное создание существующей ESSID не приведёт к ошибке. Пример:

pyrit -e NETGEAR create_essid

delete_essid

Удалить ESSID переданную с опцией -e из базы данных. Включая все результаты, которые могли быть сохранены для конкретной ESSID. Например:

pyrit -e NETGEAR delete_essid

eval

Считает все доступные пароли, все ESSID и их соответствующие результаты в базе данных. Например:

pyrit eval

export_passwords

Записывает все пароли, которые в настоящее время сохранены в базе данных, в новый файл, который указан после -o. Пароли разделяются одним символом новой строки ("\n"). Существующие файлы переписываются без подтверждения. Например:

pyrit -o myword.txt.gz export_passwords

export_cowpatty

Записывает все результаты для ESSID, которая указана после опции -e, в бинарный формат cowpatty, в файл указанный после опции -o. Пример:

pyrit -o NETGEAR.cow -e NETGEAR export_cowpatty

export_hashdb

Все результаты, которые в данный момент сохранены в базе данных, записываются в airolib-ng-database, переданную с -o. Эта база данных создаётся с разметкой таблиц по умолчанию, если файл ещё не существует. Опция -e может использоваться для ограничения экспорта единичной ESSID. Пример:

pyrit -o NETGEAR.db -e NETGEAR export_hashdb

import_passwords

Прочитать файл, переданный с -i и импортировать один пароль на строку в базу данных. Пароли могут содержать все символы, включая NULL-bytes) кроме завершающих символов новой строки ("\n"). Пароли, которые не подходят для использования с WPA-/WPA2-PSK игнорируются. Реализация хранения Pyrit гарантирует, что все пароли остаются уникальными во всей базе данных. Пример:

pyrit -i dirty_words.txt import_passwords

import_unique_passwords

Прочитать файл, переданный с -i и импортировать один пароль на строку в базу данных. Пароли могут содержать все символы, включая NULL-bytes) кроме завершающих символов новой строки ("\n"). Пароли, которые не подходят для использования с WPA-/WPA2-PSK игнорируются. Эта команда не проверяет пароли на дубликаты внутри файла о между файлом и базой данных; это должно использоваться с пониманием, что база данных может быть подпорчена наличием одинаковых паролей. Тем не менее, эта команда намного быстрее чем import_passwords. Пример:

pyrit -i dirty_words.txt import_unique_passwords

list_cores

Показывает список всех доступных аппаратных модулей, которые Pyrit использует в данный момент Пример:

pyrit list_cores

list_essids

Показывает список всех ESSID, которые в настоящее время сохранены в базе данных. Эта функция быстрее чем eval в случае если вам не нужно знать количество просчитанных результатов. Пример:

pyrit list_essids

passthrough

Считывает пароли из файла, данного с -i и вычисляет их Pairwise Master Keys для ESSID, данной с -e. Результаты записываются в файл, который указан после -o в бинарном формате cowpatty и не сохраняются в базе данных для дальнейшего использования. Т.е. эта команда обходит необходимость иметь базу данных и должна использоваться только при проблемах с местом хранилища (например, при использовании Pyrit на LiveCD). Команда batch обеспечивает в точности такую же функциональность как passthrough, но может давать намного улучшенную производительность, поскольку результаты могут считываться из базы данных вместо повторного их расчёта. Например:

pyrit -i dirty_words.txt.gz -e NETGEAR -o - passthrough | cowpatty -d --r wpatestcapture.cap -s NETGEAR

relay

Запускает сервер для ретрансляции другого устройства хранилища через XML-RPC; другой клиент Pyrit может использовать этот сервер как хранилище. Это позволяет ему иметь сетевой доступ к своим собственным (наподобие file:// и sqlite://) или скрытым за файерволом SQL базам данных и обеспечивает множественный доступ для клиентов к базе данных через RPC интерфейс Pyrit. Порт TCP 17934 должен быть открыт для работы этой функции. Например, на сервере (где база данных):

pyrit -u sqlite://var/local/pyrit.db relay

и клиент (где большой GPU):

pyrit -u http://192.168.0.100:17934 batch

selftest

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

pyrit selftest

serve

Запускает сервер, который обеспечивает доступ к локальному вычислительному оборудованию для помощи клиентам Pyrit. IP адрес сервера должен быть добавлен в конфигурационный файл клиентов (смотри секцию ФАЙЛЫ) в качестве разделённого пробелами списка в known_clients. Настройка rpc_server-setting у клиентов также должна быть 'true'. Порты TCP и UDP 17935 должны быть доступны. Например, на сервере (где есть GPU):

pyrit serve

и на клиентах (IP адрес сервера был добавлен в known_clients и rpc_server установлен в 'true'):

pyrit -r test.pcap -b 00:de:ad:be:ef:00 -i words.txt attack_passthrough

strip

Парсит один или более файл захваченных пакетов, переданных с опцией -r, извлекает только пакеты, которые необходимы для выявления EAPOL-рукопожатия и записывает новый дамп в файл, переданный с опцией -o. Можно использовать опции -e и -b для фильтрации конкретных Точек Доступа. Пример:

pyrit -r "large_dumps_*.pcap" -e MyNetwork -o tiny_compressed_dump_MyNetwork.dump.gz strip

stripLive

Парсит файл с захваченными пакетами, которые переданы опцией -r, извлекает только пакеты, которые необходимы для выявления EAPOL-рукопожатия и записывает новый дамп в файл, переданный опцией -o. Эта команда отличается от strip тем, что захваченный файл может быть символьным устройством, включая сокеты и другие псевдо-файлы, которые выглядят как файлы в формате pcap. stripLive записывает релеватные пакеты в новый файл, переданный опцией -o, по мере их пребывания вместо попытки вначале прочитать весь файл захвата.

pyrit -r /temp/kismet_dump -o small_dump.pcap stripLive

verify

Произвольно выбирает 10% результатов, сохранённых в базе данных и проверяет их значение путём повторных вычислений. Вам нужна эта функция если вы подозреваете сломанное оборудование или вредоносных сетевых клиентов. Например:

pyrit -e NETGEAR verify

СТАТУСЫ ВЫХОДА

Если команда успешна, статус выхода процесса pyrit устанавливается в 0; в противном случае он устанавливается в 1 и (обычно) в стандартном выводе ошибок пишется сообщение ошибки или python-traceback. Следующие команды также в некоторых случаях показывают состояния ошибки:

  • analyze: Not at least one valid EAPOL-handshake could be detected.

(Не удалось обнаружить ни одного валидного EAPOL-рукопожатия)

  • attack_passthrough, attack_batch, attack_db and attack_cowpatty: The password could not be found.

(Пароль не был найден)

  • verify At least one workunit contained invalid results.

(по крайней мере одна единица работы содержит невалидные результаты)

  • check_db Errors in the database were found (and possibly fixed).

(Были найдены ошибки в базе данных (и, возможно, исправлены))

ФАЛЫ

~/.pyrit/config

Конфигурационный файл pyrit. Вы можете найти документированные примеры в /usr/share/doc/pyrit/examples/config.example.

Примеры запуска Pyrit

Создаём ESSID с именем DANIELLE2015 (-e DANIELLE2015) в базе данных Pyrit (create_essid)

pyrit -e DANIELLE2015 create_essid

Импортируем словарь из файла /root/wpa.lst (-i /root/wpa.lst) в Pyrit (import_passwords)

pyrit -i /root/wpa.lst import_passwords

Атака на рукопожатие (handshake) в файле DANIELLE2015-01.cap (-r DANIELLE2015-01.cap) используя базу данных предварительно посчитанных хешей (attack_db)

pyrit -r DANIELLE2015-01.cap attack_db

Установка Pyrit

Программа предустановлена в Kali Linux.

Но установленная версия использует только центральный процессор для своих вычислений. Для использования Pyrit в Kali Linux с графической картой AMD нужно последовательно выполнить следующие инструкции:

Информация об установке в другие операционные системы будет добавлена позже.

Скриншоты Pyrit

31

33

Инструкции по Pyrit

Близкие программы: