Оптимизация производительности John the Ripper

Kali LinuxBeginner
Практиковаться сейчас

Введение

В этой лабораторной работе вы изучите различные методы оптимизации производительности John the Ripper, мощного инструмента для взлома паролей. Эффективный взлом паролей часто требует эффективного использования доступных аппаратных ресурсов. Вы узнаете, как настроить John the Ripper для использования нескольких ядер процессора, поймете его возможности взлома с помощью GPU, настроите параметры бенчмаркинга для точного измерения производительности, сравните его производительность с Hashcat и будете отслеживать системные ресурсы во время операций взлома. Эти навыки имеют решающее значение для всех, кто занимается кибербезопасностью, тестированием на проникновение или системным администрированием, позволяя им максимально повысить эффективность своих задач по аудиту паролей.

Использование нескольких ядер процессора

На этом этапе вы узнаете, как настроить John the Ripper для использования нескольких ядер процессора, что может значительно ускорить процесс взлома на системах с многоядерными процессорами. По умолчанию John the Ripper может не использовать все доступные ядра. Вы можете указать количество используемых ядер процессора с помощью опции --fork.

Сначала давайте запустим простой бенчмарк, не указывая количество ядер, чтобы увидеть производительность по умолчанию.

john --test=0

Вы увидите вывод, похожий на этот, показывающий производительность для различных типов хешей:

Benchmarking: Traditional DES [32/32 BS SSE2-i]... DONE
Many calculations will be done, please be patient.
Raw:    100000 c/s real, 100000 c/s virtual
Benchmarking: BSDI DES [32/32 BS SSE2-i]... DONE
Raw:    100000 c/s real, 100000 c/s virtual
...

Теперь давайте снова запустим бенчмарк, явно указав John the Ripper использовать несколько ядер процессора. Чтобы узнать количество доступных ядер процессора в вашей системе, вы можете использовать команду nproc.

nproc

Эта команда выведет количество доступных вычислительных единиц. Например, если она выведет 2, у вас 2 ядра процессора.

Теперь используйте опцию --fork с количеством ядер, которое вы хотите использовать. Вы можете заменить $(nproc) фактическим количеством ядер, если предпочитаете, но $(nproc) является динамическим.

john --test=0 --fork=$(nproc)

Сравните показатели производительности "Raw" из двух бенчмарков. Вы должны заметить увеличение скорости взлома при использовании нескольких ядер, особенно для ресурсоемких типов хешей. Опция --fork создает отдельные процессы, каждый из которых работает над частью задачи взлома, тем самым используя параллельную обработку.

Наконец, давайте попробуем взломать файл паролей, используя несколько ядер. У нас есть файл passwords.txt в вашем каталоге ~/project.

john --wordlist=~/project/wordlist.txt --fork=$(nproc) ~/project/passwords.txt

После завершения взлома вы можете просмотреть взломанные пароли:

john --show ~/project/passwords.txt

Эта команда отобразит все пароли, которые John the Ripper успешно взломал.

Настройка John the Ripper для взлома с помощью GPU (если применимо)

На этом этапе мы обсудим настройку John the Ripper для взлома с помощью GPU. Хотя среда LabEx обычно не предоставляет выделенных ресурсов GPU для общих лабораторных работ, понимание этой концепции имеет решающее значение для оптимизации John the Ripper на системах с совместимыми GPU. John the Ripper поддерживает взлом с помощью GPU через свои реализации OpenCL и CUDA, которые могут обеспечить значительное ускорение по сравнению с взломом на CPU для определенных типов хешей.

Чтобы проверить, поддерживает ли ваша сборка John the Ripper OpenCL или CUDA, вы можете выполнить следующую команду:

john --list=opencl-devices

Если устройства OpenCL обнаружены, вы увидите вывод, похожий на этот (хотя в данной среде он, вероятно, будет пустым):

No OpenCL devices found.

Если бы вы находились в системе с совместимым GPU и установленными драйверами OpenCL, вы бы увидели список доступных устройств GPU. Например:

Device #0: NVIDIA GeForce RTX 3080, 10240MB, 1710MHz, 68CU

Для использования конкретного устройства GPU для взлома вы обычно использовали бы опцию --format с форматом, поддерживающим OpenCL (например, raw-md5-opencl), и, возможно, опцию --device для выбора конкретного GPU, если их несколько.

Например, в системе с GPU вы могли бы выполнить:

john --format=raw-md5-opencl --wordlist=~/project/wordlist.txt ~/project/passwords.txt

