Pyrit позволяет создавать массивные базы данных предварительно вычисленных данных. Эти данные рассчитываются для перехваченной в фазе аутентификации WPA/WPA2-PSK информации от конкретной точки доступа. В конечном счёте, эти базы данных используются для взлома пароля WPA/WPA2. При этом достигается хороший компромисс между занимаемым пространством и временем. Использование вычислительных мощностей многоядерных платформ, таких как ATI-Stream, Nvidia CUDA, OpenCL и VIA Padlock — это, несомненно, самая мощная атака в отношении самых популярных протоколов безопасности в мире.
Установленный пакет имеет базовую версию Pyrit, которая поддерживает MMX, SSE2 и VIA PADLOCK, которые обнаруживаются во время выполнения. Использование несвободных технологий Nvidia CUDA, ATI-Stream и OpenCL могут быть добавлены через расширения. Вы можете попробовать поискать их в репозитории по «pyrit-*».
Лицензия: GPLv3+
Справка по Pyrit
Использование:
1 | pyrit [опции] комманда |
1234567891011121314151617181920212223242526272829303132333435363738 | Распознаваемые опции: -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
СИНОПСИС
1 | 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-хендшейки. Пример:
1 | pyrit -r "test*.pcap" analyze |
Pyrit показывает список Точек Доступа, связанных Станций и EAPOL-рукопожатия, которые удаётся идентифицировать из захваченных данных. Рукопожатия показываются в порядке их «качества»:
- Good (хорошее): Это рукопожатие включает вызов от Точки доступа, ответ от Станции и подтверждение от Точки доступа.
- Workable (рабочее): Рукопожатие включает ответ от станции и подтверждение от Точки доступа. Вызов не захвачен.
- Bad (плохое): Это рукопожатие включает вызов от Точки Доступа и ответ от Станции. Подтверждение не было захвачено.
Рукопожатия одинакового качества сортируются в порядке как близки пакеты, которые составляют рукопожатие, друг другу.
attack_batch
Атаковать EAPOL-рукопожатие, найденное в файле(файлах) с захваченными пакетами, которые передаются с опцией -r, используя Pairwise Master Keys (главные парные ключи) и пароли, сохранённые в базе данных. Могут использоваться опции -b и -e для указания Точки Доступа, которую атаковать; она выбирается автоматически, если пропущены обе опции. Пароль записывается в файл, который указан после опции -o, если она есть. Например:
1 | 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. Например:
1 | 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, то в файл, имя которого следует после неё, будет записан пароль. Пример:
1 | 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, то в файл, имя которого следует после неё, будет записан пароль. Пример:
1 | 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 одна за одной в неопределённом порядке. Например:
1 | pyrit -e NETGEAR batch |
Можно использовать опцию -o для указания имени файла, в который дополнительно должны быть записаны результаты в формате cowpatty. Опция -e становится обязательной и если требуется автоматически создаётся ESSID в базе данных. Предварительно посчитанные Pairwise Master Keys и сохранённые в базе данных экспортируются оттуда без дальнейшей обработки.
Pyrit останавливается и выходит если возникает ошибка IOError при записи в конкретный файл. Это делает очень удобно передавать результат по трубе (|) в другие программы и при этом сохранять его для дальнейшего использования. Пример:
1 | pyrit -e NETGEAR -o -batch | cowpatty -d - -r wpatestcapture.cap -s NETGEAR |
benchmark
Определяет пиковую производительность доступного железа путём вычисления фиктивных результатов. Например:
1 | pyrit benchmark |
check_db
Распаковывает всю базу данных и проверяет на ошибки вроде искажения или ссылочные ошибки. Эта функция не проверяет значения посчитанных данных (смотри верификацию). Например:
1 | pyrit check_db |
create_essid
Добавляет новую ESSID в базу данных. Единичная ESSID может быть задана опцией -e. Множество ESSID могут быть созданы передачей файла (одна на строку) опцией -i. Повторное создание существующей ESSID не приведёт к ошибке. Пример:
1 | pyrit -e NETGEAR create_essid |
delete_essid
Удалить ESSID переданную с опцией -e из базы данных. Включая все результаты, которые могли быть сохранены для конкретной ESSID. Например:
1 | pyrit -e NETGEAR delete_essid |
eval
Считает все доступные пароли, все ESSID и их соответствующие результаты в базе данных. Например:
1 | pyrit eval |
export_passwords
Записывает все пароли, которые в настоящее время сохранены в базе данных, в новый файл, который указан после -o. Пароли разделяются одним символом новой строки («\n»). Существующие файлы переписываются без подтверждения. Например:
1 | pyrit -o myword.txt.gz export_passwords |
export_cowpatty
Записывает все результаты для ESSID, которая указана после опции -e, в бинарный формат cowpatty, в файл указанный после опции -o. Пример:
1 | pyrit -o NETGEAR.cow -e NETGEAR export_cowpatty |
export_hashdb
Все результаты, которые в данный момент сохранены в базе данных, записываются в airolib-ng-database, переданную с -o. Эта база данных создаётся с разметкой таблиц по умолчанию, если файл ещё не существует. Опция -e может использоваться для ограничения экспорта единичной ESSID. Пример:
1 | pyrit -o NETGEAR.db -e NETGEAR export_hashdb |
import_passwords
Прочитать файл, переданный с -i и импортировать один пароль на строку в базу данных. Пароли могут содержать все символы, включая NULL-bytes) кроме завершающих символов новой строки («\n»). Пароли, которые не подходят для использования с WPA-/WPA2-PSK игнорируются. Реализация хранения Pyrit гарантирует, что все пароли остаются уникальными во всей базе данных. Пример:
1 | pyrit -i dirty_words.txt import_passwords |
import_unique_passwords
Прочитать файл, переданный с -i и импортировать один пароль на строку в базу данных. Пароли могут содержать все символы, включая NULL-bytes) кроме завершающих символов новой строки («\n»). Пароли, которые не подходят для использования с WPA-/WPA2-PSK игнорируются. Эта команда не проверяет пароли на дубликаты внутри файла о между файлом и базой данных; это должно использоваться с пониманием, что база данных может быть подпорчена наличием одинаковых паролей. Тем не менее, эта команда намного быстрее чем import_passwords. Пример:
1 | pyrit -i dirty_words.txt import_unique_passwords |
list_cores
Показывает список всех доступных аппаратных модулей, которые Pyrit использует в данный момент Пример:
1 | pyrit list_cores |
list_essids
Показывает список всех ESSID, которые в настоящее время сохранены в базе данных. Эта функция быстрее чем eval в случае если вам не нужно знать количество просчитанных результатов. Пример:
1 | pyrit list_essids |
passthrough
Считывает пароли из файла, данного с -i и вычисляет их Pairwise Master Keys для ESSID, данной с -e. Результаты записываются в файл, который указан после -o в бинарном формате cowpatty и не сохраняются в базе данных для дальнейшего использования. Т.е. эта команда обходит необходимость иметь базу данных и должна использоваться только при проблемах с местом хранилища (например, при использовании Pyrit на LiveCD). Команда batch обеспечивает в точности такую же функциональность как passthrough, но может давать намного улучшенную производительность, поскольку результаты могут считываться из базы данных вместо повторного их расчёта. Например:
1 | 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 должен быть открыт для работы этой функции. Например, на сервере (где база данных):
1 | pyrit -u sqlite: //var/local/pyrit .db relay |
и клиент (где большой GPU):
1 | pyrit -u http: //192 .168.0.100:17934 batch |
selftest
Запускает обширную самодиагностику примерно на 60 секунд. Тест включает в себя механизм весь механизм планирования и все ядра, которые показаны по list_cores. Вы можете использовать эту функцию для выявления сломанных модулей оборудования или вредоносных сетевых клиентов. Пример:
1 | pyrit selftest |
serve
Запускает сервер, который обеспечивает доступ к локальному вычислительному оборудованию для помощи клиентам Pyrit. IP адрес сервера должен быть добавлен в конфигурационный файл клиентов (смотри секцию ФАЙЛЫ) в качестве разделённого пробелами списка в known_clients. Настройка rpc_server-setting у клиентов также должна быть ‘true‘. Порты TCP и UDP 17935 должны быть доступны. Например, на сервере (где есть GPU):
1 | pyrit serve |
и на клиентах (IP адрес сервера был добавлен в known_clients и rpc_server установлен в ‘true’):
1 | pyrit -r test .pcap -b 00:de:ad:be:ef:00 -i words.txt attack_passthrough |
strip
Парсит один или более файл захваченных пакетов, переданных с опцией -r, извлекает только пакеты, которые необходимы для выявления EAPOL-рукопожатия и записывает новый дамп в файл, переданный с опцией -o. Можно использовать опции -e и -b для фильтрации конкретных Точек Доступа. Пример:
1 | pyrit -r "large_dumps_*.pcap" -e MyNetwork -o tiny_compressed_dump_MyNetwork.dump.gz strip |
stripLive
Парсит файл с захваченными пакетами, которые переданы опцией -r, извлекает только пакеты, которые необходимы для выявления EAPOL-рукопожатия и записывает новый дамп в файл, переданный опцией -o. Эта команда отличается от strip тем, что захваченный файл может быть символьным устройством, включая сокеты и другие псевдо-файлы, которые выглядят как файлы в формате pcap. stripLive записывает релеватные пакеты в новый файл, переданный опцией -o, по мере их пребывания вместо попытки вначале прочитать весь файл захвата.
1 | pyrit -r /temp/kismet_dump -o small_dump.pcap stripLive |
verify
Произвольно выбирает 10% результатов, сохранённых в базе данных и проверяет их значение путём повторных вычислений. Вам нужна эта функция если вы подозреваете сломанное оборудование или вредоносных сетевых клиентов. Например:
1 | 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).
(Были найдены ошибки в базе данных (и, возможно, исправлены))
ФАЛЫ
1 | ~/.pyrit/config |
Конфигурационный файл pyrit. Вы можете найти документированные примеры в /usr/share/doc/pyrit/examples/config.example.
Примеры запуска Pyrit
Создаём ESSID с именем DANIELLE2015 (-e DANIELLE2015) в базе данных Pyrit (create_essid)
1 | pyrit -e DANIELLE2015 create_essid |
Импортируем словарь из файла /root/wpa.lst (-i /root/wpa.lst) в Pyrit (import_passwords)
1 | pyrit -i /root/wpa .lst import_passwords |
Атака на рукопожатие (handshake) в файле DANIELLE2015-01.cap (-r DANIELLE2015-01.cap) используя базу данных предварительно посчитанных хешей (attack_db)
1 | pyrit -r DANIELLE2015-01.cap attack_db |
Установка Pyrit
Программа предустановлена в Kali Linux.
Установленная версия использует только центральный процессор для своих вычислений.