Примечание: Поскольку в данной среде LabEx нет GPU, вышеуказанная команда, скорее всего, завершится ошибкой или будет выполнена с использованием резервного варианта CPU, если он доступен. Цель этого шага — проиллюстрировать команду и концепцию, а не выполнить фактический взлом с помощью GPU в данной конкретной среде.

Чтобы убедиться, что John the Ripper настроен для попытки взлома с помощью GPU, вы будете искать сообщения, указывающие на инициализацию OpenCL или CUDA при выполнении команды взлома с форматом, поддерживающим GPU.

Настройка параметров бенчмаркинга John the Ripper

На этом этапе вы узнаете, как настроить параметры бенчмаркинга John the Ripper для получения более точных и релевантных метрик производительности. Стандартный бенчмарк (john --test=0) выполняет быстрый тест для различных типов хешей. Однако вы можете указать конкретный тип хеша или определенную продолжительность для бенчмарка. Это полезно, когда вы хотите измерить производительность для конкретного сценария взлома.

Сначала давайте выведем список всех доступных форматов хешей, которые поддерживает John the Ripper. Это поможет вам определить конкретный формат, для которого вы хотите провести бенчмаркинг.

john --list=formats

Эта команда выведет длинный список поддерживаемых форматов хешей, например:

raw-md5
raw-sha1
raw-sha256
...

Теперь давайте проведем бенчмаркинг конкретного формата хеша, например, raw-md5. Вы можете указать формат с помощью опции --format.

john --test=0 --format=raw-md5

Вы увидите результаты бенчмаркинга специально для формата raw-md5.

Чтобы получить более стабильный и точный бенчмарк, особенно для сравнения производительности, вы можете увеличить продолжительность теста с помощью опции --max-run-time. Эта опция указывает максимальное время в секундах для выполнения бенчмарка.

Давайте запустим бенчмарк raw-md5 на 10 секунд:

john --test=0 --format=raw-md5 --max-run-time=10

Обратите внимание, как показатели производительности "Raw" могут стабилизироваться или давать более последовательное среднее значение при более длительном времени выполнения. Это особенно полезно при сравнении различных конфигураций оборудования или сборок John the Ripper.

Вы также можете объединить это с опцией --fork из Шага 1 для бенчмаркинга многоядерной производительности для конкретного типа хеша в течение заданного времени.

john --test=0 --format=raw-md5 --fork=$(nproc) --max-run-time=10

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

Сравнение Hashcat и John the Ripper для GPU

На этом этапе мы обсудим различия между Hashcat и John the Ripper, особенно в отношении их возможностей взлома с помощью GPU. Хотя оба являются мощными инструментами для взлома паролей, они имеют разные сильные и слабые стороны, особенно когда речь идет об использовании GPU.

John the Ripper (JtR):

  • Сильные стороны: Отлично подходит для взлома на CPU, очень универсален благодаря множеству встроенных форматов, хорош для однопользовательских систем и уделяет большое внимание словарным атакам и атакам полным перебором. Его поддержка GPU (OpenCL/CUDA) интегрирована, но исторически менее оптимизирована, чем у Hashcat, для использования сырой мощности GPU.
  • Слабые стороны: Производительность GPU, хотя и присутствует, может не всегда соответствовать сырой скорости Hashcat для определенных типов хешей. Конфигурация для GPU иногда может быть менее простой.

Hashcat:

  • Сильные стороны: Широко признан как самый быстрый и эффективный взломщик паролей на основе GPU. Он высоко оптимизирован для параллельной обработки на GPU (как NVIDIA CUDA, так и AMD OpenCL). Поддерживает огромное количество типов хешей и режимов атак.
  • Слабые стороны: В основном ориентирован на GPU, поэтому производительность на CPU не является его главной сильной стороной. Может быть сложнее для изучения новичками из-за обширных опций и режимов атак.

Ключевые различия для взлома с помощью GPU:

  1. Оптимизация: Hashcat специально разработан для ускорения с помощью GPU и часто достигает более высоких показателей хешей в секунду (H/s) на GPU по сравнению с John the Ripper для одного и того же типа хеша.
  2. Простота использования: Опции GPU в John the Ripper интегрированы в существующий интерфейс командной строки. Hashcat имеет свой собственный отличительный синтаксис и опции, которые могут быть более гранулярными для управления GPU.
  3. Фокус сообщества: Разработка и сообщество Hashcat в значительной степени сосредоточены на максимизации производительности взлома с помощью GPU.

Когда использовать какой инструмент:

  • Используйте John the Ripper для общего взлома на CPU, когда вам нужен универсальный инструмент с множеством встроенных функций, или когда вы работаете на системах без мощных GPU.
  • Используйте Hashcat, когда у вас есть доступ к мощным GPU и вам нужна абсолютная максимальная скорость взлома для широкого спектра типов хешей, особенно в сценариях профессионального тестирования на проникновение или аудита.

Для иллюстрации, если бы у вас был установлен Hashcat (что не является стандартным в этой среде), типичная команда для взлома хешей MD5 с использованием GPU выглядела бы так:

## This command is for illustration only and will not work without Hashcat installed
## hashcat -m 0 -a 0 ~/project/passwords.txt ~/project/wordlist.txt

Где -m 0 указывает тип хеша MD5, а -a 0 указывает словарную атаку.

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

Мониторинг системных ресурсов во время взлома

На этом этапе вы узнаете, как отслеживать системные ресурсы во время выполнения операций взлома с помощью John the Ripper. Мониторинг использования ЦП, использования памяти и дискового ввода-вывода может помочь вам выявить узкие места и обеспечить эффективное использование вашей системы. Это крайне важно для оптимизации производительности и устранения неполадок.

Сначала давайте запустим процесс взлома John the Ripper в фоновом режиме. Мы будем использовать простую словарную атаку на наш файл passwords.txt.

john --wordlist=~/project/wordlist.txt ~/project/passwords.txt &

Символ & в конце отправляет процесс в фоновый режим, позволяя вам продолжать использовать терминал. Обратите внимание на отображаемый идентификатор процесса (PID), например: [1] 12345.

Теперь давайте отследим использование ЦП и памяти системы с помощью команды top. top предоставляет динамическое представление работающей системы в реальном времени.

top

В выводе top найдите процесс john. Вы увидите его использование ЦП (%CPU) и использование памяти (%MEM). Когда John the Ripper активно взламывает, вы должны увидеть высокое значение %CPU, особенно если вы используете несколько ядер (оно может превышать 100% для многоядерных процессов). Нажмите q, чтобы выйти из top.

Другой полезной командой для мониторинга процессов является htop. Если htop не установлен, вы можете его установить:

sudo apt install -y htop

После установки запустите htop:

htop

htop предоставляет более удобный и интерактивный интерфейс, чем top, отображая использование ЦП по ядрам, использование памяти и древовидные структуры процессов. Вы можете легко сортировать процессы по использованию ЦП или памяти. Найдите процесс john и наблюдайте за потреблением ресурсов. Нажмите F10 или q, чтобы выйти из htop.

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

sudo apt install -y iotop

Затем запустите iotop:

sudo iotop

iotop показывает активность дискового ввода-вывода в реальном времени. Ищите john или связанные с ним процессы, чтобы увидеть, активно ли они читают с диска или записывают на него. Нажмите q, чтобы выйти из iotop.

Наконец, давайте вернем фоновый процесс john на передний план и остановим его, или просто завершим его, если он все еще работает.

fg
## Нажмите Ctrl+C, чтобы остановить процесс

Если fg не работает или вы хотите завершить его по PID:

killall john

Регулярно отслеживая системные ресурсы, вы можете определить, полностью ли John the Ripper использует ваше оборудование, или другие процессы потребляют ресурсы, которые могли бы быть выделены для взлома. Это помогает в тонкой настройке вашей конфигурации взлома для оптимальной производительности.

Резюме

В этой лабораторной работе вы получили практический опыт оптимизации производительности John the Ripper. Вы узнали, как использовать несколько ядер ЦП с помощью опции --fork для ускорения взлома. Мы обсудили принципы взлома с помощью GPU с John the Ripper, даже в средах без выделенных GPU, подчеркнув важность поддержки OpenCL/CUDA. Вы также освоили настройку параметров бенчмаркинга для получения точных метрик производительности для конкретных типов хешей и продолжительности. Кроме того, вы поняли ключевые различия между John the Ripper и Hashcat для взлома с ускорением GPU, что позволяет вам выбирать наиболее подходящий инструмент для различных сценариев. Наконец, вы научились отслеживать системные ресурсы, такие как ЦП, память и дисковый ввод-вывод, во время операций взлома, что жизненно важно для выявления узких мест и обеспечения эффективного использования оборудования. Эти навыки являются основополагающими для всех, кто стремится максимизировать эффективность аудита паролей и тестирования безопасности.